COMSOL使用技巧

合集下载

comsol使用技巧

comsol使用技巧

各位同道好,看了半个月的帮助文档,和大家分享下心得。

因专业所需,所以本文偏重传质及相关的设定,欢迎版主大神指点:1.基本求解类型∙稳态∙瞬态、时间离散、瞬态波动∙特征频率、特征值∙频域、频域波动(modal)通常,做化工的用稳态和瞬态求解较多。

声化学可能会涉及特征频率吧。

对于稳态求解,除了最常用的,comsol还提到一个连续化参数求解器:1参数必须为单增或单减的实数值;2参数可为方程、约束、表达式、物性参数,但不可为网格参数。

另外对于结构力学而言,有个load case,这个设置的妙处在于计算多个载荷或约束时不用反复装配总刚矩阵。

而初始化稳态求解器则适用于需要初始化的稳态两相流(level set function or 相场函数)以及所用的湍流、低k-e、传热。

对于瞬态求解,需要注意的是在times中设定的时间只是输出时间的间隔,而非实际计算的时间步长,而时间步的设定在后续求解器attribute中介绍;电沉积适合用初始化瞬态求解器,可加电流分布初始化,前提是变形尺寸小。

∙线性vs 非线性:若方程系数或者约束中含有要求解的变量则需选用非线性求解器,反之则选线性,但需要注意的是线性求解器也可用于小规模的使用单步牛顿法求解的非线性问题以及少量变量耦合的非线性问题∙关于总刚或雅克比矩阵:将控制方程线性化处理后,离散得到的线性方程组的系数矩阵。

不正确的雅克比矩阵会导致:1、线性稳态求解器和特征值求解器求出错解;2、非线性稳态和瞬态问题时间耗费增大甚至求不出解。

一般导致总刚出现问题的原因有:1、函数及其导数定义出错;2、Matlab 函数并没定义其导数而在comsol中调用时使用了其导数;3、nojac operator;4、解的形式不适于控制方程;(这个问题什么意思,没遇到过)5、在没有选择Allow complex number and use complex function with real input 选项的情况下使用了复数。

COMSOL使用技巧

COMSOL使用技巧

COMSOL使用技巧1.理解物理原理:在使用COMSOL之前,确保您对要模拟的物理现象有基本的了解。

这将有助于您选择合适的物理模型和相应的物理场。

2.选择合适的物理模型:COMSOL提供了各种各样的物理模型,包括热传导、流体力学、电磁场等等。

根据您要模拟的现象选择适当的物理模型。

3.网格生成:COMSOL中的有限元分析需要先生成网格。

一个合适的网格可以提高模拟的精度和效率。

确保生成的网格对于要模拟的物理现象来说是合适的。

4.参数设置:COMSOL中的模型需要设置各种各样的参数,如初始条件、边界条件等。

确保这些参数的设置是准确的,以获得正确的结果。

5.可视化工具:COMSOL提供了各种各样的可视化工具,用于查看和分析模拟结果。

熟练使用这些工具可以更好地理解和解释模拟结果。

6.考虑非线性问题:在一些情况下,物理模型可能包含非线性现象。

在这种情况下,需要使用COMSOL的非线性求解器来解决问题。

正确设置非线性求解器的参数可以提高求解效率和稳定性。

7.优化和设计:COMSOL还提供了优化和设计模块,用于优化参数和设计物理系统。

熟练使用这些模块可以帮助您得到最佳的设计和性能。

8.参考文档和教程:COMSOL官方网站上提供了大量的参考文档和教程,可以帮助您更好地理解和使用软件。

及时查阅这些文档和教程可以解决一些常见问题和困惑。

9.运行和调试:在运行模拟之前,确保模型设置正确,参数设置合理。

可以通过运行简单的测试问题来调试模型,以确保模型的正确性。

10.并行计算:如果您的计算机配备了多个处理器或计算核心,可以使用COMSOL的并行计算功能来加速计算过程。

合理设置并行计算参数可以充分利用计算资源,提高计算效率。

11.结果导出:COMSOL可以将结果导出为各种文件格式,如图像、数据文件等。

根据需要选择合适的导出方式,以便进一步分析和使用模拟结果。

12.参数扫描和响应面建模:COMSOL提供了参数扫描和响应面建模功能,可以帮助您理解和优化模型的行为。

COMSOL使用技巧

COMSOL使用技巧

COMSOL Multiphysics使用技巧(旧版通用)一、全局约束/全局定义对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。

例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe 恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程(ODE),COMSOL同样也支持自定义ODE作为全局约束。

例如,在一个管道内流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl ,从而使得某一位置处的浓度conc 恒定在指定值c_set 。

(基本模块模型库 > Multidisciplinary > PID control )。

需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。

因此,这个变上限积分需要转化成一个ODE ,作为全局约束加入。

令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int-=。

在COMSOL 中,变量u 对时间的导数,用ut 表示。

因此变量int 的时间导数即为intt 。

利用COMSOL 的“ODE 设定”,我们可以很容易的将intt-(conc-c_set)=0这个ODE 全局约束添加入模型之中。

二、积分耦合变量COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。

那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型的维度,会有相应积分耦合变量。

COMSOL使用技巧

COMSOL使用技巧
二、积分耦合变量
COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。
积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。根据模型的维度,会有相应积分耦合变量。用户还可以指定得到结果后的作用域,例如全局,或指定某些点、边、边界或求解域。从而可以将对积分耦合变量结果的访问限制在指定的对象上。
例如,在二维扩散问题的仿真中,为了观测流出边界上总的流出的物质量,可以在出口边界利用边界耦合积分变量,然后可以直接得到数据曲线。(基本模块模型库> Chemical engineering > absorption)
三、时间积分
现在我们已经可以在COMSOL中方便的定义任意一个变量u及其表达式的时间微分(ut)、空间微分(ux,uy,uz)、空间积分(积分耦合变量)。那么对于时间的积分如何处理呢?COMSOL当然也提供了这项功能。
采用ODE进行时间积分,仅仅只能对标量进行积分,如果就是想对求解域内的某个值进行积分(通常具有维度),则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果。
四、停止条件
在进行稳态求解时,COMSOL迭代求解当然就是以收敛条件满足作为计算的停止条件。但就是在瞬态分析的情况下,计算何时停止就可由用户自行选择了。与其她仿真软件类似,COMSOL默认的瞬态分析停止条件就就是遍历用户使定的时间范围后,计算停止。但就是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止。

COMSOL使用技巧

COMSOL使用技巧

COMSOL使用技巧1.认识COMSOL的用户界面:COMSOL的用户界面提供了一系列的工具箱和菜单,用于创建和管理模型、设置物理场和边界条件等。

