设计仿真 | MSC Nastran计算过程数据提取和使用方法
MSC Nastran具备静力学、动力学、非线性、优化、气弹等功能全面的结构分析功能,在航空航天、汽车、船舶等各个行业均有广泛的应用。MSC Nastran具备非常强的开放性和可扩展性,用户不仅可以提取计算过程中的中间数据,还可以根据自己的需要来修改软件内置的分析求解序列,甚至是创建满足自身独特需求的求解序列。
本篇内容就通过案例的形式详细介绍一下如何从MSC Nastran中提取计算过程的中间数据,以及后续如何使用这些数据。
需要说明的是:
• 本篇内容所介绍的数据包括,但不限于,结构模型的刚度阵和质量阵,只要是MSC Nastran允许输出的过程数据(如气弹分析中使用的气动力影响系数矩阵、气动力矩阵等),均可以采用这种方法进行输出。
• 本篇内容所采用方法中的部分步骤,并不一定是最优的步骤,但应该是最简单、最易于理解和使用的通用方法。
• 本文采用MSC Nastran 2019版本进行演示,若采用其它版本进行操作的话,其中的若干语句可能需要进行调整,但是整体的方法步骤是一致的。
详细的操作步骤可以分为:数据定位、数据输出、数据使用三步。本文文章最后还对用户可能关心或者需要注意的问题进行了描述。
数据定位
以下图中的平板为例,此平板共有66个节点,没有任何载荷和约束条件,采用SOL 103进行模态分析,默认取10阶模态。完成前处理设置后,输出.bdf文件。
在计算模型的执行控制段输入:
DIAG 8,14
如下图所示。8代表在.f04文件中输出可以导出的矩阵的位置。14代表在.f06文件中输出所使用的求解序列的代码。DIAG的使用方法请参考MSC Nastran帮助文档中的《Quick Reference Guide》[1]。
上述.bdf文件提交MSC Nastran 2019计算得到的.f04文件局部如下图所示。此.f04文件在常规.f04文件的基础上增加了可以输出的矩阵的信息,包括:矩阵维度、矩阵密度(稀疏程度)、矩阵数据产生的位置等。
以下图为例,总刚度矩阵KJJZ是一个396×396的矩阵,其可以输出的位置是在名称为SEMG的subDMAP的第396行,类似的总质量矩阵MJJX可以输出的位置是名称为SEMG的subDMAP的第424行。
通过在.f06文件进行查找,就可以看到SEMG的第396行和第424行的具体情况,如下面两幅图所示。
需要说明的是,这个396行和424行对于不同的软件版本,可能会发生更改。开发人员会根据实际的开发需求,可能会修改这些代码中的部分,从而导致这个具体的数字产生变动。如果版本发生了改变,用户可以重新执行“数据定位”这一步骤,来查找确切的位置。
当然也有更简便的方法来提高不同版本之间的兼容性,可以避免换一个版本就重新进行数据定位,下文有相关说明。
数据输出
上文找到了需要输出的矩阵的具体位置之后,就可以修改模型的.bdf文件,通过添加少量DMAP语句的形式,就可以进行数据的输出,如下图所示。
下面对上图中的语句进行解释:
执行控制段:
第15行:对名称为SEMG的subDMAP进行修改编译。
第16行:修改第396行(396行内容不变,把后文的OUTPUT4添加在396行以后)。
第17行:OUTPUT4模块。对于此例而言,用户只需要了解:
• KJJZ这里是需要输出的矩阵的名称。这个名称可能与.f04中所显示出来不一致,但是要求与.f06中对应语句中显示的是一致的。
• 105是unit number,需要与ASSIGN命令中的unit number对应即可(不能与MSC Nastran内嵌的unit number冲突)。
• 16是输出的矩阵的精度,这里也可以修改为其它数字。
• 其余位置只需要保证格式(例如逗号的个数、斜杠的个数等)与上图保持一致即可。
• 其它各参数详细含义请参考MSC Nastran帮助文档中的《DMAP Programmer’s Guide》[2])
第18行:与第16行类似。
第19行:与第17行类似。
文件管理段
第8行:ASSIGN命令,利用OUTPUT选项输出.op4文件。单引号中的文件名称可以任意选取,unit number需要与第17行中的unit number保持一致。.op4文件可以选择二进制格式或者文本格式的。若采用FORMATTED参数,则输出文本格式的文件,若采用UNFORMATTED参数,则输出二进制格式的文件。二进制格式占用空间少,也有现有的工具支持直接读取,因此推荐采用二进制格式的输出方式。ASSIGN的使用方法请参考MSC Nastran帮助文档中的《Quick Reference Guide》[1].
第9行:与第8行类似。
完成上述修改后,提交MSC Nastran计算,即可输出矩阵数据。工作目录内除了常规的.f06、f04、.log文件外,会出现额外的文件,其文件名与ASSIGN命令中的设置一致。
查看计算完成的.f06文件中的SEMG第396行会发现,在.bdf文件中写入的OUTPUT4命令被插入到397行。下图中左侧的数字是原有SEMG的行数,右侧数字是使用的ALTER之后的行数。
数据使用
下面两图为文本格式的.op4文件中得到的总刚度矩阵数据。由于有限元模型的矩阵常常是稀疏矩阵,因此此文件给出的数据并不是把396×396所有的元素都列出来,而是只给出了每行中从第一个非零元素到最后一个非零元素之间的数字。
该文件第一行给出了该矩阵的基本信息,包括行数、列数、矩阵名称,数字精度等。
从第二行开始为实际的矩阵元素。此格式按照矩阵的行来给出,例如这里的“1 1 74”的意思是矩阵的第1行中非零元素从第一列开始,此行从第一个非零元素到最后一个非零元素之间一共有74个元素。然后下面给出了这74个元素的数值。
然后看下面的第二幅图,是数据文件的结尾位置。“396 325 72”的意思是矩阵的第396行中的非零元素从第325列开始,此行从第一个非零元素到最后一个非零元素之间一共有72个元素,并在下面给出了这72个元素的数值。
此文件的最后两行是一个标识符,主要用于方便变成读取矩阵的目的,没有实际的意义。
虽然文本格式的.op4文件相对规整,但是如果编程读取的话,仍然略显繁琐,因此推荐采用二进制格式的.op4文件。
读取二进制的.op4文件,可以采用编程语言进行读取使用。以Python为例,有很多库可以使用,如pyNastran[5]、pyYeti[6]。下图给出了采用pyYeti库的简单的代码案例,这样就可以直接读取矩阵数据并供后续使用。
其他说明
版本兼容性
前文提到此方法如果需要换版本的话,需要重新执行数据定位的过程。其实MSC Nastran也提供了很多方法来提高方法的版本兼容性,例如使用ALTER的关键字搜索功能或者MALTER功能,详细的方法可以参考MSC Nastran帮助文档中的《DMAP Programmer’s Guide》[2]以及相关的视频讲解[3]。
矩阵名称
MSC Nastran矩阵的名称有自身的命名规则,一般都是KTIJ的形式,其中:
• K是矩阵的类型,例如K为刚度、M为质量、P为载荷、U为位移、Q为反力、B为阻尼、G为转换矩阵;
• T为矩阵类型,但是不常使用;
• I为行的自由度集;
• J为列的自由度集;
上述只是一般的规则,更详细的介绍可以查阅MSC Nastran帮助文档中的《DMAP Programmer’s Guide》[2]中《Data Block Glossary》以及其它相关章节。
MSC Nastran矩阵数据与全局坐标系[4]
MSC Nastran中GRID卡片第7域CD可以指定此节点所采用的全局坐标系(Global Coordinate System)。这里的默认数值为空,代表使用的是基础坐标系(Basic Coordinate System)。用户可以将某个自定义坐标系的编号填写在这里,这样MSC Nastran对于此节点相关自由度的表达和分析均会参考这个用户指定的坐标系。
正是因为全局坐标系的概念,MSC Nastran所采用的总刚度矩阵(以及其它类似的矩阵数据)可能与常规意义上的总刚度矩阵有所区别。这是因为MSC Nastran在将单元刚度矩阵组装成总刚度矩阵时,并不需要将所有的单元刚度矩阵转换到某个单一的坐标系上再进行组装,而是会根据用户在GRID卡片第7域CD所设置的坐标系进行计算。这就导致了如果用户修改了CD域,将其改成不同于基础坐标系的其它坐标系,那么MSC Nastran输出的总刚度矩阵在相应自由度上的数值是参考这个节点CD域所指定的坐标系而计算出来的。
当然,如果所有的GRID卡片第7域都采用了默认数值,那么这种情况下得到的总刚度矩阵与常规意义上的总刚度矩阵是一致的。
其它案例
下图是一个用来颤振分析模型中气动力相关矩阵数据的简单示例,供读者参考。
参考文献:
1.《MSC Nastran Quick Reference Guide》
2.《MSC Nastran DMAP Programmer’s Guide》
3.https://www.bilibili.com/video/BV1ed4y117B9/?spm_id_from=333.999.0.0
4.《MSC Nastran Linear Static Analysis User’s Guide》Chapter 3
5.https://pypi.org/project/pyNastran/
6.https://pypi.org/project/pyyeti/
7.本文采用案例的链接:
https://pan.baidu.com/s/1iSs29FfRzJvnwRMMD7Zpeg?pwd=rgjx
提取码:rgjx
备注:
如对上述功能使用有疑问或者希望更深入了解,请通过如下方式联系我们:
Tel:010-82607000
Email:mscprc.support@mscsoftware.com
查看更多评论 >