Contact

Model ElementContactは、2つのボディ間の3-D接触力を定義します。

クラス名

Contact

説明

各ボディは、1つ以上の形状のセットによって表現されます。1つ目のボディの形状が2つ目のボディの形状に貫入している場合は、接触垂直抗力と摩擦力が発生します。垂直抗力は、接触のポイントにおける共通の法線に沿って、モーションを押し戻す傾向があります。摩擦力は、接触ポイントにおける相対滑り速度を低下させる傾向があります。形状が交差しなくなれば、接触力は消失します。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()    
label Str ()  
igeom Reference (Graphics, count=0)    
iflex Reference (FlexBody)    
iflip_flex Bool(False)    
jgeom Reference (Graphics, count=0)    
jflex Reference (FlexBody)    
jflip_flex Bool(False)    
type Enum ("NONE IMPACT POISSON VOLUME USER")    
stiffness Double (0.0) FDのみ
exponent Double (1.5) FDのみ
damping Double (0.0) FDのみ
dmax Double (0.0) FDのみ
penalty Double (0.1) FDのみ
restitution_coefficient Double (0.0) FDのみ
coulomb_friction Enum ("ON OFF DYNAMICS_ONLY")    
mu_static Double (0.0) FDのみ
mu_dynamic Double (0.0) FDのみ
stiction_transition_velocity Double (1E-3) FDのみ
friction_transition_velocity Double (1E-3) FDのみ
i_elastic_modulus Double (0.0) FDのみ
i_layer_depth Double (1.0) FDのみ
j_elastic_modulus Double (0.0)   FDのみ
j_layer_depth Double (1)   FDのみ
master_surface Enum ("AUTO I J IANDJ", default="AUTO")  
normal_routine Routine ()    
friction_routine Routine ()    
friction_function Function ()    
normal_function Function ()    
active Bool ()  

使用法

Contactは、4つの垂直抗力モデルをサポートします。これらのうちの1つを選択して、そのパラメータを指定する必要があります。
  • type = "IMPACT"
  • type = "VOLUME"
  • type = "POISSON"
  • type = "USER"

また、Contactは、垂直抗力の選択とは無関係ないくつかのオプションパラメータもサポートします。これらの任意の組み合わせを指定できます。

Contactは2つの摩擦モデルをサポートします。
  • クーロン摩擦
  • 独自のカスタム摩擦モデル
接触パッチにおける摩擦の指定は省略可能です。接触パッチにおける摩擦をモデル化するには、これらのいずれかのモデルのパラメータを指定します。どちらも使用しない場合、摩擦力は接触パッチに適用されません。
# Type = "IMPACT"
Contact (type="IMPACT", igeom=list, jgeom=list, stiffness=Double, exponent=Double, damping=Double, dmax=Double, optional_attributes)

# Type = "Volume"
Contact (type="VOLUME", igeom=list, jgeom=list, i_elastic_modulus=Double, i_layer_depth=Double, j_elastic_modulus=Double, j_layer_depth=Double, exponent=Double, damping=Double, optional_attributes)

# Type = "POISSON"
Contact (type="POISSON", igeom=list, jgeom=list, penalty=Double, normal_trans_vel=Double, restitution_coefficient=Double, optional_attributes)

# Type = "USER"
Contact (type="USER", igeom=list, jgeom=list, normal_routine=String or Python function pointer, normal_function=userString, optional_attributes)

属性

