3992

チュートリアル

著名な解析ソフトウェア NX Nastran のカスタマイズプログラムの DMAP に関しての使用方法を解説していきます。全3回を予定しており、主にプリポスト一体型の Femap with NX
Nastran を用いた説明を行っていきます。2回目の今回は、プログラムに必要な基本的な関数、構文の使用方法の説明を行います。

Femap with NX Nastran – DMAP 入門（2）
桑原 雅治
1

はじめに

2

Femap でのモデル作成

前回は、導入編として、Nastran になじみがない方でもご理解いただけるように、以下の説明を行いました。
-Nastran の解析ファイルの内容説明-DIAG による SOL ごとの解析プログラムの確認-DMAP を使用する手順
今回は、実際にプログラムを行うために必要な関数、変数、条件分岐、データの保存 / 読込みに関しての使用方法を、簡単な例を交えて説明します。

今回、説明に使用している Femap with NX Nastran では、プリポストの Femap を使用してモデルを作成し、解析条件や DMAP を設定して使用します。
このチュートリアルでの例題を確認する際に、別のモデルを使用出来れば、練習に幅が出来ると思います。
ここでは Femap で簡単なビーム要素を作成し、荷重と拘束を設定する簡易な手順を記載しておきます。
2.1 ビーム要素の作成
今回は、直接ビーム要素を1本作成します。ビーム要
素は X 軸方向に1の長さで作成します。
1.〔メッシュ〕−〔ビトウィーン〕コマンドを選択します。
2. 表示されたダイアログの、〔プロパティ〕リストの右にあるアイコンボタンを押します。
3.「プロパティ定義」ダイアログが表示されますので、〔エレメント / プロパティ タイプ〕ボタンを押します。
4.「エレメント / プロパティ タイプ」ダイアログが表示されますので、〔ビーム〕にチェックを移動して〔OK〕を押します。
5. 切り替わったダイアログの〔断面定義〕ボタンを押し、表示されるダイアログで任意の断面と値を入力して、各パラメータを設定します。
6. 戻ったダイアログの〔OK〕を押し、続けて表示されるダイアログで〔はい〕を選択します。
7.「マテリアル定義」ダイアログが表示されますので、材料特性を設定して〔OK〕を押します。
8.「メッシュ生成」ダイアログの、〔ノード数〕に "2"を入力して〔OK〕を押します。
9.「座 標 定 義」ダ イ ア ロ グ で、（0,0,0）を 入 力 し て〔OK〕を押します。
10. 続けて表示されるダイアログで、（1,0,0）を入力して〔OK〕を押します。
11.「ベクトル定義」ダイアログが表示されますので、〔基点〕に（0,0,0）、〔先端〕に（0,1,0）で〔OK〕を押します。
以上でビーム要素が作成されます。
2.2 荷重と拘束
1.〔モデル〕−〔荷重（拘束）〕−〔ノード〕コマンドでノード荷重（拘束）を設定します。
2.「新規荷重（拘束）セット」ダイアログは〔OK〕を押して閉じます。
3.「エンティティ選択」ダイアログで、設定したいノードをマウスでピックして〔OK〕を押します。
4. それぞれ荷重、拘束の設定を行うダイアログで、内容を設定して〔OK〕を押します。
以下の図は、円断面（半径0.01）で、端部固定、X 方向に荷重1を設定したモデルになります。

筆者紹介
くわばら まさはる（株）計算力学研究センター所属。Femap with NX
Nastran の SE と し て20年 勤 務。 受 託 解 析、 製 品 サ

続きは Web で
日本計算工学会誌「計算工学（Vol.24, No.4）」HP:
http://www.jsces.org/activity/journal/

ポートを担当。

（28）

計算工学

チュートリアル3

Femap with NX Nastran – DMAP 入門（2）モジュールに関して

DMAP では、各種計算を行う際に、便利な機能として “モジュール” という関数群が用意されています。
DMAP でのカスタマイズでは、主にこのモジュールを使用することにより、行列計算機能の作成を簡単に行うことが出来ます。実際には、行列計算以外のモジュールも多数存在しますが、本チュートリアルでは、行列計算に的を絞って話を進めます。
3.1 モジュールのフォーマット
モジュールは、大まかに分けて、以下の4ブロックに分けることが出来ます。
①モジュール名②入力データ③出力データ④オプション
実際のフォーマットは、以下のようになります。
モジュール名 入力データ1,2,3･･･/
出力データ1,2,3･･･/
オプション1/ オプション2/･･･
3.1.1 モジュール名
使用するモジュール名になります。具体的なタイト
ルと内容に関しては、Femap のインストール時に含まれているマニュアル “DMAP Programmer's Guide” の9から11章をご参照ください。
DMAP の制限により、タイトルは英数8文字以内となっています。

