Code_Aster入门
理论:命令文件流程与验证思路
概述
听说Code_Aster免费但很难用好。它有什么不同?
在于写法独特,以及验证资料丰富。Code_Aster是法国电力公司为评估核电站结构而开发的求解器,用命令文件(.comm,实质上是一种Python脚本)描述分析。命令名是法语缩写(LIRE_MAILLAGE=读取网格,AFFE_MODELE=分配模型等),一开始会不习惯。另一方面,它公开了数千个验证例题及其理论说明,可以追溯“这个功能用哪些例题验证过”,这是其他开源软件没有的优势。入门时,最好在Salome-Meca集成环境中,用一个有理论解的简单问题,把生成网格、用AsterStudy组装命令、查看结果这一整套流程走一遍。
静力分析的命令流程
- LIRE_MAILLAGE:读入网格(MED格式)。
- AFFE_MODELE:指定单元类型(PHENOMENE='MECANIQUE'、MODELISATION='3D'等)。
- DEFI_MATERIAU、AFFE_MATERIAU:定义材料(杨氏模量、泊松比)并分配给网格组。
- AFFE_CHAR_MECA:施加约束(DDL_IMPO)和载荷。
- 用MECA_STATIQUE求解,用CALC_CHAMP计算应力等,用IMPR_RESU输出结果。
用于对照的梁理论
P为端部载荷,L为长度,E为杨氏模量,I为截面惯性矩,b和h为截面宽和高,G为剪切模量,A为截面积,k为剪切修正系数。
源于核电验证的公开求解器
Code_Aster自1989年起由法国电力公司开发,2001年作为开源软件公开。由于需要向核安全监管机构说明分析依据,每增加一项功能都要编写验证例题和理论文档,这是开发规则。结果,它虽然是开源软件,在质量保证文档的厚度上却不逊于商用求解器,十分少见。
算例
例1:钢悬臂梁(宽50 mm、高100 mm,端部1 kN,单位N·mm·MPa)
| 长度(长/高) | 弯曲挠度 | 剪切贡献 | 合计 | 最大弯曲应力 |
|---|---|---|---|---|
| 1,000 mm (10) | 0.3810 mm | 0.0030 mm(0.8%) | 0.3839 mm | 12.0 MPa |
| 500 mm (5) | 0.0476 mm | 0.0015 mm(3.1%) | 0.0491 mm | 6.0 MPa |
E = 210,000 MPa,泊松比0.3,截面惯性矩4.167×10⁶ mm⁴。梁越短剪切变形比例越大,三维单元结果会略大于梁理论。
例2:单位混淆
网格用mm建立,而杨氏模量按210×10⁹(Pa的数值)输入,挠度变为3.81×10⁻⁷ mm,是正确值的百万分之一。Code_Aster没有单位,所以这种错误不会报错。
用三维网格求解,挠度只有0.30 mm左右。哪里出了问题?
应怀疑单元阶次。一阶四面体单元(4节点)不擅长表示弯曲,表现得“过刚”,低估变形。梁高方向只有几个单元时,挠度比理论值小两成以上并不少见。改用二阶四面体(10节点)或二阶六面体,在差不多的单元数下应接近0.38 mm。在Code_Aster中只需把网格变为二阶(在Salome中指定二阶单元或用CREA_MAILLAGE转换),模型指定(MODELISATION='3D')不变。再确认网格加密后数值不再变化,这个例题的验证就完成了。与理论解的差在0.8%(剪切贡献)左右,就可以判断边界条件和载荷施加也是正确的。
入门流程
- 安装Salome-Meca,运行一个附带的例题。
- 建立悬臂梁几何和网格,定义约束面和加载面的组。
- 在AsterStudy中组装命令,确定单位制并输入材料和载荷。
- 把结果的挠度和应力与梁理论比较。
- 查找使用相同功能的官方验证例题作为设置参考。
“载荷大了1000倍的分析”
某委托分析中,Code_Aster结果的应力是手算的1000倍。网格用m建立,而载荷按图纸本应是kN,为换算成N乘了1000后作为压力施加到面上,面积又按m²计算。在没有单位的求解器中,团队规定在输入文件开头注明各量所用单位,并先用悬臂梁这类已知问题确认数量级,此后同样的错误再没出现。
常见错误
错误与对策
| 错误 | 后果 | 对策 |
|---|---|---|
| 单位制不统一 | 结果差几个数量级 | 统一用N·mm·MPa等 |
| 用一阶四面体算弯曲 | 挠度低估 | 二阶单元 |
| 组名不一致 | 载荷没加上 | 核对网格和命令 |
| 约束不足 | 刚体运动报错 | 确认自由度 |
| 不用已知解确认 | 发现不了错误 | 用悬臂梁验证 |
我想了解相关内容。