找回密码
 注册
Simdroid-非首页
查看: 834|回复: 11

[15.分享让我牛B] Comsol with Matlab Quick Started (1)

[复制链接]
发表于 2013-7-8 18:17:36 | 显示全部楼层 |阅读模式 来自 上海
本帖最后由 mxio 于 2013-7-8 18:23 编辑

想不到Simwe的文本编辑器如此之糟糕。。。文章懒得调了,仅当试试贴。。。。

写在前面的话(可跳过):
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. 更换工作路径
启动后,默认路径是%programfiles%\COMSOL\COMSOL<ver>的目录
建议更换个默认工作路径,以免文件弄的混乱
比如切换到 E盘work文件夹
Matlab直接输入
cd E:\work
当然还有其他更换路径的方法,这里不讲,自行解决。

正文:
介绍完以上,就可以开始一个QuickStarted了

A.   模型导入
Comsol 模型导入到Matlab中,方法有2:
1.   使用命令 mphload
model= mphload(filename)
[model,filename] = mphload(filename)
比如: model = mphload(‘PATH\Mymodel.mph’)
注:如果不含路径,那么文件后缀名可以省略,前面model为变量名,可以任意指定合法变量名。
这样导入的模型对象对象名为 Model,如果想指定其他对象名,请用:
model2= mphload(Mymodel.mph','Model2');
2.    使用CwM+Comsol的GUI
这个需要打开CwM后,再打开一个Comsol普通窗口
在Comsol窗口中,File\Client Server\
先连接到CwM服务器 Connect to server 确定 此时会询问你 是否导入模型                  
或 export modelto server,然后执行

model= ModelUtil.model('Model')
注: ModelUtil 大小写敏感,‘Model’文件名和导出时设置的需要一致
当显示以下内容说明模型导入完毕!
model=
COMSOLModel Object
Name:MyModel.mph
Tag:Model
Identifier:root
这里需要注意一点,模型的文件位置应和当前Matlab的工作路径一致,否则会提示错误:
Javaexception occurred:
Exception:
    com.comsol.util.exceptions.FlException: Unknownmodel
Messages:
    Unknown model
    - Tag: Model
Stacktrace:
    atcom.comsol.model.util.ModelInternalUtil.model(Unknown Source)

atcom.comsol.model.util.ModelUtil.model(Unknown Source)


B.    模型保存/导出模型
1.    默认情况下,执行保存命令,保存的是MPH模型文件。
mphsave(model,'<path>/filename');
如果想保存为M文件/Java文件,则执行:
mphsave(model,'<path>/filename.m');
mphsave(model,'<path>/filename.java');
此外可以使用model.save 来保存,效果同上
model.save('filename');
model.save('filename','m');

2.    使用Comsol GUI 导入CwM中的模型
File\ClientServer\Import Model from Server
方法同导入,不再描述。

C.    显示导入的模型/移除模型
查看ComsolServer上的模型对象
ModelUtil.tags
移除模型对象
ModelUtil.remove(‘Model’)
移除所有模型对象
ModelUtil.clear


D.   几个重要的GUI函数
TUI总归冷冰冰,还是先介绍几个GUI函数吧!
COMSOL建模的思想很简单,定义常量、变量,几何创建,网格划分,定义物理模型,求解设定,后处理,导入/导出。那么如何查看几何、网格和结果呢?
1.    查看几何
mphgeom(model)
mphgeom(model,geomtag,…)
使用方法:
当需要调用某些属性或键值时,调用格式需要加上 geomtag
比如 将模型的边界设置为红色,面透明度为50%:
mphgeom(model,‘geom1’, ‘Edgecolor’,’red’,’Facealpha’,0.5)
在当前坐标轴下绘制几何:
figure(2);
mphgeom(model,'geom1','parent', gca);
属性及键值表:
  属性
  
  键值
  
  默认值
  
  备注
  
  Parent
  
  Double
  
  
  
  自定义坐标轴
  
  Selection
  
  正整数数列
  [1,2,…n]
  
  
  
  选择
  
  Entity
  
  point
  edge
  boundary
  domain
  
  
  
  与Selection联用,选择指定的几何结构
  
  Build
  
  on  |  off
  
  on
  
  在绘制前创建几何
  
  Edgecolor
  
  Char
  
  k
  
  边颜色
  
  Edgelabels
  
  on  |  off
  
  off
  
  边标签
  
  Edgelabelcolor
  
  Char
  
  k
  
  边标签颜色
  
  Edgemode
  
  on  |  off
  
  on
  
  是否显示边
  
  Facealpha
  
  Double
  
  1
  
  面透明度
  
  Facelabels
  
  on  |  off
  
  off
  
  面标签
  
  Facelabelscolor
  
  Char
  
  k
  
  面标签颜色
  
  Facemodel
  
  on  |  off
  
  on
  
  是否显示面
  
  Vertexlabels
  
  on  |  off
  
  off
  
  节点标签
  
  Vertexlabelscolor
  
  Char
  
  k
  
  节点标签颜色
  
  Vertexmode
  
  on  |  off
  
  off
  
  是否显示节点
  

2.    查看网格
mphmesh(model)
mphmesh(model,meshtag,…)
方法和查看几何类似,不多说。
属性及键值表:
  属性
  
  键值
  
  默认值
  
  备注
  
  Parent
  
  Double
  
  
  
  自定义坐标轴
  
  Edgecolor
  
  Char
  
  k
  
  边颜色
  
  Edgelabels
  
  on  |  off
  
  off
  
  边标签
  
  Edgelabelcolor
  
  Char
  
  k
  
  边标签颜色
  
  Edgemode
  
  on  |  off
  
  on
  
  是否显示边
  
  Facealpha
  
  Double
  
  1
  
  面透明度
  
  Facelabels
  
  on  |  off
  
  off
  
  面标签
  
  Facelabelscolor
  
  Char
  
  k
  
  面标签颜色
  
  Facemodel
  
  on  |  off
  
  on
  
  是否显示面
  
  Vertexlabels
  
  on  |  off
  
  off
  
  节点标签
  
  Vertexlabelscolor
  
  Char
  
  k
  
  节点标签颜色
  
  Vertexmode
  
  on  |  off
  
  off
  
  是否显示节点
  
  Meshcolor
  
  Char
  
  flat
  
  网格颜色
  

3.    查看求解过程信息
ModelUtil.showProgress(true)
4.    查看结果
mphplot(model,pgtag, …)
pd= mphplot(model, pgtag, …)
mphplot(pd,…)

属性及键值表:
  属性
  
  键值
  
  默认值
  
  备注
  
  Colortable
  
  String
  
  Rainbow
  
  颜色表
  
  Index
  
  正整数
  
  1
  
  pg中变量索引值
  
  Mesh
  
  on  |  off
  
  on
  
  是否画上网格
  
  Parent
  
  Double
  
  
  
  自定义坐标轴
  
  Rangenum
  
  正整数
  
  none
  
  颜色表色域
  
  Server
  
  on  |  off
  
  off
  
  是否在Server上绘制
  

使用索引举例:
pg= mpheval(model, {‘T’,’u’});
mphplot(pg,‘index’, 2)

关于建立pg,需要选择数据集,创建绘图类型和表达式等,举例:
pg= model.result.create(‘surf1’,’surface’);
surf1.set(‘data’,’dset1’);
surf1.set(‘expr’,’ht.tfluxMag’);


5.    查看模型定义
mphnavigator
这个也算是个好东东,可以快速查看定义的模型。


E.    命令群
觉得Comsol 帮助档归类的不错,直接抄来

界面函数
  函数
  
  功能
  
  mphcd
  
  改变工作路径至模型路径,用法 mphcd(model)
  
  mphdoc
  
  返回帮助档
  
  mphload
  
  加载一个mph文件
  
  mphsave
  
  保存模型文件
  
  mphstart
  
  Matlab中启动Comsol Server
  
  mphversion
  
  返回COMSOL版本号
  

几何函数
  函数
  
  功能
  
  mphgeom
  
  画几何
  
  mphimage2geom
  
  转换image文件为几何文件
  mphimage2geom(imagedata,level,…)
  
  mphviewselection
  
  高亮显示选择区域,注先标号,后类型
  mphviewselection(model,geomtag,number,entity,...)
  

网格函数
  函数
  
  功能
  
  mphmesh
  
  显示网格
  
  mphmeshstats
  
  显示网格统计数据
  

应用函数
  函数
  
  功能
  
  mphgetadj
  
  返回邻居
  mphgetadj(model,geomtag,returntype,adjtype,adjnumber)
  
  mphgetcoords
  
  返回几何坐标(注:是两个坐标系下的坐标,按列排列)
  mphgetcoords(model,geomtag,entitytype,entitynumber)
  
  mphgetu
  
  返回解向量,即模块的自变量
  U =  mphgetu(model,...)
  [U,Udot] =  mphgetu(model,...)
  type: Sol,  Reacf, Adj, Fsens, Sens
  
  mphinputmatrix
  
  线性求解器中加入矩阵
  mphinputmatrix(model,str,soltag,soltypetag)
  
  mphmatrix
  
  获取模型矩阵
  str =  mphmatrix(model,soltag,'Out',{'A'},...)
  
  mphselectbox
  
  框选几何
  mphselectbox(model,geomtag,boxcoord,entity,...)
  
  mphselectcoords
  
  点选几何
  mphselectcoords(model,geomtag,coord,entity,...)
  
  mphsolinfo
  
  获取解对象信息
  
  mphsolutioninfo
  
  获取求解对象信息
  
  mphstate
  
  获取动态系统的状态-空间矩阵
  
  mphxmeshinfo
  
  抽取延伸网格信息
  

后处理函数
  函数
  
  功能
  
  mpheval
  
  计算节点表达式值
  pd =  mpheval(model,{e1,...,en},...)
  
  mphevalglobalmatrix
  
  计算全局矩阵变量
  
  mphevalpoint
  
  在几何节点上计算表达式值
  
  mphglobal
  
  计算全局量
  
  mphint2
  
  表达式积分运算
  
  mphinterp
  
  在任意点或数据集上计算表达式值
  
  mphmax
  
  表达式最大值
  
  mphmean
  
  表达式平均值
  
  mphmin
  
  表达式最小值
  
  mphparticle
  
  在颗粒迹线上计算表达式值
  
  mphplot
  
  绘制解
  
  mphtable
  
  获取表数据
  

模型信息及导航
  函数
  
  功能
  
  mphgetproperties
  
  获取模型属性
  
  mphgetexpressions
  
  获取模型变量和参数
  
  mphgetselection
  
  获取模型选区信息
  
  mphmodel
  
  返回模型对象
  
  mphmodellibrary
  
  GUI查看模型库
  
  mphnavigator
  
  GUI查看模型对象
  
  mphsearch
  
  GUI搜索模型对象表达式
  
  mphshowerrors
  
  显示模型对象的错误或警告信息
  


F.    结束:
本文主要介绍了如何去看模型及其附属信息,有了上面的内容做铺垫,下期对CwM建模做下分类介绍。


Mxio
2013.7.8

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2014-12-17 22:36:21 | 显示全部楼层 来自 四川成都
Simdroid开发平台
非常感谢楼主分享
回复 1 不支持 0

使用道具 举报

发表于 2013-7-8 18:44:25 | 显示全部楼层 来自 北京
谢谢lz的辛勤劳动
回复 不支持

使用道具 举报

发表于 2013-8-26 09:52:54 | 显示全部楼层 来自 广东广州
回复 不支持

使用道具 举报

发表于 2013-10-8 20:03:48 | 显示全部楼层 来自 武汉大学
楼主你好,请教一个问题。
我想把comsol里面的2个求解结果叠加该如何在matlab操作
比如想把
mphplot(model,'pg1')和mphplot(model,'pg2')叠加。
回复 不支持

使用道具 举报

发表于 2013-10-19 22:22:15 | 显示全部楼层 来自 湖北武汉
楼主你好,你上面提到的mphinterp函数为什么我在matlab中help不到。我的matlab是matlab2009a,comsol是comsol3.5a
回复 不支持

使用道具 举报

发表于 2014-6-13 21:54:24 | 显示全部楼层 来自 浙江杭州
先了解一下,等以后再向你求教
回复 不支持

使用道具 举报

发表于 2014-6-19 14:46:47 | 显示全部楼层 来自 上海
我就是悲催的Comsol3.5a,所以怎么也跟我的Matlab 2013a链接不上
回复 不支持

使用道具 举报

发表于 2016-2-24 18:50:32 | 显示全部楼层 来自 江苏
感谢楼主分享,真是太棒了!
回复 不支持

使用道具 举报

发表于 2016-3-12 14:06:07 | 显示全部楼层 来自 山东青岛
感谢楼主分享!是天乐树前辈吗
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-24 16:48 , Processed in 0.045227 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表