CONTACTPOST

Modelingボディ接触結果を抽出します。

使用

このサブルーチンは、MotionSolveシミュレーションから剛体または弾性体の接触結果を抽出するために使用できます。その後、これを使用して、出力ファイルを生成したり、プログラムで処理することができます。
<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
[整数]
結果が必要な接触力モデリング要素(XML内のForce_Contact)のID。
この引数は、MotionSolveによって自動的に入力され、渡されます。
I_GRA_ID
[整数]
Iボディのグラフィック表現のID。ボディが弾性体の場合、この属性は無視されます。
この引数は、MotionSolveによって自動的に入力され、渡されます。
J_GRA_ID
[整数]
Jボディのグラフィック表現のID。ボディが弾性体の場合、この属性は無視されます。
この引数は、MotionSolveによって自動的に入力され、渡されます。
TIME
[倍精度]
現在のシミュレーション時間。
この引数は、MotionSolveによって自動的に入力され、渡されます。
PAR
[倍精度]
ユーザー定義のステートメントで提供されたリストにある定数引数を格納した配列。
この引数は、モデル内でユーザーによって定義されます。
NPAR
[整数]
PAR配列のエントリの数。
この引数は、PAR配列のサイズに基づいて、MotionSolveによって自動的に入力され、渡されます。
IFLAG
[整数]
初期化フラグ。 3
ENDFLG
[整数]
終了フラグ。 3

次の例では、ボディ接触をモデル化するシミュレーションの時間ステップごとに貫入深さと合力を取得します:
<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"
/>
my_contact_post_sub内の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]);     
    }
}

コメント

  1. CONTACTPOSTサブルーチンは、対応する接触力モデリング要素で定義されたボディ間で接触が発生するたびにMotionSolveによって呼び出されます。剛体間で接触が発生しなければ、このサブルーチンは呼び出されません。

    また、接触ステートメントで定義されたIボディやJボディが複数の剛体グラフィックを参照している場合は、Iグラフィック(I_GRA_ID)とJグラフィック(J_GRA_ID)の組み合わせごとにCONTACTPOSTが呼び出されます。

  2. CONTACTPOSTサブルーチンから、アクセス関数GET_NCONTACTSおよびGET_CONTACT_POSTを呼び出して、シミュレーション中の接触状態に関する追加情報を取得することができます。これらのアクセス関数のシンタックスと使用方法については、ドキュメントをご参照ください。
  3. 各シミュレーションの開始時には、IFLAG1に設定されて、CONTACTPOSTMotionSolveによって呼び出されます。各シミュレーションの終了時には、ENDFLG1に設定されてCONTACTPOSTが呼び出されます。これにより、ファイルの開閉や、メモリの割り当て / 割り当て解除を適切に行うことができます。複数のシミュレーション間でデータを保存したい場合は、ユーティリティ関数SAVPARおよびRELPARを使用できます。
  4. CONTACTPOSTサブルーチンにより、MotionSolveシミュレーション中の剛体接触状態に関する情報を取得できます。この情報は、標準のMotionSolve式を使用して取得することはできません。このデータは、後でFE/ 疲労ソルバーへのエクスポートなどの下流のCAEプロセスに必要な任意の形式で書き込むことができます。