官方给的案例总是非常完美,运行流畅,结果完美。跟着官网案例学习很久之后,终于自己上手做模型,一旦报错,就是两眼一抹黑,无从下手。这里把我碰到的一些COMSOL报错问题以及调试方法记录下来。注意:每一个模型都有各自的特点,不可一概而论,别人也很难帮你找到模型问题,还是需要自己掌握调试方法。

附上以下参考来源:
http://wap.sciencenet.cn/blog-1467490-1118453.html?mobile=1
http://cn.comsol.com/support/knowledgebase

更新日志:
2020-11-04,增1.6语法错误,案例1
2020-11-09,增1.7其它
2020-11-16,增3.1

1. 条件设定类

一部分错误来源于模型构建时的疏忽,例如遗漏边界条件等等,这些错误通常容易解决:

1.1 除零错误

根据报错指出的信息,用Ctrl+F查找分母变量的位置,如果是设定变量,那么可以直接将该变量值从0改为eps,如果是方程视图中的变量,那么需要追本溯源,查看时哪个设定参数导致了该变量值为0,进行修改即可。

1.2 未定义变量值

可能在建模过程中遗漏了某个变量的设定,补全即可。

1.3 边界条件/材料属性等缺失

一般明显的问题可以从模型树中看到警告符,在相应分支下修改即可。

1.4. 装配期间内存不足

在这里插入图片描述
可以考虑扩大虚拟内存,或者把网格划分得稀疏一些
http://cn.comsol.com/support/knowledgebase/1030

1.5. 出现错误“奇异矩阵”

检查一下模型设定是否有问题,是否每一个域和边界都进行了明确指定。另外,检查网格,是否存在严重畸变等等。

1.6. 语法错误

案例1,只允许涉及网格时间的时间导数(Time derivative only allowed with respect to mesh time).
解决方案:将模型中涉及时间的t改写为TIME,例如d(x,t)改为d(x,TIME)。似乎在涉及动网格时容易出现此问题,可能是模型内置的语法,具体不太清楚。

1.7. 其它

1.7.1. Invalid property value
‘Error expression’ is an array of strings. - : Cannot be empty. - : Unsupported characters ∇ × or ·

在这里插入图片描述
本人遇到此问题的原因是开启了网格自适应。然而自适应的网格尺寸极其粗,导致梯度计算出现了问题。

COMSOL论坛上也有相似问题,见
https://cn.comsol.com/forum/thread/95892/invalid-property-value

2. 收敛性问题

收敛性问题是最头疼的,对于刚入门的小白很难找到其根源。解决此类问题必须非常熟悉该物理场。

2.1.稳态

没研究过,可参考:http://cn.comsol.com/support/knowledgebase/103

2.2. 瞬态

2.2.1. 初始值不一致

大部分的物理场默认初始值都是0,可能会造成其与边界条件的设定存在严重冲突。
官方给出了非常好的方案:http://cn.comsol.com/support/knowledgebase/1172
可能的解决方案:
(1)逐步施加边界条件
如果初始值与边界条件相差大,有可能会导致此问题。通过添加阶跃函数(step)的方式可以使得边界载荷等从0s开始存在一个从0到所施加数值的渐变过程,可以有效提高收敛性。

(2)使用稳态研究来初始化瞬态研究
即在开始瞬态研究步骤前先进行稳态计算,有一些物理场预设的研究中就有此种方案:带初始化的瞬态研究。

2.2.2. 最后一个时间步不收敛

无法收敛可能是模型本身存在问题,就需要仔细检查模型,可以把时间步调小,并将每一步的计算结果保存下来,只要进行了迭代,就可以查看计算结果,根据结果的数值去确定模型设定是否存在问题。
另一种情况是模型本身高度非线性化,也就是,算不出来。这时候需要去调整模型。
参考:https://cn.comsol.com/support/knowledgebase/1127

https://blog.csdn.net/GENGXINGGUANG/article/details/104084733?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

小白一枚,尝试过以下方案:

网格细化

如果网格划分过于疏,可能会造成某些节点数值出现问题,可以尝试将网格细化看看有没有效果,也可以开启网格自适应。当然这是建立在时间成本之上的,需要进行平衡。使用移动网格(ALE)和变形几何(DG)这两个接口是尤其需要注意,出现网格畸变时,调整网格,开启网格自适应以及开启网格重新剖分是非常重要的调试手段。

调整求解器

以下步骤可以一步步走,一个不行再进行下一个
(1)展开研究设置并转到瞬态求解器分支下的全耦合子特征,然后定位到方法和终止栏。将雅可比矩阵更新:改为在每次迭代中,以替代最小
在这里插入图片描述

(2)更改最大迭代次数与容差因子
可将最大迭代次数值增加到 25 或更大的值。接下来,调整容差因子:设置。其默认值 1 表示使用相对容差设置,如瞬态研究步骤中指定的那样。相对容差的默认值为 0.01,其实际值为容差因子:乘以此数值,即:在本例中,将容差因子:设为 0.1 可以得到这个非线性问题在每个时间步的相对容差为 0.001。这意味着,当您收紧瞬态求解器的相对容差设置时,通常可以放宽容差因子。
在这里插入图片描述
(3)更改非线性方法
如上图右侧,将恒定(牛顿)改为自动牛顿,位置在(2)中图右侧

(4)启用非线性控制器
如果求解器日志中Tfail值一直在增大,则可以考虑启用非线性控制器。对于不含非线性的模型,Tfail 列中的数值也会递增,应该考虑收紧求解器的相对容差。
在这里插入图片描述
非线性控制器位置如下图
在这里插入图片描述

3. 物理场的特殊性

有的物理场会存在一些隐含条件,比如:
(1)使用装配体时存在固体力学以外的物理场,界面处的物理量传递需要加上非局部耦合(一致映射)这样的条件。
(2)浓度场中浓度不可为负数。可以在求解器中增加停止条件。
(3)固体力学模块中使用尖角可能会造成该处应力无穷大,因此需要进行倒圆角处理。
具体案例:

3.1. 无法计算弹塑性应变变量

固体力学模块,引入塑性时出现的问题. Failed to compute elastoplastic strain variables. Time-dependent solver interrupted. Not all time steps returned.
该问题在COMSOL官网上有相应的案例
Support:https://cn.comsol.com/support/knowledgebase/1150
在这里插入图片描述
Forum:https://cn.comsol.com/forum/thread/34552/failed-to-compute-elastoplastic-strain-variables-help-please
https://www.comsol.jp/forum/thread/125792/failed-to-compute-elastoplastic-strain-variables-error-with-shrink-fit

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