MV-7001:MotionSolveでのユーザーサブルーチンの構築

本チュートリアルでは、MotionSolveユーザーサブルーチンのコンパイルと構築方法について学習します。

ユーザーサブルーチンは、C/C++またはFORTRANソースコード、C/C++またはFORTRANオブジェクトファイル、またはこれらの組み合せとして実装されます。

利便性を考慮して、MotionSolveには、ユーザーによるサブルーチンの構築を可能とするWindows用およびLinux用のサブルーチン構築ツールが含まれています。このサブルーチンの使用にプログラミングの知識は必要ありません。

また、Windows上では、Microsoft® Visual Studio®などの統合開発環境でユーザーサブルーチンを構築することもできます。これについては、本チュートリアル内で説明しています。
表 1. MotionSolveユーザーサブルーチンDLLのコンパイルおよび構築のための最小ソフトウェア要件
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互換の共有ライブラリを構築するには、以下の手順に従ってください。

  1. Start > Altair <version number> > MotionSolve Subroutine Builderをクリックし、Windowsで構築ツールを起動します。
    MotionSolve Subroutine Builderダイアログが表示されます。


    図 1.
  2. Linuxで構築ツールを起動するには、<altair_root>/altair/scripts/に進んで次のコマンドを実行します:
    ./motionsolve_subroutine_builder
    GUIが表示されます:


    図 2.

ソースコードまたはオブジェクトファイルの指定

