一、 全局约束
对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。
有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程(ODE),COMSOL同样也支持自定义ODE作为全局约束。例如,在一个管道内流体+物质扩散问题的仿真中,利用PID算法控制管道入口的流速u_in_ctrl,从而使得某一位置处的浓度conc恒定在指定值c_set。(基本模块模型库> Multidisciplinary > PID control)。需要添加的PID算法约束如下式:
要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。因此,这个变上限积分需要转化成一个ODE,作为全局约束加入。令
方程两边同对时间t求导,得到
在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的设定来实现的。例如前例中,我们已经可以利用一个边界积分耦合变量来描述某个时刻流出的物质量。现在我们进一步,需要知道一段时间内总的物质流出量Totmass:
将方程两边同对时间t求导后就变成了一个ODE方程,类似于定义一个全局约束那样,我们使用COMSOL的“ODE设定”功能便可以定义这个新的变量Tot_mass。
采用ODE进行时间积分,仅仅只能对标量进行积分,如果是想对求解域内的某个值进行积分(通常具有维度),则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果。
四、 停止条件
在进行稳态求解时,COMSOL迭代求解当然是以收敛条件满足作为计算的停止条件。但是在瞬态分析的情况下,计算何时停止就可由用户自行选择了。与其他仿真软件类似,COMSOL默认的瞬态分析停止条件就是遍历用户使定的时间范围后,计算停止。但是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止。例如上例中,我们可以让流出物质的总量达到指定值时,计算自动停止。
COMSOL的停止条件使用的是布尔表达式。布尔表达式运算的结果大于零,则表示有效,此时停止条件满足,计算停止;当布尔运算结果小于或者等于零,则表示无效,停止条件不满足,计算继续进行。需要注意的是,这里的表达式,通常是对某个标量进行求解的结果。
五、 非线性特征值问题
求解方程的特征值是仿真中经常碰到的一类问题。问题线性度比较好的时候,方程的系数与方程的解变量u不存在函数关系,这样的方程很容易解;反过来,方程特征值也很容易求。但是有时候我们会碰到非线性比较强的问题,方程的系数本身就是解变量u的函数。对于正问题,COMSOL很容易“求解域设定”中,定义方程的某些系数是解变量的函数,然后利用COMSOL提供的非线性求解器完成求解。但是对于非线性很强的逆问题又该如何定义呢?这里有一个很好用的技巧,就是使用全局约束对特征值先进行一下归一化,在这里定义特征值与解变量相关。例如PDE方程,
其中l即为特征值(下图中的Lambda)。我们可以先添加全局约束,定义E=1,而E其实是一个积分耦合变量,对应于解变量u2在求解域上的积分。通过这样操作,我们就把Lambda和解变量u建立的联系,然后使用COMSOL提供的非线性求解器完成求解。
文章转自:公众号:有限元仿真分析
对于多物理仿真,添加全局约束是COMSOL非常有用的功能之一。例如,对于一个涉及传热的仿真,希望能够调整热源Q_0的大小,从而使得某一位置处的温度T_probe恒定在指定值T_max,我们可以直接将这个全局约束添加进来即可。
有些情况下,全局约束可能包含有对时间的微分项,也就是常说的常微分方程(ODE),COMSOL同样也支持自定义ODE作为全局约束。例如,在一个管道内流体+物质扩散问题的仿真中,利用PID算法控制管道入口的流速u_in_ctrl,从而使得某一位置处的浓度conc恒定在指定值c_set。(基本模块模型库> Multidisciplinary > PID control)。需要添加的PID算法约束如下式:
要添加上述约束,除变上限积分项外,另外两项都可以很容易的在边界条件中的“入口流速”设置中直接定义。因此,这个变上限积分需要转化成一个ODE,作为全局约束加入。令
方程两边同对时间t求导,得到
在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的设定来实现的。例如前例中,我们已经可以利用一个边界积分耦合变量来描述某个时刻流出的物质量。现在我们进一步,需要知道一段时间内总的物质流出量Totmass:
将方程两边同对时间t求导后就变成了一个ODE方程,类似于定义一个全局约束那样,我们使用COMSOL的“ODE设定”功能便可以定义这个新的变量Tot_mass。
采用ODE进行时间积分,仅仅只能对标量进行积分,如果是想对求解域内的某个值进行积分(通常具有维度),则需要采用耦合一个PDE应用模式的方法,通过修改PDE方程,使其满足对时间的常微分方程形式,然后在求解中可以得到对时间的积分结果。
四、 停止条件
在进行稳态求解时,COMSOL迭代求解当然是以收敛条件满足作为计算的停止条件。但是在瞬态分析的情况下,计算何时停止就可由用户自行选择了。与其他仿真软件类似,COMSOL默认的瞬态分析停止条件就是遍历用户使定的时间范围后,计算停止。但是除此之外,COMSOL还可以提供一种更为灵活而且强大的功能,就是允许用户选择让软件自动检测计算结果中的某一变量或表达式,当该变量或表达式满足一定条件时,计算停止。例如上例中,我们可以让流出物质的总量达到指定值时,计算自动停止。
COMSOL的停止条件使用的是布尔表达式。布尔表达式运算的结果大于零,则表示有效,此时停止条件满足,计算停止;当布尔运算结果小于或者等于零,则表示无效,停止条件不满足,计算继续进行。需要注意的是,这里的表达式,通常是对某个标量进行求解的结果。
五、 非线性特征值问题
求解方程的特征值是仿真中经常碰到的一类问题。问题线性度比较好的时候,方程的系数与方程的解变量u不存在函数关系,这样的方程很容易解;反过来,方程特征值也很容易求。但是有时候我们会碰到非线性比较强的问题,方程的系数本身就是解变量u的函数。对于正问题,COMSOL很容易“求解域设定”中,定义方程的某些系数是解变量的函数,然后利用COMSOL提供的非线性求解器完成求解。但是对于非线性很强的逆问题又该如何定义呢?这里有一个很好用的技巧,就是使用全局约束对特征值先进行一下归一化,在这里定义特征值与解变量相关。例如PDE方程,
其中l即为特征值(下图中的Lambda)。我们可以先添加全局约束,定义E=1,而E其实是一个积分耦合变量,对应于解变量u2在求解域上的积分。通过这样操作,我们就把Lambda和解变量u建立的联系,然后使用COMSOL提供的非线性求解器完成求解。
文章转自:公众号:有限元仿真分析