想不到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