LiveLink™ for MATLAB® 将 COMSOL Multiphysics® 与 MATLAB 脚本环境联系起来
重点参考官方教程,路径在:xx\COMSOL5.6\doc\pdf\LiveLink_for_MATLAB
去除冗余信息,以下提供常用命令:
1. 模型对象的创建、删除、列表等
这里面关键的是mphdoc命令,用于打开手册的某个章节,例如mphdoc(model)是打开模型相关的部分,如下图所示:
%% 模型对象的创建、删除等
clear;clc;
import com.comsol.model.*
import com.comsol.model.util.*
model = ModelUtil.create('Model1'); % 创建一个模型对象Model1
% mphdoc(model) % 打开手册文档
mphtags -show % 显示使用 mphlaunch 前已加载模型的列表。
ModelUtil.create('Model2'); % 创建一个模型对象Model2
mphtags -show
ModelUtil.remove('Model2'); % 移除Model2
mphtags -show
% ModelUtil.clear % 删除所有模型
mphlaunch('Model1'); % 加载模型,多个模型必须指定一个
model = ModelUtil.model('Model1'); % 模型对象,接下来即可对模型进行修改
mphsave(model,'Test.mph'); % 保存模型
2. 修改某个/某些模型参数、重新运行,得到结果
%% 已有模型的修改
clear;clc;
model = mphopen('busbar'); % load mph model
mphnavigator; % model tree,用于获取模型对象信息,非常有用
subplot(1,2,1)
mphplot(model,'pg4','rangenum',1); % plot model results
model.param.set('L','18[cm]'); % modify the length,L是COMSOL中的一个全局变量
model.sol('sol1').run; % run to solve the model
subplot(1,2,2)
mphplot(model,'pg4','rangenum',1); % replot
%% 批量修改参数
filepath = pwd;
filename = fullfile(filepath,'results.txt'); % 结果输出路径
fid=fopen(filename,'wt');
fprintf(fid,'*** run parametric study ***\n');
fprintf(fid,'L[m] | tbb[m] | Vtot[V] | ');
fprintf(fid,'MaxT[K] | TotQ[W] | Current[A]\n');
model.hist.disable; % 禁用模型历史,每次都是新模型
for L = [9e-2 15e-2]
model.param.set('L',L); % 设置L
for tbb = [5e-3 10e-3]
model.param.set('tbb',tbb); % 设置tbb
for Vtot = [20e-3 40e-3]
model.param.set('Vtot',Vtot); % 设置Vtot
fprintf(fid,[num2str(L),' | ',...
num2str(tbb),' | ',...
num2str(Vtot),' | ']);
model.sol('sol1').run; % 求解
MaxT = mphmax(model,'T',3,'selection',1); % 获取温度最大值
TotQ = mphint2(model,'ht.Qtot',3,'selection',1); % 获取总热流量
Current = mphint2(model,'ec.normJ','surface','selection',43); % 获取电流密度
fprintf(fid,[num2str(MaxT),' | ',...
num2str(TotQ), ' | ',...
num2str(Current),' \n']);
modelName = fullfile(filepath,...
['busbar_L=',num2str(L),...
'_tbb=',num2str(tbb),...
'_Vtot=',num2str(Vtot),'.mph']);
mphsave(model,modelName); % 保存模型
end
end
end
fclose(fid);