MV-7000:MotionViewMotionSolveを使った微分方程式のモデル化

本チュートリアルでは、モデルを構築し、モデルを実行する前にソルバー変数と微分方程式を適用します。

微分方程式は非常に用途が広く、マルチボディシステムのモデル化において多くの異なる応用が可能です。ユーザー定義の動的状態は、ローパスフィルタの作成、時間遅れの適用、単純なフィードバックループのモデル化、信号の積分によく使用されます。信号は下記の用途に使用することが可能です:
  • 荷重の定義
  • スプラインまたはカーブを介した補間のための独立変数として
  • 一般的な制御モデリング要素用の入力信号として
  • プログラムの出力信号の定義

MotionSolveの方程式およびユーザーサブルーチンにより、かなり複雑なユーザー定義の動的状態を定義することが可能になります。

EXPRESSIONタイプは、微分方程式を定義するアルゴリズムがシンプルな式を表すのに十分シンプルである場合に使用されます。多くの場合、動的状態は実体論理とデータ操作によって決まります。そこでは、プログラミング言語を使って微分方程式の値を定義するのが望ましいことです。ユーザーサブルーチンDIFSUBでは、これが実行できます。

簡易化されたモデルの構築と解析

下記の演習では、MotionViewMotionSolveを使って、倒壊する圧力容器の簡易化モデルを構築、解析します。以下の手順でプロセスの概要を説明します。

  1. ソルバー変数として、下記のパラメータ(状態変数)を指定します:
    k = 1.4 A = 0.047 V = 18.3 C p R = 3.5
  2. 以下の微分方程式をモデル化します。
    (1) P ˙ T P T + C P R T ˙ T T T =0 (2) P ˙ T P T T ˙ T T T m ˙ T m T =0 (3) m ˙ T =A k m T P T V ( 2 k+1 ) k+1 2( k1 )

    システムの3つの状態は、PTTTおよびmTです。

  3. システムの初期条件を下記のとおり設定します:
    P T ( 0 ) = 2000 T T ( 0 ) = 560 m ( 0 ) = 2.5602 e 04 P ˙ T = 5.8875 e + 04 T ˙ T = 4.7100 e + 03 m ˙ = 0.0054
  4. MotionSolveでモデルを実行し、HyperGraphで結果のポスト処理を行います。

ソルバー変数の追加

ソルバー変数は、MotionSolveでの明示的な代数状態を定義します。代数状態は、システムの状態の関数、または、定義されている他の任意のソルバー変数であることが可能です。再帰的または暗黙的な定義は現段階では許可されていません。

2つのタイプのソルバー変数が使用可能です。1つは、おそらく最も便利であるexpression valued 変数、もう1つは、user-subroutine valued変数です。

expression methodは、代数状態を定義するアルゴリズムがシンプルである際に使用されます。多くの場合、代数状態は、実体論理とデータ操作に支配されています。そこでは、プログラミング言語を使ってソルバー変数の値を定義するのが望ましいことです。ユーザーサブルーチンVARSUBでは、これが実行できます。

ソルバー変数は極めて用途が広く、マルチボディシステムのモデル化において多くの異なる応用が可能です。これらは、シミュレーションにおいて着目する対象の信号を作成するために使用されます。それらの信号は、荷重、補間のための独立変数、一般的な制御要素および出力信号の定義に使用できます。

MotionSolveの方程式およびユーザーサブルーチンにより、かなり複雑な代数状態を定義することが可能になります。

詳細については、オンラインヘルプのMotionViewおよびMotionSolveユーザーズガイドをご参照ください。

  1. MotionViewの新しいセッションを開始します。
  2. ProjectブラウザModelを右クリックAdd > Control Entity > Solver Variableを選択(またはツールバーからSolver Variables を 右クリック)します。
    Add Solver Variableダイアログが表示されます。
  3. Label 欄で、ソルバー変数にラベルKを割り当てます。
  4. Variable欄で、ソルバー変数に変数名を割り当てます。または、デフォルト名をそのまま使用します。
  5. OKをクリックします。


    図 1.
  6. PropertiesタブのType:の下でLinearを選択し、入力欄に1.4と入力します。


    図 2.
  7. 手順1.から6.までを繰り返し、残り3つのソルバー変数を作成します。
    (4) A=0.047 V=18.3 C p R =3.5

