构建用户库

要使用求解器 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)”
  • “常规”>“字符集”设置为“使用 Unicode 字符集”
  • C/C++ >“代码生成”>“运行时库”设置为“多线程(/MT)”
  • “链接器”>“高级”>“目标计算机”设置为“MachineX64 (/MACHINE:X64)”

在 Linux 上构建用户库

在 Linux 上,将库构建为 64 位 ELF 共享对象 (.so)。data/solverapi 目录包含示例、源代码和 makefile。使用类似如下的命令编译这些示例:

make -f Makefile_Example1

生成的共享库必须称为 MoldflowUserFunctions.so(带大写字母),且必须复制(由具有写入权限的用户)到安装的 lib 目录,在 Workstation 安装中通常为 /opt/Autodesk/moldflow/20xx/lib。此库将仅在您在高级求解器参数中启用了用户库后打开。

开发建议

SolverUserHb3dViscosity 函数在一次分析中可能会被调用数百万次。它们必须是线程安全的,因此访问全局状态时务必小心。由于 3D 流动求解器的性质,在某个时间段内可能不按时间顺序调用这些函数,因此请勿假设时间单调递增。

如果从多线程代码(包含 SolverUserHb3dViscosity 函数)中调用 SolverUtilityHb3dFail 函数,该求解器不会立即退出。它将继续运行,直至当前时间段结束。此项保证允许您的代码访问知识中的可被适当释放的资源。