CNFSUB

Force_Contact要素の法線力を計算するために使用します。

使用

接触のカスタムな法線力を実装します。

<Force_Contact
     id                  = "301001"
     num_i_graphics      = "1"
     i_graphics_id       = "90000"
     num_j_graphics      = "1"
     j_graphics_id       = "90001"
     cnf_type            = "UserCNF"
     cnf_param_string    = "USER(500.,1.5,0.5,0.01)"
     cnf_fnc_name        = "CNFSUB"
     cnf_dll_name        = "NULL" 
     cff_type            = "Coulomb_On"
     mu_static           = "0.05"
     mu_dynamic          = "0.01"
     stiction_trans_vel  = "0.1"
     friction_trans_vel  = "0.5"
  />

フォーマット

Fortranの呼出し構文
SUBROUTINE CNFSUB (ID, TIME, PAR, NPAR, LOCI, NI, LOCJ, NJ, GAP, GAPDOT, GAPDOTDOT, AREA, DFLAG, IFLAG, RESULTS)
C/C++の呼出し構文
void STDCALL CNFSUB (int *id, double *time, double *par, int *npar, double *loci, double *ni, double *locj, double *nj, double *gap, double *gapdot, double *gapdotdot, int *dflag, int *iflag, double *result)
Pythonの呼出し構文
def CNFSUB(id, time, par, npar, loci, ni, locj, nj, gap, gapdot, gapdotdot, dflag, iflag):
    return result
MATLABの呼出し構文
function vector = CNFSUB(id, time, par, npar, loci, ni, locj, nj, gap, gapdot, gapdotdot, dflag, iflag)

属性

AREA
[倍精度]
接触パッチの面積。
DFLAG
[論理]
MotionSolveで偏導関数が必要な場合にtrueに設定されるブール変数。それ以外の場合はfalseに設定されます。
GAP
[倍精度]
I_GRAPHICS_IDとJ_GRAPHICS_IDの間のギャップ。GAPが正の値またはゼロの場合、接触や貫通はありません。
GAPDOT
[倍精度]
GAPの1次時間導関数。
GAPDOTDOT
[倍精度]
GAPの2次時間導関数。
ID
[整数]
Force_Contact要素の識別子。
IFLAG
[論理]
MotionSolveCNFSUB関数の依存先を知る必要がある場合にtrueに設定されるブール変数。このフラグがfalseに設定されている場合は、ユーザー定義の式の値が計算されます。
LOCI
[倍精度]
I_GRAPHICS_ID上の接触ポイントにおける位置ベクトルを格納した配列。このベクトルは、I_GRAPHICS_ID参照マーカーの原点を基準として、I_GRAPHICS_ID参照マーカーの座標系に解決されています。
LOCJ
[倍精度]
J_GRAPHICS_ID上の接触ポイントにおける位置ベクトルを格納した配列。このベクトルは、J_GRAPHICS_ID参照マーカーの原点を基準として、J_GRAPHICS_ID参照マーカーの座標系に解決されています。
NI
[倍精度]
I_GRAPHICS_ID上の接触ポイントにおけるサーフェス法線ベクトルを格納した配列。このベクトルは、I_GRAPHICS_ID参照マーカーの座標系に解決されています。
NJ
[倍精度]
J_GRAPHICS_ID上の接触ポイントにおけるサーフェス法線ベクトルを格納した配列。このベクトルは、J_GRAPHICS_ID参照マーカーの座標系に解決されています。
NPAR
[整数]
PAR配列のエントリの数。
PAR
[倍精度]
ユーザー定義のステートメントで提供されたリストにある定数引数を格納した配列。
TIME
[倍精度]
現在のシミュレーション時間。

出力

RESULT
[倍精度]
法線力の値。

def CNFSUB(id, time, par, npar, loci, ni, locj, nj, gap, gapdot, gapdotdot, dflag, iflag):
    stiffness = par[0]
    exponent = par[1]
    damping = par[2]   
    dmax = par[3]

    spring_force = stiffness*pow(fabs(gap),exponent)
    [tmp,errflg] = py_step(gap,-dmax,damping,0.0,0.0,0)
    damping_force = -tmp*gapdot

        result =3*[0]
        result[0] = spring_force+damping_force
        if result[0]<0.0:
            result[0] = 0.0
    return result