femap with nx nastran – dmap入門 2...計算工学 (28-2) チュートリアル femap with nx...

6
28計算工学 チュートリアル 3992 Femap with NX Nastran – DMAP 入門 2桑原 雅治 著名な解析ソフトウェアNX Nastran のカスタマイズプログラムのDMAP に関しての使用方 法を解説していきます。全3回を予定しており、主にプリポスト一体型のFemap with NX Nastran を用いた説明を行っていきます。2回目の今回は、プログラムに必要な基本的な関 数、構文の使用方法の説明を行います。 1 はじめに 前回は、導入編として、Nastran になじみがない方で もご理解いただけるように、以下の説明を行いました。 -Nastran の解析ファイルの内容説明 -DIAG による SOL ごとの解析プログラムの確認 -DMAP を使用する手順 今回は、実際にプログラムを行うために必要な関 数、変数、条件分岐、データの保存 / 読込みに関しての 使用方法を、簡単な例を交えて説明します。 2 Femap でのモデル作成 今回、説明に使用している 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を設定したモデルになります。 続きは Web 日本計算工学会誌「計算工学(Vol.24, No.4)」 HP: http://www.jsces.org/activity/journal/ 筆者紹介 くわばら まさはる (株)計 算 力 学 研 究 セ ン タ ー 所 属。Femap with NX Nastran SE として20年勤務。受託解析、製品サ ポートを担当。

Upload: others

Post on 10-Mar-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

(28) 計算工学

チュートリアル

3992

Femap with NX Nastran – DMAP入門(2)桑原 雅治

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

1 はじめに前回は、導入編として、Nastranになじみがない方でもご理解いただけるように、以下の説明を行いました。

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

2 Femapでのモデル作成今回、説明に使用している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を設定したモデルになります。

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

筆者紹介

くわばら まさはる(株)計算力学研究センター所属。Femap with NX NastranのSEとして20年勤務。受託解析、製品サポートを担当。

(28-2)計算工学

Femap with NX Nastran – DMAP入門(2)チュートリアル

Vol.24, No.4 2019

3 モジュールに関して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文字以内となっています。

3.1.2 入力データモジュールを使用する際に必要な入力データを設定します。モジュール名と、最初の入力データ名間は1つ以上のスペースを空けてください。必要な入力データの個数は、各種モジュールごとで異なります。異なるデータを入力する際には、“,”で区切ります。入力データの終了部分は“/”を入力します。

3.1.3 出力データモジュールを使用した際の結果を入力するデータ名を設定します。入力データ終了の“/”の後から記入します。スペースを空ける必要はありませんが、空けてもいいですし、視認性を良くする為、改行してから記入してもかまいません。異なるデータを入力する際には、“,”で区切ります。出力データの終了部分は“/”を入力します。

3.1.4 オプションモジュールを使用する際に必要なオプションを設定します。出力データ終了の“/”の後から記入します。スペースを空ける必要はありませんが、空けてもいいですし、視認性を良くする為、改行してから記入してもかまいません。

異なるデータを入力する際には、“/”で区切ります。例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 2MATGEN /AAA/1/2/$MATGEN /BBB/1/2/$ADD AAA,BBB/CCC/1.0/2.0/0 $MATPRT CCC/$CENDBEGIN BULKENDDATA上記は、SOL 100を使用しています。Femapでは、以下のダイアログの赤枠部分に“100”を設定します。

設定する際の解析タイプは線形静解析で問題ありません。〔解析タイプ /番号〕に“100” が設定された時点で、SOL100として解析が実行されます。

MARGENは、単純な行列を作成するモジュールで、AAA,BBB共に2×2の単位行列を作成しています。結果のCCCは、AAAの単位行列と係数2.0を掛けた

BBBの対角行列を足して、3の対角行列として出力されます。

F06ファイルを確認すると、以下のように記載されます。

(28-3) Vol.24, No.4 2019

Femap with NX Nastran – DMAP入門(2)チュートリアル

計算工学

※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 変数タイプ変数タイプ 記号ブーリアン LOGICAL整数 I文字列 CHAR(文字数)単精度実数 RS倍精度実数 RD単精度複素数 CS倍精度複素数 CD

例4)変数の宣言例整数の変数A1を宣言する場合TYPE PARM,,I,,A1 $

一度に複数の変数を宣言する場合TYPE PARM,,I,,A1,B1,C1 $

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

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*B1C2=A1/B1MESSAGE //’C1 = ‘/C1/$MESSAGE //’C2 = ‘/C2/$CEND