熟悉并了解这些工具的功能、用途和操作方法是使用COMSOL的第一步。

2.创建几何模型:COMSOL提供了几何建模工具,可以用于创建各种形状和几何结构。

在创建几何模型时,可以使用基本几何体(如球、圆柱等)、使用参数化几何体(如旋转体、拉伸体等)或导入CAD文件。

确保几何模型的准确性和合理性对于后续的仿真分析非常重要。

3.设置物理场和边界条件:COMSOL提供了各种物理场模块,包括电磁场、流体力学、热传导等。

在设置物理场时,需要根据具体的物理现象选择合适的物理场模块,并设置相应的物理参数和边界条件。

合理的物理场和边界条件设置对于仿真结果的准确性有重要影响。

4.网格划分:COMSOL使用有限元方法进行仿真计算,因此需要将几何模型离散化为有限元网格。

合理的网格划分可以提高计算速度和结果准确性。

COMSOL提供了自动和手动网格划分工具,可以根据具体的需求选择适当的网格划分方法和参数。

5.选择适当的求解器:COMSOL提供了多种求解器,包括直接法、迭代法和松弛法等。

选择适当的求解器可以提高求解速度和收敛性。

如果发现仿真计算收敛困难或速度过慢,可以尝试更换不同的求解器进行求解。

6.运行仿真计算:在设置完物理场和边界条件、完成网格划分和选择求解器后,可以开始运行仿真计算。

COMSOL提供了运行和监控仿真计算进程的工具,在运行仿真时,可以实时观察仿真结果,并根据需要进行调整和优化。

7.结果分析和后处理:COMSOL提供了丰富的结果分析和后处理工具,可以对仿真结果进行可视化、统计和比较等。

通过结果分析和后处理,可以深入理解仿真结果,并从中获取所需的信息。

合理的结果分析和后处理方法可以提高仿真结果的可理解性和应用价值。

8.优化和验证:在进行COMSOL仿真时,往往需要对模型和参数进行优化和验证。

comsol使用技巧

comsol使用技巧

comsol使用技巧COMSOL(Computer Simulation)是一款功能强大、可扩展的多物理场仿真软件,广泛应用于科研、工程设计、优化等领域。

以下是一些COMSOL使用的技巧,帮助用户更好地使用该软件。

1. 理解仿真物理模型:在使用COMSOL进行仿真之前,首先要理解所仿真问题的物理模型。

这包括理解各种物理现象、边界条件、材料属性等,以便能够选择适当的仿真模块和设置相关参数。

2. 利用“模块库”和“建模库”:COMSOL提供了丰富的模块库和建模库,其中包含了许多常见的物理模型和几何形状。

用户可以直接选择相应的模型和几何形状,并根据自己的需求进行修改和优化。

3. 设置适当的网格:网格的划分对于仿真结果的准确性和计算效率都有很大影响。

在设置网格时,需要考虑到模型的复杂程度、几何形状的特点以及仿真结果的精度要求。

一般来说,需要在保证准确性的前提下尽量减小网格的规模。

4. 使用参数化建模:COMSOL支持参数化建模,即通过调整参数来实现对模型的灵活控制。

参数化建模可以帮助用户快速进行参数优化,快速得到最佳解决方案。

同时,参数化建模也便于对不同场景进行比较和分析。

5. 结果解析和后处理:COMSOL提供了丰富的结果解析和后处理功能,例如对结果进行可视化、绘制曲线、生成报告等。

通过对结果的进一步分析,可以更全面地理解模型和现象,并得出科学合理的结论。

6. 使用求解器设置:COMSOL提供了多种不同的求解器设置选项,用户可以根据自己的需求选择合适的求解器。

一般来说,直接求解器适用于较小规模的问题,而迭代求解器适用于较大规模和复杂度较高的问题。

7. 并行计算:COMSOL支持并行计算,即多个处理器同时进行计算,以提高计算效率。

在进行大规模求解时,可以通过设定并行计算参数来加速计算过程。

8. 学习和交流:COMSOL拥有庞大的用户群体和丰富的技术社区。

用户可以通过学习资源、在线论坛、研讨会等途径,与其他COMSOL用户进行交流和经验分享,以提升自己的仿真技能。

COMSOL使用技巧

COMSOL使用技巧

COMSOL Multiphysics使用技巧(旧版通用)一、全局约束/全局定义对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。

例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe 恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程(ODE),COMSOL同样也支持自定义ODE作为全局约束。

例如,在一个管道内流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl ,从而使得某一位置处的浓度conc 恒定在指定值c_set 。

(基本模块模型库 > Multidisciplinary > PID control )。

需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。

因此,这个变上限积分需要转化成一个ODE ,作为全局约束加入。

令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int -=。

在COMSOL 中,变量u 对时间的导数,用ut 表示。

因此变量int 的时间导数即为intt 。

利用COMSOL 的“ODE 设定”,我们可以很容易的将intt-(conc-c_set)=0这个ODE 全局约束添加入模型之中。

二、积分耦合变量COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。

那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型的维度,会有相应积分耦合变量。

comsol简单技巧

comsol简单技巧

comsol简单技巧一、整体模型:1、时间控制:I=I1*(t>=0 )*( t<=600)+I2*(t>600 )*(t<1200)+I3*(t>=1200 )*( t< =1800)2、模型耦合的建立:S T U D Y 11 In the Model Builder window, right-click Study 1 and choose Show Default Solver.2 Expand the Study 1>Solver Configurations node.Solver 11 In the Model Builder window, expand the Study 1>Solver Configurations>Solver1>Stationary Solver 1 node, then click Fully Coupled 1.2 In the Fully Coupled settings window, click to expand the Method and Termination section.3 From the Nonlinear method list, choose Automatic highly nonlinear (Newton).4 In the Model Builder window, right-click Study 1 and choose Compute.3、无限元域例子:flexible-footing (在ACDC里)4、在comsol中设置一个参数,然后这个参数取不同的值,然后一次性把这些结果全部算出来的方法:参数化扫描。

在study中设置参数化扫描,在求解设置中设置,选择参数并添加,下拉框设置扫描二、ACDC相关:1、阻抗边界条件:/doc/073784257.html,/s/blog_8bbbadd001 0192er.html阻抗边界条件(Impedance Boundary Condition)计算集肤效应的一个有效替代的方法是用阻抗边界条件(Impedance Boundary Condition)简化金属计算域。

comsol操作技巧

comsol操作技巧