異なるデータを入力する際には、“/” で区切ります。
例1）ADD：行列の足し算
ADD AAA,BBB/
CCC/1.0/2.0/0 $上記の ADD モジュールは、行列同士の足し算を行う関数になります。
入力データとして、AAA、BBB の行列、出力データとして、CCC の行列名を設定しています。
オ プ シ ョ ン は3つ あ り、 そ れ ぞ れ 行 列AAAの 係 数（1.0）
、BBBの係数（2.0）
、計算手法（0）を設定しています。
実際に、AAA,BBB を単位行列として設定し、計算してみます。
例2）実際の行列計算
SOL 100COMPILE USERDMAPALTER 2
MATGEN /AAA/1/2/$
MATGEN /BBB/1/2/$
ADD AAA,BBB/CCC/1.0/2.0/0 $MATPRT CCC/$
CEND
BEGIN BULKENDDATA
上記は、SOL 100を使用しています。
Femap では、以下のダイアログの赤枠部分に “100” を設定します。

3.1.2 入力データモジュールを使用する際に必要な入力データを設定します。モジュール名と、最初の入力データ名間は1つ以上のスペースを空けてください。必要な入力データの個数は、各種モジュールごとで異なります。
異なるデータを入力する際には、“,” で区切ります。
入力データの終了部分は “/” を入力します。
3.1.3 出力データモジュールを使用した際の結果を入力するデータ名を設定します。入力データ終了の “/” の後から記入します。スペースを空ける必要はありませんが、空けてもいいですし、視認性を良くする為、改行してから記入してもかまいません。
異なるデータを入力する際には、“,” で区切ります。
出力データの終了部分は “/” を入力します。
3.1.4 オプション
モジュールを使用する際に必要なオプションを設定します。出力データ終了の “/” の後から記入します。ス
ペースを空ける必要はありませんが、空けてもいいですし、視認性を良くする為、改行してから記入してもかまいません。
計算工学

設定する際の解析タイプは線形静解析で問題ありません。〔解 析タ イプ / 番号〕に “100” が 設 定さ れ た時点で、SOL100として解析が実行されます。
MARGEN は、単純な行列を作成するモジュールで、AAA,BBB 共に2×2の単位行列を作成しています。
結果の CCC は、AAA の単位行列と係数2.0を掛けたBBB の対角行列を足して、3の対角行列として出力されます。
F06ファイルを確認すると、以下のように記載されます。

（28-2）

Vol.24, No.4 2019

チュートリアル

Femap with NX Nastran – DMAP 入門（2）

一度に複数の変数を宣言する場合
TYPE PARM,,I,,A1,B1,C1 $詳しい内容に関しては、“DMAP Programmer's Guide”の1章をご参照ください。

※ SUBDMAP に関してモジュールは、規定の引数にデータを入力すると、決 ま っ た 処 理 を 行 う 関 数 に な り ま す が、SUBDMAPも、モジュールと同様に引数を設定して使用します。
SUBDMAP SUBDMAP 名 入力データ1,2,3/
出力データ1,2,3/
オプション1/ オプション2/･･･
モジュールは、中身の見えない SUBDMAP のようなもので、モジュールに存在しない、繰返し使用したいルーチンを作成したい場合などには、SUBDMAP を作成し、CALL で呼び出すことにより、何度も使用することが出来ます。（Basic や C などでのクラスに近い使用方法になります。）
今回は、SUBDMAP の構成までは説明しませんが、注意事項として、SUBDMAP 間でのデータのやり取りは複雑になるため、上記の出力データの部分で、必要なデータを取得するように、プログラムを作成します。

4変数定義

DMAP 内部で変数を使用する場合には、変数を宣言する必要があります。
4.1 変数宣言のフォーマット
宣言する際のフォーマットは、以下の通りです。
例3）変数の宣言
TYPE PARM,(NDDL), 変数の種類 ,（上書き可 / 不可）, タイトル1,2,･･･$（）の部分は、定義しなくても使用できますので、空白でもかまいません。
変数の種類は、以下の通りです。
表1

変数タイプ
ブーリアン
整数
文字列
単精度実数
倍精度実数
単精度複素数
倍精度複素数以上の例を実行すると、C1と C2の結果が F06に表示されます。
^^^C1 =6.000000E+00^^^C2 =6.666667E-01
4.3 演算の関数に関して四則演算以外にも、いろいろな演算関数が用意されています。以下の表に、一部の関数を記載します。
表2

関数名
ABS
SIN
COS
TAN
REAL
IMAG
MAX
MIN
MOD
MINT
LINE

変数タイプ

記号
LOGICAL
I
CHAR（文字数）
RS
RD
CS
CD

