这里只是简单翻译一下官方文档COMSOL_ProgrammingReferenceManual->General Commands->About General Commands->model.func()的内容。
平台介绍:
COMSOL5.3a
win10
TDM_GCC64
全局定义->函数->外部
英文原文内容如下:
大体意思是定义三个函数:
(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 <math.h>
#include <stdlib.h>
#include <string.h>
#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打开
注意函数名要写成extsinc,因为前面代码中有一处判断:if (strcmp("extsinc", func) == 0)
最后确定绘图的上下限就能绘制图像了。
以上例子完全来自官方,还在研究中。。。