COMSOL仿真你遇到过哪些“莫名其妙”的报错?

COMSOL仿真你遇到过哪些“莫名其妙”的报错?

很多用户最头疼的莫过于在自己的建模过程中遇到各种各样的,“莫名其妙”的错误;那么如何快速找出并分析排除模型中的错误,以及如何快速实现收敛。

本文结合实践经验,指出几点分析报错的要点供大家参考。

一、 我们可以把报错信息分为2种:
  1、报错信息中给出了具体出错信息
       1.1    根据报错提示,若材料有问题,那就查看材料设置;例如:在模块中对应的材料位置,选择了“来自材料”选项,而没有给相应的域或边界设定材料。
       1.2  若网格有错误,就查看网格。例如:提示某网格没有划分,或网格划分重复,或边界层网格没有组后划分等等。这样的错误比较明显,只需要修改相应的位置即可。
       1.3   如果是变量未定义,可能来自于自己需要定义的变量;例如:变量的作用域有错误,在组件中定义的变量只能此组件中使用,而使用组件中的原始变量去定义新的变量要注意作用域问题;比如在全局中定义一个变量,而需要使用组件下面某个模块中的变量,那必须给出这个变量所在的组件名称,比如comp1.T。这说明,在全局中定义的变量使用的是组件1中的温度T变量,而不是组件2或组件3的,因为如果不使用变量的全部限定名,将会出现二义性,自然程序会报错。
  2、根据报错信息无法准确定位错误的位置
       2.1  莫名的未定义,这些错误会让很多新手用户崩溃,要仔细检查。这可能是模块中的变量的问题;那为什么会出现未定义呢?每个变量都有全部的限定名,这个全部的限定名是”组件名.模块名.变量名“这样的格式。但用户往往在修改错误的过程中会有某种不当操作,使得求解器在编译方程的过程中所使用的变量名和模块中定义的变量名不同就会造成这样的错误。修改方法是,使用查找(ctrl+F)功能,搜索这个变量,或者在模块的方程视图中查找并修改。
       2.2  在计算一段时间后,出现某变量未定义,这在很大程度上是因为初始条件不适当造成的,这就要修改初值。

       2.3  对于除零错和试图计算负数的开方等问题,也会让很多新用户崩溃,特别是对于模块非常不熟悉的用户。同理,这种问题必须要找到对应的变量,将对应的变量调出在结果中画出图像,查看是否有值。而且需要找到计算这个变量的所有值,特别是分母,开方内等位置的变量,看看它们是否等于0以及是否小于0。造成这样错误的原因有很多种,比如它们是在计算了几个时间步之后出现0的,这往往是初始值或边界条件不适当造成的。而如果它们是在刚计算还没有出现收敛图时就报错了,多半是因为它们的初始值就是0,这样的错误往往是用户自己不认真导致的,比如出现了绝对压强等于0。 

       2.4  如果你的模型本来是可以计算的,而在不断修改的过程中,最后发现怎么修改也不对,回不到原来的正常情况,那么可以直接重新打开这个程序,且选择不保存,即退回到正常状况。或者直接删除求解器,重新设置求解器。             

 
  技巧1:学会查找方程视图中的变量

  技巧2:注意每个变量在不同作用域中所使用的名称不同

  技巧3:删除求解器,重新设置

二、收敛性问题

 简要讨论一下不收敛的主要原因。

 1.  稳态计算过程中,如果收敛图上下震荡,或者增加到上千迭代次数最后收敛曲线也很难下降,这时候就需要好好设置初边值条件了。前者,对于震荡剧烈的模型,多半是初边值条件不适当;如边界过约束,某位置梯度过大,边界条件与域初始值相差太大,动网格等特殊求解技术的设置中参数设置不当等等。这时候应该修改自己的初边值条件,或修改对应设置。对于后者,基本上很难收敛,偷懒的技巧是,增大一下容差。或在模块中添加收敛项或稳定性条件(模块设置中有相应的位置),稳态和瞬态问题都适用。

 2. 瞬态计算,对于瞬态计算最头疼的是计算很久之后报错。除修改初边值条件和网格外,可以考虑修改求解器。

三、技巧

  对于新用户来讲,核心手段仍然是要理解模块,知道如何设置初边值,如何加密网格。因为调试技巧终归是在模型设置没有太大问题的时候才可以使用的手段。假如边界条件本就是错误的,初始条件本非常不合适,那所有的技巧都是浮云。
  使用这些技巧的前提是,用户要百分百确定自己的边界条件没有问题,网格适当,初始值也适当。
  
  技巧4:将全耦合求解改成分离求解,注意求解变量的顺序,最好先求解单场,比如热流耦合,先计算温度;热电耦合先计算电场。

  技巧5:修改雅可比修正位置,比如将每个时间步一次,改为初次迭代,当然修正次数越多,计算越慢。

  技巧6:增大每个分离步的迭代次数,并降低其阻尼因子

  建模都是从简到繁的过程,不要试图一次建立完整的模型。

  技巧7:建模一句话口诀:先建立最简单的模型,只要能跑就行。然后逐步添加更多的项,耦合更多的模块,添加更复杂的技术,而对于本可以运行的程序,最后怎么修改都无法运行,记住,删掉重做。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章