c o m s o l操作技巧(总9页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--comsol操作技巧下面是本人在利用comsol解决实际问题时碰到的一些问题,通过上网查询,以及自己想出的方法进行解决,很多是网络是无法直接查询到,希望和大家一起分享,也许其中的某条正是你下载冥思苦想要解决的问题,希望能够帮到你。

上网查找的部分如有侵权,请告之删除,谢谢!(一)利用comsol的计算源程序,来建立新的循环计算如果需要利用其它计算后的数值代入到comsol进行后计算,这就不可避免的要利用comsol的源程序进行后学的连续计算,这里主要需解决在次计算利用上次计算初始值的问题,下面两段就是有无利用上次计算结果作为初始值的程序:%正常的求解% Solve problem=femtime(fem, ...'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'relax',},'postsmoot h','ssor','postsmoothpar',{'iter',3,'relax',},'csolver','pardiso'}, ...'mcase',[0 1]);%将上次求解结果作为下次计算的初始值的求解% Mapping current solution to extended meshinit = asseminit(fem,'init',,'xmesh',,'blocksize','auto');%(此处是关键)% Solve problem=femtime(fem, ...'init',init, ... %(此处是关键)'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'relax',},'postsmoot h','ssor','postsmoothpar',{'iter',3,'relax',},'csolver','pardiso'}, ...'mcase',[0 1]);(二)对常数进行赋值下面一段程序是comsol中常数的赋值语句:% Constants= {'U0','', ...'I0','35', ...'It1','35', ...'It2','35', ...'It3','35', ...'It4','35', ...'Vt1','4', ...'Vt2','4', ...'Vt3','4', ...'Vt4','4', ...'OpenVt1','', ...'OpenVt2','', ...'OpenVt3','', ...'OpenVt4',''};我们可以通过以下语句对其中的35,4,进行修改It1=700;It2=700;It3=700;It4=700;(1,6)={It1};(1,8)={It2};(1,10)={It3};(1,12)={It4};这样就可以实现常量变成变量,进行计算了(三)启动COMSOL with MATLAB 2007b时,MATLAB 和COMSOL Multiphysics用户界面都没有出现该问题多出现在Windows上使用COMSOL with MATLAB 2007b,MATLAB 2007a及更早的版本没有这种问题。

comsol操作技巧

comsol操作技巧

comsol操作技巧下面是本人在利用comsol解决实际问题时碰到的一些问题,通过上网查询,以及自己想出的方法进行解决,很多是网络是无法直接查询到,希望和大家一起分享,也许其中的某条正是你下载冥思苦想要解决的问题,希望能够帮到你。

上网查找的部分如有侵权,请告之删除,谢谢!(一)利用comsol的计算源程序,来建立新的循环计算如果需要利用其它计算后的数值代入到comsol进行后计算,这就不可避免的要利用comsol的源程序进行后学的连续计算,这里主要需解决在次计算利用上次计算初始值的问题,下面两段就是有无利用上次计算结果作为初始值的程序:%正常的求解% Solve problem=femtime(fem, ...'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'rela x',},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax', },'csolver','pardiso'}, ...'mcase',[0 1]);%将上次求解结果作为下次计算的初始值的求解% Mapping current solution to extended meshinit = asseminit(fem,'init',,'xmesh',,'blocksize','auto');%(此处是关键)% Solve problem=femtime(fem, ...'init',init, ... %(此处是关键)'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'rela x',},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax', },'csolver','pardiso'}, ...'mcase',[0 1]);(二)对常数进行赋值下面一段程序是comsol中常数的赋值语句:% Constants= {'U0','', ...'I0','35', ...'It1','35', ...'It2','35', ...'It3','35', ...'It4','35', ...'Vt1','4', ...'Vt2','4', ...'Vt3','4', ...'Vt4','4', ...'OpenVt1','', ...'OpenVt2','', ...'OpenVt3','', ...'OpenVt4',''};我们可以通过以下语句对其中的35,4,进行修改It1=700;It2=700;It3=700;It4=700;(1,6)={It1};(1,8)={It2};(1,10)={It3};(1,12)={It4};这样就可以实现常量变成变量,进行计算了(三)启动COMSOL with MATLAB 2007b时,MATLAB和COMSOL Multiphysics用户界面都没有出现该问题多出现在Windows上使用COMSOL with MATLAB 2007b,MATLAB 2007a及更早的版本没有这种问题。

COMSOL使用技巧

COMSOL使用技巧

COMSOL Multiphysics使用技巧(旧版通用)一、全局约束/全局定义对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。

例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe 恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程(ODE ),COMSOL 同样也支持自定义ODE 作为全局约束。

例如,在一个管道内流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl ,从而使得某一位置处的浓度conc 恒定在指定值c_set 。

(基本模块模型库 > Multidisciplinary > PID control )。

需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。

因此,这个变上限积分需要转化成一个ODE ,作为全局约束加入。

令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int -=。

在COMSOL 中,变量u 对时间的导数,用ut 表示。

因此变量int 的时间导数即为intt 。

利用COMSOL 的“ODE 设定”,我们可以很容易的将intt-(conc-c_set)=0这个ODE 全局约束添加入模型之中。

二、积分耦合变量COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。

那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型的维度,会有相应积分耦合变量。

COMSOL使用技巧

COMSOL使用技巧
例如PDE方程 ,其中即为特征值(下图中的Lambda)。我们可以先添加全局约束,定义E=1,而E其实就是一个积分耦合变量,对应于解变量u2在求解域上的积分。通过这样操作,我们就把Lambda与解变量u建立的联系,然后使用COMSOL提供的非线性求解器完成求解。
六、利用耦合变量对结果进行扫掠
COMSOL支持多维度的耦合计算仿真,这就是COMSOL独有的强大功能之一。COMSOL允许用户对一个物理问题做多维度的建模分析。也就就是说,同一个仿真过程里可以包含多个几何结构,这些几何结构通常都就是不同维度的,最常见的就是包含一个三维的完整几何,还有一个或者多个二维的截面,再加一个或多个一维的线。在不同的几何上,用户都可以建立物理方程并同时求解,这些几何之间就是如何传递参数的呢,就就是通过COMSOL的耦合变量。
积分耦合变量除了用于添加约束comsol允许用户将任意表示式在任意求解域或者边界上的积分定义为一个变量然后直接在后处理中对该自定义的积分耦合变量做数据可视化操作能够在出口边界利用边界耦合积分变量chemicalengineering时间积分现在我们已经能够在comsol中方便的定义任意一个变量u及其表示式的时间微分空间微分comsol也是经过ode的设定来实现的我们已经能够利用一个边界积分耦合变量来描述某个时刻流出的物质量需要知道一段时间内总的物质流出量totmassdtflowtotoutmassoutmassflowdtdtot求导后就变成了一个ode方程我们使用comsolode设定功能便能够定义这个新的变量totmass采用ode进行时间积分则需要采用耦合一个pde应用模式的方法经过修改pde方程使其满足对时间的常微分方程形式停止条件在进行稳态求解时comsol迭代求解当然是以收敛条件满足作为计算的停止条件可是在瞬态分析的情况下comsol默认的瞬态分析停止条件就是遍历用户使定的时间范围后comsol还能够提供一种更为灵活而且强大的功能当该变量或表示式满足一定条件时comsol的停止条件使用的是布尔表示式此时停止条件满足布尔表示式资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除

