Force: Field

Model ElementForce_Fieldは、2つのReference_MarkerIJの間で作用する力とトルクを定義します。

説明

力とトルクは、IJReference_Markerの相対変位と時間のみの関数になります。6つの成分(3つの力と3つのモーメント)は、J Reference_Markerの座標系で定義されます。線形と非線形の両方の関係がサポートされます。線形のForce_Fieldは、XML入力ファイルで直接定義されます。非線形のForce_Fieldは、FIESUBという名前のユーザー定義サブルーチンで定義されます。

フォーマット

<Force_Field
    id                   = "integer"  
  [ label                = "string" ]    
    i_marker_id          = "integer"
    j_marker_id          = "integer"
{    
    usrsub_dll_name      = valid_path_name
    usrsub_param_string  = "USER( [[par_1 [, ...][,par_n]] )"
    usrsub_fnc_name      = "custom_fnc_name" >
    |    
    script_name          = valid_path_name
    interpreter          = "PYTHON" | "MATLAB"
    usrsub_param_string  = "USER( [[par_1 [, ...][,par_n]] )"
    usrsub_fnc_name      = "custom_fnc_name" >
      [[ 
         length_x="real" length_y="real" length_z="real"
         length_tx="real" length_ty="real" length_tz="real"
      ]]
      [[ preload_x="real" preload_y="real" preload_z="real"
         preload_tx="real" preload_ty="real" preload_tz="real"
      ]]
      [[ 
         K11="real" K12="real" K13="real" K14="real" K15="real" K16="real"
         K21="real" K22="real" K23="real" K24="real" K25="real" K26="real"
         K31="real" K32="real" K33="real" K34="real" K35="real" K36="real"
         K41="real" K42="real" K43="real" K44="real" K45="real" K46="real"
         K51="real" K52="real" K53="real" K54="real" K55="real" K56="real"
         K61="real" K62="real" K63="real" K64="real" K65="real" K66="real"
      ]]
      [[
         CRATIO = "real" >
       |  
         C11="real" C12="real" C13="real" C14="real" C15="real" C16="real"
         C21="real" C22="real" C23="real" C24="real" C25="real" C26="real"
         C31="real" C32="real" C33="real" C34="real" C35="real" C36="real"
         C41="real" C42="real" C43="real" C44="real" C45="real" C46="real"
         C51="real" C52="real" C53="real" C54="real" C55="real" C56="real"
         C61="real" C62="real" C63="real" C64="real" C65="real" C66="real" > 
      ]]
}
</Force_Field>

属性

id
要素識別番号(整数 > 0)。この番号は、すべてのForce_Field要素の中で一意であり、要素を一意に特定します。
label
Force_Field要素の名前。
i_marker_id
力が適用されるReference_Markerを指定します。これは力の作用点として指定されます。
j_marker_id
反力および反モーメントが適用されるReference_Markerを指定します。これは力の反作用点として指定されます。
usrsub_param_string
データファイルからユーザー作成のサブルーチンFIESUBに渡されるパラメータのリスト。この属性は、すべてのタイプのユーザーサブルーチンおよびスクリプトに共通です。
usrsub_dll_name
ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンを読み込みます。
usrsub_fnc_name
ユーザーサブルーチンFIESUBの代替名を指定します。
script_name
usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
interpreter
ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
length_x, length_y, length_z, length_tx, length_ty, length_tz
これらは、Force_Field要素の自由長を定義します。つまり、要素に外力が作用していない場合に、J座標系で測定された、JからIへの変位です。回転は、AX(I,J)AY(I,J)、およびAZ(I,J)について測定されます。これらは、小さい角度(10度未満)と見なされます。このデータは省略可能です。デフォルト値は0です。
preload_x, preload_y, preload_z, preload_tx, preload_ty, preload_tz
これらは、Force_Field要素内のプリロードを定義します。すなわち、変形がない場合のIでの力です。力およびトルク成分はJ座標系で測定されます。このデータは省略可能です。デフォルト値は0です。
K11 K12 K13 K14 K15
K16 K21 K22 K23 K24
K25 K26 K31 K32 K33
K34 K35 K36 K41 K42
K43 K44 K45 K46 K51
K52 K53 K54 K55 K61
K62 K63 K64 K65 K66
これらは、線形のForce_Fieldを定義するときに、スプリング力を計算するために使用される6x6剛性マトリクスを定義します。マトリクスを対称にする必要はありません。ただし、半正定値にする必要があります。すなわち、任意のxについてxTKx ≥ 0である必要があります。これらのエントリは省略可能です。これらはデフォルトではゼロになります。ゼロでないエントリのみを定義すると便利です。
cratio
減衰スケールファクターを定義します。これが指定されている場合、減衰マトリクスがC = cratio * Kとして計算されます。cratio = 0.01の値が一般的に使用されます。
C11 C12 C13 C14 C15
C16 C21 C22 C23 C24
C25 C26 C31 C32 C33
C34 C35 C36 C41 C42
C43 C44 C45 C46 C51
C52 C53 C54 C55 C56
C61 C62 C63 C64 C65
C66
これらは、線形のForce_Fieldの減衰力を計算するために使用される6x6減衰マトリクスを定義します。マトリクスを対称にする必要はありません。ただし、半正定値にする必要があります。すなわち、任意のyについてyTCy ≥ 0である必要があります。これらのエントリは省略可能です。これらはデフォルトではゼロになります。ゼロでないエントリのみを定義すると便利です。

1つ目の例では、Force_Fieldを使用してブッシュ内の粘弾性挙動をモデル化する方法を示します。非線形有限要素では、材料則とマックスウェル要素を使用してこのような現象をモデル化するのが一般的です。MotionSolveでは、この挙動をFIESUB内にカプセル化するだけです。