General
ボディIが剛体の場合は、属性igeomを定義して、iflexを省略する必要があります。ボディIが弾性体の場合は、iflexが必須で、属性igeomを省略する必要があります。同じことがボディJにも適用されます。
igeom
Graphicsオブジェクトのリスト。
これは、接触で考慮される、1つ目のボディ上のGraphicsオブジェクトのリストです。
注: すべてのGRAPHICSエンティティが同じボディに属している必要があります。
iflex
この引数は、接触で考慮される1つ目のボディのFlex_BodyのIDを指定します。
jgeom
Graphicsオブジェクトのリスト。
これは、接触で考慮される、1つ目のボディ上のGraphicsオブジェクトのリストです。
注: すべてのGRAPHICSエンティティが同じボディに属している必要があります。
jflex
この引数は、接触で考慮される2つ目のボディのFlex_BodyのIDを指定します。
type
文字列、“IMPACT”、“VOLUME”、“POISSON”、または“USER”の中から選択します。
垂直抗力モデルを接触垂直抗力の計算に使用するように指定します。接触力は、接触対象として定義された交差する形状間の貫入の関数として計算されます。つまり、形状が交差すると、選択された接触のタイプに基づく反発力が生成されます。

この属性は省略可能です。MotionSolveは、typeが指定されていない場合、自動的にtype = "IMPACT"を設定します。

垂直抗力タイプ = "IMPACT"

stiffness
倍精度
接触の剛性パラメータを指定します。これは、IMPACT関数用のものと同じパラメータです。
剛性の値が大きい場合は、2つの接触する形状間で小さい貫入のみが許可され、値が小さい場合は、大きい貫入が許可されます。
ソルバーのパフォーマンスを向上させるためには、正確な変形を捕捉できる範囲で、できるだけ小さい剛性値を使用することを検討してください。
type="IMPACT"の場合、属性stiffnessは必須です。
stiffness ≥ 0
damping
倍精度
減衰力の生成に使用する最大減衰係数を指定します。詳細については、コメント3をご参照ください。
剛性の0.1%程度の値を使用することをお勧めします。減衰値が大きい場合、“粘着性のある”接触になります。逆に、減衰値が小さい場合、“断続的な”接触になる傾向があります。
減衰力は、貫入時にはスプリング力に加算されますが、離れるときはスプリング力から減算されることにも注意してください。
type="IMPACT"の場合、属性dampingは必須です。
damping ≥ 0
exponent
倍精度
接触面の力変形特性の指数。硬化スプリング特性の場合は、1.0より大きくする必要があります。
type="IMPACT"の場合、属性exponentは必須です。
exponent ≥ 1.0
dmax
倍精度
全減衰が適用される貫入を指定します。正の数にする必要があります。
dmaxは、想定されている最大貫入よりやや小さくする必要があることに注意してください。dmaxが小さすぎると、減衰力が急速に作用します。逆に、dmaxが大きすぎると、全減衰が生じない可能性があります。
type="IMPACT"の場合、属性dmaxは必須です。
dmax > 0.0

垂直抗力タイプ = "VOLUME"

i_elastic_modulus
倍精度
体積力モデルのボディIに属している形状の弾性係数(P波弾性率とも言う)を指定します。この弾性係数の値は、材料のバルク弾性係数とせん断弾性係数から求めることができます。
type="VOLUME"の場合、属性i_elastic_modulusは必須です。
i_elastic_modulus > 0
i_layer_depth
倍精度
ボディIに属する形状の層の深さを指定します。
type="VOLUME"の場合、属性i_layer_depthは必須です。
i_layer_depth > 0
j_elastic_modulus
倍精度
体積力モデルのボディJに属している形状の弾性係数(P波弾性率とも言う)を指定します。この弾性係数の値は、材料のバルク弾性係数とせん断弾性係数から求めることができます。
type="VOLUME"の場合、属性j_elastic_modulusは必須です。
j_elastic_modulus > 0
j_layer_depth
倍精度
ボディIに属している形状の層の深さのサイズを指定します。このパラメータを使用して接触剛性を計算する方法については、コメント5をご参照ください。
type="VOLUME"の場合、属性j_layer_depthは必須です。
j_layer_depth > 0
EXPONENT
倍精度
接触面の力変形特性の指数。硬化スプリング特性の場合は、1.0より大きくする必要があります。
type="VOLUME"の場合、属性exponentは必須です。
exponent ≥ 1.0
damping
倍精度
VOLUME力モデルの減衰力を計算するために使用する減衰係数を指定します。
type="VOLUME"の場合、属性dampingは必須です。
damping > 0

