サブルーチンの構築
Visual Fortranを使用したFortranユーザーサブルーチンの構築
Visual Fortranを使用してFortranユーザーサブルーチンを構築するには、以下の手順を実行します。
-
<install-path>\hwsolvers\motionsolve\usersub\f_projectで、ms_fsubdll.vfprojをダブルクリックします。
Microsoft Visual Studioのインストレーションに基づき、プロジェクトは自動的に互換バージョンに変換される場合があります。注: このディレクトリには、MotionSolveによってコールできるすべてのFortranサブルーチンのリストが含まれます。必要のないものは、プロジェクトから削除して構いません。
- Fortranサブルーチンを編集します。
-
BuildメニューからBuildを選択します。
サブルーチンがコンパイルされてms_fsubdll.dllとして構築され、構築設定に応じて<install-path>\hwsolvers\motionsolve\usersub\f_project\x64\Releaseまたは<install-path>\hwsolvers\motionsolve\usersub\f_project\x64\Debugのいずれかのフォルダに配置されます。
Visual C/C++を使用したC/C++ユーザーサブルーチンの構築
Visual C/C++を使用してC/C++ユーザーサブルーチンを構築するには、以下の手順を実行します。
-
<install-path>\hwsolvers\motionsolve\usersub\c_projectで、ms_csubdll.vfprojをダブルクリックします。
Microsoft Visual Studioのインストレーションに基づき、プロジェクトは自動的に互換バージョンに変換される場合があります。注: このディレクトリには、MotionSolveによってコールできるすべてのC/C++サブルーチンのリストが含まれます。必要のないものは、プロジェクトから削除して構いません。
- C/C++サブルーチンを編集します。
-
BuildメニューからBuildを選択します。
サブルーチンがコンパイルされてms_csubdll.dllとして構築され、構築設定に応じて<install-path>\hwsolvers\motionsolve\usersub\c_project\x64\Releaseまたは<install-path>\hwsolvers\motionsolve\usersub\c_project\x64\Debugのいずれかのフォルダに配置されます。
Linuxにおけるサブルーチンの構築
インストール環境の一部として<install-path>\hwsolvers\motionsolve\usersub\Makefileに用意されているMakeFileを使用して、Linuxでユーザーサブルーチンを構築できます。
- シェルウィンドウで、上記のパスに進みます。Makefileファイルを探します。
- <install-path>\hwsolvers\motionsolve\usersub\f_srcまたはFortran<install-path>\hwsolvers\motionsolve\usersub\c_src内のまたはC/C++ソースコードに変更を加えます。
-
次のいずれかを選択します:
- C/C++ソースコードの共有オブジェクトをコンパイル、リンクするには、"make csub=1"を入力します。
- Fortranソースコードの共有オブジェクトをコンパイル、リンクするには、"make fsub=1"を入力します。
このコマンドは、exec\Linux_g64\usercsub.soまたはexec\Linux_g64\userfsub.soという名のフォルダ内に共有オブジェクトを生成します。下の一覧は、Makefileで使用可能なその他のオプションをリストしています:- make help
- Makefileで使用可能な異なるオプション群について、ヘルプテキストを出力
- make csub=1
- <install-path>\hwsolvers\motionsolve\usersub\c_srcにある全てのC/C++ソースファイルをコンパイルし、リンク
- make fsub=1
- <install-path>\hwsolvers\motionsolve\usersub\f_srcにあるすべてのFortranソースファイルをコンパイルしてリンクします。
- make clean
- 現在のプラットフォームについてのみ、オブジェクトファイルと共有ライブラリをクリーン
- make realclean
- すべてのプラットフォームについて、オブジェクトファイルと共有ライブラリをクリーン
FortranまたはC/C++サブルーチンを編集する際、引数の割り当て、変数宣言およびユーティリティ関数へのコールに関して一定のガイドラインに従う必要があります。
ユーザー定義のサブルーチンは、入力および出力引数を含みます。通常、出力引数はルーチン内で実行された計算の結果であり、一方、入力引数はマルチボディモデル(およびそのソルバー表現であるMotionSolve XMLファイル)とルーチン自体との間のコミュニケーションを提供します。
ユーザーは、入力引数としてパラメータを使用し、サブルーチンをより汎用化することができます。すなわち、ハードコーディングされたエンティティIDを使わず、代わりにルーチンへの入力パラメータとしてそれらを使用します。
自身のサブルーチンをMotionSolveと効果的に連動させるには、サブルーチンテンプレートに提供されているガイドラインに従って、入力および出力変数を正確に宣言する必要があります。すなわち、サブルーチン宣言内で変数が既に直接宣言されているルーチンテンプレートを使用します(C/C++の場合):void STDCALL REQSUB(int *id, double *time, double *par, int *npar, int *iflag, double *results)
または、サブルーチン宣言のすぐ後ろで次のように宣言します(Fortranの場合)。SUBROUTINE REQSUB (ID, TIME, PAR, NPAR, IFLAG, RESULTS) DOUBLE PRECISION STATES(6) INTEGER ITYPE, IPAR(10), NSTATES LOGICAL ERRFLG
サブルーチンテンプレートに加え、ルーチンからコールする必要がある場合、MotionSolveはユーティリティサブルーチンも提供しています。 これらのユーティリティサブルーチンは、ユーザーのマルチボディ機構システムの各種エンティティの変位、速度、加速度、荷重といったシステムの状態を提供し、システムの状態に基づいてサブルーチンの出力値が適切に定義、計算されることを可能とします。
使用可能なユーティリティ関数の詳細およびユーザーのサブルーチンからそれらをコールする方法については、RADIOSS, MotionSolve, and OptiStructオンラインヘルプのReference Guide内、Utility Subroutinesをご参照ください。