粘弾性挙動の重要なポイントは、ブッシュで生じる力はブッシュのひずみ速度に依存することです。MotionSolveでは、これはたわみ速度(または変形速度)依存性としてモデル化されます。粘弾性ブッシュの“同期された”テストデータを下の図に示します。



図 1. 粘弾性ブッシュのサンプルテストデータ

この例では、ブッシュがテストされ、異なるひずみ速度での力とたわみの関係を示す4つの曲線(11-14)が提供されているものとします。これらの曲線では、いずれかの並進方向に沿った、一定のたわみ速度での、ブッシュの力のたわみへの依存性が指定されます。他の各たわみ成分についても同様の曲線が得られます。各成分のデータは別々のマトリクスで提供されます。これらのマトリクスのIDは、パラメータリストを通じてFIESUBユーザー定義サブルーチンに渡されます。

このブッシュは2つのReference_Marker、Body 18の“1801”とBody 19の“1901”を結合します。ここでは、MotionSolveで非線形ブッシュ減衰力をモデル化します。

このシナリオのForce_Fieldモデリング要素は次のとおりです:

<Force_Field
     id                   = "18"
     i_marker_id          = "1801"
     j_marker_id          = "1901"
     usrsub_dll_name      = "C:\gates\Desktop\test\bush.dll"     
     usrsub_param_string  = "USER(11,12,13,14,15,16)" >
</Force_Field>

DLL“C:\gates\Desktop\test\bush.dll”内のユーザーサブルーチンFIESUBが、MotionSolveによって自動的に読み込まれます。これは必要に応じて呼び出され、瞬間力マトリックスや、瞬間剛性および減衰マトリックスを計算します。

FIESUBの入力 - 以下の値が入力として指定されます:
  • Force_FieldのID。
  • ブッシュのたわみ(6要素の配列)。
  • たわみ速度(6要素の配列)。
  • usrsub_param_stringで定義されたパラメータとパラメータの数。
  • シミュレーション時間。
  • 瞬間剛性および減衰マトリックスを計算するのかどうかを示す論理フラグ。
  • これがブッシュについて最初のFIESUB呼び出しかどうかを示す2つ目の論理フラグ。これは初期化目的で使用されます。
FIESUBの出力 - 以下の値が出力として必要です:
  • ブッシュの力(6要素の配列)。
  • 瞬間剛性マトリクス(6x6配列)。
  • 瞬間減衰マトリクス。

FIESUBの呼び出しシーケンスを以下に示します。入力は青色で、出力は赤色です。

CALL FIESUB (ID, TIME, PAR, NPAR, DISP, VELO, DFLAG, IFLAG, FIELD, DFDDIS, DFDVEL)

1つの粘弾性ブッシュの力とその偏導関数を計算するFIESUBの擬似コードを以下に示します:

FIESUB (...)
{
   initialize force array to zero
   initialize stiffness matrix array to zero
   initialize damping matrix array to zero

   if (initialization pass)
   {
      for each matrix k in the parameter list
      {
         define independent variable u = bushing deformation[k]
         define independent variable v = bushing deformation velocity[k]
         fit a surface through the data for matrix[k]
         store surface polynomial coefficients in global array[k]
      }
      return from FIESUB
   }

   for each matrix k in the parameter list
   {
      set independent variable u = bushing deformation[k]
      set independent variable v = bushing deformation velocity[k]
      get data for surface polynomial from global array[k]
      set force [k] = interpolated value of surface polynomial k
   }

   if (partial derivatives are needed)
   {
      for each matrix k in the parameter list
      {
         set independent variable u = bushing deformation[k]
         set independent variable v = bushing deformation velocity[k]
         get data for surface polynomial from global array[k]
         set stiffness [k,k] = partial of interpolated surface with u 
         set damping [k,k] = partial of interpolated surface with v 
      }
   }
}

コメント

  1. 下の図は、2つのボディ間で作用するForce_Fieldの立体分解図を示しています。
    • 方程式1-5は、変形の計算方法を示しています。
    • 方程式6は、力の実装を定義します。
    • 残りの4つの方程式7-10は、2つのボディに適用される力とトルクを表します。


    図 2. Force_Fieldの立体分解図
  2. i_marker_idは、Force_Fieldの作用点として指定されます。j_marker_idは反作用点です。
  3. IJには、大きさが同じで向きが逆の力が作用しています。JIの間は通常分離されており、力は分離ベクトルに沿って作用しないため、ボディIに作用するトルクは、ボディJに作用するトルクと同じではありません。
  4. 力およびトルクの式(またはユーザーサブルーチン)は、滑らかである必要があり、微分可能であることが望まれます。これにより、数値的な手法で効果的に力を処理することができます。
  5. FIESUBでは、以下が計算される必要があります:
    • 変形量と変形速度が与えられたときに、Iに作用する力とトルク。
    • 変形に関する力の偏導関数(瞬間剛性マトリクス)。
    • 変形速度に関する力の偏導関数(瞬間減衰マトリクス)。
  6. 偏導関数を解析的に計算できない場合は、有限差分を使用してください。ただし、解析的な偏導関数が推奨されます。こちらの方が常に正確で、通常は評価のための計算負荷がずっと小さくなります。
  7. Force_Field要素は、すべてのタイプのボディ(Body_RigidBody_FlexibleBody_Point)に作用できます。
  8. Force_Field要素を使用して、非線形ブッシュを効率的にモデル化できます。これらは、Euler-Bernoulli理論やティモシェンコ理論に厳密に準拠しないビームの他、湾曲ビームや変断面ビームをモデル化する場合にも使用できます。