CAEの自動化は、開発チームの生産性向上とデータ処理の効率化を実現する手段として、近年注目を集めています。MASTA 10から導入されたスクリプト機能により、ソフトウェア内の様々なプロセスを自動化するスクリプトの作成が可能になりました。 

SMT Japanでは、MASTAのモデル情報を粒子法CFDソフトウェアParticleworksに渡すためのスクリプトの構築を支援しました。 ここでは、このスクリプトを開発する過程で直面した重要なポイントについて説明します。 同じようなプロジェクトに携わる方々にとって有益な情報となり、MASTAのスクリプト機能の魅力を示すことができれば幸いです。

図1: MASTAからParticleworksへのデータ転送コンセプト

このスクリプトを利用することで、既にモデルがMASTAにある場合、新たにモデルをゼロから作成する必要がなくなります。各MASTA部品に対して、Particleworksで必要なモデルファイル(キーフレームデータとSTLファイル)を生成します。キーフレームデータには各部品の回転に関する情報が、STLファイルには部品の形状データが含まれます。 以下では、このスクリプトの詳細について説明します。

図2: Particleworksに必要なモデルデータの詳細

Modelling Data Export

図2に示すように、各部品の回転挙動を設定するにはCSVファイルが必要です。各CSVファイルには、部品の回転軸、位置、回転速度の3つの情報が必要です。最初の2つはMASTAのDesign モードでのモデル作成で入力できます。回転速度はLoad Caseの設定とPower Flow解析の実行後に取得されます。部品ごとにCSVファイルの作成が必要なため、手動での作成作業は非現実的です。この作成プロセスを自動化する方法を紹介します。

 

このプロセスは以下の通りです:   

① MASTA起動 > MASTAファイルを開く > Power Flowを実行 > データを抽出 

図3: モデルデータ スクリプト (パート 1) 

上に示すスクリプトでは、緑色のテキストはコメントを示し、実行されません。

2行目では、mastapyパッケージが初期化されます。次に、5行目でMASTAモデルのパスを定義します。6行目で「my_design」という名前で読み込まれます。最初のLoad Caseが選択され(インデックスは0から始まることに注意)、12行目でPower Flow解析が実行されます。13行目以降、モデル内のすべてのギヤをループ処理し、Power Flow解析結果を「gear_result」に格納します。

次に、rpm単位の「rotation_speed」が計算され、16行目のコードで出力結果が表示されます。 

図4: モデルデータ スクリプト (パート 1) 結果 

意図したとおり、スクリプトは最初のロードケースに対して、ギヤの名称とそれに対応する回転速度を出力します。

図5: より多くの結果を含むモデルデータ スクリプト

図5では、ギヤの位置と方向を出力するコマンドを追加しました。

forループ内(13行目から)では、MASTAモデル内の各ギヤに関する情報を出力します(17~21行目)。Particleworksへの出力例では、コンソールに値を表示するのではなく、直接CSVファイルを作成します。

CAD Export

次に、CADデータの出力に話を移します。

モデルデータの出力と同様に、forループを用いてCADデータの出力処理を行います。

図6: CADデータ 出力コード (パート 1) 

図6は、ギヤのSTLファイルをエクスポートするサンプルスクリプトを示しています。これはMASTAモジュール「Basic CAD Export (ME101)」の機能を利用しています。特に「draw_gear_teeth」オプションに注意してください。これが「True」に設定されていない場合、ギヤ歯は生成されず、滑らか表面となります。

図7はCADデータの出力スクリプトの結果を示しています。draw_gear_teethオプションを有効にしたため、ギヤの形状は正確に生成されています。しかし、すべてのギヤが原点に配置されていることがわかります。   

幸いなことに、PythonにはSTLファイルの操作を支援するパッケージが存在します。今回は「stl」というパッケージを使用します。

図7: CADデータ 出力コード 結果 (パート 1) 

図8: CADデータ 出力コード (パート 2) 

図8は図6から修正したCADデータ出力コードを示します。最初にインポートするstlパッケージを使用しています。15行目でMASTAモデルからギヤの座標位置を取得し、19行目で平行移動を実行します。17行目ではMASTAモデルの向きから回転行列を生成し、次の行でギヤを回転させる際に使用します。注意すべき点として、平行移動の前に回転させることが必要です。そうしないと、平行移動によるオフセットが生じた状態で部品が回転してしまいます。

17行目で使用されている「rotation_matrix_from_vectors」については、python – Calculate rotation matrix to align two vectors in 3D space? – Stack Overflow を参考にしています。同様の手法を作成したい場合に非常に参考になります。  

図9: CADデータ 出力コード (パート 2) 結果 

Conclusion

この記事を通して、MASTA APIを使用してMASTAからデータを抽出する方法について有益な情報を提供できたと願っています。

このプロセスには、解析の実行とモデル作成に必要なデータの抽出が含まれています。さらに、CADデータの出力では、Pythonのサードパーティ・パッケージを用いてCADデータを修正する方法を紹介しました。 モデル作成プロセスの自動化により、時間を節約できるだけでなく、手作業で起こりうるミスを回避することも可能になります。

このスクリプトはMASTAでの自動化がもたらすメリットを具体的に示しています。 MASTAでは Python をサポートしており、他のプログラミング言語と比べて構文が読みやすく、初めてコーディングする方にもわかりやすいものになっています。

Thank You For Reading

このブログでは、MASTAのスクリプト機能についてご紹介しました。詳しい情報やデモにご興味がございましたら、お気軽にお問い合わせください。

著者について

Kevin Chan

アーキテクトエンジニア

2022年にSMTに入社する前は4年間衝突安全CAEエンジニアとして勤務し、マルチフィジックスシミュレーションソフトウェアの使用および後処理ツールの開発において豊富な経験を有しています。

アーキテクトエンジニアとしてSMT Japanチームと連携し、特にスクリプティング、最適化、DRIVAに関連するトピックにおいて、お客様がMASTAをより深く理解できるよう支援しています。