MV-7001:MotionSolveでのユーザーサブルーチンの構築
本チュートリアルでは、MotionSolveユーザーサブルーチンのコンパイルと構築方法について学習します。
ユーザーサブルーチンは、C/C++またはFORTRANソースコード、C/C++またはFORTRANオブジェクトファイル、またはこれらの組み合せとして実装されます。
利便性を考慮して、MotionSolveには、ユーザーによるサブルーチンの構築を可能とするWindows用およびLinux用のサブルーチン構築ツールが含まれています。このサブルーチンの使用にプログラミングの知識は必要ありません。
Windows | Linux |
---|---|
Microsoft Visual Studio version 2005 - ExpressおよびProfessional | GCC, version 4.1.2 |
Intel Visual FORTRAN Compiler 10 |
MotionSolveサブルーチン構築ツールを用いた共有ライブラリの作成
Altairのサブルーチン構築ツールは、MotionSolveインストレーションの一部としてWindowsおよびLinux用に用意されています。
利用可能なソースコードを使ってMotionSolve互換の共有ライブラリを構築するには、以下の手順に従ってください。
ソースコードまたはオブジェクトファイルの指定
- C++ソースコード(*.c, *.cpp, *.cxx)
- FORTRANソースコード(*.f, *.f90)
- FORTRANまたはC/C++のオブジェクトファイル(Windowsでは*.obj、Linuxでは*.o)
- 上記の組み合わせ注: 本セクションの残りの部分で、Windowsでの構築ツールの使用法を説明します。Linuxにおけるツールの使用手順も同等です。重要: ソースコードまたはオブジェクトファイル群はすべて、同じディレクトリ内に格納されている必要があります。このディレクトリについて、ディスクへの書き込み権限が必要です。このディレクトリの書き込み権限をお持ちでない場合は、書き込み権限がある位置にソースコードをコピーしてください。
また、ソース / オブジェクトコードがディスク上の別のフォルダ内にある場合は、全てのソース / オブジェクトコード、および関連するファイル群(例えばヘッダーなど)を1つの共通ディレクトリにコピーしてください。これを作業ディレクトリとして以降の手順で使用します。
出力ディレクトリの指定
次に、共有ライブラリを構築する出力ディレクトリを指定します。このディレクトリについても、書き込み権限が必要です。
共有ライブラリの構築
よくある質問
このツールでは、FortranとC/C++両方のソースコードが指定されている際でも、共有ライブラリを構築できますか?
はい。混在したソースコードおよびオブジェクトファイルを扱うことができます。
このツールは、どのプラットフォーム用のライブラリを構築しますか?
サポートされているプラットフォームは、64-bit Windowsおよび64-bit Linuxです。
私の共有ライブラリは、デバッグまたはリリースバージョンですか?
生成される共有ライブラリは、リリースバージョンライブラリです。
C/C++/Fortranコードのシンタックスのサンプルテンプレートはどこから入手できますか?
- C/C++ ソースコード:<install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_src
- Fortranソースコード:<install>\Altair\<version>\hwsolvers\motionsolve\usersub\f_src
- C/C++
- ヘッダーファイルmsolvsub_c_include.h (<install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_src\includeに存在)をコードでインクルードします。関数をエクスポートするには、キーワードCLINKAGE、DLLFUNCおよびSTDCALLを使用します。
#include " msolvsub_c_include.h" #include "stdlib.h" CLINKAGE DLLFUNC void STDCALL ARYSUB (int *id, double *time, double *par,int *npar, int *dflag, int *iflag, int *nvalue, double *value) { }
- Fortran
- Fortranシンタックスでは、上記と同じ関数を次のようにエクスポートできます:
SUBROUTINE ARYSUB (ID, TIME, PAR, NPAR, DFLAG, & IFLAG, NVALUE, VALUE) !DEC$ ATTRIBUTES DLLEXPORT :: ARYSUB
ソースファイルを選択する順序は重要ですか?
はい。これはある場合には重要になります。例えば、MODULESを定義するFortranソースコードを構築する際、定義済みモジュールの定義を含んだソースファイルを、それらのモジュールを参照するソースファイルより前に含めたい場合があるでしょう。
サポートされているIntel Fortranコンパイラーがインストールされていますが、Fortranファイルをコンパイルできません。何がいけないのでしょうか?
この構築ツールは、環境変数に依存してIntel Fortranコンパイラーのバージョンとマシン上の位置を検知します。環境変数 IFORT_COMPILERxx(xxはコンパイラーのバージョン - 10、11または12)がシステム上で正しく定義され、インストールされているバージョンを指しているようにします。
Microsoft® Developer Studioを用いた共有ライブラリの構築
下記の手順で共有ライブラリを正常に構築するには、HyperWorksインストレーションディレクトリへの書き込み権限があることが必要です。
Microsoft® Visual Studio®を用いたC++ユーザーサブルーチンDLLの構築
下記の手順で共有ライブラリを正常に構築するには、HyperWorksインストレーションディレクトリへの書き込み権限があることが必要です。
Microsoft® Visual Studio®を用いたFORTRANユーザーサブルーチンDLLの構築
MotionSolve用のFORTRANユーザーサブルーチンDLLを構築するには、同じ手順を繰り返します。唯一の違いは、Visual Studioで開かれるプロジェクトファイルがms_fsubdll.vfprojである点です。その他の手順はすべて同じです。