ユーザー ライブラリの構築

Solver API を使用するには、ソルバーを実行するプラットフォーム上のネイティブ共有ライブラリにコンパイルする必要があります。

コンパイラが必要な場合は、Microsoft Visual Studio Express を無料で http://www.visualstudio.com/en-us/downloads からダウンロードできます。

使用する関数は、C 名前マングリング規則(extern "C")を適用し、C 呼び出し規約(Windows の場合は __stdcall)を使用する必要があります。 以下のヘッダー ファイル(ViscosityUserFunctions.h としてサンプル プロジェクトで提供)は、良いとりかかりになります。
注: コード例は、インストール フォルダ内にあります。Windows エクスプローラを使用して、インストール先ディレクトリ フォルダ(通常は C:¥Program Files¥Autodesk¥Moldflow Insight 20xx¥data¥solverapi)にナビゲートします。
#ifdef __cplusplus
extern "C" {
#endif

#include <stdlib.h>

#ifdef _WIN32
#define DLLEXPORT __declspec(dllexport)
#define STDCALL __stdcall
#else
#define DLLEXPORT
#define STDCALL
#endif
	// Required functions.
	DLLEXPORT double STDCALL SolverUserHb3dViscosity(double temperature, double shearRate, double pressure);
	// Optional functions.
	DLLEXPORT void STDCALL SolverUserHb3dInitialize();
	DLLEXPORT void STDCALL SolverUserHb3dAnalysisSetup();
	DLLEXPORT void STDCALL SolverUserHb3dTimeStepComplete(double time);
	DLLEXPORT void STDCALL SolverUserHb3dCleanup();
	DLLEXPORT double STDCALL SolverUserHb3dViscosityAtNode(double temperature, double shearRate, double pressure, size_t nodeId);
	DLLEXPORT double STDCALL SolverUserHb3dViscosityAtLaminateOfNode(double temperature, double shearRate, double pressure, size_t nodeId, unsigned int laminateId);

#ifdef __cplusplus
}
#endif

熱可塑性粘度のユーザー ライブラリを有効にした場合は、SolverUserHb3dViscosity 関数を定義する必要があります。 他の関数はオプションです。

Windows でのユーザー ライブラリの構築

Windows で、64 ビットリリース DLL としてライブラリを構築します。Microsoft Visual Studio 2012 プロジェクトの例、MoldflowUserFunctions_xxx.vcxproj はそのまま直接コンパイルしてインストールすることができます。

生成される DLL は MoldflowUserFunctions.dll という名前にして、mhb3d.exe と同じディレクトリ(通常は C:¥Program Files¥Autodesk¥Moldflow Insight 20xx¥bin)に(管理者が)コピーする必要があります。この DLL は、アドバンス ソルバー パラメータでユーザー ライブラリを有効にした場合にのみ開きます。

新しい Visual Studio プロジェクトを作成する場合は、次のオプションが設定されていることを確認します。
  • [一般] > [ターゲット名] = [MoldflowUserFunctions]
  • [一般] > [構成タイプ] = [ダイナミック ライブラリ(.dll)]
  • [一般] > [文字セット] = [ユニコード文字セットを使用]
  • [C/C++] > [コード生成] > [実行時ライブラリ] = [マルチスレッド(/MT)]
  • [リンカー] > [アドバンス] > [目標マシン] = [MachineX64 (/MACHINE:X64)]

Linux でのユーザー ライブラリの構築

Linux では、64 ビット ELF 共有オブジェクト(.so)としてライブラリを構築します。 data/solverapi ディレクトリにはソース コードと makefile のサンプルが含まれています。これらのサンプルを次のようなコマンドを使用してコンパイルします。

make -f Makefile_Example1

生成された共有ライブラリの名前は MoldflowUserFunctions.so (このとおりの大文字で) という名前にして、インストールの lib ディレクトリ(通常はワークステーション インストールの /opt/Autodesk/moldflow/20xx/lib)に(書き込み権限のあるユーザーが)コピーする必要があります。このライブラリは、アドバンス ソルバー パラメータでユーザー ライブラリを有効にした場合にのみ開きます。

開発に関するアドバイス

SolverUserHb3dViscosity 関数は、1 つの解析で数百万回呼び出されることがあります。これらの関数はスレッドセーフである必要があるため、グローバル状態時のアクセスには注意してください。3D フロー ソルバーの性質のため、1 つのタイム ステップ内で時系列で呼び出されることがあるため、時間が単調に増えるものと見なさないでください。

SolverUtilityHb3dFail 関数をマルチスレッド コード(SolverUserHb3dViscosity 関数を含む)内から呼び出す場合、ソルバーは即座に終了しません。現在のタイム ステップの最後まで実行され続けます。そのため、リソースが適切に解放されるので、コードを安全にリソースにアクセスさせることができます。