COMSOL调用外部库函数

这里只是简单翻译一下官方文档COMSOL_ProgrammingReferenceManual->General Commands->About General Commands->model.func()的内容。
平台介绍:

COMSOL5.3a
win10
TDM_GCC64

全局定义->函数->外部
COMSOL调用外部库函数_第1张图片
英文原文内容如下:
COMSOL调用外部库函数_第2张图片
大体意思是定义三个函数:
(1)int init(const char *str)
(2)int eval(const char *func, int nArgs, const double **inReal, const double **inImag, int blockSize, double *outReal, double *outImag)
(3)const char *getLastError()

具体编写以下代码:

#include 
#include 
#include 
#ifdef _MSC_VER
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
static const char *error = NULL;
EXPORT int init(const char *str) {
return 1;
}
EXPORT const char * getLastError() {
return error;
}
EXPORT int eval(const char *func,
                int nArgs,
                const double **inReal,
                const double **inImag,
                int blockSize,
                double *outReal,
                double *outImag) {
    int i, j;
    if (strcmp("extsinc", func) == 0) {
        if (nArgs != 1) {
            error = "One argument expected";
            return 0;
        }
        for (i = 0; i < blockSize; i++) {
            double x = inReal[0][i];
            outReal[i] = (x == 0) ? 1 : sin(x) / x;
        }
    return 1;
    }
    else {
        error = "Unknown function";
        return 0;
    }
}

我将之保存为myfunc.c,打开cmd或者powershell进入该文件目录下,使用gcc进行编译生成动态链接库文件myfun.dll(前提要gcc的路径已经在环境变量),执行下面命令(不同平台生成不同的库文件,Linux是.so,MAC是.dylib,WIN是.dll):

gcc .\myfun.c -shared -o myfun.dll

然后 在comsol打开
COMSOL调用外部库函数_第3张图片
注意函数名要写成extsinc,因为前面代码中有一处判断:if (strcmp("extsinc", func) == 0)
最后确定绘图的上下限就能绘制图像了。

以上例子完全来自官方,还在研究中。。。

你可能感兴趣的:(电气工程)