例4）変数の宣言例
整数の変数 A1を宣言する場合
TYPE PARM,,I,,A1 $計算工学

4.2 変数の使用例
定義した変数は、通常のプログラムと同様に、左辺 = 右辺で、数値の入力が可能です。また、四則演算も同様に行えます。
例5）変数の使用例
単精度実数変数として、A1,B1,C1,C2を設定し、A1に “2.0”、B1に “3.0” を入力し、A1と B1の掛け算を C1、A1と B1に割り算を C2に入力する。
SOL 100COMPILE USERDMAPALTER 2TYPE PARM,,RS,,A1,B1,C1,C2 $A1=2.0B1=3.0C1=A1*B1
C2=A1/B1
MESSAGE //ʼ C1 = ʻ/C1/$
MESSAGE //ʼ C2 = ʻ/C2/$
CEND

演算関数

内容
絶対値
サイン
コサイン
タンジェント複素数から実数を取得
複素数から虚数を取得
最大値を戻す最小値を戻す
余りを戻す
実数を整数化
文字列比較

詳しい内容に関しては、“DMAP Programmer's Guide”の1章、『Function Statement』をご参照ください。

（28-3）

Vol.24, No.4 2019

チュートリアル5

Femap with NX Nastran – DMAP 入門（2）

データブロックに関して

表4

DMAP で使用するデータの形式には、大まかに以下の種類が存在します。
- 変数- マトリクス- テーブル変数は、通常のプログラムと同様に、指定した変数名に単一の数字、文字を入力するデータになります。
変数の内容を表示する際には、“MESSAGE” モジュールを使用します。
マトリクスは、行列のデータです。内容を表示する際には、“MATPRT” のモジュールを使用します。
テーブルは、決まったフォーマットを持つ文字と数値の組み合わせで、主に表形式の表現になります。
内容を表示する際には、“TABPT” モジュールを使用します。
変数は、他のプログラムと同様に、変数の型などを設定する必要があります。
マトリクスを新規に作成 / 使用する場合には、すでに使用されている名前を使用しない限りには、変数のように宣言する必要はありません。
例2）の AAA、BBB のように、ただタイトルを設定するだけで、マトリクスデータとして使用できます。
テーブルデータは、NDDL（“NASTRAN Data DeﬁnitionLanguage”）で、内部のフォーマットが予め設定されている必要があるため、すでに使用されている変数名以外を自分で設定して使用することは出来ません。
今回の説明では、NDDL の説明までは行いませんので、テーブルデータは使用せずに、マトリクスと変数でのプログラムを説明します。

6

条件分岐に関して

6.1 条件分岐の種類
DMAP では、以下の条件分岐を使用することが出来ます。
表3

条件分岐
単一真偽
複数分岐

ジャンプ
繰返し処理

条件分岐

記号
IF（条件）･･･$
IF（条件）THEN
内容
ELSE IF（条件）THEN
内容
ELSE $
内容
ENDIF $JUMP ラベルLABEL ラベルDO WHILE（条件）$内容
ENDDO $

また、演算子は、以下のものがあります。

計算工学

演算子
＝＜＞＞
＜＜＝＝＞

演算子

内容
等号
不等号
大なり小
小なり大
右辺以下
左辺以下

他にも論理演算子（AND、OR）も使用できます。
詳しくは、Femap のインストール時に含まれているマニュアル “DMAP Programmer's Guide” の1.3章をご参照ください。
6.2 単一真偽
IF のみで構成された真偽になります。条件が真の場合、・・・に記載されたプログラムが実行されます。偽の場合、無視されて通過します。
例6）単一真偽の使用例
整数変数として、A1を設定し、初期値に “0” を設定しておきます。
SOL 100COMPILE USERDMAPALTER 2TYPE PARM,,I,,A1=0 $IF(A1=0) MESSAGE //ʼ A1 = ʻ/A1/$
CEND
上記プログラムを実行すると、以下のように F06に記載されます。
^^^A1=0

次 に、A1=0を A1=1に 変 更 し て 実 行 し た 場 合、
MESSAGE の部分は実行されず、F06には何も記載されません。

6.3

複数分岐

IF と ENDIF、 ま た 複 数 の 分 岐 を 設 定 す る 場 合、
ELSEIF および ELSE で分岐の個数を増やすことが出来ます。
例7）複数分岐の使用例
整数変数として、A1を設定し、初期値に “0” を設定しておきます。
SOL 100COMPILE USERDMAPALTER 2TYPE PARM,,I,,A1=0 $IF(A1=0) THENMESSAGE //ʼ TEST_1 ʻ/$ELSE（28-4）

Vol.24, No.4 2019

チュートリアル

