COMSOL建模指南
本文首发于微信公众号「声学号角」 翻译自COMSOL的用户手册。 对使用其他仿真软件也很有指导价值。 用户可以调整求解设置、使用对称或其他模型属性来获得模拟解,如果不行的话,可以中断求解来恢复部分解。 提纲: 1. 使用对称性 2. 有效的内存管理 3. 选择单元类型 4. 分析模型收敛性和准确性 5. 求解非线性方程时实现收敛 6. 避免过快的瞬变 7. 物理相关检查和指南 8. 非物理值 正文: 1. 使用对称性 建模时使用对称性可以减少一半或以上的计算量,对于求解大的问题这是一种有效的手段。它适用于包含对称几何结构或模型假定的情况下。对称有轴对称和对称和反对称平面或线: a) 轴对称:通常是圆柱体或相似的3D几何。如果几何是轴对称的,那么它只能在轴向和径向变化,而在周向保持不变。 b) 对称和反对称平面或线:在2D和3D模型中比较常见。对称:分割线或平面两边是相同的。对于标量场,穿过对称线的法向流量为零。在结构力学中,对称条件是不同的。反对称:分割线或平面两边是反向平衡的。对于标量场,穿过对称平面或线的独立变量为零。结构力学使用另外的反对称。很多模型界面都支持对称边界条件。 为了使用对称平面或线,所有的几何、材料性能、边界条件都必须是对称的,任何载荷或源项也必须是对称或反对称的。然后就可以建立一个对称模型,它可以是整个几何体的1/2,1/4,1/8,然后施加合适的对称边界条件。 2. 有效的内存管理 特别在3D建模时,巨大的内存消耗必须采取额外的预防措施。首先,检查是否选择了线性迭代求解器。通常,用户不需要考虑选择什么求解器,因为模型界面会自动挑选合适的求解器。但是在一些情况下,用户还是需要对求解设置做适当的调整。 估算模型消耗的内存 当内存分配不足时COMSOL会提示”out-of-memory”。虽然内存大小和数组所占用的相同就足够了,但是由于内存碎片的存在,需要更大的内存。 那么求解一个特定的模型需要多大的内存,则有下面几个因素决定: a) 节点数目 b) 独立和不独立变量数 c) 单元阶数 d) 矩阵的稀疏模式。稀疏模式取决于几何和网格的形状。例如,一个扩展的椭球比球的矩阵更稀疏。 MUMPS和PARDISO out-of-core求解器可以在内存不够时,借用磁盘存储来求解大的模型。用户可以通过观察右下角的内存使用情况来了解当前物理内存和虚拟内存使用情况。 建立一个高效内存使用的几何 首先在处理大的模型时,应该尽量减小求解几何。通常使用对称会使模型减少到原来的1/2,1/4甚至是1/8。虽然内存消耗并不是线性的,而是多项式(Cnk,k>1),那么这意味着当模型减小一半时,内存消耗会减少一半以上。而其他的途径是: a) 避免使用那些不必要的小几何体,用贝塞尔曲线代替多边形轮廓; b) 尽量使用线性单元; c) 保证划分的网格质量高。高质量的网格对线性迭代求解器尤为重要,这样会提高迭代的收敛性; d) 避免几何存在尖的、狭窄的转角。网格单元会在这些地方变得很薄,使得邻近的网格质量下降。尖角同时会造成非物理现象和巨大的应力集中。 3. 选择单元类型 大部分模型界面默认选择一阶或二阶Lagrange单元或形函数。二阶及以上的单元类型会在网格单元的中点和内部节点上增加额外的自由度。自由度的增加会提高解的准确性,但是也会由于减小了离散系统的稀疏程度而加大了内存消耗。对于很多的应用,如结构力学中的应力分析,需要使用二阶单元来提高准确度,这是由于一阶单元的空间差分为常数。 COMSOL推荐用户使用默认的单元类型,而对于某些计算可能需要减低单元阶数,但是用户必须注意那些重要的量被求解了。 4. 分析模型收敛性和准确度 有限元法可以精确的获得如应力集中模型解的局部变化。在有些情况下,用户可以与参考书、测量结果或其他的原始数据做比较。而COMSOL模型库中也包含了一些计算好的结果或理论解。通过查看这些基准模型,来检查结果的准确性。 如果一个模型不能通过其他方法来验证正确性,那么只能通过收敛性测试来检查网格密度是否合适。用户通过加密网格重新计算来检查解是否可以稳定的收敛。如果加密网格后解的结果发生改变,那么解依赖于网格,该模型需要更密的网格。用户可以使用自适应网格,它基于误差准则来加密那些误差较大的区域网格。 为了收敛性,必须避免几何中的奇异点。 5. 在求解非线性方程时实现收敛 非线性问题通常很难被求解。在很多情况下,它的解不唯一。COMSOL使用Newton迭代法来求解非线性PDE方程组。这种方法对初始值敏感。如果初始条件偏离期望值,那么可能就无法收敛,即便该方程组使用其他初值时可能很容易收敛。 用户可以通过下面的方法来提高得到难解的非线性方程组的相关解: a) 提供最可能的初始值; ...