サブルーチンの構築

Visual Fortranを使用したFortranユーザーサブルーチンの構築

Visual Fortranを使用してFortranユーザーサブルーチンを構築するには、以下の手順を実行します。

  1. <install-path>\hwsolvers\motionsolve\usersub\f_projectで、ms_fsubdll.vfprojをダブルクリックします。
    Microsoft Visual Studioのインストレーションに基づき、プロジェクトは自動的に互換バージョンに変換される場合があります。
    注: このディレクトリには、MotionSolveによってコールできるすべてのFortranサブルーチンのリストが含まれます。必要のないものは、プロジェクトから削除して構いません。
  2. Fortranサブルーチンを編集します。
  3. 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++ユーザーサブルーチンを構築するには、以下の手順を実行します。

  1. <install-path>\hwsolvers\motionsolve\usersub\c_projectで、ms_csubdll.vfprojをダブルクリックします。
    Microsoft Visual Studioのインストレーションに基づき、プロジェクトは自動的に互換バージョンに変換される場合があります。
    注: このディレクトリには、MotionSolveによってコールできるすべてのC/C++サブルーチンのリストが含まれます。必要のないものは、プロジェクトから削除して構いません。
  2. C/C++サブルーチンを編集します。
  3. 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でユーザーサブルーチンを構築できます。

  1. シェルウィンドウで、上記のパスに進みます。Makefileファイルを探します。
  2. <install-path>\hwsolvers\motionsolve\usersub\f_srcまたはFortran<install-path>\hwsolvers\motionsolve\usersub\c_src内のまたはC/C++ソースコードに変更を加えます。
  3. 次のいずれかを選択します:
    • 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をご参照ください。