微分方程式のモデル化

  1. ProjectブラウザModelを右クリックし、Add General MDL Entity > Solver Differential Equationを選択(またはツールバーからSolver Differential Equation, t を 右クリック)します。
    Add SolverDiffダイアログが表示されます。
  2. Label欄で、ソルバー微分方程式にラベルを割り当てます。または、デフォルト名をそのまま使用します。
  3. Variable欄で、ソルバー微分方程式に変数名を割り当てます。または、デフォルト名をそのまま使用します。
  4. Applyをダブルクリックします。
  5. OKをクリックします。
    3つのソルバー微分方程式が作成されます。

次に、1つ目の微分方程式をモデル化します:

P ˙ T P T + C p R T ˙ T T T = 0

これは、定数( C p R )を有する陰形式の微分方程式です。微分方程式(IC)の初期条件とその1次導関数(IC dot)は与えられています。

  1. SolverDiff 0を選択します。
  2. PropertiesタブでImplicitを選択し、ICを2000、IC dotを-58875と指定します。


    図 3.
  3. タイプにExpressionを選択します。
  4. Expression Builderにアクセスするには、テキスト欄内をクリックし、パネル上部の3つのボタン群からF(x) を選択します。
    これで、Expression Builderが表示されます。このダイアログでは、キーボードに長々と入力したり記憶したりすることなしに、各表現をテキストボックスに入力することが可能です。このツールは、数式やADAMS表現を構築するために使用できます。
  5. 下図に示すように、式を入力します。


    図 4.
    `-DIF1 ({diff_0.id})/DIF({diff_0.id})+{sv_3.value.lin}*DIF1({diff_1.id})/DIF({diff_1.id})`
  6. オプション: モデル内のエンティティ変数にアクセスするには、モデルツリーを使うことができます。上の式から分かるとおり、微分方程式のIDを参照し、 Propertiesタブのリストツリーからそれをブラウズし、そのIDを選択します。Applyをクリックします。
    選択されたエンティティまたはプロパティの名称が式に挿入されます。
  7. OKをクリックします。
    新しい式が、パネル内のテキストボックスに表示されます。
  8. 手順6.から12.までを繰り返し、残り2つの微分方程式を修正します:
    P ˙ T P T T ˙ T T T m ˙ T m T = 0

    implicit:Yes

    IC:560

    IC_dot:-4710

    Value Expression:
    `DIF1({diff_0.id})/DIF({diff_0.id})-DIF1({diff_1.id})/DIF({diff_1.id})-DIF1({diff_2.id})/DIF({diff_2.id})`

    m ˙ T = A k m T P T V ( 2 k + 1 ) k + 1 2 ( k 1 )

    implicit:No

    IC:0.000256

    Value Expression:
    `-{sv_1.value.lin} *sqrt(abs({sv_0.value.lin}*DIF({diff_2.id})*DIF({diff_0.id}) /{sv_2.value.lin}))*0.5787`

MotionSolveでのモデルの実行

  1. ツールバー内のRun をクリックします。
    Runパネルが表示されます。
  2. 下に示した値を指定します。


    図 5.
  3. MainタブでSave and run current modelをクリックします。
  4. ブラウザアイコンをクリックし、好みのファイル名を指定します。
  5. Saveをクリックします。
  6. Check Model をクリックしてモデルを確認します。
  7. Runをクリックし、モデルを実行します。
    ソルバーが起動されます。
  8. HyperGraphを使って結果をポスト処理します。