用python调用comsol
python for comsol
https://github.com/MPh-py/MPh
comsol有java和matlab的接口,参考手册不是太好看. MPh这个库是用python写了个java的接口去调用comsol. MPh有两种使用方式,一是直接使用提供的python接口,它比较简单,可以满足一般性的数据交互需要,但是功能不太完整;另外就是直接调用拿python封装好的"java"对象,这相当于是在使用comsol官方提供的java接口,功能比较齐全,文档也相对更全一些. 当然这两种方法是可以同时使用的,因为只是接口不同,本质上都是控制后面的comsol引擎.
2D multifinger chip
上面具有数量、宽度、间距均为变量的热源分布,热源平面上的非热源区域为绝热条件,左右两侧为绝热边界条件,下侧为热沉. 下面的code实现了建模、边界条件设置、参数化扫描、以及结果导出的实现.
1 | # 创建一个引擎,用引擎生成一个模型. |
当然,如果想直接获取温度场,或者模型已经建好了想简单地改一改参数,直接用mph提供的接口就可以了,
1 | (x, y, T) = py_model.evaluate(['x', 'y', 'T']) |
具体的操作可以参考 https://mph.readthedocs.io/en/stable/ ,当然,它的文档就更简略了.
一些说明
mph只是java的一个包装,而java或者matlab调用comsol的API都是类似的,基本使用操作可以参考 https://cn.comsol.com/blogs/automate-modeling-tasks-comsol-api-use-java/ . 这种调用实际上就相当于把GUI操作的流程代码化. 稍微简要整理一下整体的图像.
comsol是按照节点树的方式来整理一次模拟中的各个部分的,可以看一下上图的界面. 所打开的comsol的.mph
文件相当于Linux系统中的根目录,这个组件包括了全度定义,组件,研究和结果四部分. 组件中包括了我们要模拟的对象的具体定义,其又可以划分为定义、几何、材料、物理场和网格五部分. 研究中可以包含不同的模拟设置,比如定义一个研究去研究baseline的稳态解,定义另一个研究去作某个变量的参数化扫描. 结果中包含Dataset、派升值、表格、绘图组和数据导出几部分. 这些层级不同的各个部分就像节点树一样,从根节点向下逐层展开,每一个子节点都是父节点的一个对象.
凡是在节点树中有显示的对象,其都叫作对应父节点的一个feature. 在调用中,可以用比如
1 | java_model.geom("geom1").feature().create("r1", "Rectangle") |
这样的方式在几何中生成一个矩形. 每一个对象都有它的唯一的tag,用来帮助comsol调用这个对象. 在上面这个语句中,我们用create
方法在tag为geom1
的几何中创建一个矩形,并把生成的这个矩形的tag赋值为r1. 有了tag后,我们就可以用set()
方法来更改这个对象的属性,
1 | java_model.geom("geom1").feature("r1").set("size", ("w", "t")) |
上面这句话就是一个树形的调用逻辑. 其他各种部分的基本逻辑都是类似的,可以看到左边节点树中每一个对象都有它的唯一的一个tag.
注意set
类的东西第一个参数是参数名(参数类别),第二个参数是参数值;create
第一个参数是要create的这个对象的tag,第二个参数是这个参数的类别,有时候后面会跟第三个参数维度;setIndex
这个方法是用来对长得像表格一类得东西赋值得,比如
selection
方法是针对在GUI中用鼠标点击模型中每个边或者面的操作的,比如