要使用求解器 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 目录,在 Workstation 安装中通常为 /opt/Autodesk/moldflow/20xx/lib。此库将仅在您在高级求解器参数中启用了用户库后打开。
SolverUserHb3dViscosity 函数在一次分析中可能会被调用数百万次。它们必须是线程安全的,因此访问全局状态时务必小心。由于 3D 流动求解器的性质,在某个时间段内可能不按时间顺序调用这些函数,因此请勿假设时间单调递增。
如果从多线程代码(包含 SolverUserHb3dViscosity 函数)中调用 SolverUtilityHb3dFail 函数,该求解器不会立即退出。它将继续运行,直至当前时间段结束。此项保证允许您的代码访问知识中的可被适当释放的资源。