垂直抗力タイプ = "POISSON"

penalty
倍精度
スプリング力を計算するために使用する剛性パラメータを指定します。
penaltyの値が大きい場合は、2つの接触する形状間で小さい貫入のみが許可され、値が小さい場合は、大きい貫入が許可されます。ソルバーのパフォーマンスを向上させるためには、現実的な変形を捕捉できる範囲で、できるだけ小さいペナルティ値を使用することを検討してください。
type="POISSON"の場合、属性penaltyは必須です。
penalty > 0
restitution_coef
倍精度
接触している形状間の反発係数(COR)を定義します。これは、接触力の計算に使用されます。
0の値は、2つのボディが接触後に合体することを意味する完全塑性接触を指定します。
1の値は、完全弾性接触を指定します。衝突でエネルギーは損失せず、分離の相対速度が接近の相対速度と一致します。
COR = (衝突後の相対速度)/(衝突前の相対速度)
type="POISSON"の場合、属性restitution_coefは必須です。
0 ≤ restitution_coef ≤ 1
normal_trans_vel
倍精度
全減衰が接触力で適用される2つのボディ間の速度限界を定義します。
type="POISSON"の場合、属性normal_trans_velは省略可能です。指定しない場合は、MotionSolveにより0.01に初期化されます。
normal_trans_vel > 0

垂直抗力タイプ = "USER"

TYPE
文字列"USER"
USER垂直抗力モデルを接触垂直抗力の計算に使用するように指定します。
接触力は、接触対象として定義された交差する形状間の貫入の関数として計算されます。つまり、形状が交差すると、選択された接触のタイプに基づく反発力が生成されます。
normal_function
文字列
データファイルからユーザー定義のサブルーチンに渡されるパラメータのリストを指定します。
type="USER"の場合、normal_function属性を指定する必要があります。
normal_routine
文字列、またはPython関数へのポインタ。
接触力計算サブルーチンを含む共有ライブラリへのパスと実行するそのライブラリ内の関数を指定します。パスと関数名は“::”で区切ります。MotionSolveはこの情報を使用して、実行時にライブラリ内のユーザーサブルーチンを読み込みます。
type="USER"の場合、属性normal_routineは省略可能です。
normal_functionは指定し、normal_routineは指定しない場合、normal_routineはデフォルトで"CNFSUB"になります。

オプションパラメータ

id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのContactオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0。
label
文字列
Contactオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
master_surface
文字列。次のいずれかを選択します:"I"、"J"、"IANDJ"、"AUTO"
貫入深さ、接触ポイント、接触法線などの計算時にマスターサーフェスとして使用するサーフェスを指定します。以下から選択できます:
  • I:1つ目のボディに指定された形状がマスターです。
  • J:2つ目のボディに指定された形状がマスターです。
  • IANDJ:1つ目と2つ目の両方のボディの形状がマスターサーフェスとして別々に使用され、結果が合計されます。
  • AUTO:マスターサーフェスとして使用する形状はMotionSolveによって自動的に決定されます。
属性master_surfaceは省略可能です。
指定しない場合は、master_surface = "AUTO"になります。これは、推奨オプションでもあります。
active
ブール
TRUEまたはFALSEのどちらかを選択します。
  • TRUEは、要素がモデル内でアクティブであり、システムの動作に影響を与えていることを示します。
  • FALSEは、要素がモデル内で非アクティブであり、システムの動作に影響を与えていないことを示します。エンティティがモデルから削除される場合とほとんど同じですが、必要に応じて“ON”にできる点が異なります。