次のステップは、共有ライブラリの構築に使用するソースコードまたはオブジェクトファイルの指定です。下記が有効なソースファイルの種類で、共有ライブラリの構築に使用できます:
  • C++ソースコード(*.c, *.cpp, *.cxx
  • FORTRANソースコード(*.f, *.f90
  • FORTRANまたはC/C++のオブジェクトファイル(Windowsでは*.objLinuxでは*.o
  • 上記の組み合わせ
    注: 本セクションの残りの部分で、Windowsでの構築ツールの使用法を説明します。Linuxにおけるツールの使用手順も同等です。
    重要: ソースコードまたはオブジェクトファイル群はすべて、同じディレクトリ内に格納されている必要があります。このディレクトリについて、ディスクへの書き込み権限が必要です。このディレクトリの書き込み権限をお持ちでない場合は、書き込み権限がある位置にソースコードをコピーしてください。

    また、ソース / オブジェクトコードがディスク上の別のフォルダ内にある場合は、全てのソース / オブジェクトコード、および関連するファイル群(例えばヘッダーなど)を1つの共通ディレクトリにコピーしてください。これを作業ディレクトリとして以降の手順で使用します。

  1. ソース / オブジェクトファイルを指定するには、Source File(s)欄の横にある をクリックします。


    図 3.
  2. 作業ディレクトリをオープンし、必要なソースファイルを選択します。Ctrlボタンを押しながらファイル名をクリック、またはクリックしてマウスポインターをドラッグすることにより、複数のファイルを選択することが可能です。
  3. Openをクリックして、これらのファイルを選択します。


    図 4.

出力ディレクトリの指定

次に、共有ライブラリを構築する出力ディレクトリを指定します。このディレクトリについても、書き込み権限が必要です。

  1. Output Nameテキストボックスの横にあるOpen をクリックします。


    図 5.
  2. 共有ライブラリを構築する出力ディレクトリをオープンします。Select Folderをクリックし、現在のフォルダを出力ディレクトリとして選択します。
  3. 共有ライブラリを構築する前に、共有ライブラリの名称を指定する必要があります。このためには単に、Output Nameテキスト欄に名称(拡張子なし)を入力します。
    注: 共有ライブラリ名には、英数字(A-Z、a-z、0-9)とアンダースコア(“_”)のみが含まれるようにしてください。


    図 6.

共有ライブラリの構築

  1. 共有ライブラリを構築するには、Buildをクリックします。


    図 7.
  2. Windowsプラットフォームで、ユーザーのコンピューターに複数のコンパイラーがインストールされている場合は、共有ライブラリの構築にどのコンパイラーを使用するか選択できます。


    図 8.
    ソースファイルが正常に構築されると、次のようなダイアログが表示されます:


    図 9.

    このツールにより作業ディレクトリ(この場合、C:\Test)に構築された共有ライブラリが確認できます。このライブラリを、MotionSolveシミュレーションに使用することが可能です。

    またこのツールによって、共有ライブラリの構築中に、テンポラリディレクトリが作業ディレクトリ内に作成されます。テンポラリディレクトリのコンテンツは、デバッグおよび情報収集の目的に使用できます。

    注: 作業ディレクトリ内に作成されるテンポラリディレクトリには、次のような有益な情報が含まれます:
    • build.bat: 共有ライブラリの構築に使用されるコンパイラーおよびリンカーを含むバッチファイル
    • build_output.log: コンパイラーおよびリンカーからのメッセージを含むログファイル。このファイルのコンテンツは、失敗に終わった構築をデバッグする際に役立ちます。

      成功裏に構築された場合、このディレクトリには、コンパイルされたオブジェクト、リンクされたライブラリおよびその他の一時ファイル群が含まれます。C/C++のみのソースファイルまたはオブジェクトファイルを指定した場合、このツールにより、Microsoft® Visual Studio®ソリューションファイルもこのディレクトリに作成されます。

    ただし、構築が失敗に終わった場合は、次のようなダイアログが表示されます:


    図 10.
  3. 構築の失敗の原因を調べるには、このダイアログに示された場所にあるbuild_output.logファイルをチェックします。このファイルは、コンパイラー / リンク時のエラーやワーニングを含み、ソースコードのデバッグに役立つことがあります。
  4. ツールの使用を終えたら、Quitをクリックして終了します。終了する前に共有ライブラリを構築している場合、ツールにより生成された一時フォルダを削除するかどうかを確認されます。

よくある質問

このツールでは、FortranとC/C++両方のソースコードが指定されている際でも、共有ライブラリを構築できますか?

はい。混在したソースコードおよびオブジェクトファイルを扱うことができます。

このツールは、どのプラットフォーム用のライブラリを構築しますか?

サポートされているプラットフォームは、64-bit Windowsおよび64-bit Linuxです。

私の共有ライブラリは、デバッグまたはリリースバージョンですか?

生成される共有ライブラリは、リリースバージョンライブラリです。

C/C++/Fortranコードのシンタックスのサンプルテンプレートはどこから入手できますか?

サンプルユーザーサブルーチンコードは、HyperWorksインストレーションの下記の場所にあります:
  • C/C++ ソースコード:<install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_src
  • Fortranソースコード:<install>\Altair\<version>\hwsolvers\motionsolve\usersub\f_src
注: ソースコードに定義されている関数をMotionSolveで使用させるには、それらの関数をWindowsプラットフォーム上にエクスポートする必要があります(Linux上では、すべての関数は自動的にエクスポートされます)。C/C++およびFortran用のこのためのシンタックスを以下に示します。
C/C++
ヘッダーファイルmsolvsub_c_include.h<install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_src\includeに存在)をコードでインクルードします。関数をエクスポートするには、キーワードCLINKAGEDLLFUNCおよび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インストレーションディレクトリへの書き込み権限があることが必要です。

  1. Microsoft Visual Studio 2005を開きます(ExpressおよびProfessional Editionsが機能します)。
  2. FileメニューからOpen > Project/Solutionを選択します。
  3. <install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_projectに進み、ファイルms_csubdll.vcprojを選んでOpenをクリックします。
    注: Visual Studio 2005よりも新しいバージョンをご使用の場合、プロジェクトファイルを変換するようプロンプトが出されます。変換は、デフォルトのオプションで進めてください。変換が完了すると、新規のプロジェクトファイルが作業領域に読み込まれます。
    Solution Explorerに、ソリューションの一部であるCPPサブルーチンのリストが表示されます。.
  4. 修正 / 確認を行いたい任意のCPPファイルをダブルクリックし、必要な変更を加えます。
  5. Saveをクリックし、ファイルに加えられた変更を保存します。
  6. 共有ライブラリのコンフィギュレーションを選択します。


    図 11.

    共有ライブラリのターゲットタイプがHyperWorksインストレーションと一致することを確認してください。例えば、HyperWorksの64-bitインストレーションには、x64を選択します。

  7. Build > Build Solutionを選択し、DLLを構築します。ソリューションを保存するようプロンプトが出されます。希望するディレクトリを選んでソリューションを保存します。
    構築が正常に終了すると、Visual Studioは次のようなメッセージを表示します:


    図 12.
    DLL ms_csubdll.dllは、<install>\Altair\<version>\hwsolvers\motionsolve\usersub\c_project\<platform>\<config>\ms_csubdll.dllに置かれます。

Microsoft® Visual Studio®を用いたFORTRANユーザーサブルーチンDLLの構築

MotionSolve用のFORTRANユーザーサブルーチンDLLを構築するには、同じ手順を繰り返します。唯一の違いは、Visual Studioで開かれるプロジェクトファイルがms_fsubdll.vfprojである点です。その他の手順はすべて同じです。