CONTACTPOST
Modelingボディ接触結果を抽出します。
使用
<Force_Contact
id = "303001"
...
cpost_dll_name = "my_contact_post_sub"
cpost_param_string = "USER(1000) "
cpost_fnc_name = "CONTACTPOST"
/>
フォーマット
- Fortranの呼出し構文
-
SUBROUTINE CONTACTPOST (ID, I_GRA_ID, J_GRA_ID, TIME, PAR, NPAR, IFLAG, ENDFLG)
- C/C++の呼出し構文
-
void STDCALL CONTACTPOST (int *id, int *i_gra_id, int *j_gra_id, double *time, double *par, int *npar, int *iflag, int *endflg)
- Pythonの呼出し構文
-
def CONTACTPOST(id, i_gra_id, j_gra_id, time, par, npar, iflag, endflg):
属性
- ID
- [整数]
- I_GRA_ID
- [整数]
- J_GRA_ID
- [整数]
- TIME
- [倍精度]
- PAR
- [倍精度]
- NPAR
- [整数]
- IFLAG
- [整数]
- ENDFLG
- [整数]
例
<Force_Contact
id = "303001"
label = "Contact 0"
num_i_graphics = "1"
i_graphics_id = "90001"
num_j_graphics = "1"
j_graphics_id = "90000"
cnf_type = "Impact"
stiffness = "1000."
exponent = "1.2"
damping = "1."
dmax = "0.01"
cff_type = "Coulomb_Off"
cpost_dll_name = "my_contact_post_sub"
cpost_param_string = "USER()"
cpost_fnc_name = "CONTACTPOST"
/>
void STDCALL CONTACTPOST (int*id,int*i_gra_id,int*j_gra_id,double*time,double*par,int*npar,int*iflag,int*endflg)
{
/*
Input argument
----------------------------------------------------------
id Identifier of calling CONTACT statement
i_gra_id Identifier of calling I_GRAPHIC
j_gra_id Identifier of calling J_GRAPHIC
time Time of contact
par Array containing passed parameters
npar Number of passed parameters
*/
int nof_contacts;
bool errflg;
c_get_ncontacts(*id, *i_gra_id, *j_gra_id, &nof_contacts, &errflg);
intipar[4] = {30102020, 0, 0, 0};
double states[6];
int nstates;
int ierr;
c_sysary("tdisp", ipar, 1, states, &nstates, &ierr);
printf(" I gra %d - J gra %d time : %f nof %d \n", *i_gra_id, *j_gra_id, *time, nof_contacts);
for (inti=0; i<nof_contacts; i++)
{
double pd;
double f[3];
int n_results;
c_get_contact_post(*id, *i_gra_id, *j_gra_id, "PD", i, &pd, &n_results, &errflg);
c_get_contact_post(*id, *i_gra_id, *j_gra_id, "TOTAL_FORCE", i, f, &n_results, &errflg);
printf(" %d PD = %f, F=[%f %f %f] z = %f \n", i, pd, f[0], f[1], f[2], states[2]);
}
}
コメント
- CONTACTPOSTサブルーチンは、対応する接触力モデリング要素で定義されたボディ間で接触が発生するたびにMotionSolveによって呼び出されます。剛体間で接触が発生しなければ、このサブルーチンは呼び出されません。
また、接触ステートメントで定義されたIボディやJボディが複数の剛体グラフィックを参照している場合は、Iグラフィック(I_GRA_ID)とJグラフィック(J_GRA_ID)の組み合わせごとにCONTACTPOSTが呼び出されます。
- CONTACTPOSTサブルーチンから、アクセス関数GET_NCONTACTSおよびGET_CONTACT_POSTを呼び出して、シミュレーション中の接触状態に関する追加情報を取得することができます。これらのアクセス関数のシンタックスと使用方法については、ドキュメントをご参照ください。
- 各シミュレーションの開始時には、IFLAGが1に設定されて、CONTACTPOSTがMotionSolveによって呼び出されます。各シミュレーションの終了時には、ENDFLGが1に設定されてCONTACTPOSTが呼び出されます。これにより、ファイルの開閉や、メモリの割り当て / 割り当て解除を適切に行うことができます。複数のシミュレーション間でデータを保存したい場合は、ユーティリティ関数SAVPARおよびRELPARを使用できます。
- CONTACTPOSTサブルーチンにより、MotionSolveシミュレーション中の剛体接触状態に関する情報を取得できます。この情報は、標準のMotionSolve式を使用して取得することはできません。このデータは、後でFE/ 疲労ソルバーへのエクスポートなどの下流のCAEプロセスに必要な任意の形式で書き込むことができます。