Femap with NX Nastran – DMAP 入門（2）MESSAGE //ʼ TEST_2 ʻ/$
ENDIF
CEND

例9）繰返し処理の使用例
SOL 100COMPILE USERDMAPALTER 2TYPE PARM,,I,,A1=0 $DO WHILE(A<=3)
MESSAGE //ʼ A1 = ʻ/A1 $A1 = A1+1
ENDDO
CEND

上記プログラムを実行すると、以下のように F06に記載されます。
^^^TEST_1
次に、A1=0を0以外の整数に変更して実行した場合、以下のように記載されます。
^^^TEST_26.4 ジャンプ
ジャンプは、プログラム実行順序を飛ばすことが出来ます。
ただし、戻ることは出来ません。

上 記 を 実 行 す る と、F06に 以 下 の よ う に 記 載 さ れます。
^^^A1 =0^^^A1 =
1^^^A1 =
2^^^A1 =
3

7

データの一時保存に関して解析結果や計算結果を、別の解析に渡したい場合な
どでは、一旦データを保存しておき、保存したデータを読み込むことが出来ます。
テキストでの入出力も可能ですが、データ量が大きくなるため、今回はバイナリ形式の OP2ファイルでのデータ入出力を説明します。

JUMP AAAプログラム
LABEL AAA
は可能ですが、LABEL AAA
プログラム
JUMP AAAはできません。
また、LABEL に指定できる文字数は8文字までの半角英数になります。
例8）ジャンプの使用例
SOL 100COMPILE USERDMAPALTER 2
JUMP AAAMESSAGE //ʼ TEST_1 ʻ/$
LABEL AAAMESSAGE //ʼ TEST_2 ʻ/$
CEND

7.1 OP2ファイルの指定
以下の内容を、DAT ファイルの先頭に追加します。
・データ書き出し
ASSIGN OUTPT2=ʼ ファイル名ʼ ,UNIT=41
・データ読込み
ASSIGN INPUTT2=ʼ ファイル名ʼ ,UNIT=41
UNIT=41は、ユニット番号で、この番号を指定する
ことにより、モジュール使用時に、どのファイルを使用して読込み / 書き出しを行うかを決定します。
例10）ファイル書出しの設定例
まず、以下の一文を入力します。
ASSIGN OUTPUT2=ʼ TEST01.op2ʼ ,UNIT=41

上 記 を 実 行 す る と、F06に 以 下 の よ う に 記 載 さ れます。
^^^TEST_2

DAT ファイルに直接書き込む場合には、先頭の行に追加します。Femap の場合、次ページのダイアログのボタンを押し、表示されるダイアログのテキストボックスに入力してください。

TEST_1の メ ッ セ ー ジ は 跳 ば し て、TEST_2の メ ッセージが実行されます。
6.5 繰返し処理指定した条件を満たすまで、繰返し処理を実行します。

計算工学（28-5）

Vol.24, No.4 2019

チュートリアル

Femap with NX Nastran – DMAP 入門（2）

また、実行したフォルダ内に、“TEST01.op2” というバイナリファイルが作成されます。
このファイル内に、A1のマトリクスデータが保存されています。
例11）ファイル読み込みの設定例
例10の “TEST01.op2” を読み込みます。
まず、以下の一文を入力します。
ASSIGN INPUTT2=ʼ TEST01.op2ʼ ,UNIT=41
DAT ファイルに直接書き込む場合には、先頭の行に追加します。Femap の場合、例10のときと同じように設定を行ってください。
次に、DMAP のプログラムを入力します。

次に、DMAP のプログラムを入力します。

SOL 100COMPILE USERDMAPALTER 2MATGEN /A1/5/2/3
MATPRT A1/$OUTPUT2 A1///41/$
CEND

SOL 100COMPILE USERDMAPALTER 2
INPUTT2 /A1,,,,//41/$
MATPRT A1/$
CEND

モジュール OUTPUT2を使用して、指定したマトリクスのデータ（A1）を、ASSIGN の UNIT の ID=41で指定したファイル内に保存します。
今回の MATGEN では、行数3、列数2の長方形マトリクスに対して、ランダムに数字を割り当てる設定を使用しています。
実行すると、A1の値が F06に以下のように記載されますが、数値は実行するたびに切り替わりますので、同じ数値にはなりません。

計算工学

モジュールINPUTT2を使用して、ASSIGNのUNITのID=41で指定したOP2ファイル内からA1に読み込みます。
実行すると、先ほどと同じマトリクスの内容が F06に記載されています。
ここまでで、基本的な DMAP プログラムの説明は終了となります。
次回は、具体的な例を交えて、プログラムの作成／修正を行います。

（28-6）

Vol.24, No.4 2019