COMSOL之二十大使用技巧

COMSOL之二十大使用技巧

COMSOL Multiphysics 之二十大使用技巧一、 全局约束对于多物理仿真,添加全局约束是COMSOL 非常有用的功能之一;例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe 恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可; 有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程ODE,COMSOL 同样也支持自定义ODE 作为全局约束;例如,在一个管道内流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl,从而使得某一位置处的浓度conc 恒定在指定值c_set;基本模块模型库 > Multidisciplinary > PID control;需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义;因此,这个变上限积分需要转化成一个ODE,作为全局约束加入;令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int -=;在COMSOL 中,变量u 对时间的导数,用ut 表示;因此变量int 的时间导数即为intt;利用COMSOL 的“ODE 设定”,我们可以很容易的将intt-conc-c_set=0这个ODE 全局约束添加入模型之中;二、 积分耦合变量COMSOL 的语法中,变量u 对空间的微分,分别默认为用ut,ux,uy,uz 等来表示,这为仿真提供了极大的便利;那么对变量u 的空间积分呢COMSOL 提供了积分耦合变量来实现这一功能;积分耦合变量分为四种:点point积分耦合变量、边edge积分耦合变量、边界boundary 积分耦合变量、求解域subdomain积分耦合变量;根据模型的维度,会有相应积分耦合变量;用户还可以指定得到结果后的作用域,例如全局,或指定某些点、边、边界或求解域;从而可以将对积分耦合变量结果的访问限制在指定的对象上;求解域积分耦合变量,就是对指定变量或表达式在指定的某个或者某些求解域上做积分,积分的结果赋给自定义的这个积分耦合变量;对于三维仿真,这个积分是体积分;对于二维则是面积分;最典型的应用当属对数值1进行积分,可以得到体积或面积;边界积分耦合变量,就是对指定变量或表示在指定的某个或者某些边界上做积分,积分的结果付给自定义的这个积分耦合变量;对于三维仿真,这个积分是面积分;对于二维则是线积分;对1积分可以得到面积或边长;边积分耦合变量,就是对指定变量或表达式在指定的某个或者某些边上做积分,积分的结果付给自定义的这个积分耦合变量;仅存在于三维仿真中,这个积分是线积分;对1积分得到边长;点积分耦合变量,就是对指定变量或表达式在指定的某个或者某些点上给出它的值;它的最主要用法是将某个点上的结果映射到指定的对象上;在上面PID控制的例子中,指定位置处的浓度conc就是一个点积分耦合变量,用来提取点PT1处的浓度值;同时,浓度c的时间变化率ct在PT1点的取值,也可以用同样的方法提取出来,付给变量ctime;积分耦合变量除了用于添加约束,也常常用于后处理;COMSOL允许用户将任意表达式在任意求解域或者边界上的积分定义为一个变量,然后直接在后处理中对该自定义的积分耦合变量做数据可视化操作;例如,在二维扩散问题的仿真中,为了观测流出边界上总的流出的物质量,可以在出口边界利用边界耦合积分变量,然后可以直接得到数据曲线;基本模块模型库 > Chemical engineering > absorption三、时间积分现在我们已经可以在COMSOL中方便的定义任意一个变量u及其表达式的时间微分ut、空间微分ux,uy,uz、空间积分积分耦合变量;那么对于时间的积分如何处理呢COMSOL当然也提供了这项功能;对于时间的积分项的处理,COMSOL也是通过ODE的设定来实现的;例如前例中,我们已经可以利用一个边界积分耦合变量来描述某个时刻流出的物质量;现在我们进一步,需要知道一段时间内总的物质流出量Tot mass:⎰=dtFlow Totoutmass ==>outmass FlowdtdTot=将方程两边同对时间t求导后就变成了一个ODE方程,类似于定义一个全局约束那样,我们使用COMSOL的“ODE设定”功能便可以定义这个新的变量Tot_mass;采用ODE进行时间积分,仅仅只能对标量进行积分,如果是想对求解域内的某个值进行积分通常具有维度,则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果;四、停止条件在进行稳态求解时,COMSOL迭代求解当然是以收敛条件满足作为计算的停止条件;但是在瞬态分析的情况下,计算何时停止就可由用户自行选择了;与其他仿真软件类似,COMSOL 默认的瞬态分析停止条件就是遍历用户使定的时间范围后,计算停止;但是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止;例如上例中,我们可以让流出物质的总量达到指定值时,计算自动停止;布尔表达式COMSOL的停止条件使用的是布尔表达式;布尔表达式运算的结果大于零,则表示有效,此时停止条件满足,计算停止;当布尔运算结果小于或者等于零,则表示无效,停止条件不满足,计算继续进行;需要注意的是,这里的表达式,通常是对某个标量进行求解的结果;五、非线性特征值问题求解方程的特征值是仿真中经常碰到的一类问题;问题线性度比较好的时候,方程的系数与方程的解变量u不存在函数关系,这样的方程很容易解;反过来,方程特征值也很容易求;但是有时候我们会碰到非线性比较强的问题,方程的系数本身就是解变量u的函数;对于正问题,COMSOL很容易“求解域设定”中,定义方程的某些系数是解变量的函数,然后利用COMSOL提供的非线性求解器完成求解;但是对于非线性很强的逆问题又该如何定义呢这里有一个很好用的技巧,就是使用全局约束对特征值先进行一下归一化,在这里定义特征值与解变量相关;例如PDE方程1∇uλ,其中即为特征值下图中的Lambda;我们可以先添加全局⋅-u=-∇约束,定义E=1,而E其实是一个积分耦合变量,对应于解变量u2在求解域上的积分;通过这样操作,我们就把Lambda和解变量u建立的联系,然后使用COMSOL提供的非线性求解器完成求解;六、利用耦合变量对结果进行扫掠COMSOL支持多维度的耦合计算仿真,这是COMSOL独有的强大功能之一;COMSOL允许用户对一个物理问题做多维度的建模分析;也就是说,同一个仿真过程里可以包含多个几何结构,这些几何结构通常都是不同维度的,最常见的是包含一个三维的完整几何,还有一个或者多个二维的截面,再加一个或多个一维的线;在不同的几何上,用户都可以建立物理方程并同时求解,这些几何之间是如何传递参数的呢,就是通过COMSOL的耦合变量;COMSOL提供两种耦合两边实现这个功能:拉伸耦合变量、投影耦合变量;拉伸耦合变量的功能是把一个几何中的变量或者表达式,按照预定义或者用户自定义的坐标变换,直接传递到另一个几何中;例如一个建立在二维轴对称情况下的传热仿真,灯泡;经过计算后已经获得的其温度场T的分布;此时的变量T仅存在与二维轴对称这个几何中Geom1;现在我们在同一模型下可以建立一个新的几何Geom2,这个三维的几何就是由二维轴对称的几何直接绕对称轴旋转而来;在模型树里可以清楚看到,在Geom2下面没有任何的方程,当然也就没有什么变量;我们可以利用拉伸耦合变量,将Geom1中的变量T传递过来,然后在三维的Geom2中看这个结果;投影耦合变量是积分耦合变量与拉伸耦合变量的合体;它的用法与拉伸耦合变量非常类似,只不过在跨几何传递参数的时候,拉伸耦合变量传递的就是变量或者表达式本身,而投影耦合变量传递的是变量或者表达式的积分;七、在非线性设置中调整瞬态求解器当求解瞬态非线性问题时,为了提高收敛性和求解器的效率,用户可以手动调整求解器的一些参数,例如非线性求解器中的迭代步数、公差因子、阻尼衰减参数、Jacobian修正方法等;通常情况下,如果在迭代步数范围内,收敛性较慢,未能在适当的迭代次数后得到结果,可以将迭代步数改大;但是这样做,有时候会产生较大的计算量;当非线性较强时,可以将公差因子调小,这样做可以控制迭代时的步长,较小的步长受非线性的影响较小,可能会快速得到结果,但也有可能会产生较大迭代次数,增加计算量;阻尼衰减参数等,可以根据实际情况进行调整,用户可以指定初始值、最小步长、以及最大步长;如果非线性很强,则应该将最小步长改小,反之可以将最大步长调大;Jacobian修正方法,也可以根据需要来修改,例如缺省是采用最小值方法,用户可以修改成每个迭代都要修改,或每个时间长只进行一次修改;修改次数越多,意味着非线性的影响越小,同样也意味着计算量的增加;八、求解时绘图边求解边绘图是COMSOL最强大的后处理工具之一,它允许用户在求解的过程中,实时观测到某个变量或者表达式的结果图;例如在求解相变析出的一类问题,使用边处理边绘图可以实时观察到相结构的演变;在COMSOL中要使用这个功能非常简单,只需要在“求解器设定”勾选“求解时作图”的复选框就可以了;九、绘制探测图在求解的同时,COMSOL还以做一种图,即探测图;这个功能允许用户在任意的位置放置观测点,随着求解的进行实时的掌握观测点上的某些变量或者表达式的取值变化;十、保存探测图数据COMSOL也允许用户将这种实时的探测图加以保存,或者将数据导出也可以;十一、交互式网格剖分所有自由删除网剖分选中的剖分选中的扫描撤消剖分增加网格尺寸+ 剖分选中的扫描剖分剩下的自由网格剖分是有限元仿真最重要的技术之一,好的网格可以有效小的提高计算的收敛性并减少计算时间;COMSOL内建了极为强大的网格剖分工具,包括自由网格生成器、映射网格生成器、扫描网格生成器、边界层网格生成器四种网格生成方法,同时还提供网格复制、网格删除、网格撤销、网格拉伸和旋转、网格导入等等功能;将这些工具联合使用,就是COMSOL 的交互式网格剖分,用户可以根据需要,完全自由控制网格的形状和分布;十二、 CAD导入COMSOL除了内建有强大的CAD工具之外,还提供了与其他CAD软件的接口,用户可以方便的直接导入其他CAD软件创建好的模型;COMSOL的CAD导入功能除了能够正确识别其他CAD文件之外,更重要的是提供了一些修复的工具;就一般的CAD设计过程来说,零件在设计的后期往往会加入一些圆角、倒角之类的特征,另外零件上本身还有一些狭小的曲面,这些特征对于COMSOL仿真的物理结构并不重要,但是却会带来许多不必要的网格,COMSOL提供了CAD 修复的功能来自动移除这些圆角、倒角、狭小曲面;另外,导入的CAD 模型有可能存在组件未对齐、本该连接在一起的面没有连上等等,这些都会造生COMSOL 无法有效的识别物理求解域,因此COMSOL 提供的CAD 修复工具可以修补缺口,消除自相交或者不连续;将C4延长到C4 C3 C1 C2 C3C1 C2C4 移除C4 C4C3C1 C2 C3 C1 C2移除C4 C4 C3 C1 C2 C3C1 C2十三、 3D 模型中抑制对象“抑制”功能是COMSOL 常用的后处理技术之一;在三维仿真的后处理过程中,用户可能移除面,并扩展其他面填补缺切除C1和C3C1 C2 C3 C1 C2 切除C1和C3 C1 C2C3C1 C2 非末端相多个交移除C4 C4C3C1 C2 C3 C1 C2移除C5, C6 C4 C3C1 C2 C3 C1 C2C5C6C4常常需要看到内部的一些结构上的变量分布;这时就要用到COMSOL的抑制功能;例如前面灯泡的例子,后处理显示的是三维结构外缘的温度分布,而我们关心的实际上是内部的温度分布,因此可以选择抑制某些边界;十四、复杂模型绘图COMSOL的几何建模功能极其强大,其主要体现就在于工作平面的设定;与很多CAD软件类似,COMSOL在用户需要建立复杂三维几何模型时,推荐用户使用工作平面;COMSOL提供了灵活的建立工作平面的方式,用户可以在不同的工作平面上绘制二维的曲线和实体,然后再拉伸或者旋转成三维;用户可以反复选取工作平面,然后将不同的几何旋转或者拉伸到同一三维几何结构中,从而完成复杂模型的绘图;十五、几何属性COMSOL中可以随时查看几何对象的属性,比如如果选中一个三维实体,点击“几何属性”按钮,COMSOL就会在信息窗内给出体积、表面积等信息;选中某两个点,COMSOL就会给出两点之间的距离,以及经过这两点的边的长度等信息;十六、开始命令的命令行选项从操作系统的图形化界面启动COMSOL是大家最为熟悉的;但是对于有些特殊的情况,用户可能会需要从命令行启动COMSOL;这种启动方式其实更为灵活,因为COMSOL提供不少很实用的启动参数;Comsolbatch –input –output这是COMSOL的批处理命令,这种启动方式允许COMSOL在后台运行,将test1模型计算后保存成test2文件;在很多大型集群系统中,主节点的linux系统很可能就没有图形化界面,这时就可以利用这条命令,在文本界面下后台运行COMSOL;Comsol server –port 2233 –multi on在服务器上运行COMSOL作为服务器端应用程序,并至定端口;Comsol client在终端运行COMSOL;Comsol –np 8指定COMSOL可以使用的CPU的个数;Comsol matlab opens matlab with comsol path使用命令行启动COMSOL with Matlab十七、选择复杂几何体边界在复杂三维几何结构当中,选取边界,尤其是同时选取多个边界有时并不那么容易;COMSOL从用户的角度思考,提供了很贴心的解决方案;在COMSOL中,点击鼠标左键表示选取当前边界,边界被选中则显示为红色;此时如果左键单击另一边界,则原先的选取取消,新被选中的边界红色显示;如果我们要同时选取多个边界怎么做呢;点击左键选中一个边界,边界变为红色表示被选中;此时点击右键,边界变成蓝色,表示该边界已被加入选择;这时用户可以随意再用左键选取其他边界,这个蓝色的边界始终都保持不变,不会被取消选择;这样用户可以重复左键、右键,完成多个边界的选取;如果要取消一个已经加入选择的边界,则再用鼠标左键单击这个边界,这是该边界会由蓝色变为绿色,此时点击右键,则取消该边界的选择,其他已加入选择的边界不受影响;十八、开启结构符号为了让用户对于当前模型中的边界约束条件一目了然,可以开启结构符号,如下图开启结构符号后,可以清楚地看到对于这个结构对象的约束类型,即在对称面上自由度限制为0等 ;用户可以直接在左侧的绘图工具条上点击“显示符号”按钮,或在菜单“选项”->“参数设定”对话框,点击“显示”标签,然后选中其中的“符号”复选框;十九、正确绘制变形变形图,可以帮助用户了解结构形变后的形状,然而,有时候,模拟得到的变形量很小,例如相对于结构而言,仅为实体的1E-3倍;如果以1:1的比例关系显示变形,很有可能看不到效果;这时,可以通过修改“绘图参数”对话框的“变形”标签中的“比例系数”,来增加变形图的效果;用户可以选择“自动”,或者清除“自动”复选框后,在后面的编辑框中填入自己希望的比例关系;二十、避免建立违反物理规律的模型当创建一个复杂的多物理模型时,COMSOL推荐用户采取从简入繁的建模思路顺序;先建立简单的单物理场的模型,然后完成计算看看结果是否合理;依次遍历所有涉及的物理场;经过这样的单物理仿真以后,就可以确保在每个物理场的仿真中,相关的设置都正确;然后再将这些物理场逐渐耦合起来,完成多物理场的仿真;如果直接建立复杂的多物理模型,则很难验证结果的有效性,甚至计算报错也很难快速的找到原因;。

