COMSOL调用外部库函数

这里只是简单翻译一下官方文档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)
最后确定绘图的上下限就能绘制图像了。

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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值