CCX 黄金准则#
黄金实践准则#
将有限元法应用于实际问题并非易事,尤其是在处理非线性问题时(如大变形、非线性材料行为和接触问题,统称为“三重非线性”),实现计算的收敛性更是极具挑战性。为了更好地解决这类问题,CCX提供了以下黄金实践准则:
检查网格质量:在Calculus GraphiX中检查网格质量,或者使用其他优秀的预处理器来改进网格质量
先运行线性化版本:去掉大变形(取消
NLGEOM
),使用线性弹性材料,并去除所有其他非线性因素,如接触。如果线性版本无法运行,非线性问题也同样无法解决。线性版本有助于检查边界条件是否正确(确保没有无约束的刚体模式),验证加载是否符合预期,并提供解的一个大致印象使用二次单元(如 C3D10、C3D15、C3D20(R)、S8、CPE8、CPS8、CAX8、B32):二次单元通常表现出色,大多数有限元程序采用这些标准形函数。然而,线性单元则不同,常常出现剪切锁死和体积锁死等问题。因此,大多数有限元程序会调整线性单元的标准形函数以缓解这些问题。由于没有统一的标准,每个开发人员都开发了自己的修改方案,并不一定公开,这导致使用线性单元时结果可能会有较大差异。由于 CalculiX 也使用线性单元的标准形函数,因此在使用时需要谨慎对待结果
壳单元或梁单元:使用这些单元时,请在 CalculiX 的
*NODE FILE
卡片上使用选项OUTPUT=3D
(默认设置)。这样可以在.frd
文件中获取这些单元的扩展形式,以验证所指定的厚度是否正确。此外,还可以获得三维应力分布,这是一维/二维应力分布和内部梁力的基础。如果前者不正确,后者也会不正确接触问题:如果在接触问题中使用了二次单元,应使用面面接触罚函数方法或摩擦方法(默认是前者)。通常,对于面面接触,面面接触罚函数方法和摩擦方法的收敛性要比点面接触算法好得多。接触类型需要在
*CONTACT PAIR
关键字中声明。注意,CCX 中的摩擦方法只能用于静态计算内存问题:如果内存不足,请检查编号。运行问题所需的内存取决于最大节点和单元编号(但计算时间不受影响)。因此,如果发现编号中存在较大间隔,可以通过消除这些间隔来减少内存需求。此外,选择迭代法通常可以节省内存。迭代缩放方法(参见
*STATIC
)所需内存少于迭代 Cholesky 方法,而迭代 Cholesky 方法所需内存又少于 SPOOLES 或 PARDISO
急救包#
如果你正在经历问题,你可以
查看屏幕输出:尤其是非线性计算的收敛信息可能指示问题的来源
查看
.sta
文件:该文件包含每个增量中获得收敛所需的迭代次数信息查看
.cvg
文件:该文件是屏幕输出的摘要,它提供了每次迭代中接触单元的数量、残余力以及解的最大变化的快速概览(无论是否收敛)使用
last iterations
选项:在*NODE FILE
或类似卡片上使用last iterations
选项。这样会生成一个名为ResultsForLastIterations.frd
的文件,其中包含从最后一个收敛增量之后开始的所有未收敛迭代的变形(用于力计算)和温度(用于热计算)使用
contact elements
选项:如果定义了接触,可以在*NODE FILE
或类似卡片上使用contact elements
选项。这会生成一个名为jobname.cel
的文件,其中包含增量中所有迭代的所有接触单元。通过在 CalculiX GraphiX 中读取此文件,可以可视化每次迭代中的所有接触单元,从而可能找到问题的来源段错误(segmentation fault):如果遇到段错误,可以通过在终端窗口中输入
export CCX_LOG_ALLOC=1
来设置环境变量CCX_LOG_ALLOC
为 1。这样运行 CalculiX 时,将获得关于代码中在哪一行分配、重新分配或释放字段的信息(默认值为 0)对专家:如果遇到不同方程之间的依赖问题,可以通过取消
ccx_2.18.c
中writeboun
调用前的注释并重新编译,来在每个步骤开始时打印SPC
。同时,通过取消cascade.c
开头调用writempc
的循环的注释并重新编译,可以在每次设置MPC
时打印它们