关于COMSOL使用技巧

关于COMSOL使用技巧
四、停止条件
在进行稳态求解时,COMSOL迭代求解当然是以收敛条件满足作为计算的停止条件。但是在瞬态分析的情况下,计算何时停止就可由用户自行选择了。与其他仿真软件类似,COMSOL默认的瞬态分析停止条件就是遍历用户使定的时间范围后,计算停止。但是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止。
==>
将方程两边同对时间t求导后就变成了一个ODE方程,类似于定义一个全局约束那样,我们使用COMSOL的“ODE设定”功能便可以定义这个新的变量Tot_mass。
采用ODE进行时间积分,仅仅只能对标量进行积分,如果是想对求解域内的某个值进行积分(通常具有维度),则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果。
例如上例中,我们可以让流出物质的总量达到指定值时,计算自动停止。
COMSOL的停止条件使用的是布尔表达式。布尔表达式运算的结果大于零,则表示有效,此时停止条件满足,计算停止;当布尔运算结果小于或者等于零,则表示无效,停止条件不满足,计算继续进行。需要注意的是,这里的表达式,通常是对某个标量进行求解的结果。
三、时间积分
现在我们已经可以在COMSOL中方便的定义任意一个变量u及其表达式的时间微分(ut)、空间微分(ux,uy,uz)、空间积分(积分耦合变量)。那么对于时间的积分如何处理呢?COMSOL当然也提供了这项功能。
对于时间的积分项的处理,COMSOL也是通过ODE的设定来实现的。例如前例中,我们已经可以利用一个边界积分耦合变量来描述某个时刻流出的物质量。现在我们进一步,需要知道一段时间内总的物质流出量Totmass:

COMSOL使用技巧

COMSOL使用技巧

SOL Multiphysics使用技巧(旧版通用)一、全局约束/全局定义对于多物理仿真,添加全局约束就是SOL非常有用得功能之一。

例如,对于一个涉及传热得仿真,希望能够调整热源Q_0得大小,从而使得某一位置处得温度T_probe恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间得微分项,也就就是常说得常微分方程(ODE),SOL同样也支持自定义ODE作为全局约束。

例如,在一个管道内流体+物质扩散问题得仿真中,利用PID算法控制管道入口得流速u_in_ctrl,从而使得某一位置处得浓度conc恒定在指定值c_set。

(基本模块模型库> Multidisciplinary > PID control)。

需要添加得PID算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易得在边界条件中得“入口流速”设置中直接定义。

因此,这个变上限积分需要转化成一个ODE,作为全局约束加入。

令,方程两边同对时间t求导,得到。

在SOL中,变量u对时间得导数,用ut表示。

因此变量int得时间导数即为intt。

利用SOL得“ODE设定”,我们可以很容易得将intt(concc_set)=0这个ODE全局约束添加入模型之中。

二、积分耦合变量SOL得语法中,变量u对空间得微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大得便利。

那么对变量u得空间积分呢?SOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型得维度,会有相应积分耦合变量。

用户还可以指定得到结果后得作用域,例如全局,或指定某些点、边、边界或求解域。

从而可以将对积分耦合变量结果得访问限制在指定得对象上。

求解域积分耦合变量,就就是对指定变量或表达式在指定得某个或者某些求解域上做积分,积分得结果赋给自定义得这个积分耦合变量。

COMSOL使用技巧

COMSOL使用技巧

COMSOL Multiphysics使用技巧〔旧版通用〕一、全局约束/全局定义对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。

例如,对于一个涉与传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe 恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程〔ODE〕,COMSOL同样也支持自定义ODE作为全局约束。

例如,在一个管道流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl ,从而使得某一位置处的浓度conc 恒定在指定值c_set 。

〔根本模块模型库>Multidisciplinary>PID control 〕。

需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速〞设置中直接定义。

因此,这个变上限积分需要转化成一个ODE ,作为全局约束参加。

令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int -=。

在COMSOL 中,变量u 对时间的导数,用ut 表示。

因此变量int 的时间导数即为intt 。

利用COMSOL 的“ODE 设定〞,我们可以很容易的将intt-(conc-c_set)=0这个ODE 全局约束添参加模型之中。

