Comsol基础教学案例-支架静力分析
本文摘要(由AI生成):
本文介绍了Comsol软件的基本操作逻辑和特点,以及Comsol与其他仿真软件的区别。Comsol界面逻辑优越,适合扩展仿真知识,但与其他软件操作逻辑有所不同。Comsol案例库丰富,所有求解器的功能都放在GUI上展示,易于使用。文章以Comsol固体力学模块下的教学案例模型-支架静力分析为例,介绍了Comsol的基本操作逻辑,包括模型开发器、物理场接口、全局定义、网格划分、结果提取等。Comsol界面设计思路先进,允许先求解后定义要查看的场变量,结果变量的提取丰富且合理。文章最后鼓励读者学习并尝试使用Comsol。
“ 从简单案例中,可以看出Comsol界面逻辑的优越性。”
之前写过一篇简单介绍Comsol的文章,之后就再没有写过Comsol软件的案例。实际上在Comsol软件中由于所有物理场共享同一套GUI界面,在进行多物理场分析的时候无需重新学习另外一套GUI,是非常适合用于扩展自己仿真知识的软件。
但是Comsol的界面逻辑和ANSYS、Abaqus等软件也有一些差别,有些它独有的特点。所以即使其他软件的使用已经比较熟练,也不应该一上来就直奔Comsol的多物理场案例。还是应该先了解下这款软件的基本操作逻辑再进行深入探索。
好在Comsol软件提供了非常丰富的案例库。Comsol案例库中的项目文件和ANSYS、Abaqus不同的一大特点是,Comsol中几乎所有的设置都会在左侧“模型开发器”中体现为一个对象。相比之下,ANSYS APDL的技术展示案例提供的是APDL命令流;Abaqus的许多案例提供的是inp文件,这些软件的案例打开后并不是所有设置项都能在GUI上找到,还需要去读懂输入文件才可以。可能许多人会因此觉得Comsol界面上陌生的东西太多而对它敬而远之,但小喵觉得,将所有求解器的功能放在GUI上展示出来,是软件工程的一个非常重要的易用性改进。
我们使用Comsol固体力学模块下的教学案例模型-支架静力分析,来了解Comsol的基本操作逻辑。
下图是Comsol打开后的界面。
可以看到,上方是很清爽的Ribbon选项卡。和Workbench新界面不同,Comsol的Ribbon选项卡并没有使用内容敏感选项卡,而是将所有功能平铺在选项卡中。包括定义、几何、材料、物理场、网格、研究、结果、开发工具,按照分析的流程依次排开。左侧是模型开发器,类似Workbench软件和Abaqus中的模型树,很好上手。
但左侧第二栏,是对象的详细设置菜单。这个菜单在一般软件中,例如SCDM、Workbench Mechanical和HyperMesh中都是放在左下角的。但是Comsol的默认宽屏布局将它单独放在一列。这样挤压了图形显示的空间,但能够为详细设置菜单留出更大的发挥空间。——当然你完全可以把它放在左下角,这也是Comsol的“常规屏幕布局”对应的方式。但那样的话,模型开发器窗口和设置窗口就都需要拖动滚动条才能看全了。一般来说,用Comsol做的仿真,其几何模型相对都不是特别复杂,工程师主要专注于其多物理场耦合特性。这可能也是Comsol默认布局把图形窗口放的比较小的原因之一。
图形窗口上方,和显示有关的各种功能按钮常驻在这里。这些看图标大家也能猜到大概的功能是什么,就不再赘述。
Comsol的这个模型开发器,可以说逻辑非常的清晰,完全没有像HyperMesh那种你不建立这个对象它就不会在界面上出现的迷茫感。这里所有对象是英文的原因是我打开的是本地的英文案例库文件。实际操作中,用中文界面创建的所有对象的名称都默认为中文。顺带一提,Comsol的中文支持相当优秀。从几年前开始,就连它输出的日志都是汉化的。
在模型开发器的目录树里面,几何、材料我们都非常熟悉了。Solid Mechanics那个是固体力学物理场。在Comsol中,每一个物理场都体现为模型开发器中的一个对象,可以向其中添加各种类型的物理场。如果添加多个物理场,还会有丰富的预定义好的多场耦合对象供你选择。下面是网格对象,这些都是我们比较熟悉的。但在它们上面,有一个比较陌生的东西,叫“定义”。这个集*合下的功能可以说是Comsol的精髓之一。我们后面慢慢讲解。
Comsol的几何建模功能不能说非常好用,但其实也算是功能丰富。该有的功能它差不多都有,可以建立一些基础的体素,有草图功能,能做几何变换、布尔运算、基本的几何清理等操作。
在这个案例中,这个支架是在另外一个基础几何建模教学中生成,因此几何体最初是导入进来的。导入几何以后,生成了一个立方体,并做了两次镜像,然后用这四个立方体做了一次布尔运算。
在划分网格的时候可以看到,由于进行了布尔运算,大部分规则几何都使用了扫掠网格划分,而四个不太规则的地方直接画了四面体。
——当然,这个模型还可以用壳单元来建模。在Comsol中,梁和壳单元都体现为独立的物理场接口。壳单元是另外的案例。在上面的网格截图里,眼尖的读者可以看到,四个螺栓孔位置被涂上了橙色,两个似乎是用来加载的位置分别涂上了绿色和红色。而且这个颜色渲染的还非常诱人,有让人心痒痒的高光。在 定义 里面,首先创建了四个螺栓孔的选择集,然后使用并集操作将它们合并,涂上橙色。这里可以看到,和几何建模一样,Comsol中每一步操作都在模型开发器中定义了一个对象。这样操作的历史记录就清晰可见,也方便用户直接打开模型来学习。
使用相同方法,定义了加载处的两个孔Pin Hole和一个并集。
赋予材料这里,在这个模型中没什么可说的。材料是默认的结构钢。自带材料库这件事或许对于Comsol来说已经不是什么值得夸耀的地方了。它可怕的地方在于,这个材料库实在是太丰富了,包含了各种Comsol可以用到的物理场。
就拿这个默认的结构钢来说,它除了有力学特性和热学特性以外,还带有电磁学特性。如果不够,还可以在上方添加。每种材料属性都自带单位制。
其次,它的单元阶数是放在物理场中,而不是在网格划分对象里的。其实也对,不管是一阶还是二阶单元,网格的拓扑形状都没变嘛;还有一个神奇的地方,Comsol允许用户自定义每个物理场待求解的因变量和其分量的名称。例如这里的固体力学场,因变量那里,位移场后面的u,你其实是可以自己把它改成叫u2,u3或者任何其他你喜欢的字母都行的。
另外……除了Comsol,你见过哪个结构分析软件真支持到五阶实体单元的?
固定边界条件这里没什么可说的。和其他软件的操作基本一致。添加一个固定约束,由于前面定义过选择集,所以可以直接基于选择集来定义边界条件。
但载荷这里,就有意思了。作为一个入门案例,就在这里猝不及防地显示出了Comsol软件的獠牙。
(没看清?来给你放大看看)
这个边界条件定义在边界坐标系上。这个载荷最终的效果如下图所示。
在上一篇文章中,我们介绍了Comsol的一个入门案例。今天接着把这个案例讲完。我们会讨论Comsol中定义的坐标系、公式和结果的后处理。
上回书说到,在固体力学物理场下,我们定义了一个这样的载荷:
边界坐标系,是Comsol中的一类坐标系形式。其实也没有很复杂,就是可以定义在2D曲面上,描述沿法向和切向的分量的坐标系。一般用于施加沿表面法线方向的压力。这里第一轴和第二轴分别是两个面内的切线方向,第三轴n是法线方向,它们三个轴形成一个右手坐标系。
这个载荷的方向沿第三轴 n 的方向,即两个孔面的法向。其表达式为:
这个sign(X)好理解,就是该点处X坐标的符号。而sign(X)*Z>0这里的大于号就是一个表达式中的判断条件。在Comsol文档中,COMSOL Multiphysics > COMSOL Multiphysics Reference Manual > Global and Local Definitions > Operators, Functions, and Constants > Unary, Binary, and List Operators and Their Precedence Rules 这一页中详细介绍了所有操作符的含义和运算优先级。
对于 x<1这样的比较运算符,为真则返回1,为假返回0. 而根据运算优先级,乘除号优先于加减号优先于大于和小于的比较符号。因此这里是先计算sign(X)*Z,如果大于零则返回1.剩下的就是前面的 load(-P0,Y-YC,Z) 了。这个load很显然长得不太像是Comsol会内置的函数形式,尤其它后面还传递了3个参数。回头去找定义,果然在这里定义了一个解析函数。
这就体现出Comsol一个非常大的优点。通过定义各种类型丰富的函数并允许在物理场几乎任何可以输入数字的地方加以引用,Comsol赋予了使用者极大的自由度。在许多其他软件中可能需要使用子程序实现的功能,在Comsol中都可以通过定义一个解析函数的方式来轻松实现。定义函数时,指定函数的名称、自变量(称为变元)和表达式,还可以为函数的自变量和因变量指定单位。对于包含最多三个自变量的解析函数,Comsol还可以画出其函数图(一个自变量画二维图,两个自变量画三维图,三个自变量可以画出包含多个横截面的云图),很是炫酷。回到这个案例。案例中调用了Load()函数,传入了三个参数分别是 -P0, Y-YC 和 Z. Y和Z就是该点处的Y坐标和Z坐标;这个P0和YC也来自前面定义的常数。
该案例在前面全局定义中设置了两个参数,分别是P0,值为2.5, 单位[MPa],表示峰值载荷压强;以及YC,值为-300,单位[mm],表示圆孔中心位置的坐标。是不是和ANSYS的APDL定义参数有点像?但是拿Comsol的界面和APDL比,真是云泥之别。Comsol界面这清爽的设计风格 至少领先APDL 20年吧……言归正传。我们再仔细看一下这个load()函数的表达式。
里面引用了一个atan2(y, x)函数。查看文档可知,这是一个四象限反正切函数,Comsol文档里并没有对它做进一步的解释。但这问题不大,Comsol毕竟脱胎于MATLAB嘛,我们去MATLAB文档里查,很轻松就能找到atan2()函数的概念:
把它和cos()函数联合使用,就得到了如图所示一侧向上,一侧向下的载荷。
由于对这个支架几何进行了布尔运算的切割,我们可以对大部分支架做扫掠网格划分,画出六面体单元。Comsol中虽然没有像Workbench那样的六面体为主算法以及自动Multizone多区域算法,但大部分该有的网格划分算法都有,而且其四面体网格划分算法还是非常智能的。
该案例中,一共施加了三个网格尺寸控制对象。分别是边尺寸约束、扫掠网格和自由四面体网格。
在Comsol中,对问题的求解对象被称为 研究,Study。一个研究可以包含多个步骤,即其他有限元仿真软件中的分析步。这个案例没太多可讲的,因为不涉及多场耦合,所以也不需要修改太多求解器参数。Comsol的稳态问题不像ANSYS和Abaqus,它说稳态就是稳态,在稳态问题中直接完全抛弃了时间步这一概念。如果想要在大变形分析中考虑逐步加载的响应,请使用 研究扩展 中的 辅助扫描 功能。
Comsol中的后处理概念也和其他常见的有限元仿真软件有较大差异。像ANSYS Workbench这类软件,具备第一优先级的对象是结果类型,例如位移、应力等;像Abaqus、HyperView这类软件,第一优先级是云图、等高线图或矢量图。而Comsol做结果后处理的逻辑中,位于第一优先级的则是三维、二维或一维的绘图组。
例如我想要显示整个体的应力,我就应该先添加一个 三维绘图组,然后在上面添加表面应力图。
当然,Comsol在求解结束后会自动为你生成一系列的默认绘图。不同的物理场其默认绘图也会有不同,一般来说默认绘图都会比较适合你选择的物理场。软件也会自动根据你的场变量类型选择合适的云图颜色。甚至会贴心的帮你将不同的绘图组进行自动重命名。
所以,我们就看到了一个名字叫做Stress (solid) 的三维绘图组。括号里的(solid)就表示它是三维的绘图组。里面添加了Surface1表面绘图,用来展示von-Mises应力。
正如在Comsol几何部分的操作哲学,Comsol中所有的更改操作都会在目录树中体现为对象。因此无论是想要显示变形后的云图,还是想在云图上显示网格,统统都需要添加对象。例如这里,就添加了一个 变形 对象,来显示变形后的云图。
这样做的好处一目了然。因为有了这种操作逻辑,对结果图像的所有修改都不再是一种状态的切换,而变成了对某些子对象和其属性的设置。这样,项目保存后再打开时,就可以最大限度的还原关闭之前显示的云图状态。而且由于所有设置都会在模型开发器的目录树上留下痕迹,非常方便对照案例进行学习,也方便对模型进行查阅和更改。
Comsol界面设计思路的先进性还体现在结果变量的提取上。这是一个极其美妙的顶层设计——Comsol允许你先求解,后定义你要查看的场变量。
(Comsol在后处理时可以显示的变量类型丰富到让你难以想象。唯一的缺点可能就是在这么一大串列表里不太好找到你想要的变量类型。不过幸运的是它们都有中文翻译。)
由于Comsol的求解器和前后处理器完全集成在一起,它的项目文件就是干干净净的一个.mph文件。不像Abaqus等其他仿真软件要在工作目录下创建一大堆有的没的东西,也不像ANSYS Workbench那样还需要由Workbench管理所有文件。它非常干脆利落,就一个项目文件包打天下。这样做在今天几乎没什么缺点,如果你需要给其他人发送不包含结果的项目文件,那只要另存一份并点击 清除解 即可。至于生成求解器的输入文件更是完全不需要你担心,在Comsol里虽然你有极高的自由度可以定义各种函数、进行各种合法的甚至非法的多场耦合分析,但它的全部求解器功能都摆在界面上,都有对应的GUI按钮。由于科学的Ribbon风格设置,这些按钮在Comsol的界面上排布的其实非常有条理。在这一点上,Comsol甚至明目张胆的在其多物理场仿真百科里放入了这样一段话:
在较旧的有限元分析软件中,必须先定义要分析的绘图和派生值,才能进行求解。如果遗漏某些关键定义,则意味着需要从头开始重新求解。因此,定义要在后处理 过程中分析的表达式和派生值,也认为是预处理的一部分。
这简直就是在戳包括Abaqus、LS-Dyna在内的大部分传统有限元分析软件的脊梁骨。对此我只想说——干得漂亮。
Comsol的整体后处理逻辑确实和我们常见的有限元软件有许多不同之处,有些功能甚至非常难找,但总体上,我还是非常、非常喜欢Comsol的后处理风格的。
说有些功能难找,比如我如果想要显示单元平均应力,就需要在表达式中定义elemavg(gporder, expr)。而这个算子在表达式的这个位置:
(简单扫一眼就可以了解到Comsol支持的自定义算子有多么丰富)
例如,在Comsol中,其后处理默认是不显示网格的,而且默认会对云图做非常高阶的平滑操作。这里我手动把网格调出来,并手动将表面云图的 质量 设置为 不细化。这就是许多甚至很强大的后处理软件中几乎唯一支持的显示模式:
可以看到,整个应力集中区域变“圆”了不少!再去掉网格显示,Comsol默认的云图平滑功能可以让即使比较稀疏的网格,其云图显示效果也非常美观、合理。
(这样漂亮的默认云图,放在HyperView里面要调试半天也不一定能画出来。再加上云图上的默认高光和应力磨平,让人如何不心动?)
看看这丧心病狂的多达24种云图颜色表吧,每一种画出来都非常漂亮:
再比如上面画出的那个载荷箭头示意图。Comsol不仅允许定义和显示结果的单位制,更支持在每一个结果对象上分别修改显示使用的单位。是MPa还是Pa,任何时候都由你决定。
Cividis色标是一种为色盲人士设计的色标方案,可以增强结果的可读性。今年4月,澎湃的一篇科学家们,你们真的会数据可视化吗?_湃客_澎湃新闻-The Paper 文章,介绍了不同色标的差异。
如此种种不胜枚举,让人时常感慨Comsol开发者们的强大。
最后,感谢你不厌其烦的读到最后。如果你也和我一样,在读完这个案例以后对Comsol燃起了比以往更多的敬意,也不妨去学学试一试呀~