MV-1080:MDLを用いたアナリシスの作成

本チュートリアルでは、アナリシス定義の作成と、MDLファイル内でのアナリシス定義のインスタンス化について学習します。

アナリシスエンティティは、モデルに適用される特定の事象を表現する荷重、モーション、出力要求、およびエンティティ(ボディ、ジョイント等)などの集合体です。例えば、4つのバーから成る機構の運動を求めるための解析は1つのアナリシス内で表すことができ、一方、別のアナリシスを使って動的な挙動をスタディすることが可能です。いずれの場合も、モデル全体は一緒で、アナリシスコンテナは事象を形成する異なるエンティティを含みます。運動学解析にはモーションと関連の出力を、動解析にはフォースとその関連の出力を含めることができます。
アナリシス定義は、これらのキーの違いを除くと、シンタックスとその使用法についてはシステム定義と類似しています:
  • システム定義には*DefineSystem()を使用しますが、アナリシス定義には*DefineAnalysis()を使用します。
  • アナリシスは、トップレベルのモデルの下でのみインスタンス化が可能
  • 所与のインスタンスにおいてモデル内で1つのアナリシスのみがアクティブになり得る
アナリシス定義ブロックは*DefineAnalysis()で始まり、*EndDefine()で終わります。このブロック内で定義されたすべてのエンティティは、アナリシス定義の一部であるとみなされます。*DefineAnalysis()のシンタックスは下記のとおりです:
*DefineAnalysis(ana_def_name, arg_1,arg_2, ..., arg_n)
  • ana_def_nameはアナリシス定義の変数名で、このアナリシスのインスタンス生成の間に使用されます。
  • arg_1,arg_2...arg_nは、アタッチメントとしてアナリシス定義に渡される引数のリストです。