属性activeは省略可能です。指定しない場合、activeはデフォルトでTRUEになります。
iflex_flip
弾性体I上のサーフェス法線の向きを反転させます。この引数は省略可能です。TRUEFALSEのどちらかを選択します。
デフォルトはFALSEです。
jflex_flip
弾性体J上のサーフェス法線の向きを反転させます。この引数は省略可能です。TRUEFALSEのどちらかを選択します。
デフォルトはFALSEです。

オプション摩擦力の指定

これらはすべての垂直抗力モデルで使用できます。

オプションとして、組み込みの摩擦モデルを使用するか、独自のカスタム摩擦モデルを使用することができます。選択できるのは1つだけです。

組み込みの摩擦モデルの使用:
coulomb_friction
文字列。次のいずれかを選択します:"ON"、"OFF"、"DYNAMICONLY"、"USERCFF"
接触摩擦力の計算に使用する摩擦力モデルを指定します。
  • "ON"は、接触位置で摩擦力を計算して適用することを指定します。MotionSolveは、摩擦力にクーロンモデルを使用します。
  • "OFF"は、接触位置で摩擦力を計算または適用しないことを指定します。摩擦は適用しません。
  • "DYNAMICONLY"は、動的摩擦のみがアクティブになることを指定します。
  • "USERCFF"は、ユーザー定義の摩擦力モデルを使用するように指定します。
mu_static
倍精度
摩擦が静的状態になっている場合の静摩擦係数を定義します。
coulomb_frictionが"USERCFF"ではない場合にのみ使用されます。
MotionSolveは、静的摩擦状態と動的摩擦状態の間の移行にステップ関数を使用します。
mu_static ≥ 0
mu_staticmu_dynamic
mu_dynamic
倍精度
摩擦が動的状態になっている場合の動摩擦係数を定義します。
coulomb_frictionが"USERCFF"ではない場合にのみ使用されます。
MotionSolveは、静的摩擦状態と動的摩擦状態の間の移行にステップ関数を使用します。
mu_dynamic ≥ 0
stiction_transition_velocity
倍精度
静摩擦係数MU_STATICが適用される滑り速度を定義します。
coulomb_frictionが"USERCFF"ではない場合にのみ使用されます。
stiction_transition_velocity > 0
friction_transition_velocity
倍精度
動摩擦係数MU_DYNAMICが適用される滑り速度を定義します。
coulomb_frictionが"USERCFF"ではない場合にのみ使用されます。
friction_transition_velocitystiction_transition_velocity > 0
独自のカスタム摩擦モデルの使用:
friction_function
文字列
データファイルからユーザー定義のサブルーチンに渡されるパラメータのリスト。ユーザー定義のサブルーチンCFFSUBが使用されます。
coulomb_friction="USERCFF"の場合、この属性を指定する必要があります。
friction_routine
文字列またはPython関数へのポインタ。
摩擦力計算サブルーチンを含む共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にライブラリ内のユーザーサブルーチンを読み込みます。
friction_routine属性は、指定されなければ省略可能です。

  1. 下に示すプロパティを使用して、Contactオブジェクトを作成します。
    <Force_Contact  
           id                   = "2"
           num_i_graphics       = "1"
           i_graphics_id        = "93"
           num_j_graphics       = "1"
           j_graphics_id        = "73"
           cnf_type             = "POISSON"
           penalty              = "1E6"
           restitution_coef     = "0.52"
           cff_type             = "COULOMB_ON"
           mu_static            = "0.08"
           mu_dynamic           = "0.06"
           stiction_trans_vel   = "0.005"
           friction_trans_vel   = "0.01"
     />
    等価のPython
    contact1 = Contact (type="POISSON", igeom=[gra93], jgeom=[gra73], penalty=1E6, 
               restitution_coefficient=0.52, coulomb_friction="ON", mu_static=0.08, 
               mu_dynamic=0.06, stiction_transition_velocity=0.005,
               friction_transition_velocity=0.01)

コメント

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. Contact、垂直抗力タイプ、および摩擦タイプに関する詳細な説明については、Force: Contactモデルステートメント内のコメントを参照してください。