Diff

Model ElementDiffは、MotionSolveで単一のユーザー定義の1次微分方程式を定義します。

クラス名

Diff

説明

DIFFの定義の詳細については、Control_Diffをご参照ください。Diffは次の3つの方法で定義できます:
  • MotionSolve式で定義されたシステムの状態と時間の陽関数または陰関数
  • コンパイルされたDLLで定義されたシステムの状態と時間の陽関数または陰関数
  • ユーザー定義のスクリプトで定義されたシステムの状態と時間の陽関数または陰関数

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()    
label String ()  
ic Double ([], count=0) FDのみ
static_hold Bool ()    
implicit Bool ()    
function Function ()  
routine Routine ()    
active Bool ()  
script Script ()    

使用法

# Defined in a MotionSolve expression
Diff (function=expressionString, optional_attributes)

# Defined in a compiled user-subroutine
Diff (function=userString, routine=string optional_attributes)

# Defined in a Python function
Diff (function=userString, routine=functionPointer optional_attributes)

属性

MotionSolve式として定義
function
文字列
Diffを定義するMotionSolve式。
function属性は必須です。
コンパイルされたDLL内のユーザーサブルーチンとして定義
function
有効なユーザー関数MotionSolve式を定義する文字列
データファイルから、Variableが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVariableの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
例: routine="/staff/Altair/engine.dll::myDiff"
  • "/staff/Altair/engine.dllはDLLです。
  • “myDiff”は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでDIFSUBになります。
Pythonスクリプト内のユーザーサブルーチンとして定義
function
有効なユーザー関数MotionSolve式を定義する文字列
データファイルから、Variableが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ
例: routine=myDiff
  • myDiffは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでDIFSUBになります。
オプション属性 - すべてのバリアントに使用できます。
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのDiffオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Diffオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
ic
倍精度値または2つの倍精度値のリスト
微分方程式に関する初期条件を指定します。陽微分方程式の場合は、1つの値だけが必要です。陰微分方程式の場合は、2つの値を指定する必要があります。
1つ目の値は動的状態の初期条件を定義します。
  • このパラメータは必須です。
  • 指定しない場合は、デフォルトで0.0になります。
2つ目の値は動的状態の時間導関数の初期条件を定義します。
  • これは、微分方程式が陰的に定義された場合にのみ必要です。陽微分方程式の場合は必要ありません。
  • 指定しない場合は、デフォルトで0.0になります。
この属性は省略可能です。
static hold
ブール
静的平衡解析および擬似静解析の間、動的状態の値を固定するかどうかを指定します。
  • "TRUE"は、静的解析および擬似静解析の間、動的状態の値が一定に保たれることを意味します。
  • "FALSE"は、静的平衡解析または擬似静解析の間、動的状態の値が変化可能であることを意味します。
指定しない場合は、デフォルトでFALSEになります。
この属性は省略可能です。
implicit
ブール
状態の導関数が微分方程式によって陰的に定義されるかどうかを指定します。
  • "True"は、導関数が陰的に定義されることを意味します。
  • "False"は、導関数が陽的に定義されることを意味します。
指定しない場合、IMPLICITはデフォルトでFALSEになります。
active
ブール
TrueFalseのどちらかを選択します。
  • Trueは、要素がモデル内でアクティブであり、システムの動作に影響を与えていることを示します。
  • Falseは、要素がモデル内で非アクティブであり、システムの動作に影響を与えていないことを示します。エンティティがモデルから削除される場合とほとんど同じですが、必要に応じて“ON”にできる点が異なります。
属性activeは省略可能です。指定しない場合、activeはデフォルトでTrueになります。



図 1.
  1. 式を使用した陽的な微分方程式としてのスプリング質量システムの記述。
    d1 = Diff (id=1, label="vdot=(Cv–Kx)/m", function="-200*DIF(1)-2E4*DIF(2)", ic=0.0)
    d2 = Diff (id=2, label="xdot=v", function="DIF(1)", ic=0.2) 
  2. 前述のスプリング質量システムの、ユーザーサブルーチンでの記述。
    def springMassDamper (id, time, par, npar, dflag, iflag)
        
        v = DIF(1)
        x = DIF(2)
        
        if iflag:  return0.0
        
        if id == 1:
            M = par[0]
            C = par[1]
            K = par[2]
            return (-C*v-K*x)/M
         
         else:
            returnv
    ################################################################################
    # Model definition                                                             #
    ################################################################################
    # Force balance equation
    d1 = Diff (id=1,function="user(0.5, 1E2, 1E4)", ic=0,label="vdot=(-Cv–Kx)/m",
               routine = springMassDamper)
    
    # Differential equation for displacement equation
    d2 = Diff (id=2,function="user(0)", ic=0.2, label="xdot=v",
               routine= springMassDamper)

コメント

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