Home > リソース > MBDynチュートリアル > 6.自由落下する剛体(4)〜入力ファイルを読みやすくする工夫
MBDynチュートリアル

6.自由落下する剛体(4)〜入力ファイルを読みやすくする工夫

前々項と前項で、例題1の入力ファイル「free_falling_body.mbd」(コード1にあらためて示します)のコード全ての意味を解説しました。本項では、この入力ファイルをより読みやすくする工夫をいくつか紹介します。MBDynの入力形式はとても柔軟性が高く、ちょっとした工夫を施すことで、読みやすく効果的な入力ファイルを作成することができます。入力ファイルを読みやすくすることは、今後複雑なシミュレーションモデルを構築する際に重要となります。

free_falling_body.mbd
# free_falling_body.mbd

begin: data;
   problem: initial value;
end: data;
 
begin: initial value;
   initial time: 0.;
   final time: 1.;
   time step: 1.e-3;
   max iterations: 10;
   tolerance: 1.e-6;
end: initial value;
 
begin: control data;
   structural nodes: 1;
   rigid bodies: 1;
   gravity;
end: control data;
 
begin: nodes;
   structural: 1, dynamic, null, eye, 0., 3., 0., null;
end: nodes;
 
begin: elements;
   body: 1, 1, 1., null, eye;
   gravity: 0., 0., -1., const, 9.81;
end: elements;
コード1: 例題1(自由落下する剛体)の入力ファイル記述例

スペースを上手く使う

MBDynは余分なスペース(空白)は無視してくれます。ですから、スペースを自由自在に使って、インデントをつけたり、数字を揃えるなどして、コードを視覚的に分かりやすくしましょう。

改行を上手く使う

MBDynでは、ほぼ自由に改行することができます。意味のあるまとまりごとに改行し、1列あたりの情報を少なくすることでコードが見やすくなります。

コメントを上手く使う

MBDynでは、ステートメントの途中でもコメントを挿入することができます。改行とコメントを組み合わせれば、長く複雑なステートメントも分かりやすくすることができます。

変数を上手く使う

set”カードを用いて変数を定義することができます。setカードは入力ファイル中のどこでも(ブロック外でも)使うことができ、例えば、次のステートメントは実数の変数「Vy0」を作成し、数値「3」を代入します。

   set: real Vy0 = 3.;

このように定義した変数は、普通の数値と同様に扱うことができます。変数を用いれば数値をまとめて変えやすいので、後で変える可能性が高い数は変数にしておくと便利でしょう。

変数を用いるメリットは、数値をまとめて変えやすいということ以外にもう一つあります。それは、数値を名前で扱うことができるため、より説明的にコードを書くことができることです。例えば、円の面積を数値として記述する必要があるときに、「Radius」を変数として、

   pi*Radius^2

と記述してあれば、それが何の数値か一目瞭然です。同様に、nodeやbodyのラベルを変数にして分かりやすい名前を付けておけば、ラベルが管理しやすくなります。

例題1の入力ファイルを読みやすく改善

以上の工夫を用いて書き直した例題1の入力ファイルを下のコード2に示します。いかがでしょうか?コード1よりも読みやすくなっているのではないでしょうか?本チュートリアルでは、今後このようなスタイルで入力ファイルのコードを書いて行きます。勿論、このスタイルが唯一ではありませんし、最善とも限りません。本項で紹介した工夫をヒントに、より良いスタイルを探求してみてください。

free_falling_body_E.mbd
# free_falling_body_E.mbd

begin: data;
   problem: initial value;
end: data;
 
begin: initial value;
   initial time:   0.;
   final time:     1.;
   time step:      1.e-3;
   max iterations: 10;
   tolerance:      1.e-6;
end: initial value;
 
begin: control data;
   structural nodes: 1;
   rigid bodies:     1;
   gravity;
end: control data;

# Design Variables
set: real Vy0 = 3.; #[m/s] Initial horizontal speed
set: real M   = 1.; #[kg]  Mass of the ball

# Node Labels
set: integer Node_Ball = 1;

# Body Labels
set: integer Body_Ball = 1;
 
begin: nodes;
   structural: Node_Ball, dynamic,
      null,        # absolute position
      eye,         # absolute orientation
      0., Vy0, 0., # absolute velocity
      null;        # absolute angular velocity
      
end: nodes;
 
begin: elements;
   body: Body_Ball, Node_Ball,
      M,    # mass
      null, # relative center of mass
      eye;  # inertia matrix
      
   gravity: 0., 0., -1., const, 9.81;
   
end: elements;
コード2: 読みやすく直した例題1(自由落下する剛体)の入力ファイル