Python—> Nastran
使用PyNastran库对 Patran&Nastran有限元分析软件进行二次开发,可以自动对目标模型进行有限元分析
BDF file
BDF文件是使用Patran对模型进行前处理产生的,包括划网格、定义结构参数、添加约束等操作
- xref:Cross-referencing,可以很方便地追踪对象,如果xref=False,只会返回数据对象的raw data,需要分别对bdf的element和node做索引
1 | # read |
1 | bdf.nodes.items() |
修改几何尺寸
缩放修改BDF文件中nodes的坐标,就可以实现修改结构的厚度/长度等几何尺寸参数
问题1:只有单个零件的结构比较容易修改,但是如果结构中有许多子结构,在BDF文件中很难区分哪些是子结构1,哪些是子结构2的
尝试1:可以给每个子结构设置不同的坐标系coords,(Patran)
1 | eid100 = bdf_xref.elements[100] |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|
GRID | NID | CP | X1 | X2 | X3 | CD | PS | SEID |
Example (Steel Plate Structure)
Generate simulation datasets by FE (solidworks & patran & nastran & python)
Model and Simulate to get .bdf
file
- solidworks project Part.SLDPRT, export
.x_t
file - patran 材料属性参数设置+网格划分+约束+负载,并定义好输出的类型(mode shape/FRF…) to get
.bdf
file(其中保存着有限元模型前处理的结果,包括网格节点编号、坐标,材料属性) - run nastran
- input:
.bdf
file 使用python修改bdf中的参数,可以获得多个bdf,然后输入到nastran中进行仿真计算 - output:
.f06
file 包含仿真输出的结果
- input:
python
修改钢板厚度 Tickness思路:
- 读取所有节点坐标 nodes
- 计算厚度缩放比例
ratio = T / T_origin
,T是需要修改的厚度,T是bdf文件中初始的厚度 - 将nodes坐标沿着厚度反向进行缩放,得到nodes_modify
- 将修改后的nodes坐标写入bdf文件中
- 然后运行nastran根据修改后的bdf文件仿真计算得到f06文件
- 读取f06文件中的结果并保存
main code
1 | def get_output(bdf_path,input_path,nastran_path,save_dir): |
1 | def read_bdf_nodes(bdf_filename:str) -> np.ndarray: |