如何将COMSOL与MATLAB联合


文章目录

  • 如何将COMSOL与MATLAB联合
  • 前言
  • 一、背景
  • 二、使用步骤
  • 1. 找到 COMSOL Multiphysics 5.5 with MATLAB
  • 2. **双击COMSOL Multiphysics 5.5 with MATLAB**
  • 三、在matlab上控制comsol——示例
  • 有个捷径就是如果不知道想要实现的具体语句是什么的时候,**可以先在comsol实现一遍,然后在另存为.m文件。这样就可以在matlab上打开你另存的文件,找到你想要找的语句指令。**
  • 加快计算速度
  • 结语



前言

网上搜索教程,发现大部分教程讲得比较初略,或者信息比较分散。本着自己踩过坑就不愿意让别人再踩一遍的原则,写下这篇博文。


提示:以下是本篇文章正文内容,下面案例可供参考

一、背景

  • COMSOL 5.5
  • MATLAB 2019a
  • Win 10


二、使用步骤

1. 找到 COMSOL Multiphysics 5.5 with MATLAB

一般安装comsol时matlab已经有了,那默认创建快捷方式时桌面就会有,

但是碰巧的是桌面上没有,可以在按下方操作

comsol python接口包在那个源可以下载_MATLAB


comsol python接口包在那个源可以下载_搜索_02


comsol python接口包在那个源可以下载_MATLAB_03


如果你碰巧装comsol的时候matlab并没有,那么你只需装上matlab之后,在重装上comsol。具体操作如下:

首先确定comsol已关闭,然后

comsol python接口包在那个源可以下载_matlab_04


comsol python接口包在那个源可以下载_另存为_05

comsol python接口包在那个源可以下载_MATLAB_06


选择添加/移除产品和重新安装,然后一路next,不要选择/取消选择任何内容,直到livelink这个界面,选择matlab的安装路径,以我为例就是D:Matlab.。不要把文件夹路径放得过细,comsol会认定为无效路径

comsol python接口包在那个源可以下载_搜索_07

具体操作参考这个网页

2. 双击COMSOL Multiphysics 5.5 with MATLAB

输入USERNAME,这个随便输入。然后创建密码,确认一次密码。这个输入的过程中,由于窗体是黑色的,字也是黑色的,所以你会感觉没有输入,其实是输入了。所以你尽管输入就完事了。

如下示例:

comsol python接口包在那个源可以下载_搜索_08


输入结束后,出现matlab弹窗,之后就可以愉快的使用matlab调用COMSOL了。不说了去肝了!!!

三、在matlab上控制comsol——示例

有个捷径就是如果不知道想要实现的具体语句是什么的时候,可以先在comsol实现一遍,然后在另存为.m文件。这样就可以在matlab上打开你另存的文件,找到你想要找的语句指令。

除此之外,comsol自带的官方文档对comsol with matlab也有基础介绍,大家耐心看吧!
下面列出我这几天摸索出来的作为例子吧!如果对你有帮助的话,那就太好了!


注意:利用matlab控制comsol的前提是你的comsol建模过程完成了且结果可信!

  • 首先将你所在的comsol .mph文件所在的文件夹地址加入matlab搜索路径中
  • 然后就是码代码了,下面是一个例子
model = mphopen('test.mph');
% 前期设置
model.param.set('f',string(f)+'[Hz]');
model.param.set('phi', string(theta_i)+'[deg]');
model.param.set('theta_r', string(theta_r)+'[deg]');
model.param.set('a', string(a)+'[m]');
for ii = 1:length(cond)
    model.param.set('t1',string(t(1,ii))+'[m]');
    model.param.set('t2',string(t(2,ii))+'[m]');
    model.param.set('d1',string(d(1,ii))+'[m]');
    model.param.set('d2',string(d(2,ii))+'[m]');
    model.param.set('dx1',string(dx(1,ii))+'[m]');
    model.param.set('dx2',string(dx(2,ii))+'[m]');
    model.study('std2').run;
    % 结果导出
    model.result.export('plot1').set('plotgroup', 'pg3');
    model.result.export('plot1').set('plot', 'glob1');
    model.result.export('plot1').set('filename',string(ii)+'.txt');
    model.result.export('plot1').run;
    sprintf('已完成:%d',ii/length(cond))
end

有几个值得注意的地方:

参数设置时要加单位的,且是字符串格式
这个例子中结果导出是在提前在comsol设置好的
在结果导出的例子可以参照 https://www.jianshu.com/p/91de8f5f78f8

加快计算速度

以我为例,我需要获得20000左右的结果文件,所以需要简化comsol模型、加快comsol的计算速度。下面是具体操作:

  1. 将最大网格设置为工作波长的1/8
  2. 尽可能的将mph文件的大小降低
  3. 设置单机多核并行计算模式

结语

欢迎大家来评论区讨论,我的水平有限,大家一起共同进步。另外觉得有帮助的,点个赞呗!