Pforce

Model ElementPforceは、MotionSolve式で定義します。

クラス名

Pforce

説明

一般化力は、拘束の定義に関与するすべての座標に作用します。

Pforceは、3通りの実装で使用できます。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()    
label Str ()  
penalty Double () FDのみ
penalty1 Double () FDのみ
unilateral Bool ()  
smoothing_factor Double () FDのみ
function Function ("PFOSUB")  
routine Routine ()    
active Bool ()  

使用法

#1. Constraint defined in a MotionSolve expression 
Pforce (function=expressionString, penalty=double, optional_attributes)

#2. Constraint defined in a compiled DLL
Pforce (function= userString, penalty=double, routine=string, optional_attributes)

#3. Constraint defined in a Python/Matlab script
Pforce (function= userString, penalty=double, routine=functionPointer, optional_attributes)

属性

MotionSolve式で定義されるPforce
function
有効なMotionSolve式を定義する文字列。
Pforceを定義するMotionSolve式を指定します。任意の有効な実行時MotionSolve式を入力として指定できます。
function属性は必須です。
penalty
倍精度
代数拘束が常にゼロとなるようにするために使用される復元力の計算に使用するペナルティ係数を指定します。
属性routineは必須です。
値の範囲:penalty ≥ 0。
コンパイルされたDLLで定義されるPforce
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Pforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
penalty
倍精度
代数拘束が常にゼロとなるようにするために使用される復元力の計算に使用するペナルティ係数を指定します。
属性penaltyは必須です。
値の範囲:penalty ≥ 0。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVariableの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
  • "/staff/Altair/engine.dllはDLLです。
  • "myPforce"は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでPFOSUBになります。
例: routine="/staff/Altair/engine.dll::myPforce"
Python関数で定義されるPforce
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Pforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
penalty
倍精度
代数拘束が常にゼロとなるようにするために使用される復元力の計算に使用するペナルティ係数を指定します。
属性penaltyは必須です。
値の範囲:penalty ≥ 0。
routine
Python内の呼び出し可能な関数へのポインタ。
例:routine=myPforce
  • myPforceは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでPFOSUBになります。
オプション属性 - すべてのバリアントに使用できます。
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのPforceオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Pforceオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
penalty1
倍精度
代数拘束の時間微分を満足するために使用される復元力の計算に使用する2番目のペナルティ係数を指定します。
属性penalty1は省略可能です。指定しない場合、penalty1はデフォルトで0.0になります。
値の範囲:penalty1 ≥ 0。
unilateral
ブール
TrueFalseのどちらかを選択します。
  • Trueは、不等式制約(片側)を示します。
  • Falseは、等式制約(両側)が指定されることを示します。
属性unilateralは省略可能です。
指定しない場合は、デフォルトでFalseになります。
smoothing_factor
倍精度
片側拘束によるペナルティ力は、STEP関数を使用することで、滑らかに増加します。これは、平滑化が完了するxの値を指定します。
属性smoothing_factorは省略可能です。指定しない場合、smoothing_factorはデフォルトで0.0になります。
値の範囲:smoothing_factor ≥ 0。
active
ブール
TrueFalseのどちらかを選択します。
  • Trueは、要素がモデル内でアクティブであり、システムの動作に影響を与えていることを示します。
  • Falseは、要素がモデル内で非アクティブであり、システムの動作に影響を与えていないことを示します。エンティティがモデルから削除される場合とほとんど同じですが、必要に応じて“ON”にできる点が異なります。
属性activeは省略可能です。指定しない場合、activeはデフォルトでTrueになります。

  1. 懸垂線上を滑る粒子
    XMLシンタックス
    <Force_Penalty
        id       = "1"
        label    = "Particle on a catenary"
        type     = "Expression"
        expr     = "dy (9) - cosh(dx(9))"
        penalty  = "1E4"
        penalty1 = "1E2"
    />
    Pythonシンタックス
    pf1 = Pforce (label="particle sliding on a catenary", function=
    "dy(9)-cosh(dx(9))", penalty=1e4, penalty1=1e2)
  2. の領域内を動くようにポイントPの動きを強制します。 1+x < = y
    XMLシンタックス
    <Force_Penalty
        id               = "10"
        label            = "Enforce 1+x < y"
        type             = "EXPRESSION"
        expr             = "1 + dx(10) - dy(10)"
        penalty          = "1E4"
        penalty1         = "1E2"
        unilateral       = "True"
        smoothing_factor = "1.0"
    />
    Pythonシンタックス
    pf2 = Pforce (label="Enforce 1+x < = y", function="1+dx(10)-dy(10)", penalty=1e4, penalty1=1e2, unilateral=True, smoothing_factor=1)
  3. 1+x < = zかつの領域内を動くようにポイントPの動きを強制します。 1-x ≤ z
    XMLシンタックス
    <Force_Penalty
        id               = "1"
        label            = "Enforce 1+x <=z"
        type             = "EXPRESSION"
        expr             = "1+dx(10)-dz(10)"
        penalty          = "1E4"
        penalty1         = "1E2"
        unilateral       = "True"
        smoothing_factor = "1.0"
    />
    <Force_Penalty
        id               = "2"
        label            = "Enforce 1-x <=z"
        type             = "EXPRESSION"
        expr             = "1-dx(10)-dz(10)"
        penalty          = "1E4"
        penalty1         = "1E2"
        unilateral       = "True"
        smoothing_factor = "1.0"
    />
    Pythonシンタックス
    pf3 = Pforce (label="Enforce 1+x < = z", function="1+dx(10)-dz(10)", penalty=1e4, penalty1=1e2, unilateral=True, smoothing_factor=1)
    
    pf4 = Pforce (label="Enforce 1-x < = z", function="1-dx(10)-dz(10)", penalty=1e4, penalty1=1e2, unilateral=True, smoothing_factor=1)

コメント

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. Pforceの詳細については、力:ペナルティをご参照ください。