联合应用COMSOL和matlab
- 格式:pdf
- 大小:728.46 KB
- 文档页数:28
%%%%%%%%%% 用matlab运行comsol例子%%%%%%%%%%clear;disp(datestr(now,31));% 导入文件[filename, pathname]=uigetfile('*.mph','Select the Comsol file');full_filename=[pathname, filename];model=mphload(full_filename);% 改变模型参数my_a=6; %=========== 修改参数处model.param.set('a',my_a);% 重新运行计算model.sol('sol1').run;% 提取点值sx=0; %=========== 修改参数处sy=0; %=========== 修改参数处sz=2; %=========== 修改参数处model.result.dataset.create('cpt11', 'CutPoint3D');model.result.dataset('cpt11').set('pointx', num2str(sx));model.result.dataset('cpt11').set('pointy', num2str(sy));model.result.dataset('cpt11').set('pointz', num2str(sz));model.result.dataset('cpt11').run;my_Bz=mphinterp(model,'mfnc.Bz','dataset','cpt11','unit','G');tmp=(['点坐标:(',num2str(sx),',',num2str(sy),',',num2str(sz),')']); disp(tmp);tmp=(['Bz=',num2str(my_Bz),'Gs']);disp(tmp);% 提取一串点start=-5; %=========== 修改参数处stop=5; %=========== 修改参数处delta=0.1; %=========== 修改参数处sy=0; %=========== 修改参数处sz=2; %=========== 修改参数处tmp=(['range(',num2str(start),',',num2str(delta),',',num2str(stop),')']); model.result.dataset.create('cpt21', 'CutPoint3D');model.result.dataset('cpt21').set('pointx', tmp);model.result.dataset('cpt21').set('pointy', num2str(sy));model.result.dataset('cpt21').set('pointz', num2str(sz));model.result.dataset('cpt21').run;my_Line_Bz=mphinterp(model,'mfnc.Bz','dataset','cpt21','unit','G'); my_Line_Bz=my_Line_Bz';my_Line_Bz=[[start:delta:stop]' my_Line_Bz];% 保存图片figname=([pathname,'model_test_',num2str(my_a),'.jpg']); mphplot(model,'pg2');grid minor;saveas(gcf,figname);% 保存模型modelname=([pathname,'model_test_',num2str(my_a),'.mph']); model.save(modelname);% 结束disp(datestr(now,31));。
1. <target>comsol : 启动COMSOLcomsol server : 启动COMSOL SERVER,用于联用MATLABcomsol client : 启动COMSOL CLIENTcomsol batch : 命令行模式的COMSOL,用于运行一个MPH算例或class文件comsol compile : 编译模型java文件,用于JAVA APIcomsol server matlab : 启动MATLAB并连接到COMSOL SERVER,SSH下个人推荐这种方式,原因自己体会comsol matlab : 启动MATLAB,并设置COMSOL的路径,不灵的(它没把mli下级目录添加进去,因此需要手动设置下)comsol convertpre35a : 转换COMSOL v3.x版本模型,我觉得是生成高版本的MPH或M文件comsol mph : 运行COMSOL并行模式(multiprocessing daemon)2. <options>-h : 屏显HELP<target> -h : 屏显<target>的HELP-32 : 32位模式-64 :64位模式-3drend ogl | sw : OpenGL的3D渲染-np <number> : 启动核数,WIN窗口模式默认启动全部核心,LIN则需要配置-numasets <number> : 非一致性内存访问(NUMA)硬件可以通过将专用内存与CPU 配对来显著提高性能,通常为CPU核sockets数-mpmode throughput | : 并行模式优化COMSOL与其他线程同时运行turnaround | : 并行模式在无其他任务进行时,优化COMSOL进程owner : 并行模式在所有进程中,给予最高级的性能配置-blas {auto}| mkl | :basic linear algebra operations,COMSOL很多计算引擎依赖BLAS acml | path : 使用BLAS库mkl:intel的CPU,acml:AMD SSE2支持的CPU-blaspath <path> :BLAS库路径,与-blas path联用(环境变量为LD_LIBRARY_PATH)-ipv6 : IPV6支持-nn <number> : 节点数-nnhost <number> :每个HOST使用的节点数-mpi {auto} | intel |mpich2 | wccs2003 |whpc2008 | user| path :调用MPI库-mpipath <path> : MPI库路径-mpiroot <path> : MPI库root路径-mpirsh {rsh} | ssh : 在MPD模式下使用rsh或ssh-scalapack {auto} |mpich2 | wccs2003 |whpc2008 | user | path :Scalapcak库-scalapackpath <path> : Scalpack库路径-clusersimple :Simple cluser模式不知是神马-prefsdir <path> : 配置属性路径-tmpdir <path> : 临时文件路径-version : 屏显版本号-ckl : 使用class-kit 许可-forcegcc : 强制加载GCC库,通常是在联用MATLAB,而函数无法返回MATLAB时使用-forcecomsolgcc :与COMSOL强制加载GCC库,COMSOL通常默认使用系统GCC,当在无法正常启动COMSOL时,尝试使用该命令3. COMSOL SERVER 命令通用格式comsol [<options>] server [<target arguments>]comsol target arguments-user <user> : login user name-port <port> : TCP/IP port to listen-passwd <reset/nostore> : 当需要提供新密码时使用,如果不需要存储新密码联用nostore -login <{info}/force/never> : 查询登录信息-multi on | {off} : 允许client重复链接-silent : 不接受标准输入-graphics : 启动COMSOL的图形库,不在COMSOL的GUI下,但是是COMSOL 的绘图模式4. COMSOL CLIENT 命令通用格式comsol [<options>] client [<target arguments>]-port <port> : 指定连接的端口-server <server name> :连接的server名5. COMSOL BATCH 命令COMSOL的无GUI模式,可以运行MPH算例及模型JAVA文件,模型JAVA文件运行前需要编译。
CwM我用的确实不多,但用好了事半功倍。
本文只是个引子,仅作背景介绍。
很多筒子可能会抱怨,撒装的是低版本的Comsol,别人给汝的模型确实高版本的,那么正常途径撒肯定打不开这个文件。
其实,Comsol可以另存为M文件,这个文件实际上是一种录制宏,它几乎记录了你操作Comsol的每一个步骤(当然有例外)。
酱就好办了,侬导出一个M文件,交给别人,那么Ta只需要运行CwM,然后保存即可得到模型文件,酱模型文件小了很多,也方便交流。
当然除这种方法外,还有别的办法,比如修改mph文件的信息,但不管怎么都不能保证版本间的兼容性。
不足:M文件类似于journal文件,所以过程结果是不会保存的,亦是无结果文件。
M脚本属于解释型脚本,每一步都需要软件编译后执行,所以执行效率颇低。
本文使用Comsol 4.3b, Matlab 2013a,其他版本大部分雷同。
Comsol3.x用户的CwM 使用方法和4.x的完全不同,不在本文讨论范围。
另外Comsol3.5a用户比较悲摧,为保证CwM兼容性请选择Matlab2007b或之前版本,但也有兼容包,可以让其使用到Matlab2010左右。
这不是本文重点,仅仅是友情提示。
应该罗嗦下的:A. 启动这并不是问题,但往往会成为初学者的障碍。
Win平台下,配置好Matlab的根路径,双击COMSOL 4.3b with MATLAB即可启动。
Mac/Unix下,同样陪着Matlab根路径,执行comsol server matlab即可启动。
首次启动会提示输入 username 和 password对于绝大部分用户,你随便填什么都可以,只要保证输入合法有效即可,win下可能有防火墙提示,允许即可。
启动后,你会看到启动的是Matlab的界面,不要犹豫,CwM它就长酱紫。
当initializing结束后,状态栏显示ready,那么就万事OK,只等来炊。
B. 更换工作路径启动后,默认路径是%program files%\COMSOL\COMSOL的目录建议更换个默认工作路径,以免文件弄的混乱比如切换到 E盘work文件夹Matlab直接输入cd E:\work当然还有其他更换路径的方法,这里不讲,自行解决。
COMSOL与MATLAB联合仿真的实现方法作者:赵晓磊齐秋菊郭春超来源:《中国新技术新产品》2014年第24期摘要:本文在分析COMSOL与MATLAB这两款软件特点的基础上,研究了COMSOL 与MATLAB联合仿真的方法,通过COMSOL与MATLAB之间的相互调用,实现了MATLAB与COMSOL的数据传递,并结合实例介绍了联合仿真的方案,通过这两款软件的联合仿真,提高了仿真效率。
关键词:联合仿真;COMSOL;MATLAB中图分类号:TP31 文献标识码:ACOMSOL Multiphysics是一款大型的高级数值仿真软件。
广泛应用于各个领域的科学研究以及工程计算,被称为“第一款真正的任意多物理场直接耦合分析软件”。
在模拟科学和工程领域的各种物理过程中,COMSOL以高效的计算性能和杰出的多场双向直接耦合分析能力实现了高度精确的数值仿真。
COMSOL是以有限元法(FEM)为基础,通过求解偏微分方程来实现真实物理现象的仿真。
目前已经在声学、生物科学、化学反应、电磁学、流体动力学、燃料电池、地球科学、热传导、光学等领域得到了广泛的应用。
尽管COMSOL在仿真方面能力强大,但是由于软件没有可以输入程序的功能,使COMSOL对于进行大量重复性工作时,如果全由人工进行,工作量非常大。
而COMSOL其实是起源于MATLAB的Toolbox,最初命名为Toolbox 1.0。
因此这两款软件之间相互兼容,可以联合起来进行仿真。
这样,利用 MATLAB 进行编程,实现COMSOL的建模、计算、后处理等工作。
1 COMSOL与MATLAB 联合仿真的实现方案1.1 COMSOL 与MATLAB 联合仿真环境的连接方式本文采用的软件是Matlab2011b和COMSOL 4.3,系统为Win7,64bit。
安装顺序为先安装MATLAB,然后安装COMSOL到MATLAB的子文件夹下,并勾选link to MATLAB选项。
Comsol和Matlab 联合仿真的⽅法
1.联合使⽤Comsol和Matlab的原因:
尽管Comsol在仿真⽅⾯能⼒强⼤,但是由于软件没有可以与ANSYS⼀样输⼊程序的功能,使Comsol对于进⾏⼤量重复性⼯作时,如果全由⼈⼯进⾏,⼯作量⾮常⼤。
⽽COMSOL其实是起源于MATLAB的Toolbox的,最初命名为Toolbox 1.0。
这两款软件,可以联合起来进⾏仿真。
这样,利⽤MATLAB强⼤的计算功能,可以实现通过MATLAB进⾏编程,实现Comsol的建模,计算,后处理等⼯作。
sol与matlab联合仿真的实现:
所⽤软件为Matlab2011b和Comsol 4.2,系统为win7,64bit。
安装顺序为先安装Matlab,然后安装Comsol到Matlab的⼦⽂件夹2011b\bin\win64下,并勾选link to matlab选项,地址为2011b⽂件夹。
安装完毕后,打开Comsol with matlab,会打开matlab界⾯,然后⼿⼯打开Comsol。
这两个软件就通过⼀个共同的服务器联系在⼀起了。
sol 和Matlab相互调⽤的⽅法:
Matlab调⽤Comsol模型⽂件:对于Comsol中已经建好的某个模型,将其保存为Matlab可调⽤的.M格式⽂件,然后在Matlab的⼯作路径⾥找到这个⽂件并打开即可;
Comsol调⽤Matlab模型⽂件:对于Matlab中通过M语⾔已经编好的M模型⽂件,运⾏(Run),在Comsol的File下找到“从服务器导⼊模型”即可。
多孔介质传热传质报告题目姓名:学号:完成日期:COMSOL软件介绍与应用一、COMSOL Multiphysics软件介绍1.1 COMSOL Multiphysics软件简介COMSOL Multiphysics 是一款大型的高级数值仿真软件,由瑞典COMSOL 公司开发,广泛应用于各个领域的科学研究以及工程计算,被当今世界科学家称为“第一款真正的任意多物理场直接耦合分析软件”,适用于模拟科学和工程领域的各种物理过程,COMSOL Multiphysics以高效的计算性能和杰出的多场直接耦合分析能力实现了任意多物理场的高度精确的数值仿真,在全球领先的数值仿真领域里得到广泛的应用。
COMSOL Multiphysics 起源于MATLAB 的PDE Toolbox,最初命名为PDE Toolbox 1.0。
后来改名为Femlab 1.0(FEM 为有限元,LAB 为实验室),这个名字也一直沿用到Femlab 3.1。
从2003年3.2a 版本开始,正式命名为COMSOL Multiphysics。
在全球各著名高校,COMSOL Multiphysics 已经成为教授有限元方法以及多物理场耦合分析的标准工具,在全球500 强企业中,COMSOL Multiphysics 被视作提升核心竞争力,增强创新能力,加速研发的重要工具。
2006 年COMSOL Multiphysics 再次被NASA 技术杂志选为“本年度最佳上榜产品”,NASA 技术杂志主编点评到,“当选为NASA 科学家所选出的年度最佳CAE产品的优胜者,表明COMSOL Multiphysics 是对工程领域最有价值和意义的产品”。
COMSOL Multiphysics 软件设计理念独特,她抛弃了传统意义上的单元(库)的概念,抛弃了网格划分时单个单元刚度矩阵的概念,将多个偏微分方程(组)直接组装成一个总的刚度矩阵。
这样出现的结果即是,不管求解多少个物理场,我们只需选择对应的偏微分方程进行任意组合,软件自动联立求解,实现任意多物理场、直接、双向实时耦合。
1. <target>comsol : 启动COMSOLcomsol server : 启动COMSOL SERVER,用于联用MATLABcomsol client : 启动COMSOL CLIENTcomsol batch : 命令行模式的COMSOL,用于运行一个MPH算例或class文件comsol compile : 编译模型java文件,用于JAVA APIcomsol server matlab : 启动MATLAB并连接到COMSOL SERVER,SSH下个人推荐这种方式,原因自己体会comsol matlab : 启动MATLAB,并设置COMSOL的路径,不灵的(它没把mli下级目录添加进去,因此需要手动设置下)comsol convertpre35a : 转换COMSOL v3.x版本模型,我觉得是生成高版本的MPH或M文件comsol mph : 运行COMSOL并行模式(multiprocessing daemon)2. <options>-h : 屏显HELP<target> -h : 屏显<target>的HELP-32 : 32位模式-64 :64位模式-3drend ogl | sw : OpenGL的3D渲染-np <number> : 启动核数,WIN窗口模式默认启动全部核心,LIN则需要配置-numasets <number> : 非一致性内存访问 (NUMA)硬件可以通过将专用内存与 CPU 配对来显著提高性能,通常为CPU核sockets数-mpmode throughput | : 并行模式优化COMSOL与其他线程同时运行turnaround | : 并行模式在无其他任务进行时,优化COMSOL进程 owner : 并行模式在所有进程中,给予最高级的性能配置-blas {auto}| mkl | :basic linear algebra operations,COMSOL很多计算引擎依赖BLASacml | path : 使用BLAS库 mkl:intel的CPU,acml:AMD SSE2支持的CPU-blaspath <path> : BLAS库路径,与-blas path联用(环境变量为LD_LIBRARY_PATH)-ipv6 : IPV6支持-nn <number> : 节点数-nnhost <number> :每个HOST使用的节点数-mpi {auto} | intel |mpich2 | wccs2003 |whpc2008 | user| path :调用MPI库-mpipath <path> : MPI库路径-mpiroot <path> : MPI库root路径-mpirsh {rsh} | ssh : 在MPD模式下使用rsh或ssh-scalapack {auto} |mpich2 | wccs2003 |whpc2008 | user | path :Scalapcak库-scalapackpath <path> : Scalpack库路径-clusersimple :Simple cluser模式不知是神马-prefsdir <path> : 配置属性路径-tmpdir <path> : 临时文件路径-version : 屏显版本号-ckl : 使用class-kit 许可-forcegcc : 强制加载GCC库,通常是在联用MATLAB,而函数无法返回MATLAB时使用-forcecomsolgcc :与COMSOL强制加载GCC库,COMSOL通常默认使用系统GCC,当在无法正常启动COMSOL时,尝试使用该命令3. COMSOL SERVER 命令通用格式comsol [<options>] server [<target arguments>]comsol target arguments-user <user> : login user name-port <port> : TCP/IP port to listen-passwd <reset/nostore> : 当需要提供新密码时使用,如果不需要存储新密码联用nostore-login <{info}/force/never> : 查询登录信息-multi on | {off} : 允许client重复链接-silent : 不接受标准输入-graphics : 启动COMSOL的图形库,不在COMSOL的GUI下,但是是COMSOL的绘图模式4. COMSOL CLIENT 命令通用格式comsol [<options>] client [<target arguments>]-port <port> : 指定连接的端口-server <server name> :连接的server名5. COMSOL BATCH 命令COMSOL的无GUI模式,可以运行MPH算例及模型JAVA文件,模型JAVA文件运行前需要编译。
联合应用COMSOL和MATLAB进行参数反分析研究
李仁民
东南大学岩土工程研究所
电话:1305186902
Email :77482623@
Comsol
2009
污染离子在垫层中的运移问题污染离子在垫层中的运移问题。
问题的过程背景问题的提出
问题的提出
初始条件(非稳态问题)
0(,0)()
c x c x = 边界条件
,0i i c c =(,)
i n N f c ϕ−⋅= 给定边界上各点的电位
0V ϕ= 给定固相颗粒表面电荷密度
σσ= 给定边界上各点的浓度或流量
源溶液源溶液Cl Cl -浓度
问题的提出
参数反分析数学模型*)(min f x f −b b u
x l ≤≤T n x x x x ]
,...,,[21=目标函数
约束条件分别为第分别为第i i 离子的有效扩散系数和有效电荷密度难点难点::(1)目标函数求解
(2)最优化求解问题 参数反分析模型参数反分析模型
有约束的非线性最优化求解 SQP SQP 的基本思想是在每次迭代中用的基本思想是在每次迭代中用拟牛顿法来近似Lagrangian Lagrangian 函数的函数的函数的Hessian Hessian Hessian矩阵矩阵矩阵,,将约束化问题
(Constrain Question Constrain Question ))转化为求解一系列的二次规划问题划问题,,也就是每次迭代步骤中解决一个二次规划子问题,求该求该SQP SQP SQP问题的解问题的解问题的解。
x0=[0.5;0.5];xm=[0.01;0.01];xM=[1;1];
A=[];B=[];Aeq=[];Beq=[];
[x,f_opt,c,d]=fmincon ('PNP ',x0,A,B,Aeq,Beq,xm,xM,'cffun',ff);
Comsol with Matlab
function wcfun=PNP
(x)DD1=2.032E-
9*x(1); DD2=1.334E-
9*x(2);DD3=1.957E-9*x(3);。
% wcfun=计算值-实测值
COMSOL Multiphysics Model M-
file 目标函数:采用Comsol Multiphysics 多物理场耦合分析软件求解多物理场耦合分析软件求解。
该软件可以使用图形用户界面创建复杂的模型图形用户界面创建复杂的模型,,并将之直接存储为M -file file脚本文件脚本文件,通过其二次开发工具COMSOL Script COMSOL Script或者或者或者Matlab Matlab Matlab可以编辑可以编辑可以编辑、、扩展以及执行这些及执行这些M M -file file脚本文件脚本文件脚本文件。
)ˆˆ(ˆ,f x f i i f i x i eff i c RT
F z c D j ϕφ∇+∇−=X F c
z F N
i i i x x eff ˆˆ1ϖϕε+=∇⋅∇−∑=
根据Comsol几何建模,另存为.m文件
% COMSOL Multiphysics Model M-file
function y=PNP(x)%x-为输入参数
DD1=2.032E-9*x(1);%参数1
DD2=1.334E-9*x(2);%参数2
DD3=1.957E-9*x(3);%参数3
% Constants-定义常数
fem.const = {'F','96500', ...
'D1',DD1, ...
'D2',DD2, ...
'D3',DD3, ...
'neff','1'};。
xxt=0.01:0.01:0.04; %测点对应的x坐标
c1test =[48,40,35,25]; %实测值
c1js=postinterp(fem,'c1',xxt); %后处理--取计算值
y=sqrt(sum((c1js-c1test).^2));
% y-目标函数编辑.m文件
氯化钠盐溶液在土样中的扩散问题,试样长度0.10m,左边源溶液中氯离子、钠离子浓度在试验过程中保持不变。
初始t=0时,试样中浓度为零,右边浓度取对称边界;左右两边电势、试样中初始电势均取零。
实例验证
反分析模型
分布步骤
先以给定的宏观运移参数计算获得的浓度值作为正解; 将计算所得的测点浓作为观测值,进行宏观运移参数的反分析。
实测浓度和反算浓度对比表实测浓度和反算浓度对比表((算例算例11,100h 100h))
参数反分析模型及结果
三个及以下参数采用有约束的非线性最优化求解,收敛速度快,精度高;
三个以上参数,容易陷入局部最优;
可以采用遗传算法(单种群、多种群、改进遗传
算法等)
四参数反分析结果
五参数反分析结果
多离子非稳态土柱扩散试验分析Hong and Shackelford 2009
试验试验土样土样土样::75%砂,25%凹凸棒石粘土棒石粘土,,采用标准击实试验
制备 ZnCl2在土样中扩散共8组:C7C7--1、C7C7--2、UC7UC7--1、UC7UC7--2;C14C14--1、C14C14--2、UC14UC14--1
、UC14UC14--2。
试样中Cl-浓度
源溶液
源溶液Cl
反分析获得的有效扩散系数多离子运移模型反分析获得的有效扩散系数宏观PNP多离子运移模型
计算结果与实测结果对比
计算结果与实测结果对比计算结果与实测结果对比((试验试验C14C14C14--1)
建立基于宏观建立基于宏观PNP PNP PNP多离子运移模型的参数反分析模多离子运移模型的参数反分析模型,采用有约束的非线性最优化和多种群遗传算法求解求解,,编制了相应的编制了相应的Matlab Matlab Matlab和和Comsol Comsol程序程序程序,,并采用有限元正反分析进行了验证有限元正反分析进行了验证。
小结
有约束的非线性最优化求解算法收敛速度快有约束的非线性最优化求解算法收敛速度快,,精度高度高,,三个以上参数三个以上参数,,易陷入局部最优易陷入局部最优;;多种群多种群遗遗传算法具有良好的全局寻优传算法具有良好的全局寻优,,但速度较慢但速度较慢,,精度略低
谢谢!。