Solver API を使用するには、ソルバーを実行するプラットフォーム上のネイティブ共有ライブラリにコンパイルする必要があります。
コンパイラが必要な場合は、Microsoft Visual Studio Express を無料で http://www.visualstudio.com/en-us/downloads からダウンロードできます。
#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 で、64 ビットリリース DLL としてライブラリを構築します。Microsoft Visual Studio 2012 プロジェクトの例、MoldflowUserFunctions_xxx.vcxproj はそのまま直接コンパイルしてインストールすることができます。
生成される DLL は MoldflowUserFunctions.dll という名前にして、mhb3d.exe と同じディレクトリ(通常は C:¥Program Files¥Autodesk¥Moldflow Insight 20xx¥bin)に(管理者が)コピーする必要があります。この DLL は、アドバンス ソルバー パラメータでユーザー ライブラリを有効にした場合にのみ開きます。
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 関数を含む)内から呼び出す場合、ソルバーは即座に終了しません。現在のタイム ステップの最後まで実行され続けます。そのため、リソースが適切に解放されるので、コードを安全にリソースにアクセスさせることができます。