1. 问题描述
科研工作中的ANSYS模拟分析,往往计算量巨大,需要调用大型计算机执行运算。由于文件巨大,往往需要划分诸多子文件,多种工况的计算产生诸多数据文件。文件管理的复杂性较大:
- 多输入文件
- 多输出结果
- 多工况
- 多次计算
为了高效执行运算,并保证试验数据的标准化管理,从实际经验出发总结本文。
2. 技术背景
2.1 Batch模式
Batch模式即批处理模式,相对于ANSYS普通调试采用的GUI截面,Batch模式直接指定需要运行的文件。运算过程中不出现GUI截面,也不输出中间结果,直接完成所有运算输出指定结果。
一般在个人PC上通过常规调试保证程序的正确性和可行性,然后载入高性能计算机,通过Batch模式批处理计算,直接输出结果。显然,Batch模式的计算效率大大提高。
2.2 求解结果
Batch模式运行之后,会产生一系列的分析结果,如:
常用的结果主要有:
- 目标输出数据:FILE_S2400_F200_D10_L500_4_250.TXT
- 模型结果:file.rst,此为二进制文件包含了模型计算的重要结果,需要特定的命令提取;
- 运行输出报告:file.out
记录了计算的全部过程,如每一步的计算时间、输入的命令文件、结束时间、运行时长等重要信息,可以看做模拟运算的凭证。
运行命令的记录:
运行时间记录:
- 错误记录文件,file.err
如果计算运行失败,可以在错误文件中查找出错的原因,重新调试程序。
3. 解决方案
高效运行大型计算分析,需要一系列的技术支持。
3.1 子程序分解
代码很长(300行)以上的程序,最好进行模块化分割,将原始程序按照功能划分成若干模块程序,如下示例:
-
主程序
-
子程序
这样的好处是:
- 便于分块测试;
- 提高程序复用性和可读性;
需要注意的是,主程序中调用的子程序文件名与实际文件名必须大小写一致,否则linux系统中无法识别。详细参考笔者文章ANSYS|命令流建模高效调试技术。
3.2 多工况设计
由于ANSYS有限元建模分析的便利性,适合进行参数化试验,即批量测试不同参数的试验结果。参数化试验即对应着多种工况,典型的工况设计如下:
上图的表格中设计了6种工况,在大型计算分析中,我们希望一次完成6种工况的分析试验。为了便于计算操作,将工况设置的相关代码与主体分析代码分离,分别保存为命令文件。
工况文件的代码示例如下:
! ---------------------- 控制变量 ------------------------------------------------
FCK = 200 ! 信号中心频率,KHZ
DIAMETER_MM = 8.0 ! 钢筋直径 mm
LEN_BAR_MM = 500 ! 钢筋长度 mm
N1 = 6 ! 径向网格密度,钢筋与PZT一致
LSECT1 = 0.002 ! 钢筋纵向划分节段长度
LSECT2 = 0.001 ! PZT-纵向划分节段长度
3.3 多次计算集成
在主程序中集成多次工况的计算:
3.4 结果文件名设计
多工况参数试验输出很多的数据文件,一种理想的结果文件命名方法是根据参数数值进行命名,这样保证结果文件与工况一一对应:
以上文件名,以VA12_S1600_F200_D8_L500为例,各参数的意义是:
-
VA12
,2个传感器通道; -
S1600
,1600步计算; -
F200
,中心频率200kHz; -
D8
,钢筋直径8 mm; -
L500
,钢筋长度 500 mm;
具体发放详见笔者文章:ANSYS|文件名字符串的构造
3.5 子文件夹设计
ANSYS运行分析之后会产生大量的临时文件,为了避免输入文件、输出文件与临时文件混淆。可以对输入文件和输出文件设置单独的文件夹,使得各类文件分类存储,便于结果的分类提取。
-
主文件夹
- 子文件夹:INPUT
- 子文件夹:OUTPUT
提取目录树如下:
E:.
│ REBAR_1126B_A.dat
│ SUB_ANYLYSIS.DAT
│
├─INPUT
│ SUB_FE01_A1.DAT
│ SUB_FE01_A2.DAT
│ SUB_FE01_A3.DAT
│ SUB_FE01_A4.DAT
│ SUB_FE01_A5.DAT
│ V200K_C1_200US_S1600.TXT
│
└─OUTPUT
VA12_S1600_F200_D8_L500.TXT
VA12_S1600_F200_D9_L500.TXT
VA12_S1600_F200_D10_L500.TXT
VA12_S1600_F200_D11_L500.TXT
VA12_S1600_F200_D12_L500.TXT
在主程序中,需要对输入、输出模块做一定设置。
- 输出模块
input
命令之后,增加子文件夹相对路径
/INPUT,SUB_FE01_A1,DAT,'.\INPUT\' ! 工况A1
/INPUT,SUB_ANYLYSIS,DAT
- 输出模块
文件名中增加子文件夹位置
OUTNAME = STRCAT('./OUTPUT/',OUTNAME)
*MWRITE,VOLTRES,%OUTNAME%,TXT ! 输出信号保存到TXT
(2F22.16)
4. 实施示例
略。
5. 常见问题
上述方法虽然较为繁琐,但对于大量的模拟分析工作来说,做好基础准备,才能事半功倍。
工欲善其事,必先利其器
本文用时60 min。