二、积分耦合变量COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。

那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型的维度,会有相应积分耦合变量。

comsol操作技巧

comsol操作技巧

comsol操作技巧下面是本人在利用comsol解决实际问题时碰到的一些问题,通过上网查询,以及自己想出的方法进行解决,很多是网络是无法直接查询到,希望和大家一起分享,也许其中的某条正是你下载冥思苦想要解决的问题,希望能够帮到你。

上网查找的部分如有侵权,请告之删除,谢谢!(一)利用comsol的计算源程序,来建立新的循环计算如果需要利用其它计算后的数值代入到comsol进行后计算,这就不可避免的要利用comsol的源程序进行后学的连续计算,这里主要需解决在次计算利用上次计算初始值的问题,下面两段就是有无利用上次计算结果作为初始值的程序:%正常的求解% Solve problem=femtime(fem, ...'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'rela x',},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax', },'csolver','pardiso'}, ...'mcase',[0 1]);%将上次求解结果作为下次计算的初始值的求解% Mapping current solution to extended meshinit = asseminit(fem,'init',,'xmesh',,'blocksize','auto');%(此处是关键)% Solve problem=femtime(fem, ...'init',init, ... %(此处是关键)'solcomp',{'T'}, ...'outcomp',{'T'}, ...'blocksize','auto', ...'tlist',[colon(0,,1)], ...'estrat',1, ...'tout','tlist', ...'linsolver','gmres', ...'itrestart',100, ...'prefuntype','right', ...'prefun','gmg', ...'prepar',{'presmooth','ssor','presmoothpar',{'iter',3,'rela x',},'postsmooth','ssor','postsmoothpar',{'iter',3,'relax', },'csolver','pardiso'}, ...'mcase',[0 1]);(二)对常数进行赋值下面一段程序是comsol中常数的赋值语句:% Constants= {'U0','', ...'I0','35', ...'It1','35', ...'It2','35', ...'It3','35', ...'It4','35', ...'Vt1','4', ...'Vt2','4', ...'Vt3','4', ...'Vt4','4', ...'OpenVt1','', ...'OpenVt2','', ...'OpenVt3','', ...'OpenVt4',''};我们可以通过以下语句对其中的35,4,进行修改It1=700;It2=700;It3=700;It4=700;(1,6)={It1};(1,8)={It2};(1,10)={It3};(1,12)={It4};这样就可以实现常量变成变量,进行计算了(三)启动COMSOL with MATLAB 2007b时,MATLAB和COMSOL Multiphysics用户界面都没有出现该问题多出现在Windows上使用COMSOL with MATLAB 2007b,MATLAB 2007a及更早的版本没有这种问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

COMSOL Multiphysics使用技巧(旧版通用)一、全局约束/全局定义对于多物理仿真,添加全局约束就是COMSOL非常有用的功能之一。

例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。

有些情况下,全局约束可能包含有对时间的微分项,也就就是常说的常微分方程(ODE),COMSOL同样也支持自定义ODE作为全局约束。

例如,在一个管道内流体+物质扩散问题的仿真中,利用PID 算法控制管道入口的流速u_in_ctrl,从而使得某一位置处的浓度conc 恒定在指定值c_set 。

(基本模块模型库 > Multidisciplinary > PID control)。

需要添加的PID 算法约束如下式:要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。

因此,这个变上限积分需要转化成一个ODE,作为全局约束加入。