以上の例を実行すると、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 文字列比較

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

(28-4)計算工学

Femap with NX Nastran – DMAP入門(2)チュートリアル

Vol.24, No.4 2019

5 データブロックに関してDMAPで使用するデータの形式には、大まかに以下の種類が存在します。

-変数-マトリクス-テーブル変数は、通常のプログラムと同様に、指定した変数名に単一の数字、文字を入力するデータになります。変数の内容を表示する際には、“MESSAGE”モジュールを使用します。マトリクスは、行列のデータです。内容を表示する際には、“MATPRT”のモジュールを使用します。テーブルは、決まったフォーマットを持つ文字と数値の組み合わせで、主に表形式の表現になります。内容を表示する際には、“TABPT”モジュールを使用します。変数は、他のプログラムと同様に、変数の型などを設定する必要があります。マトリクスを新規に作成 /使用する場合には、すでに使用されている名前を使用しない限りには、変数のように宣言する必要はありません。例2)のAAA、BBBのように、ただタイトルを設定するだけで、マトリクスデータとして使用できます。テーブルデータは、NDDL(“NASTRAN Data Definition

Language”)で、内部のフォーマットが予め設定されている必要があるため、すでに使用されている変数名以外を自分で設定して使用することは出来ません。今回の説明では、NDDLの説明までは行いませんので、テーブルデータは使用せずに、マトリクスと変数でのプログラムを説明します。

6 条件分岐に関して6.1 条件分岐の種類

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

表3 条件分岐条件分岐 記号単一真偽 IF(条件)・・・$複数分岐 IF(条件) THEN

内容ELSE IF(条件) THEN内容ELSE $内容ENDIF $

ジャンプ JUMP ラベルLABEL ラベル

繰返し処理 DO WHILE(条件) $内容ENDDO $

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

表4 演算子演算子 内容= 等号<> 不等号> 大なり小< 小なり大<= 右辺以下=> 左辺以下

他にも論理演算子(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-5) Vol.24, No.4 2019

Femap with NX Nastran – DMAP入門(2)チュートリアル

計算工学

MESSAGE //’TEST_2 ‘/$ENDIFCEND

上記プログラムを実行すると、以下のようにF06に記載されます。

^^^TEST_1

次に、A1=0を0以外の整数に変更して実行した場合、以下のように記載されます。

^^^TEST_2

6.4 ジャンプジャンプは、プログラム実行順序を飛ばすことが出来ます。ただし、戻ることは出来ません。

JUMP AAAプログラムLABEL AAA

は可能ですが、

LABEL AAAプログラムJUMP AAA

はできません。また、LABELに指定できる文字数は8文字までの半角英数になります。

例8)ジャンプの使用例SOL 100COMPILE USERDMAPALTER 2JUMP AAAMESSAGE //’TEST_1 ‘/$LABEL AAAMESSAGE //’TEST_2 ‘/$CEND

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

^^^TEST_2

TEST_1のメッセージは跳ばして、TEST_2のメッセージが実行されます。

6.5 繰返し処理指定した条件を満たすまで、繰返し処理を実行します。

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

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

^^^A1 = 0 ^^^A1 = 1 ^^^A1 = 2 ^^^A1 = 3

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

7.1 OP2ファイルの指定以下の内容を、DATファイルの先頭に追加します。

・データ書き出しASSIGN OUTPT2=’ファイル名’ ,UNIT=41

・データ読込みASSIGN INPUTT2=’ファイル名’ ,UNIT=41UNIT=41は、ユニット番号で、この番号を指定することにより、モジュール使用時に、どのファイルを使用して読込み /書き出しを行うかを決定します。

例10)ファイル書出しの設定例まず、以下の一文を入力します。

ASSIGN OUTPUT2=’TEST01.op2’ ,UNIT=41

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

(28-6)計算工学

Femap with NX Nastran – DMAP入門(2)チュートリアル

Vol.24, No.4 2019

また、実行したフォルダ内に、“TEST01.op2”というバイナリファイルが作成されます。このファイル内に、A1のマトリクスデータが保存されています。

例11)ファイル読み込みの設定例例10の“TEST01.op2”を読み込みます。まず、以下の一文を入力します。

ASSIGN INPUTT2=’TEST01.op2’ ,UNIT=41

DATファイルに直接書き込む場合には、先頭の行に追加します。Femapの場合、例10のときと同じように設定を行ってください。

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

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

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

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

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

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