
comsol操作技巧.pdf
9页comsol 操作技巧下面是本人在利用 comsol 解决实际问题时碰到的一些问题,通过上网查询,以及自己想出的方法进行解决,很多是网络是无法直接查询到,希望和大家一起分享,也许其中的某条正是你下载冥思苦想要解决的问题, 希望能够帮到你上网查找的部分如有侵权,请告之删除,谢谢!(一)利用 comsol 的计算源程序,来建立新的循环计算如果需要利用其它计算后的数值代入到 comsol 进行后计算,这就不可避免的要利用 comsol 的源程序进行后学的连续计算,这里主要需解决在次计算利用上次计算初始值的问题, 下面两段就是有无利用上次计算结果作为初始值的程序:%正常的求解% Solve problem fem.sol=femtime(fem, ... 'solcomp',{'T'}, ... 'outcomp',{'T'}, ... 'blocksize','auto', ... 'tlist',[colon(0,0.1,1)], ... 'estrat',1, ... 'tout','tlist', ... 'linsolver','gmres', ... 'itrestart',100, ... 'prefuntype','right', ... 'prefun','gmg', ... 'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'relax',0.8},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax',0.8},'csolver','pardiso'}, ... 'mcase',[0 1]); %将上次求解结果作为下次计算的初始值的求解% Mapping current solution to extended mesh init = asseminit(fem,'init',fem0.sol,'xmesh',fem0.xmesh,'blocksize','auto');% (此处是关键)% Solve problem fem.sol=femtime(fem, ... 'init',init, ... % (此处是关键)'solcomp',{'T'}, ... 'outcomp',{'T'}, ... 'blocksize','auto', ... 'tlist',[colon(0,0.1,1)], ... 'estrat',1, ... 'tout','tlist', ... 'linsolver','gmres', ... 'itrestart',100, ... 'prefuntype','right', ... 'prefun','gmg', ... 'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'relax',0.8},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax',0.8},'csolver','pardiso'}, ... 'mcase',[0 1]); (二)对常数进行赋值下面一段程序是 comsol 中常数的赋值语句:% Constants fem.const = {'U0','3.9', ... 'I0','35', ... 'It1','35', ... 'It2','35', ... 'It3','35', ... 'It4','35', ... 'Vt1','4', ... 'Vt2','4', ... 'Vt3','4', ... 'Vt4','4', ... 'OpenVt1','4.1', ... 'OpenVt2','4.1', ... 'OpenVt3','4.1', ... 'OpenVt4','4.1'}; 我们可以通过以下语句对其中的 35,4,4.1 进行修改It1=700;It2=700;It3=700;It4=700; fem.const(1,6)={It1}; fem.const(1,8)={It2}; fem.const(1,10)={It3}; fem.const(1,12)={It4}; 这样就可以实现常量变成变量,进行计算了(三) 启动 COMSOL with MATLAB 2007b 时, MATLAB和 COMSOL Multiphysics 用户界面都没有出现该问题多出现在 Windows上使用 COMSOL with MATLAB 2007b, MATLAB 2007a 及更早的版本没有这种问题。
该问题可能与 MATLAB 2007b引入的新内存分配策略有关,解决办法是让 MATLAB使用老的策略, 将 Windows环境变量 MATLAB_RESERVE_LO设置为 0优选解决方案要解决这个问题, MathWorks推荐按下面的步骤设置环境变量:在 Windows中点击开始 >控制面板 >系统 >高级 >环境变量在系统变量框架中点击新增按钮在变量名称中键入 MATLAB_RESERVE_LO,在变量值中键入 0点击确定,关闭对话框第二种解决方案在少数极端情况下, 首选方案可能解决不了问题, 则可按下面的步骤进行尝试:试着启动一次 COMSOL with MATLAB,可能会失败,但将向 COMSOL 3.4安装目录中写入一个文件 java.opts 打开 java.opts ,删除行 -Xmx256m,并保存文件打开 COMSOL安装目录的 bin 目录中的 comsol.opts ,改变行:JAVAOPTS=on 到JAVAOPTS=off 这将确保 java.opts 不会在每次启动 COMSOL with MATLAB被自动覆盖,从而可以永远使用手动修改过的文件当在 COMSOL Multiphysics 的文件菜单中使用 “连接到 MATLAB” 时,会在根目录中查找 java.opts ,因此需要将编辑过的 java.opts 文件拷贝到文件主目录目录中,例如C:\Documents and Settings\ (四) comsol 的数据 txt 文件不能用中文 , 但可以用小数点(五)关于 comsol 程序进行循环计算的问题1, 如果不需要对常数和变量进行变化的话, 只需要将求解的部分进行重复,就可以进行再次计算,即下面的程序:xfem.sol=femtime(xfem, ... 'solcomp',{'T'}, ... 'outcomp',{'T'}, ... 'blocksize','auto', ... 'tlist',[colon(0,1,100)], ... 'estrat',1, ... 'tout','tlist', ... 'maxstep',1, ... 'initialstep',1, ... 'linsolver','gmres', ... 'itrestart',100, ... 'prefuntype','right', ... 'prefun','gmg', ... 'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'relax',0.8},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax',0.8},'csolver','pardiso'}, ... 'mcase',[0 1]); 如果要利用之前计算的记过作为初始值,可借鉴“ 20120412 利用comsol 的计算源程序,来建立新的循环计算”中的相关内容。
2 经过实际计算,即使要对常数和变量进行修改的话,这样处理也是可以的七) comsol 文件清除结果的操作点击“文件”选择其中的“模型重置”即可将之前计算的结果清除,文件大小降为几百 K (八)关于 comsol 模型转成 M文件运行的注意事项1、 将 comsol 进行过求解计算的文件另存为 M文件,再通过“ COMSOL 3.5a with MATLAB ”打开文件进行编程和修改2、 如果只是想对后处理的数据进行编程调试, 必须先将 comsol 文件保存为 *.mph 文件,然后再另存为 m文件,进行后续程序修改简言之:如果对 comsol 重新进行计算就在 comsol 计算完之后, 进行一些后处理操作 (这部分也可用自己编写的程序) , 没有关闭 comsol 之前就将comsol 文件另存为 M文件,这样下载运行这个程序时,会对 comsol部分进行计算如果不对 comsol 重新计算, 就在 comsol 计算完之后, 关闭 comsol,然后再重新打开,将 comsol 文件另存为 M文件,这样下载运行这个程序时,不会对 comsol 部分进行计算,而直接可以用上次计算的结果。
九 ) 与 matlab2010a 会出现一些问题对 于 下 面 这 条 程 序 , 再 普 通 不 过 了 , 但 是 在 comsol3.5a 与matlab2010a 中,总是提示错误,并且自动关闭程序,后来去除‘ spline ’ ,就变正常,但是使用的插值方法是默认的“ linear ” ,最后将, 2010a 换成 2007b, 就正常了因此,与 simulink 结合,是否就是有这方面的问题,还待后续试试再来补充InitialVopen=interp2(LZG_SOC,LZG_temp,LZG_Vopen,SOC,Temperature,'spline') (十)关于 comsol 作为 simulink 的问题1 首先通过使用新旧两台电脑,在旧电脑上完全可以实现基本库 ---交叉学科 --- 温度控制的例子,在新电脑( 64 位,同时也使用matlab2010, )在导出 simulink 模型时,如果更改 Simulink 方块类型为线性动态, 就无法输出, 如果按照默认还可以输出, 但是后面整个 simulink 模型完成后,在旧电脑可以正常运行,在新电脑无法运行,同时自动退出 matlab 程序。
2、导出 simulink 模型后,必须在“ COMSOL 3.5a with MATLAB”启动的 matlab 中才能找到“ comsol”模块,然后将模块拖到新建的simulink 窗口中,双击,在参数栏输入导出时的名称就可以出现输入输出口3、输入还好,没有什么问题,输出就有问题了,只有点的输出,无法进行面或体的操作,这是需要留意,在后续进行解决的问题4 对于下面这条程序,再普通不过了,但是在 comsol3.5a 与matlab2010a 中,总是提示错误,并且自动关闭程序,后来去除‘ spline ’ ,就变正常,但是使用的插值方法是默认的“ linear ” ,最后将, 2010a 换成 2007b, 就正常了因此,与 simulink 结合,是否就是有这方面的问题,还待后续试试再来补充InitialVopen=interp2(LZG_SOC,LZG_temp,LZG_Vopen,SOC,Temperature,'spline') (十一)关于安装时忘记连接 matlab 的补救方法忘了没有关系,直接在点击“ setup ” ,然后选择“ add/remove” , 在弹出的窗口中右边勾选“ matlab ”即可。
如果想要把 2007b 换成 2010a或其他版本, 也可以采用相同的方法进行。