令⎰-=tdt set c conc 0)_(int ,方程两边同对时间t 求导,得到set c conc dtd _int -=。

在COMSOL 中,变量u 对时间的导数,用ut 表示。

因此变量int 的时间导数即为intt 。

利用COMSOL 的“ODE 设定”,我们可以很容易的将intt-(conc-c_set)=0这个ODE 全局约束添加入模型之中。

二、积分耦合变量COMSOL的语法中,变量u对空间的微分,分别默认为用ut,ux,uy,uz等来表示,这为仿真提供了极大的便利。

那么对变量u的空间积分呢?COMSOL提供了积分耦合变量来实现这一功能。

积分耦合变量分为四种:点(point)积分耦合变量、边(edge)积分耦合变量、边界(boundary)积分耦合变量、求解域(subdomain)积分耦合变量。

根据模型的维度,会有相应积分耦合变量。

用户还可以指定得到结果后的作用域,例如全局,或指定某些点、边、边界或求解域。

从而可以将对积分耦合变量结果的访问限制在指定的对象上。

求解域积分耦合变量,就就是对指定变量或表达式在指定的某个或者某些求解域上做积分,积分的结果赋给自定义的这个积分耦合变量。

对于三维仿真,这个积分就是体积分;对于二维则就是面积分。

最典型的应用当属对数值1进行积分,可以得到体积或面积。

边界积分耦合变量,就就是对指定变量或表示在指定的某个或者某些边界上做积分,积分的结果付给自定义的这个积分耦合变量。

对于三维仿真,这个积分就是面积分;对于二维则就是线积分。

对1积分可以得到面积或边长。

边积分耦合变量,就就是对指定变量或表达式在指定的某个或者某些边上做积分,积分的结果付给自定义的这个积分耦合变量。

仅存在于三维仿真中,这个积分就是线积分。

对1积分得到边长。

点积分耦合变量,就就是对指定变量或表达式在指定的某个或者某些点上给出它的值。

它的最主要用法就是将某个点上的结果映射到指定的对象上。

在上面PID控制的例子中,指定位置处的浓度conc就就是一个点积分耦合变量,用来提取点PT1处的浓度值。

同时,浓度c的时间变化率ct在PT1点的取值,也可以用同样的方法提取出来,付给变量ctime。

积分耦合变量除了用于添加约束,也常常用于后处理。

COMSOL允许用户将任意表达式在任意求解域或者边界上的积分定义为一个变量,然后直接在后处理中对该自定义的积分耦合变量做数据可视化操作。

例如,在二维扩散问题的仿真中,为了观测流出边界上总的流出的物质量,可以在出口边界利用边界耦合积分变量,然后可以直接得到数据曲线。

(基本模块模型库> Chemical engineering > absorption)三、时间积分现在我们已经可以在COMSOL中方便的定义任意一个变量u及其表达式的时间微分(ut)、空间微分(ux,uy,uz)、空间积分(积分耦合变量)。

那么对于时间的积分如何处理呢?COMSOL当然也提供了这项功能。

对于时间的积分项的处理,COMSOL也就是通过ODE的设定来实现的。

例如前例中,我们已经可以利用一个边界积分耦合变量来描述某个时刻流出的物质量。

现在我们进一步,需要知道一段时间内总的物质流出量Tot mass:⎰=dtFlow Totoutmass ==>outmass FlowdtdTot=将方程两边同对时间t求导后就变成了一个ODE方程,类似于定义一个全局约束那样,我们使用COMSOL的“ODE设定”功能便可以定义这个新的变量Tot_mass。

采用ODE进行时间积分,仅仅只能对标量进行积分,如果就是想对求解域内的某个值进行积分(通常具有维度),则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果。

四、停止条件在进行稳态求解时,COMSOL迭代求解当然就是以收敛条件满足作为计算的停止条件。

但就是在瞬态分析的情况下,计算何时停止就可由用户自行选择了。

与其她仿真软件类似,COMSOL默认的瞬态分析停止条件就就是遍历用户使定的时间范围后,计算停止。

但就是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止。

例如上例中,我们可以让流出物质的总量达到指定值时,计算自动停止。

布尔表达式COMSOL的停止条件使用的就是布尔表达式。

布尔表达式运算的结果大于零,则表示有效,此时停止条件满足,计算停止;当布尔运算结果小于或者等于零,则表示无效,停止条件不满足,计算继续进行。

需要注意的就是,这里的表达式,通常就是对某个标量进行求解的结果。

五、 非线性特征值问题求解方程的特征值就是仿真中经常碰到的一类问题。

问题线性度比较好的时候,方程的系数与方程的解变量u 不存在函数关系,这样的方程很容易解;反过来,方程特征值也很容易求。

但就是有时候我们会碰到非线性比较强的问题,方程的系数本身就就是解变量u 的函数。

对于正问题,COMSOL 很容易“求解域设定”中,定义方程的某些系数就是解变量的函数,然后利用COMSOL 提供的非线性求解器完成求解。

但就是对于非线性很强的逆问题又该如何定义呢?这里有一个很好用的技巧,就就是使用全局约束对特征值先进行一下归一化,在这里定义特征值与解变量相关。

例如PDE 方程1=-∇⋅∇-u u λ,其中λ即为特征值(下图中的Lambda)。

我们可以先添加全局约束,定义E=1,而E 其实就是一个积分耦合变量,对应于解变量u 2在求解域上的积分。

通过这样操作,我们就把Lambda 与解变量u 建立的联系,然后使用COMSOL 提供的非线性求解器完成求解。

六、利用耦合变量对结果进行扫掠COMSOL支持多维度的耦合计算仿真,这就是COMSOL独有的强大功能之一。

COMSOL允许用户对一个物理问题做多维度的建模分析。

也就就是说,同一个仿真过程里可以包含多个几何结构,这些几何结构通常都就是不同维度的,最常见的就是包含一个三维的完整几何,还有一个或者多个二维的截面,再加一个或多个一维的线。

在不同的几何上,用户都可以建立物理方程并同时求解,这些几何之间就是如何传递参数的呢,就就是通过COMSOL的耦合变量。

COMSOL提供两种耦合两边实现这个功能:拉伸耦合变量、投影耦合变量。

拉伸耦合变量的功能就是把一个几何中的变量或者表达式,按照预定义或者用户自定义的坐标变换,直接传递到另一个几何中。

例如一个建立在二维轴对称情况下的传热仿真,灯泡。

经过计算后已经获得的其温度场T的分布。

此时的变量T仅存在与二维轴对称这个几何中(Geom1)。

现在我们在同一模型下可以建立一个新的几何Geom2,这个三维的几何就就是由二维轴对称的几何直接绕对称轴旋转而来。

在模型树里可以清楚瞧到,在Geom2下面没有任何的方程,当然也就没有什么变量。

我们可以利用拉伸耦合变量,将Geom1中的变量T传递过来,然后在三维的Geom2中瞧这个结果。

投影耦合变量就是积分耦合变量与拉伸耦合变量的合体。

它的用法与拉伸耦合变量非常类似,只不过在跨几何传递参数的时候,拉伸耦合变量传递的就就是变量或者表达式本身,而投影耦合变量传递的就是变量或者表达式的积分。

七、在非线性设置中调整瞬态求解器当求解瞬态非线性问题时,为了提高收敛性与求解器的效率,用户可以手动调整求解器的一些参数,例如非线性求解器中的迭代步数、公差因子、阻尼衰减参数、Jacobian修正方法等。

通常情况下,如果在迭代步数范围内,收敛性较慢,未能在适当的迭代次数后得到结果,可以将迭代步数改大。

但就是这样做,有时候会产生较大的计算量。

当非线性较强时,可以将公差因子调小,这样做可以控制迭代时的步长,较小的步长受非线性的影响较小,可能会快速得到结果,但也有可能会产生较大迭代次数,增加计算量。

阻尼衰减参数等,可以根据实际情况进行调整,用户可以指定初始值、最小步长、以及最大步长。

如果非线性很强,则应该将最小步长改小,反之可以将最大步长调大。

Jacobian修正方法,也可以根据需要来修改,例如缺省就是采用最小值方法,用户可以修改成每个迭代都要修改,或每个时间长只进行一次修改。

修改次数越多,意味着非线性的影响越小,同样也意味着计算量的增加。

八、求解时绘图边求解边绘图就是COMSOL最强大的后处理工具之一,它允许用户在求解的过程中,实时观测到某个变量或者表达式的结果图。

例如在求解相变析出的一类问题,使用边处理边绘图可以实时观察到相结构的演变。

在COMSOL中要使用这个功能非常简单,只需要在“求解器设定”勾选“求解时作图”的复选框就可以了。

九、绘制探测图在求解的同时,COMSOL还以做一种图,即探测图。

这个功能允许用户在任意的位置放置观测点,随着求解的进行实时的掌握观测点上的某些变量或者表达式的取值变化。

十、保存探测图数据COMSOL也允许用户将这种实时的探测图加以保存,或者将数据导出也可以。

十一、交互式网格剖分所有(自由)删除网格剖分选中的面剖分选中的(扫描)撤消剖分增加网格尺寸+ 剖分选中的(扫描)剖分剩下的(自由)网格剖分就是有限元仿真最重要的技术之一,好的网格可以有效小的提高计算的收敛性并减少计算时间。

COMSOL内建了极为强大的网格剖分工具,包括自由网格生成器、映射网格生成器、扫描网格生成器、边界层网格生成器四种网格生成方法,同时还提供网格复制、网格删除、网格撤销、网格拉伸与旋转、网格导入等等功能。

将这些工具联合使用,就就是COMSOL的交互式网格剖分,用户可以根据需要,完全自由控制网格的形状与分布。

十二、 CAD 导入COMSOL 除了内建有强大的CAD 工具之外,还提供了与其她CAD 软件的接口,用户可以方便的直接导入其她CAD 软件创建好的模型。

相关文档
最新文档