求助一个comsol建立几何模型简单模型的出错问题

【comsol】COMSOL使用技巧_V1.0__牛宝宝文章网【comsol】COMSOL使用技巧_V1.0_专题:COMSOL使用技巧目录一、1.11.21.31.41.51.6二、2.12.22.32.4三、3.13.23.33.43.5四、4.14.24.34.44.5五、5.15.25.3六、6.16.26.36.46.5七、 几何建模 ................................................................................................................................. - 1 - 组合体和装配体 ................................................................................................................. - 1 - 隐藏部分几何 ..................................................................................................................... - 2 - 工作面 ................................................................................................................................. - 3 - 修整导入的几何结构 ......................................................................................................... - 4 - 端盖面 ............................................................................................................................... - 11 - 虚拟几何 ........................................................................................................................... - 12 - 网格剖分 ............................................................................................................................... - 14 - 交互式网格剖分 ............................................................................................................... - 14 - 角细化 ............................................................................................................................... - 16 - 自适应网格 ....................................................................................................................... - 16 - 自动重新剖分网格 ........................................................................................................... - 18 - 模型设定 ............................................................................................................................... - 19 - 循序渐进地建模 ............................................................................................................... - 19 - 开启物理符号 ................................................................................................................... - 19 - 利用装配体 ....................................................................................................................... - 21 - 调整方程形式 ................................................................................................................... - 22 - 修改底层方程 ................................................................................................................... - 23 - 求解器设定 ........................................................................................................................... - 25 - 调整非线性求解器 ........................................................................................................... - 25 - 确定瞬态求解的步长 ....................................................................................................... - 26 - 停止条件 ........................................................................................................................... - 27 - 边求解边绘图 ................................................................................................................... - 28 - 绘制探针图 ....................................................................................................................... - 29 - 弱约束的应用技巧 ............................................................................................................... - 31 - 一个边界上多个约束 ....................................................................................................... - 31 - 约束总量不变 ................................................................................................................... - 32 - 自定义本构方程 ............................................................................................................... - 34 - 后处理技巧 ........................................................................................................................... - 36 - 组合图形 ........................................................................................................................... - 36 - 显示内部结果 ................................................................................................................... - 37 - 绘制变形图 ....................................................................................................................... - 38 - 数据集组合 ....................................................................................................................... - 39 - 导出数据 ........................................................................................................................... - 39 - 函数使用技巧 ....................................................................................................................... - 43 -7.17.27.37.4八、8.18.2九、9.19.2十、10.110.210.310.4十一、11.111.211.311.411.511.6随机函数 ........................................................................................................................... - 43 - 周期性函数 ....................................................................................................................... - 44 - 高程函数 ........................................................................................................................... - 45 - 内插函数 ........................................................................................................................... - 46 - 耦合变量的使用技巧 ........................................................................................................... - 48 - 积分耦合变量 ................................................................................................................... - 48 - 拉伸耦合变量 ................................................................................................................... - 49 - ODE的使用技巧 ................................................................................................................... - 50 - 模拟不可逆形态变化 ....................................................................................................... - 50 - 反向工程约束 ................................................................................................................... - 51 - MATLAB实时链接 ................................................................................................................ - 52 - 同时打开两种程序GUI ................................................................................................. - 52 - 在COMSOL中使用MATLAB脚本................................................................................ - 52 - 在MATLAB中编写GUI ................................................................................................. - 53 - 常用脚本指令 ................................................................................................................ - 54 - 其他 ................................................................................................................................... - 56 - 局部坐标系 .................................................................................................................... - 56 - 应力集中问题 ................................................................................................................ - 56 - 灵活应用案例库 ............................................................................................................ - 57 - 经常看看在线帮助 ........................................................................................................ - 57 - 临时文件 ........................................................................................................................ - 58 - 物理场开发器 ................................................................................................................ - 59 -一、 几何建模COMSOL Multiphysics提供丰富的工具,供用户在图形化界面中构建自己的几何模型,例如1D中通过点、线,2D中可以通过点、线、矩形、圆/椭圆、贝塞尔曲线等,3D中通过球/椭球、立方体、台、点、线等构建几何结构,另外,通过镜像、复制、移动、比例缩放等工具对几何对象进行高级操作,还可以通过布尔运算方式进行几何结构之间的切割、粘合等操作。COMSOL Multiphysics以Parasolid格式为CAD内核,可以完美地导入当前大部分专业CAD软件制作的几何结构。COMSOL Multiphysics支持两种几何体,缺省的组合几何体和装配体,前者很方便地处理内部边界条件问题,后者很方便处理复杂结构的建模、网格、以及求解等问题。除了这些绘图工具,COMSOL Multiphysics还可以在脚本环境中构建几何对象,然后直接从脚本环境导入几何体,实现利用脚本建模。1.1 组合体和装配体COMSOL Multiphysics中有两种几何体,组合几何体(缺省)和装配体。所谓的组合几何体指重叠的几何对象自动分解为多个求解域(与几何无关),其内部界面上,几何结构、网格以及物理量等自动相互“粘合”。装配体则表示重叠的几何对象之间没有构成关系,因此从本质上而言,不存在内部界面。这两种几何体各有优缺点,组合几何体是COMSOL Multiphysics的缺省设定,优点在于:? 在材料非连续处,物理量自动连续? 在材料界面处,自动得到高精度解? 在材料界面处,自动确认网格单元和节点其缺点在于:? 网格越细,内存开销越大? 对大的CAD模型网格剖分比较困难反过来,装配体的优点则在于:? 在材料界面处可有意定义物理量不连续,例如接触阻抗? 对大的CAD模型网格剖分比较容易? 网格越粗,计算越快(但精度越低)装配体的缺点:? 需要更多的手工操作? 为了保证足够的高精度,需要注意边界上的网格密度通常,COMSOL Multiphysics缺省使用组合几何体,因为这种情况下内部边界可以采用缺省的连续边界。有时候,几何结构比较复杂,采用组合几何体时容易出现内部几何结构错误,或几何结构的各个部分有较大的差异(如薄壳与厚板等),或采用简化的方法模拟膜、壳等结构时需要设定该简化边界为阻抗型边界条件,或不同的求解域需要剖分成不同的网格,或采用ALE框架模拟旋转运动等的情况下,可采用装配体。用户可以通过选择几何结点中的形成组合体节点设定区的定型方法来切换到正确的几何解析方法:形成组合体和形成装配体。值得注意的是,当在不同表现形式间切换时,COMSOL Multiphysics将自动调整求解域、边界等的编号,从而影响到相关的设定,用户需要检查所有的设定是否条例设计条件。1.2 隐藏部分几何复杂的几何,常常存在于内部结构,我们可以采用增加透明度的方法来使得内部可视化。另一种常用的方法则是将外层几何隐藏起来,直观地看到内部结构,并进行建模。下图所示为图形工作窗口区中的工具条的截图,从左向右的前四个按钮分别代表:隐藏选定,显示选定,重置隐藏,察看未隐藏/只察看隐藏/察看所有。通过对这四个操作的合理选择,我们就可以观察所需的结构。如下图所示为一个可调式电容器的完整几何结构图,图 1 透明的3D几何结构COMSOL使用技巧_V1.0__comsol当我们选中外层的立方体,然后点击隐藏选定,并选择为察看未隐藏时,可以看到内部结构如下图所示,图 2几何内部结构1.3 工作面在很多情况下,我们经常进行3D结构的多物理场耦合分析,当我们需要对一些几何结构进行内部开孔/槽,或者增加几何附件等操作时,可以采用工作面来快速建模。例如在案例库中基本模块声学分支中的案例:COMSOL Multiphysics&Acoustics&eigenmodes of room的几何建模过程,首先绘制一个立方体表征房间,然后基于地板建立工作面,在该工作面中绘制出沙发底座、茶几底座和电视柜等的底座,通过拉伸得到相应的几何实体。接下来以沙发座的顶面为工作面,依托该工作面绘制出扶手的轮廓,向斜后方拉伸(拉伸距离为0.4m,在x方向位移为-0.1m),如下图所示。1.4 修整导入的几何结构有时候,由于不同CAD软件之间的数据格式、取值误差等的差异,会出现导入的几何结构存在缺陷。COMSOL Multiphysics提供修复工具,供用户修复缺陷,或削除较小结构等。用户可以在几何节点下右键添加相关的工具:CAD削除、CAD修复。下面对这些工具做一些形象的说明,具体操作请参考用户手册。1.4.1 处理短边 导入的结构中,存在很短的边,该边不影响几何结构,但是将会影响网格剖分、边界设定等,可能会影响到求解的收敛性。COMSOL Multiphysics的修复短边工具将把短边删除,并将相连的边延长连接到角上。图 3 CAD削除――短边1.4.2 处理重合边 导入的结构中,可能会出现有重合的边,该边一般不影响几何结构,很难发现,但是会影响边界设定和求解域的完整性,最终可能会得到错误的结果或不收敛。COMSOL Multiphysics的修复重合边工具将把其中一条重合边删除。图 4 CAD削除――重合边1.4.3 处理缺口 导入的结构中,可能会出现缺口,即两边没有相互连接,从而没有构成实体,会影响到求解域的完整性,可能无法进行物理量的设定,或无法求解。COMSOL Multiphysics的修复缺口工具将把缺口的其中一边延长与另一边相交。图 5 CAD削除――缺口导入的结构可能出现如下图中的两种尖角,将会在求解域中出现类似应力集中的现象,从而影响收敛性和解的正确性。COMSOL Multiphysics的修复工具将去掉尖角的一条边,将另一条边的顶角与最近的顶角相连。图 6 CAD削除――尖角1.4.5 处理自相交 导入的结构出现了交叉的现象,从而影响实体的构成,可能无法进行物理量的设定。COMSOL Multiphysics的修复工具将把交叉的线缩短,顶点相交,或把交叉成环的小实体删除,得到一个正常的角。图 7 CAD削除――自相交导入的结构中出现了类似银边的薄长条面,不影响几何结构的完整性,但是会影响到边界条件的设定和网格剖分,影响求解的收敛性。COMSOL Multiphysics的修复工具将薄长条删除,并将相邻部分延长成一个完整的面和实体。图 8 CAD削除――薄长条1.4.7 CAD修复点击CAD修复&修复按钮时,将从选中的几何对象中删除小于绝对公差的实体,例如短边、小面、薄长条、以及楔形体等。点击CAD修复&粘合至实体按钮时,将把选中的面中小于绝对公差的粘合在一起。在这个过程中,可以清除小于该公差的楔形、缝隙等,并将由粘合生成一个新的3D实体。注意,由于这两种操作自动清除小于绝对公差的几何对象或实体,因此有时候会导致过度清除的后果,此时请用户按照前面的几种修复操作手动进行处理。图 9 CAD修复COMSOL使用技巧_V1.0__comsol1.4.8 案例一下面以几个详细的修复操作步骤来说明在COMSOL Multiphysics中如何削除和修补从文件中导入的其他CAD软件的几何对象。首先通过CAD导入功能,找到COMSOL V4.x的安装目录下的models\CAD_Import_ Module\Tutorial_Models\repair_demo_2.x_b,导入该几何对象。右键在几何节点下选择并添加CAD删除&删除长条面,在删除长条面设定窗口,在最大面宽度编辑框中键入2E-4,点击查找长条面按钮。图 10削除长条面选中两个被查找出来的面,然后点击删除选定。其结果图如下图 11削除长条面,结果右键在几何节点下选择并添加CAD削除&删除圆角,在删除圆角设定中,最大圆角半径设为4E-3,点击查找圆角按钮。图 12削除圆角,设定选中所有被查找出来的圆角,然后点击删除选定。其结果图如下:图 13削除圆角,结果1.4.9 案例二通过CAD导入功能,找到COMSOL V4.x的安装目录下的models\CAD_Import_Module \Tutorial_Models\repair_demo_2.x_b,导入该几何对象。右键在几何节点下选择并添加CAD削除&删除面,在删除面设定窗口,删除面选择imp1几何实体下的面:7—13,14—21,点击删除选定按钮即可。图 14删除及修补图 15删除及修补,结果1.5 端盖面通常情况下,我们采用循序渐进的方法来建模,例如,对于管道的流固耦合分析,我们有时候先创建出管道的几何结构,分析其力学强度、模态等,然后再分析其中的流动,最后耦合起来进行流固耦合分析。在进行流动及流固耦合分析时,我们需要创建出流体的求解域。有多种方法实现这个需求,例如在几何建模工具中通过拉拔来得到一个新的几何结构,或者绘制一个大的几何体后进行布尔运算,等等,其中最简便的做法是利用端盖面功能。如下图所示为一个排气管道的几何结构图,可用于进行力学分析。当我们利用端盖面将五个开口封端后,会自动地形成一个流体求解域。1.6 虚拟几何当我们进行数值仿真时,依据的几何模型经常与实际结构完全一致,包含相当多的细节。然而,对于数值分析而言,经常需要根据某种需求进行简化,例如,在结构分析中,忽略一些加工时必须的倒角、定位孔等;在电磁场分析中,忽略相同材质的销钉等。这些简化,一般对最终的结果没有太大的影响,而且可以有效地降低后续网格剖分的难度,减少计算量,从而可以加快数值仿真的速度,节约成本。COMSOL Multiphysics提供虚拟几何操作功能,可以通过忽略端点、边、面,形成复合边、面、域,合并端点等,简化几何结构,形成便于进行数值仿真的求解域,如下图所示,如下图所示,左图中基于导入的CAD几何结构直接进行网格剖分,可以看到由于倒角等因素,使得凹槽底部存在很密的网格,由此会产生大量的计算量。我们可以使用虚拟几何操作,通过忽略面将这些容易产生极小网格的倒角面忽略掉,由此将产生一个与底面垂直的凹槽,经过网格剖分后得到如右图所示的较稀疏的网格。COMSOL使用技巧_V1.0__comsol再如,下图中三条边在同一条直线上,其中包含两个相邻点,这些点的存在也会影响后续的网格剖分等操作,不易形成均匀的网格。我们可以通过形成复合边的虚拟操作,形成一条统一的线段,去除相邻点,如右图所示。二、 网格剖分COMSOL Multiphysics可以创建自由网格、映射网格、扫掠网格、边界层网格等。利用这些网格剖分工具和方法,可以生成三角形和四边形(2D),四面体、六面体、棱柱、棱锥(金字塔)等网格单元,并且可以很方便的从四边形转换成三角形(2D),六面体、棱柱、棱锥转换成四面体(3D),同时还支持自适应网格、网格可视化、装配体的网格剖分等功能。COMSOL Multiphysics提供全自动网格剖分工具,预置了从极端粗化到极端细化等9个级别的自动网格剖分选项,分别预设了依据等级变化的网格参数,包括最大/小单元尺寸、最大单元生长率、曲率解析度,以及狭窄区域解析度等。此外,对于包含CFD、电磁场等分析的模型,还预置了物理场引导自动网格剖分。我们可以很方便快捷使用这些预设的工具来得到所需的网格。2.1 交互式网格剖分虽然COMSOL Multiphysics提供了智能化的网格剖分工具,但是这并不能完全替代人工操作,有时候为了得到更合理的网格,我们必须通过交互式的操作来手动剖分网格。很多情况下,我们往往需要根据经验来设定网格剖分指令序列,设定各种网格剖分的参数,得到更加完美的网格。例如,对于下图所示的芯片焊点结构图(注意其中红色的薄层结构),采用缺省的自动剖分成四面体网格,可得到如右图所示的网格。有时候,为了更好地分析红色薄层中的结果,需要加密红色的薄层,采用智能方式就有所局限,需要手动设定红色薄层的网格尺寸。我们推荐大家试一下接下来描述的网格剖分指令序列。首先,我们对焊点结构(16个球状几何)进行自由的四面体网格剖分,得到如下图所示的结果,接下来,我们将与焊点接触的两个面上,剖分出三角形的面网格,最后,我们依托这些面网格,向规整的立方体进行网格扫掠,得到六面体棱柱状网格,并设定不同立方体具有不同的扫掠层数(薄层分解为三层,其他分解为五层),2.2 角细化模型中的夹角有时候会对解的收敛性产生较大的影响,在很多情况下,角容易产生类似应力集中的现象,或者出现奇异。因此有必要加密角附近的网格,常见的做法是在网格剖分指令序列中增加角点/线的尺寸设定,减小其中的最大单元尺寸。我们还可以采用角细化的方法来实现这种局部细化的网格。如下图所示,通过角细化,选择对求解域中的边界4和5的夹角进行细化,将尖角处的单元尺寸缩放到0.05倍,得到如图中所示的角局部细化的网格分布。2.3 自适应网格在建模过程中,选择合适的网格以减少求解误差是很有意义的,COMSOL Multiphysics提供很多种网格尺寸控制方法来最大限度的减少误差的影响,其中最经常使用的当属自适应网格细化功能,它采用自适应求解器算法对局部范围(例如:边界层、冲击位置、小几何细节、局部载荷)进行网格细化从而提高计算结果的精确性。在稳态求解器和特征值求解器操作特征中可添加自适应网格细化功能。不过并不是什么情况下我们都要使用自适应网格,比较典型的自适应网格的用法包括:参数化求解、瞬态自适应*、网格优化等。例如,对于一些不易剖分网格的情况,首先设定一种容易求解的模型条件,通过自适应网格得到比较好的网格分布后,再修改模型条件为最终的所需条件,然后求解得到满意的结果。* 参考案例库:CFD Module&Multiphase Tutorials&injet_nozzle_ls。图 16自适应网格设定如下图所示,求解一个圆形区域内的泊松方程,圆心处有一个点源激发,通过对圆形区域设置自适应网格求解,从而实现对圆心周围的区域自适应的加密网格来解决点源位置处的奇异性,极大地减少了误差。图 17自适应网格细化前后对比(左图:自适应前;右图:自适应后)COMSOL使用技巧_V1.0__comsol图 18结果比较(左图:自适应前;右图:自适应后)2.4 自动重新剖分网格上一节给大家介绍了自适应网格,这一节来说说自动重新剖分网格。通常在求解某些移动网格模型的过程中,由于网格变形畸变,可能会产生较大的误差,这时候我们可以使用自动重新剖分网格来暂停计算,对当前的变形几何重新剖分得到合理的网格后,继续进行求解。操作办法:点击瞬态求解步骤节点,在设定区中展开求解扩展,勾选自动重新剖分网格。我们还可以进一步调整其参数:展开求解器配置&Solver&瞬态求解器&自动重新剖分网格,在设定区中修改网格质量表达式、最小网格质量等。例如案例库中的一个典型案例:Electrodeposition Module&Tutorial Models&cu_trench_deposition,在开始电镀前,网格如左图。当电镀达到9秒后,颈部逐渐被镀层填满,变得很窄,如果不做处理,该区域的网格有可能出现反转或重叠,影响求解,只有采用自动重新剖分网格,得到新的网格才能够避免出现这种问题,如右图。图 19自动重新剖分网格三、 模型设定COMSOL Multiphysics的模型设定相对来说是比较简单的,界面相当开放,在每个应用物理接口、边界条件、边、点的设定区中,基本上都列出了对应的方程或表达式,每个参数有相应的物理名称。通常情况下,每个编辑框(参数定义)均可以输入常数、表达式(可包含因变量)、逻辑变量、脚本等。当进行多物理场耦合建模分析时,有的耦合应用预置了一个总的耦合应用模式,而绝大多数自定义的耦合多物理场模型,通常是选择每个物理场分别提供各自的物理接口,我们只需要在各个物理接口中正确地填入表征耦合的表达式。这样的架构设计,便于用户理解和创建模型。3.1 循序渐进地建模由于多物理场耦合作用时,相互之间影响密切,从数学的角度而言,意味着产生了很强的非线性。因此推荐大家在建模的时候,循序渐进,逐渐增加物理场,直至最终的所有物理场耦合分析。这样做,可以分析每个物理场对整个模型的影响,弄清楚影响模型收敛性的主要因素,便于调试模型,得到正确合理的结果。例如,化工过程是“三传一反”的强耦合作用,即传质、传热、传功和化学反应。在建模的时候,我们可以先考虑传功,把流体流动这个物理现象分析清楚;然后添加传质和化学反应;添加传热;最后再把所有的物理场同时进行耦合求解。3.2 开启物理符号当我们创建结构力学分析模型时,可以在选项设定中开启物理符号,这样就可以在建模时形象地观察到各种约束,便于理解和调试模型。操作方法如下:1、 点击菜单:选项&设定。2、 在打开的设定对话框中,点击图形标签,然后勾选显示物理符号,如下图所示。图 20在设定对话框中勾选显示物理符号各种符号的对应表可以查阅基本模块的User’s Guide中的Solid Mechanics Geometry and Structural Mechanics Physics Symbols章节的说明。让我们来看一看显示物理符号的效果。创建一个结构力学分析模型(见下图),然后设定左侧边界为辊支承边界,下方为固定约束边界,上方为边界载荷边界。可以很清晰地看到各种边界约束条件对应的符号。图 21结构力学分析中的物理符号示意图3.3 利用装配体在COMSOL Multiphysics中,对于几何体有两种形式,分别是组合体和装配体,在0中对这两个概念有详细介绍和说明。通常我们使用组合几何体来建模,因为它具有物理量在材料非连续处自动连续、在材料界面处自动得到高精度解、在材料界面处自动确认网格单元和节点等优点。然而,有时候我们必须使用装配体。例如在结构力学分析中,当我们需要分析接触和摩擦问题时,就需要用装配体来得到各个部件,以及相互之间的接触关系。另一种装配体的典型应用是用来分析模型中存在活动部件的情况,特别是旋转运动的活动部件。例如,如果我们要模拟一个水杯的倒水过程,需要让代表水杯的求解域转动。如果仍然使用组合几何体,当水杯旋转到一定程度时,活动网格可能畸变,导致无法得到合理的结果。一种处理方法是使用前文提到过的自动重新剖分网格。而最简单实用的方法,是使用装配体。如下图所示,将水杯周围的一小块区域与水杯一起绘制成一个圆形的几何体,与周围的空间形成装配关系。两个装配的几何体之间用一致边界对串联起来,形成完整的流体求解域。然后定义移动网格时,只需要设定圆形区域的网格按照一定的旋转速度运动,周围的区域固定不动。经过求解得到如右图的结果。图 22水杯倒水的模拟示意图很明显,这样一种对装配体的应用,好处是很明显的。由于圆形区域的网格统一按照旋转的运动规律进行运动,所以网格在旋转的过程中相对保持不变,不会出现畸变,求解简单,极大地节省了计算量。类似的应用,在案例库中也可以找到很多案例,例如AC/DC模块中的旋转电机,CFD模块中的旋转机械流动、搅拌器等。3.4 调整方程形式COMSOL Multiphysics为绝大多数应用模式的设定窗口提供了方程形式,缺省情况下,它是不显示的状态。事实上,绝大多数用户可能也就只是察看一下方程形式是否与自己想要求解的数学方程相符而已。有时候,这里对于我们的建模也是相当有用的,例如频域-瞬态等求解类型。 通常情况下,对于电磁场、结构力学等分析,我们经常会使用频域来进行频率响应分析。所谓频率响应,一般是指系统对正弦输入信号的稳态响应,例如在正弦载荷作用下,结构的稳态变化;在正弦交流电作用下,系统的电信号或发热等。在一些特殊的物理场仿真分析时,例如感应加热等,加载的正弦交流电频率很高(2KHz以上),加热时间较长,数秒,甚至数分钟。很显然,我们不大可能采用瞬态求解的方法来模拟这种现象,因为需要在每个周期有足够的计算点才能够保证求解的可靠,这是一个相当庞大的计算量。因此我们经常使用另一种做法:频域-瞬态。这实际上是两个不同的求解类型,分别针对不同的应用模式:用频域求解电磁感应,用瞬态求解温度场。然而,并不是说我们在求解类型里面选择频域-瞬态就万事大吉,我们还需要确保各个物理场确实是按照我们的设想在干活。展开磁场接口的设定区,缺省情况下如左图,方程形式采用求解控制,多数情况下程序此时自动选择了瞬态形式的方程。我们需要展开方程形式的下拉列表,从中选择频域,如右图所示。至于其频率,缺省为根据求解器来定,也可以修改为用户定义。大家可以比较一下两个截图之间的差异。只有在这种情况下,我们才能够真正的得到如我们预期的结果。COMSOL使用技巧_V1.0__comsol图 23修改方程形式3.5 修改底层方程COMSOL Multiphysics具有相当强大的开放性,我们可以自由地组合无限的多物理场耦合模型,也可以自由地使用PDE模式来求解自己推导出来的模型,甚至还可以修改预置应用模式的底层方程,满足自己的需求。要察看底层,需要确认是否打开了显示方程视图的选项。点击上方的显示按钮(眼睛状择方程视图,如下图所示。 ),选图 24选定显示方程视图当作了如上选定后,可以看到模型树中的每个节点(应用模式、边界条件等),前面多出来一个小三角箭头,表示可以展开。点击展开节点,并选择方程视图,可以看到如下图所示的底层方程和预置变量表达式的对流框,图 25底层方程示意图目前COMSOL Multiphysics提供弱形式的底层方程,我们可以根据需要进行修改。如果一个表达式经过了我们手动修正,在前方会有一个感叹号标记(的标记(),在修改过底层方程的节点上还会出现加锁)。这样一来,我们做过修正的节点就一目了然。如果需要返回到缺省的设定,也很简单,)。 选中做过修正的项目,点击下方的重置选定按钮(四、 求解器设定求解器是有限元分析的核心,COMSOL Multiphysics提供直接式、迭代式等多种求解器,其中包含很多预条件器、平滑器、后处理器等,每个求解器均提供很多选项进行微调,软件预置了缺省的条件。通常情况下,我们可以直接使用缺省的求解器设定,然而在某些情况下,对求解器做出微调更容易得到收敛的结果。4.1 调整非线性求解器多物理场耦合仿真,由于物理场因变量之间相互作用,所以模型具有很强的非线性。在COMSOL Multiphysics中,求解器一般均预置了缺省的参数,能满足大多数建模的需求。然而,非线性就意味着求解难度较高,因此有时候我们不得不对求解器进行一些微调。对稳态求解器,COMSOL Multiphysics使用Newton迭代法来进行迭代求解,如下图所示是其计算原理图。首先,根据模型中设定的初始值,可以求解得到解曲线上的点,然后向y=0作切线得到一个新的解。重复这个步骤,最终就可以得到无限逼近于y=0这个解曲线上的收敛解。这里面有几个比较关键的因素,例如:初始值,依托好的初始值,可以迅速得到收敛结果。步长因子,它用来限制作切线后,新的解的取值。如果是完全线性的解曲线,当然步长因子越大越好,如果是非线性,则不一定如此了,较大的步长因子完全有可能跃过解曲线的收敛迭代部分,导致无法向收敛解逼近,即求解过程出现发散。图 26 Newton迭代法在求解器的设定中,当我们使用全耦合求解时,缺省的非线性方法是定常(Newton),它采用Newton迭代法进行求解。当解曲线线性较好时,用这种方法很快就可以得到结果。但是当解曲线有较强的非线性时,则推荐大家修正为自动(Newton)。大家可以比较下面两幅图中的差异。定常的迭代方法中,固定了阻尼因子,有可能导致前面描述的发散。在自动的迭代方法中,会首先使用较大的初始衰减因子来进行迭代的尝试,如果不收敛,则逐渐减小,直到最小的衰减因子。还有一种非线性的选择是自动高度非线性,它实际上是假定解曲线振荡得很历害,所以设定了更小的衰减因子。图 27全耦合参数设定在全耦合的设定中,还有一个容易被忽视的因子是最大迭代数,它用来决定迭代的最大次数,超过这个次数不收敛的模型,会提示达到最大迭代数,但是未收敛。缺省情况下,在稳态求解器里面一般是25,在瞬态求解器里面,一般是4或6。对于线性较好的模型,一般这个数量足够进行求解,但对于非线性较强的模型,则有可能不够。如果遇到上面这个错误提示,并且判断认为收敛性尚可,大家可以试一下把这个数改大一点再重新求解。4.2 确定瞬态求解的步长瞬态求解是一种很常用的求解器,它用于模拟会随时间发生变化的物理场。瞬态求解需要经历多个时间步长,且后续步长的结果依赖于前续步长,因此求解器采用什么样的时间步长,对瞬态求解的结果影响相当明显。COMSOL Multiphysics提供三种时间步长的选取方式,分别是:自由、中级和严格。COMSOL Multiphysics缺省对瞬态求解的时间步长采取自由的策略,这是为了快速得到结果。所谓自由,是指在初期,求解器按照用户设定的时间步长,乘上一个较小的比例值(通常为0.001),或者按照用户设定的初始步长来求解。如果收敛性较好,就逐渐放大比例,直到用户设定的最大步长,或者无限放大。所有的输出结果,如果没有设定为求解器采用的步长,就根据用户设定的步长序列,从求解器采用的步长中进行插值,将结果保存起来。很显而易见,这样的步长选取策略,对于结果随时间线性变化的情况,可以在尽可能短的时间内得到满足要求的结果。然而,如果解随时间具有很强的非线性,例如波动问题,这种策略会产生相当大的系统误差,甚至无法得到正确结果。因为越来越大的时间步长,可能会跳过非线性变化中的关键时间点。对于这种随时间非线性变化的情况,我们就必须将瞬态求解器的时间步长选取方式修改为中级或者严格。所谓严格,是指在求解的最初始阶段,与自由的方式类似,从一个极小的步长开始求解,并逐渐放大步长,在每个用户指定的步长均进行一次求解,得到输出的结果。这种选取方式,基本上取决于用户设定的步长序列,每个输出结果都是实际求解得到的,避免了自由选取方式可能出现的步长间隔过大引起的系统误差。然而,在严格的选取方式下,会有很大量的计算量,可能会影响建模的效率。这时候我们可以考虑采用中级方式来进行求解。这种方式相当于前两者的一个折衷,首先同样是从极小步长开始求解,后续的求解步长,并不一定是根据用户指定序列,而是保证在每个时间间隔内至少有一个计算点。输出的结果,并不一定是实际求解得到,有可能是根据求解器选取的时间步长插值得到。大家可以比较下图列出的三种不同步长选取方式的日志文件,注意其中标有out的差异,它们表示有结果输出和保存,out前有“-”表示该输出为插值结果。图 28瞬态求解器日志:从右至右分别为自由、中级和严格4.3 停止条件顾名思义,停止条件是在瞬态求解过程中,当满足某个设定的条件时,停止求解。我们可以在此基础上做进一步的修正或操作,然后继续进行求解。在V3.5a以前,由于没有自动重新剖分网格功能,停止条件经常被用来手动实现这个功能。停止条件的另一种用途,可以用来决定瞬态求解的停止时间。例如,当我们知道某个物理现象经过长时间演化后会达到稳定状态,然而在计算之前,我们没法确定这个时长。解决办法就是设定一个足够长时间的瞬态求解,然后设定一个停止条件,使得系统达到稳态状态后停止求解。停止条件的使用方法如下,COMSOL使用技巧_V1.0__comsol1、 右键点击求解器配置&瞬态求解器,在出现的菜单中选择停止条件。2、 在停止表达式中输入一个表达式,这应该是一个标量结果的表达式,当求解过程中的解使得这个表达式小于零时,就达到了停止条件,停止求解。例如,mod1.ale.relVolMin-0.01按照上面这个表达式,当模型1里面的移动网格的最小单元体积小于0.01时,就停止求解。我们就可以在这个解的基础上重新剖分网格后继续进行求解。有时候,可能需要对多个条件的组合满足停止条件,我们可以利用if算子来实现这样的定义。例如,if(A&0 && B&1E-10, -1, 1),这个表达式说明只有当同时满足A&0和B&1E-10,才达到停止条件,if算子返回-1,停止求解;否则返回1,保持求解状态。4.4 边求解边绘图缺省情况下,COMSOL Multiphysics在求解设定中是生成收敛图和缺省图,其中前者显示的是求解过程中的迭代收敛曲线,后者是在计算完成后缺省显示的后处理结果图。有时候,我们在进行瞬态分析时,为了避免在经历长时间的求解后得到并不满足要求的结果,需要实时监控一些步长的结果,以便决定是否有必要提前结束求解,修正模型。我们可以使用边求解边绘图来实现这个需求。点击步骤:瞬态,展开设定区中的求解过程中的结果,勾选绘图复选框,在绘图组下拉列表中选择需要显示的后处理结果图,或者Default(缺省图),在更新于下拉列表中保持求解器输出,或者改为求解器采用的步长,前者表示在用户设定的步长显示结果,后者表示每个求解器的步长都输出结果。如下图所示,图 29设定边求解边绘图4.5 绘制探针图探针是用来实时监控瞬态、频域、或者参数化求解时某个标量结果随时间、频率或参数的变化而演化的过程。通常情况下,探针可作为监控和分析工具,让我们了解计算过程是否符合我们的预期,是否在按照我们的设想进行。探针的设定方法如下,1、 右键点击Model 1&定义,在菜单中选择探针&域探针、或边界探针、域点探针或全局变量探针等,如下图。2、 以域探针为例,在探针设定的类型中选择平均、最大、最小或积分,然后在源选择中选定所需研究的求解域,在表达式中输入或从预置变量中选择。3、 在步骤:瞬态的设定区,可以在探针中选择所有,或无,或手动在列表中增加或删除上面设定的探针,并选择更新于下拉列表为求解器采用的步长(缺省)或求解器输出。参考上一节的截图。图 30设定探针有时候,探针也可以提供特定情况下的结果。例如,有时候我们需要求解波动变化的瞬态模型,其周期远远小于所需求解的时间,如果我们将所有的结果保存下来后进行后处理,有可能会得到一个相当庞大的模型文件。这时候,我们就可以用探针来边求解边绘制出每个求解器步长的结果,最终只保存某些特定步长的结果,如下图所示。图 31探针图示意此外,探针图事实上是创建了一个全局的探针变量,这个变量可以用于模型中的其他变量或表达式,例如方程、边界条件、或停止条件等。例如域探针,通常的命名是dom1, dom2,…等依次向后命名,当dom1是我们定义的是某个求解域上的平均类型的域探针时,可以把dom1当作是求解域上指定表达式的平均值来用到需要调用它的位置。五、 弱约束的应用技巧通常情况下,我们经常使用的三种边界约束条件分别是:Neumann边界、Dirichlet边界、混合边界。然而在现实中经常会遇到一些更特殊的约束,例如,在同一个边界上施加多个约束,在求解域内部的约束,或者约束某个变量在求解过程中为一个指定的值等。COMSOL Multiphysics基于弱解形式来进行求解,因此可以通过弱约束的方法来实现这些各种各样的高级约束需求。COMSOL Multiphysics提供了三种弱形式的约束,分别是:弱约束、逐点约束,以及弱贡献。让我们先来了解一下COMSOL Multiphysics提供的弱约束。弱约束是在求解对象上增加了Lagrange乘子,同时进行求解,它实际上是取代了原有的边界条件。例如定义一个弱约束条件,在编辑框中输入:2-u,表示约束u必须等2。其好处在于:√ 进行精确的通量计算分析√ 处理非线性约束√ 实现包含微分的约束缺点在于,? 引入了更多的未知量? 引入了可能的不易收敛条件? 可能产生数值振荡再来看看逐点约束,它与弱约束类似,但是它不产生Lagrange乘子,常用于一些流固耦合分析这样的耦合分析中。输入方法与弱约束类似,也是:2-u。最后再让我们来看看弱贡献,它是用来施加额外的约束条件,即在原有的边界条件基础上,进一步施加一些边界条件。输入方法与前两者不同,变成了:(2-u)*test(v),或者(2-u)*test(v)+test(2-u)*v,前者是非理想约束(单向约束),后者是理想约束(双向约束)。5.1 一个边界上多个约束通常情况下,一个边界上只会指定一个约束,否则就会出现所谓的“过约束”,即向模型文件引入了过多的约束条件,其后果就往往是无解。然而,在真实世界中,常常不可避免地会出现一些需要在某个边界指定多个约束,在对应的另一个边界取消约束。在数值模拟中,这需要经过特殊处理才能实现。以计算流体力学(CFD)为例,求解流体模型时最理想的边界约束条件是入口与出口分别指定速度和压力,例如入口指定层流流入的速度分布曲线,出口指定一个参考压力。但是,在某些情况下,我们不得不在同一个边界上同时约束两种边界条件,例如在入口既指定速度曲线,又约束必须满足指定的参考压力。COMSOL Multiphysics采用弱约束的方式来实现这种多约束边界条件。实现这种操作其实是一件很简单的事情,对于上面这个例子,只需要在入口边界条件中添加一个弱贡献边界条件,如图7.15所示,图 32添加更多的约束图 33设定弱贡献示意图其中边界1就是入口边界,u是X方向的速度分量,test(u)表示以变量u为基准的试函数,p表示压力,p_in是用户指定的入口压力。这个弱表达式用来约束在求解过程中,必须满足:p-p_in=0。5.2 约束总量不变有时候,在模拟过程中,需要确保某个总量保持不变,或者满足某种指定条件。例如,在浓度扩散分析中,假定无论物质在边界如何扩散,求解域内的物质总量保持守恒等。COMSOL使用技巧_V1.0__comsol下面让我们来看一个约束边界总量不变的例子:当进行CFD分析时,有时候会遇到很复杂的流动,我们可以测定入口的总压,但是无法确定入口不同位置的压力,这时候就可以通过弱约束的方法来约束入口的总压为指定值。在COMSOL Multiphysics中,可按照如下操作步骤来实现这种分析。首先,我们需要定义一个边界的积分耦合变量,用来计算入口处的总压。如下图所示,在入口边界1上定义一个积分耦合变量intop1,积分阶次为4。其次,修改入口边界条件中的设定。如下图所示,通常情况下,我们必须指定该边界的压力,例如参考压力为101325[Pa]。而在我们现在需要解决的问题中,需要将该值修改为p,即不指定压力。图 34设定压力不定的入口边界条件最后,我们添加一个弱约束边界条件,约束该边界上的总压为指定值。如下图所求,定义在入口边界上的总压力为800[Pa]*0.1[m^2]=80[Pa*m^2],其中0.1[m^2]为边界的面积。图 35设定弱约束边界条件通过计算,我们可以得到如图7.19所示的压力分布图(2D截图)。图 36结果图5.3 自定义本构方程COMSOL Multiphysics在结构力学、MEMS、岩土力学以及CFD模块等模块中提供了大量的本构模型,用来描述材料的性质。然而,面对不同的材料,有各种各样的本构模型可供我们选择,在一个软件中很难涵盖所有的模型。我们可以使用自定义的PDE和弱约束等功能来引入我们自己所需要的本构模型。以案例库中的Oldroyd-b流体案例构模型,具有如下常见形式,【1】为例,这是在流变学领域应用很广泛的一种粘弹性流体的本在COMSOL Multiphysics中,并没有预置这种本构模型,需要我们设法手动添加进来。为此,我们需要在常规的层流应用模式(NS方程)中,添加一个广义型PDE,定义应力变量T(张量形式,二维有三个分量)的表达式,然后添加三个弱贡献,分别为,tau*2*mu_p*(es11test* es11+2*es12test*es12+ es22test*es22)-test(ux)*T11-test(uy)*T12-test(vx)*T12-test(vy)*T22其中第一个弱贡献用来在方程中添加一个类似迎风修正项的罚数,用来对附加应力方程提高数值稳定性;第二和三个弱贡献,用来提供约束,使得在NS方程中添加上该附加应力项,实现该本构模型的数学描述。1 案例库:CFD Module&Single-Phase Tutorials&oldroyd_b_viscoelastic六、 后处理技巧COMSOL Multiphysics的后处理算得上是商业有限元软件中相当炫的,具有丰富的功能。可以生成一维绘图组:点、线、全局数据图、表图等,二维绘图组:表面图、云图、流线、箭头、粒子追踪等,三维绘图组:切片图、云图、表面图、边界或求解域图、流线、箭头、粒子追踪等。此外,还可以进行任意点、曲线结果显示、积分后处理、生成动画、通过拉伸或旋转将低维度的结果显示成高维度图形等。可以根据用户需要,导出图片、动画,自动创建模型的报告,导出文本格式的数据文件等。6.1 组合图形在一个绘图组里面,可以将各种图形组合在一起。比较典型的应用,例如在CFD模型的速度图中显示流线、显示多个相交截面的片图等。下图【1】显示了一个3D弯管中的流线,其中以灰色显示管道壁。要实现这个图形,首先,我们添加一个三维绘图组,然后在这个三维绘图组中添加表面图,显示表达式1,并设定颜色统一为灰色,这样可以得到管道壁;接下来,在同一个绘图组中添加流线图,显示流场中的流线。如下图所示,图 37组合图形:管道中的流线上面这个用法只是组合图形中最基本的操作之一,在后处理操作中,各个操作界面上都提供了一个数据集的下拉菜单。缺省情况下,每个绘图组中新增的图形操作的数据集是继承上级,即使用绘图组的数据集设定。我们也可以在每个操作中修改数据集,将一些不同的数据集的结果组合显示在同一张图上进行比较。下图【2】显示了一个模型中不同截线上的结果比较。首先添加一个一维绘图组,然后12 案例库:CFD Module&Single-Phase&turbulent_backstep。 案例库:COMSOL Multiphysics&Fluid Dynamics&blasius_boundary_layer。添加线图,保留缺省的数据集选定;再添加新的线图,修改其中的数据集为Cut Line 2D 1;按照类似的操作,继续添加两个线图,分别修改数据集为Cut Line 2D 2和Cut Line 2D 3。图 38组合图形:多个求解的结果比较6.2 显示内部结果案例:ACDC Module&Electrical Components&capacitor_tunable有时候,一些三维模型中,我们只关心内部一些区域的结果。通常采用的处理方法是隐藏外围的一些不被关心的区域,显示出内部结果。在COMSOL Multiphysics中,通过在数据集的解中附加选择项,在后处理时只处理被选中的对象,实现这种目标。本例是一个可调式电容器中的电势分布模拟,需要了解电容器内部电势分布情况,因此采用上述方法,隐藏外壳结构,只显示内部结构及结果。在操作中,首先选中了所有边界,然后删除其中几个代表外壳的边界,从而得到所需的数据集,然后再进行绘图后处理,得到理想的图象。1、2、3、4、 右键点击数据集&解1,增加选择。 点击新增的选择节点,修改几何实体层数为边界,将选择列表修改为全部边界。 从当前的边界列表中删除边界1、2、4这三个边界。得到所需的选择对象。 新增三维绘图组,并新增面图节点,显示电势结果。COMSOL使用技巧_V1.0__comsol图 39显示内部结果图6.3 绘制变形图变形图常用于结构力学的后处理显示,通过在图形中添加变形,显示结构形变后的效果。它是图形操作的子节点,可以添加在绝大多数图形中,例如,箭头图、云图、面图、体图等。在缺省情况下,变形的比例自动按照几何形变的10%来选定。通过变形图,我们还可以将一个模型的不同时间的结果显示在同一张图上。例如,案例库中的流化床的后处理案例1。通过组合图形,在一个绘图组中,添加了多个面图,在每个面图中,依次添加上变形图,每个变形图中的设定依次设定逐渐增加的x方向坐标,采用统一的比例因子1。最终得到如下图所示的效果,图 40变形图:显示不同时间的结果1案例库:CFD Module&Multiphase Tutorials&fluidized_bed。6.4 数据集组合为了便于处理模型中的类似数据集之间的结果,COMSOL Multiphysics提供了合并功能,可以对两个类似的数据集求和、差、积、商等,以及自定义的表达式处理。例如,前述的组合图形中的案例2,通过组合得到了不同切割线上的曲线比较。我们还可以进一步地求解并显示出不同切线上的解之间的差异到底有多大。操作步骤如下:1、 右键点击Results&Data Sets,选择加入(Join)。2、 在加入节点的设定区中,数据1的数据集下拉列表中选择Cut Line 2D 2。 3、 在加入节点的设定区中,数据2的数据集下拉列表中选择Cut Line 2D 3。 4、 在加入节点的设定区中,组合的方法选择差集。 5、 新增一个一维绘图组,在数据集中选择加入 1。6、 在一维绘图组下新增一个线图,数据集保留缺省的继承上级,表达式为u/U0。 7、 点击绘图按钮。图 41数据集组合示例6.5 导出数据我们可以导出计算得到的数据,生成文本格式的数据文件,从而用第三方软件打开或编辑,进一步的分析或计算。COMSOL Multiphysics可导出三种数据,分别是数据、绘图和网格。数据用于导出指定解,绘图用于导出所选绘图组中显示的结果(数据形式),网格则用于导出网格文件,包括计算过程中的变形网格。6.5.1 数据当右键点击报告,选中数据后,会出现如下图所示的选项,分别对应于解、文件名、文件类型等的设定,用户进行必要的设定后,点击上方的导出按钮,就可以得到所需的文件。图 42导出数据的选项导出的数据文件有两种典型的文件格式,分别是逐节和电子表格。两种文件格式中,“%”用于说明当前行为注释行,用于说明文件头、属性、网格、数据等。-逐节的文件格式如下是一个包含文件头的逐节的文件格式,其中文件头中说明导出的模型文件名称、版本号、导出日期、导出的维度、节点数量、表达式数量(每个瞬态点结果算一个表达式)、以及描述等。下一行是% Coordinates,表示接下来的一块数据是节点的坐标。所有节点坐标显示完毕后,接下来的一行是% Elements (triangles),表示接下来的一块数据是单元的组成,即每个单元的节点序号。接下来是% Data(表达式)表示接下来的一块内容是括号中的表达式的数据结果。接下来的% Data(表达式)表示接下来的一块内容是括号中表达式的数据结果。其余依此类推,直到文件结束。样例:% Model: turbulent_heat_transfer_.mph % Version: COMSOL 4.1.0.112 % Date: Jan 5
% Dimension: 2 % Nodes: 32000 %Elements: 16000% Expressions: 2 % Description: ? ? % Coordinates0..25 00.06 0.25 0.07224 ……% Elements (triangles) 1 2 4 1 4 3 5 6 8 ……% Data (T (K) @ Time=0) 296.15 296.15 ……% Data (T (K) @ Time=0.2) 296.15 296.15 ……- 电子表格的文件格式开始是文件头。接下来一行是坐标轴、表达式的说明行,本例中第一列表示r轴,第二列表示z轴,第三列表示0时刻的温度,第四列表示0.2秒的温度。其余依此类推。接下来直到最后一行,分别对应于每个网格节点的坐标和如上所述的两个时间点的结果。 样例:% Model: test_.mph % Version: COMSOL 4.1.0.112 % Date: Jan 5
% Dimension: 2 % Nodes: 32000 % Expressions: 2 % Description: ? ?% r z T (K) @ Time=0 T (K) @ Time=0.2 0..15 296.15 0.25 0 296.15 296.15 0.06 296.15 296.150.25 0. 296.15 ……6.5.2 绘图按右键点击报告,选择绘图后,出现如下图所示的设定,用户设定好所有选项后,点击上方的导出钮,得到选中绘图组的数据文件。图 43导出绘图的选项样例:以下是一个案例的二维绘图组中的表面图导出的结果。其中数据列的第三列为颜色,表示导出的结果是绘图组中的表面图,具体的表达式可参考绘图组中的表面图的设定。% Model: test_.mph % Version: COMSOL 4.1.0.112 % Date: Jan 5
% Dimension: 2 % Nodes: 75025 % Expressions: 1 % Description: ? % r z Color 0..15 0..156.5.3 网格按右键点击报告,选择网格后,出现如下图所示的设定,用户设定好所有选项后,点击上方的导出钮,得到选中解的指定时间的结果网格文件(mphbin格式)。图 44导出网格的设定COMSOL使用技巧_V1.0__comsol七、 函数使用技巧COMSOL Multiphysics提供了很多预置的函数形式,包括解析函数、插值函数、高斯脉冲函数、斜坡、方波、阶跃、三角波、波形、随机、高程图、MATLAB脚本函数等,可以满足绝大多数的基本应用。我们可以右键点击全局定义或模型&定义节点,找到函数&…,然后在新增的函数节点中设定相应的参数。7.1 随机函数在COMSOL Multiphysics里面,随机函数用来生成随机的数值,它可以用来产生声学等物理场中所需的白噪音、随机分布的材料参数、随机的初始分布等。7.1.1 随机参数例如,在相分离过程中,通常的模拟方法是设定一个初始的浓度涨落,然后根据相场理论计算随时间的演化过程。大家可以看看CFD模块中的Phase_seperation案例,其中定义了一个含两个自变量的随机函数,然后将它用于定义相场模式的初始值。7.1.2 随机几何形状将随机函数与移动网格相结合,我们可以创建出随机形状的几何结构。例如,设定一个含一个自变量的随机函数rn1,然后绘制一个矩形,设定一个移动网格应用模式(ALE),在上边界指定移动网格的大小为0.1*rn1(x),左右边界指定移动网格的x方向大小为0,y方向不设定。经过计算,得到如下图所示的几何形状,图 45随机的几何结构上图所示的几何结构,可用于模拟分析微观结构中的随机几何对诸如摩擦、接触传热等物理现象的分析。比较令人遗憾的是,COMSOL Multiphysics中提供的随机函数,显然是一个伪随机数序列,目前尚不提供指定随机数种子的功能,这样的后果是每次计算产生相同的随机数序列。大家在使用该随机数的时候,需要注意这个问题。如果希望能够任意指定随机数种子,目前只能通过COMSOL With MATLAB的实时链接功能来实现。7.2 周期性函数上述提到的COMSOL Multiphysics提供的函数功能中,绝大多数都只用来定义了一个有限区间(一个波长),然而,在很多情况下,我们需要的是一个无限扩展的波型,这时候,我们可以使用取余函数来实现这个功能,或者更方便的做法是再创建一个周期性的解析函数。以定义一个三角波为例,缺省的设定是上限为0.5,下限为-0.5。得到的图形如下图,仅在[-0.5, 0.5]之间存在一个三角波,其余均为0。图 46三角波函数示意图如果希望得到一个随时间无限扩展的三角波,我们再创建一个解析函数,然后在表达式中输入tri1(x),并勾选使周期化,并指定上下限,如[-0.5, 0.5],这样我们就可以得到如下图所示的周期性的三角波型函数,图 47周期性三角波函数7.3 高程函数为了便于导入高程图数据,创建地形图的几何结构,COMSOL Multiphysics提供了高度函数,可以通过导入地形的高程数据文件,创建一个随[x, y]坐标变化的插值函数,该插值函数可用于创建几何结构、作为参数使用等。图 48高程函数示例7.4 内插函数通过内插函数,可以建立一个数据表,引入离散的数据,例如实验结果等,COMSOL Multiphysics会自动建立插值函数,形成光滑的数据曲线,以便进行后续的调用和求解。事实上,这个内插函数,还可以从文本格式的数据文件中导入数据,建立光滑的插值函数。将设定区中的数据源从缺省的表单修改为文件,然后给定需要导入的文件名或通过浏览找到它,点击导入即可。COMSOL Multiphysics的内插函数,可以导入格点、逐节、或电子表格等多种格式的文本文件,感兴趣的用户可以查阅后处理的数据导出时得到的文件格式,或者查阅Reference Guide中的相关章节。本节想要强调的是,目前内插函数在导入数据时,只能建立单一结果的函数。也就是说,在COMSOL Multiphysics中导入数据时,通常只能得到单结果的插值函数。然而,对于瞬态、参数化求解等得到的结果,会是一系列时间点,或不同参数的数据结果,如果重新导入到COMSOL Multiphysics中,需要指定导入的数据结果序列。具体的操作方法如下:1、 右键点击Model 1&定义节点,选择函数&内插。2、 点击新增的内插节点,将数据源修改为文件,在文件名称编辑框中输入文件名,或点击浏览…按钮,通过资源管理器找到文件。3、 根据数据文件的格式选择数据格式选项。4、 参数数量,根据数据文件中的形参数量决定。例如一个2D的模型,导出结果后,其参数数量为2。5、 函数编辑框中键入函数名称。6、 文件中的位置,这是决定当前插值函数取数据文件中的哪一列数据。其中列数为从参数数量开始计数,即如果参数为2,则数据文件中的第三列对应于这里的1。例如,建立一个int1函数,取time=0的数据,则文件中的位置编辑框中输入1。如果是取time=1e-8(第四列)的结果,则文件中的位置编辑框中输入2。7、 根据需要修改内插和外推中的选项。8、 点击导入按钮。COMSOL使用技巧_V1.0__comsol八、 耦合变量的使用技巧耦合变量用来在模型的不同区域、或不同对象之间产生相互的数据关联和映射,通常以耦合算子的形式来定义,常见的有积分耦合算子、拉伸耦合算子、投影耦合算子,依托这些算子,在V4.x版本中又扩展出一些衍生的算子,例如平均、最大/小算子等。通过灵活地应用这些算子,我们可以极大地扩展模型中的应用。8.1 积分耦合变量积分耦合算子在一组求解域上对一个表达式积分的值,得到的结果是一个标量。积分耦合算子的源可以是在一个点上的表达式(用来将点上的结果转变为一个全局性质的标量),或者在一个或几个求解域、边界或边上的表达式的积分(用于得到相应对象上的积分结果),该算子可以应用于前处理、后处理等模型中的任意位置。比较典型的积分耦合变量的应用有很多,下面举几个例子,? 几何对象的尺寸:例如在线上对1积分得到线段长度,在面上对1积分得到面积,在3D实体中对1积分得到体积等。? 边界的总量:例如,在入口边界对流速积分得到流场入口的质量流速。? 求解域中的总量:例如,在求解域上对浓度积分,得到全场中的总物质量。将积分耦合变量与前文提到的弱约束的应用相结合,可以实现与总量相关的边界条件约束,或者求解域约束。例如,在CFD模块中,有一类入口边界条件叫做质量流,用户通过设定质量流率,指定在入口处的质量流量,COMSOL Multiphysics自动计算出边界上的速度分布。这个边界条件,实际上是由一个积分耦合变量和一个弱贡献表达式联合组成的。通过查看底层的方程式系统,我们可以看到有一个法向质量流率表达式:spf.imfrinl1 = spf.intinl1(2*(-spf.nrmesh*u-spf.nzmesh*w)*spf.rho*pi*r)以及一个隐藏的弱贡献表达式:(-spf.mfrinl1+spf.imfrinl1)*test(p)积分耦合变量还常常用来把某个参考点的结果非Jacobian矩阵化,成为一个可以被其他表达式或函数直接调用的全局性标量。这种用法常见于求解域中的参数随观测点的变化而演变的模型中,例如案例库中的PID_control案例,在V3.5a以前版本中使用了点积分耦合变量来实现控制,在V4.x中改用类似功能的探针函数来实现这个功能。积分耦合变量的另一种常见用法是对某些观测对象进行积分,然后在后处理中进行分析。例如,案例库中声学模块的案例:Acoustics Module&Industrial Models&absorptive_muffler,用两个积分耦合变量分别对入口和出口积分比较吸收频率的变化。___________________________________________________________________________________________________全国统一客户服务热线:400 888 5100 网址: .cn 邮箱:.cn- 48 -8.2 拉伸耦合变量通过拉伸耦合算子可以实现源域表达式向目标域表达式的耦合映射关系,一般有两种常用形式,分别是线性拉伸和广义拉伸。顾名思义,线性拉伸是指两个对象之间存在相似关系,然后通过指定的参考点来对结果进行坐标变换。广义拉伸则更灵活,可以指定进行坐标变换时的变换关系表达式,实现各种复杂的映射关系。案例库中的CFD Module&Single-Phase Benchmark&turbulent_backstep案例展示了一种典型的拉伸耦合变量的应用。该案例中包含两个子模型,首先通过一个细长的管道湍流分析,得到在出口处的充分发展的湍流的截面流速分布曲线。然后通过拉伸耦合变量,将该出口边界上的流速分布映射到第二个子模型中作为充分发展的入口流速分布,最终求解得到合理的结果。在后处理中,有一种处理方法可以从低维度得到高维度的结果显示,即旋转。事实上,这种操作就是一种拉伸耦合变量的表现【1】。一般情况下,圆柱或球形的研究对象,我们推荐大家采用2D轴对称来模拟,一方面这样做可以极大地减少计算量,另一方面,这样做可以得到更精准的结果。通过广义拉伸,定义坐标变换关系如下就可以得到3D坐标中的结果,r z &=& &=& sqrt(x^2+z^2) z同样的道理,我们可以实现从低维度通过坐标变换,将结果平行拉伸到高维度的对象,例如从线拉伸结果到面、体,或者从面拉伸结果到体,等等。1 可参考V3.5a以前的案例:COMSOL Multiphysics&Heat Transfer&heat_transient_axi。___________________________________________________________________________________________________全国统一客户服务热线:400 888 5100 网址: .cn 邮箱:.cn- 49 -九、 ODE的使用技巧COMSOL Multiphysics除了可以求解常规的PDE以外,还可以求解常微分方程(ODE),分析研究对象随时间的累积效果。在早期版本中,也称为Global Equations,只用来求解标量随时间的ODE。在V4.x中,又增加了对象上的随时间变化的ODE。除了常规的求解随时间的常微分方程以外,ODE还可以用来求解模型中的未知数,实现反向工程的目标。 =9.1 模拟不可逆形态变化例如用户指南中提到的Lotka-Volterra方程,是一个生物学中常见的关于猎食者-猎物生成关系模型,通过两个ODE可以计算得到两种生物随时间的演化关系。这是一种典型的对标量变量的ODE的应用,如果大家有兴趣,可以去查阅手册。在对象上进行的ODE求解,应用范围也很广,例如激光快速成型、不可逆相变等。对此类问题的仿真,通常由于出现了材料的形态变化,物质的属性会产生突变,如果是可逆的变化,可以简单地定义为温度的函数即可。然而如果是不可逆的变化,则不能使用温度的函数,而应该修正为不可逆的某个变量的函数。最简单的做法就是再定义一个变量,该变量只用来表示材料的形态,假定开始状态为0,出现不可逆变化时逐渐增长超过1或某个参考值。这个变量与温度相结合,可以构建出能够准确描述出产生这种不可逆变化后材料的属性。例如,如下图所示的棱柱,当因变量u保持低于20时,扩散系数为1,当u超过20后,产生不可逆的变化,扩散系数变为3.75。在棱柱中央有一个源,求解因变量u随时间的演化。对于这个问题,我们可以增加一个域ODE,因变量为P,方程形式很简单,定义如下式即可,dP=step2(u) dt然后我们就可以定义因变量u的扩散系数属性满足以下方程,c1+2.75*step1(P)其中step是带平滑的阶跃函数,便于整个模型的收敛求解。经过求解,我们得到如下图所示的结果,可以看到产生相变的范围和区域,凡是&1的区域均为产生相变的区域。___________________________________________________________________________________________________全国统一客户服务热线:400 888 5100 网址: .cn 邮箱:.cn- 50 -9.2 反向工程约束在我们进行研究时,常常会遇到这样一类问题:我们能够知道结果是多少,但是相应的条件我们不得而知,是需要我们求解出来的。这属于一类反向工程问题,还是让我们来看一个实例吧。假定有一个如下图所示地基承载力分析【1】,其中我们知道临界破坏值对应的应变大小,但是不太清楚达到这种状态所需的载荷应该是多少,象这类问题,就需要采用前面曾经用到过的ODE来实现。如前节所述,我们定义一个ODE方程,pressure=vc-para,其中的para是临界破坏形变值,vc是一个变量,通过求解模型中的竖直方向的应变来得到,这是一个因变量。这个ODE方程实际上包含两个约束:√√ 约束vc=para,即因变量的解必须等于临界破坏值。 约束pressure,虽然我们不知道这个值,但是不管它的大小是什么,必须使得上面这个约束满足要求。也就是说,它的大小实际上是与vc=para这个表达式挂钩的。可以想象,如果pressure大于我们所需的值,可能就会vc&para,反之亦然。图 49地基承载分析 图 50 ODE设定1 案例库中Geomechanics Module&Soil Models&flexible_footing___________________________________________________________________________________________________全国统一客户服务热线:400 888 5100 网址: .cn 邮箱:.cn- 51 -十、 MATLAB实时链接一直以来,COMSOL Multiphysics与MATLAB保持完全兼容关系,早期的FEMLAB版本甚至必须依托MATLAB才能正常运行。通过与MATLAB之间的相互无缝调用,极大地扩展了两种软件的功能,我们可以在COMSOL Multiphysics中调用MATLAB脚本,也可以在MATLAB中通过编写脚本来扩展COMSOL Multiphysics的模型应用,例如循环、条件计算等。我们还可以在MATLAB中依托GUIDE工具箱开发一个GUI来创建一个成熟的小软件包。10.1 同时打开两种程序GUI在早期版本中,运行COMSOL with MATLAB时,会自动打开两种程序界面,两者共用一个Workspace,实现数据的共享。进入V4.x时代,程序的运行方式出现了一些变化,COMSOL Multiphysics只会打开一个类似Dos窗口的服务窗口,MATLAB则打开完整的界面,所有与前者相关的脚本函数,先发送指令到服务进程中,计算完成后把结果返回后者。在这样一种运行方式下,很多用户觉得使用不那么顺手,因为需要在MATLAB中载入模型才能够调用模型的数据,而不是象以前那样直接从共享的Workspace中调用结果。事实上,通过以下操作,我们还是可以同时打开两种程序的界面,并共享数据。1、 打开COMSOL with MATLAB,这时候会得到一个Dos窗口,一个MATLAB界面。2、 打开COMSOL Multiphysics,创建或载入模型。3、 点击菜单:文件&客户端-服务器&导出模型到服务器,设定正确的参数,尤其是模型的名称,缺省一般是Model,记住这个名称。4、 在MATLAB中执行:model=ModelUtil.model('Model'),就可以得到刚刚导出的模型。反过来,当我们在MATLAB中创建或修改了模型的单元体以后,可以通过点击菜单:文件&客户端-服务器&从服务器导入模型,在COMSOL Multiphysics中得到同步的模型。10.2 在COMSOL中使用MATLAB脚本进入V4.x版本以后,我们现在可以直接在COMSOL Multiphysics中使用MATLAB脚本。例如,下面这个脚本用来实现对一个数列的代数求和。这是一类COMSOL Multiphysics没有预置的函数,通过脚本,我们调用了MATLAB提供的脚本函数symsum来对数列进行代数求和,然后返回结果。 function res=mysymsum(x) % eval – convert symbols result to double result % symsum – symbolic summation. % ones & size – make sure the dimension are same for x &-& tmp=ones(size(x));res=eval(symsum(1/n-1/(n-1),2,inf).*tmp);___________________________________________________________________________________________________全国统一客户服务热线:400 888 5100 网址: .cn 邮箱:.cn- 52 -COMSOL使用技巧_V1.0__comsol在COMSOL Multiphysics中使用MATLAB的操作步骤很简单,右键点击全局定义,选择函数&MATLAB,然后在设定区中指定与脚本文件名相同的函数名称,指定自变量的名称。通常程序会自动求解偏导,用户也可以手动在衍生值中输入偏导形式。在调用时,按照脚本函数的格式书写在编辑框中即可。我们需要注意其中的输入/出变量的矩阵维度必须匹配。由于COMSOL Multiphysics采用有限元方法,因此通常情况下,调用MATLAB时输入的变量是一个矩阵,其维度根据调用该脚本函数的对象而变化,输出的矩阵必须是具有相同的维度,否则程序会报错。因此常见的脚本编写过程中,我们可以首先利用size脚本函数生成一个相同大小的结果矩阵,然后依托该矩阵来进行算法处理。10.3 在MATLAB中编写GUI MATLAB为大家提供了一个图形化界面的编写工具箱:GUIDE。我们可以用这个工具箱来编制一个自己的图形化界面,创建自己的小软件包。实现这个功能并不复杂,常见的做法如下:首先,打开COMSOL with MATLAB,在MATLAB操作界面中执行guide,打开GUI编辑器。然后通过在模板上添加控件,实现一个图形化的操作界面,如下面的图例。其次,保存上一步创建的界面,将得到两个文件,例如demo.fig,这个文件记录GUI的信息;demo.m,这个文件记录GUI对应的指令函数。我们需要修改M文件,在其中添加COMSOL Multiphysics的执行指令。最后,经过调试,成功后即可得到所需的小软件包。下图是一个GUI开发文件示例【1】 。在编写M文件时,首先需要在初始化函数中插入COMSOLMultiphysics建模的必要指令,建议大家把所有在后期不会被修改的语句尽量放在这一块。接下来,向控件的触发函数中加入对应的执行语句,并根据GUI的图形化句柄来调用相对应的各个控件的值,或向控件传递参数,下面的图例中截取了一段,显示的是修改网格的智能剖分级别后,点击绘制网格图形按钮的回调函数指令序列。1 可参考中仿科技Webinar中二次开发讲座:10.4 常用脚本指令在MATLAB脚本编写中,有两个脚本函数应该是最常用到的,即:字符串格式打印函数sprintf(或类似功能的脚本函数fscanf等),字符串解释执行函数eval。在COMSOL Multiphysics的脚本函数中,采用了面对对象的编程语言格式,绝大多数脚本需要先创建一个对象,然后设定对象的属性,这就造成了很多脚本指令中,属性值以字符串的形式出现,不能直接调用变量。此外,每个对象均有一个独有的标记,所以在创建对象,特别是通过循环语句来创建时,需要指定序列号,这是不可能用直接书写循环变量形式实现的。因此,在我们编写脚本中,常常通过格式打印方法生成可执行的字符串,然后通过解释执行函数来执行这个自动生成的字符串。下面的示例脚本灵活地运用这两个函数,通过循环语句构建五个随机位置、随机大小的圆。% create 5 random circle with random radius between 0.02 ~ 0.05rand('state',sum(clock)); % set a seed for random numberfor i=1:5tmp = rand(3,1);r1 = tmp(1) * 0.03 + 0.02; % larger than 0.02, smaller than 0.02+0.03=0.05x1 = tmp(2) * 0.9 + 0.05; % avoid out of the unit squarey1 = tmp(3) * 0.9 + 0.05; % avoid out of the unit squarestr = sprintf('model.geom(''geom1'').feature.create(''c%d'', ''Circle'');', i); % create a circleeval(str);str = sprintf('model.geom(''geom1'').feature(''c%d'').set(''r'', ''%f'');',i,r1); % set radiuseval(str);str = sprintf('model.geom(''geom1'').feature(''c%d'').setIndex(''pos'', ''%f'', 0);',i,x1); % set x of center eval(str);str = sprintf('model.geom(''geom1'').feature(''c%d'').setIndex(''pos'', ''%f'', 1);', i,y1); % set y of center eval(str);end十一、 其他11.1 局部坐标系局部坐标系常用于力学分析,包括常见的结构力学,以及压电材料等。它用于通过设定局部坐标系,并定义到模型的局部对象,使得在局部区域的材料属性可以很方便地依照局部坐标系的坐标矢量方向来定义,从而实现快速建模。COMSOL Multiphysics提供笛卡尔坐标系、圆柱坐标系、球坐标系等多种局部坐标系的定义方法。例如,案例库中MEMS&Piezoelectric Devices&microgripper案例,其中定义了一个旋转坐标系,用来设定微爪中间的压电器件的材料参数等,它具有明显的方向性,通常我们都采用定义局部坐标系的方法来设定,减少出错的机会。11.2 应力集中问题 应力集中现象,是结构力学分析中经常遇到的问题,当受力构件由于外界因素(局部载荷等)或自身因素几何形状、外形尺寸发生突变(尖角等)而引起局部范围内应力显著增大的现象。在数值模拟中,应力集中现象极易产生误差,对结果产生较大的影响。最常见的现象是为了得到精确的结果,我们经常通过加密网格的方法来实现,然而当存在应力集中现象时,网格越密,得到的应力分析的最大值越大,甚至达到不可思议的地步。很多用户经常纠结于这种随网格加密而变化的模型。当我们仔细分析结果时,可以发现,这种结果变化往往集中在出现了应力集中现象的区域,其他区域的解保持不变。应力集中现象实质上是一种奇异问题,通常情况下,在有限元方法的计算中,由于Jacobi矩阵受到网格质量的影响很大,因此并不是网格越细化,越能得到精确的结果,相反会越细化,得到的应力值越大。对于这种问题,各种商业有限元计算软件采用了不同的方法来处理,比较常用的是通过手动调整网格,或者自适应网格等方法。前者需要凭借使用者的经验,后者在COMSOL Multiphysics中,需要参考以下操作步骤调整自适应网格求解器中的某些参数:1、在求解步骤中,添加自适应。以稳态求解为例,在设定区中,展开“扩展”,勾选“自适应”。 2、调整自适应的选项。在求解器配置中显示缺省求解器,然后找到自适应节点,在设定区中,最大网格细化次数,可选择一个适当的值,例如3~8之间的整数。将单元选择下拉列表修改为“最大误差分数”,单元比例修改为较大的值,例如0.75。3、求解后,修改后处理选项。例如,显示面图时,展开设定区中的质量,将恢复修改为各处或域内。在面上最大/小值的设定区中,展开高级,将恢复修改为各处或域内。通过以上步骤的设定,我们可以得到如下图所示的合理的网格和结果。11.3 灵活应用案例库COMSOL Multiphysics提供了一个内容丰富的案例库,其中包含300多个案例,每个案例分门别类地排列在模块中,用户可以很轻松地找到自己想要学习的案例。此外,我们还可以在搜索框中输入关键词来快速查找是否有自己感兴趣的案例。每个案例均包含有一个电子文件,和一个案例文件。其中的电子文档,详细地描述了案例的背景,专业知识,数学模型,约束条件,后处理结果,最后给出了详细的操作步骤,我们可以根据该操作步骤一步一步地复现案例库中的案例。而且,我们还可以通过与案例库提供的案例文件进行对比来找出自己建模过程中出现的错误。通常情况下,我们在创建自己的模型之前,可以先在案例库中找找看,比较轻松的做法是依托类似的案例,逐渐修改或参考案例的做法来实现自己的目标。11.4 经常看看在线帮助COMSOL Multiphysics提供详细易用的在线帮助,基本上每个模型树节点均可查阅对应的在线帮助。在每个节点的上方点击图标,就会在右侧打开一个在线帮助的窗口。缺省情况下,该窗口与模型树中的当前节点关联,其中显示当前关联的对象的详细说明。当我们在建模的过程中,如果遇到模型中的节点意义不明,其中的某些设定框不理解等,都可以打开在线帮助来加以了解。如下图显示当前节点为旋转坐标系时的在线帮助窗口,点击其中的Rotated System链接后,可以看到如下右图所示说明。COMSOL使用技巧_V1.0__comsol11.5 临时文件通常情况下,COMSOL Multiphysics打开模型时,会自动创建一个副本,所有的操作一般会自动保存到该临时副本文件中,避免覆盖原始文件。我们需要开启对应的选项,打开菜单:选项&设定,点击临时文件标签,勾选保存恢复文件。如果有必要,我们还可以修改恢复文件目录或临时文件目录。前者记录操作过程中的自动保存数据,后者记录计算过程中出现的临时文件。这两种临时文件,第一种我们是可以进行解析,并有可能得到模型文件。后者则需要更深入的了解,不属于本书讨论内容。第一种临时文件,是用来保存中间结果,以便后续恢复求解。其目的是为了便于在求解的中途暂停,保存数据或分析数据,然后通过点击求解器的继续按钮恢复求解。要实现暂停求解,我们可以在右下侧的进度窗口中,点击求解器后方的停止按钮。有时候,当我们求解的时候,程序因为某种未知原因无法保存,或者闪退,可以尝试去临时文件夹中找找看,尝试恢复中间结果的模型文件。操作方法是:1、 进入到临时文件夹,例如:%userprofile%\.comsol\v43a\recoveries\MPHRecovery1249date_Feb_25__PM.mph2、 选中所有的文件,然后压缩成zip文件。3、 修改压缩文件的扩展名zip为mph,得到模型文件。11.6 物理场开发器这是一个全新的功能,通过物理场开发器,我们可以开发个人的模块或应用模式。事实上,我们完全有理由相信,COMSOL公司也是拿这个工具在开发新模块。点击菜单选项&设定,在开发器工具标签中,勾选启用物理开发器。这样就打开了物理开发功能,我们就可以编辑或新建物理场开发文件。并且这些新开发的模式可以打包导出成Jar格式的插件,分发给其他用户。具体的开发流程和用法,请查阅物理开发器用户手册。转载请保留本文连接:分享到:相关文章声明:《【comsol】COMSOL使用技巧_V1.0_》由“没资格わ”分享发布,如因用户分享而无意侵犯到您的合法权益,请联系我们删除。TA的分享}

我要回帖

更多关于 comsol传热模型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信