表 1 は、MDLファイル内のアナリシス定義およびそれに続くインスタンス化を示しています。アナリシス定義ファイルとモデルファイルの2つが、スタディ下の特定のアナリシスをインスタンス化する際に機能します。例の中で一部の語は、これらファイル間の幾つかの主要な関係に焦点を当てるため、太字で記されています。
表 1.
Reference Numbers System Instantiation with Definition
1
// Model : Body.mdl
*BeginMDL(base_model, "Base Model")
2
//Instantiate the analysis definition ana_def
*Analysis(ana1, "Analysis 1", ana_def, j_rev)
3
//Begin Analysis Defintion Block
*DefineAnalysis(ana_def,j_joint_att)
4
//Declare a joint attachment to the analysis
*Attachment(j_joint_att, "Joint Attachment", Joint,
"Add an joint external to this analysis to apply
motion/force")
5
//Entities within the analysis
*Point(p_1, "Point in the analysis")
*Body(b_1, "Body in the analysis")
6
//Define a joint with the body b_sys and the body
attachment b_att
*Motion(mot, "Joint Motion", JOINT, j_joint_att,
ROT)
7
*EndDefine() //End Definition Block
8
*EndMDL()
表 2 は、アナリシス定義とMDLモデルファイル内のインスタンスとの関係を示したものです。
表 2.
変数 Relationship
j_joint_att アナリシス定義ファイルの*Attachment()ステートメント(行4)で宣言され、*DefineAnalysis()ステートメント(行3)に引数として現れるアタッチメントの変数名。モーションは、*Motion()ステートメント(行6)を使ってこのジョイントに適用されます。
ana_def アナリシス定義の変数名は、*DefineAnalysis()ステートメント(行3)内で指定されます。アナリシス定義は、ana1によって*Analysis()ステートメント(行2)内で使用されます。

アナリシス定義ファイルの作成

このステップでは、アナリシス定義ファイルを作成します。

構造の固有振動数を推算するための試行的手法では、推進力またはトルクへの応答を測り、フーリエ変換を用いて周波数領域内の応答に注目します。周波数応答のピークは、固有振動数を表わします。本チュートリアルでは、アナリシスを生成してこのテストプロシージャをシミュレーションします。アナリシスは、システムへの推進トルクを適用し、応答を測ります。
  1. 以下の関数式を使って、x軸についての推進トルクを作成します:

    Tx = step(TIME,.3, 0, .31, 10) + step(TIME, .31, 0, .32, -10)

  2. このアナリシスを応用し、図 1に示す三重振子モデルの固有振動数を推算します。


    図 1. 平衡状態にある三重振子の詳細図
アナリシスは、任意の数のリンクを有する振子、もしくはより一般的なシステムに適用されます。


図 2. 三重振子のプロパティ一覧
本演習では、以下の4つのMDLステートメントが使用されます:
*Attachment()
*ActionReactionForce()
*SetForce()
*Output() 
注: 上記のMDLステートメントのシンタックスについては、MotionView Reference GuideHyperWorks Desktop Reference Guide内)をご参照ください。
  1. テキストエディタで、空のファイルを開きます。
  2. *DefineAnalysis()および*EndDefine()ブロックを作成します。その他のすべてのステートメントは、このブロック間に追加します。
  3. テキストエディタで、変数名def_ana_0、アタッチメントとして1つの引数がj_attであるアナリシスを定義します:
    *DefineAnalysis(def_ana_0, j_att)
  4. トルクは回転ジョイントで結合される2つのボディ間に適用され、ジョイントの原点は、力のかかるポイントとみなされます。これにより、1つのアタッチメント(回転ジョイント)のみを有することになります。アタッチメントとしてj_att、エンティティタイプがJointを定義する*Attachment()ステートメントを作成します。ステートメントに使用される変数名は、*DefineAnalysis()ステートメントで使用されるものと同じでなければなりません。
    *Attachment(j_att, "Joint Attachment", Joint, "Select joint to apply torque")
    これにより、1つのアタッチメント、すなわち回転ジョイントのみを有することになります。
  5. *ActionReactionForce()ステートメントを使って、適用されるトルクを定義します。
    要確認: ジョイントに係るボディに達するアタッチメントの正しいプロパティを参照してください。MDL内のドットセパレータの記述を参照してください。エンティティのプロパティには、ドットセパレータを使ってアクセスできます。例えば、回転ジョイントに結合されたボディは、<joint variable name>.b1および<joint variable name>.b2としてアクセスが可能です。
    1. *ActionReactionForce()ステートメントに、force_1の変数名を定義します。
    2. フォースのタイプをROT(回転)と定義します。
    3. Body 1をj_att.b1(アタッチメントジョイントボディ1)と定義します。
    4. Body 2をj_att.b2(アタッチメントジョイントボディ2)と定義します。
    5. 荷重の載荷ポイントをj_att_i.origin(アタッチメントジョイントの原点)と定義します。
    6. 参照フレームをGlobal_Frame(全体座標系)と定義します。
      *ActionReactionForce( force_1, "Torque", ROT, j_att.b1, j_att.b2, j_att.origin, Global_Frame )
  6. *SetForce()ステートメントを、変数名force_1、下記のトルク値で作成します:
    TX = step(TIME,.3,0,.31,10) + step(TIME,.31,0,.32,-10),TY = 0,TZ = 0
  7. *Output()ステートメントを作成し、適用されるフォースを出力します。
    1. 変数名o_forceと定義します。
    2. 出力タイプをFORCEと定義します。
    3. エンティティタイプをFORCEと定義します。
    4. 変数force_1(手順5で作成された作用反作用)を定義します。
    5. 参照フレームをGlobal_Frameと定義します。
      *Output( o_force, "Input Torque", FORCE, FORCE, force_1, Global_Frame)
  8. アナリシス定義をanalysis.mdlとして保存します。
    ファイルは次のように見えるはずです:
    *DefineAnalysis( def_ana_0,j_att )
    *Attachment(j_att, "Joint Attachment", Joint, "Select joint to apply
    torque")
    *ActionReactionForce( force_1, "Torque", ROT, j_att.b1, j_att.b2,
    j_att.origin, Global_Frame )
    *SetForce( force_1, EXPR, `step(TIME,.3,0,.31,10) + step(TIME,.31,0,.32,-10)`)
    *Output( o_force, "Input Torque", FORCE, FORCE, force_1, Global_Frame)
    *EndDefine()

モデル内のアナリシスのインスタンス生成

このステップでは、三重振子モデル内でアナリシスをインスタンス化します。

  1. MotionViewを起動し、mdlフォルダーからtriplependulum.mdlファイルを開きます。
  2. Projectブラウザから、Modelをクリックします。
  3. Systems/Assemblyパネルで、Import/Exportタブをクリックします。
  4. (ファイルブラウザ)をクリックし、analysis.mdlを選択します。続いて、Importをクリックします。
  5. Select a definitionドロップダウンメニューがAnalysisにセットされていることを確認します。


    図 3.
  6. OKをクリックします。
  7. Projectブラウザで、新たに追加されたAnalysis 0をクリックします。
  8. ジョイントのアタッチメントを指定します。
    1. Attachmentsタブで、をダブルクリックします。
    2. 三重振子のピボットジョイントの1つを選択します。


      図 4.
  9. モデルをnew_triplependulum.mdlとして保存します。
  10. モデルを実行します。
    1. (Run)パネルボタンをクリックします。
    2. パネル内で、End timeを1.0に、Print intervalを0.01と指定します。
    3. Runをクリックします。
  11. (Start/Pause Animation)ボタンをクリックし、アニメーションを見ます。
  12. 解からの.abfファイルを使って、"Input Torque"出力をプロットします。