“ 本文主要介绍在HyperStudy中注册第三方求解器的方法,借助Python完成求解器的调用。”
HyperStudy是一个多学科多平台的优化设计软件,他可以识别所有主流有限元计算文件,并且HyperMesh也可以为所有主流CAE软件做前处理,所以一个仿真的整体流程可以是这样的:
使用HyperMesh前处理;
然后使用擅长的求解器求解;
而后再使用HyperView后处理;
最后优化工作在HyperStudy中完成。
这一套流程的优势是可以使用HyperMesh的Morph功能创建形状变量,形状变量的创建Morph绝对是首屈一指的工具。
下面将开始注册第三方求解器,包括ABAQUS,LS-Dyna,ANSYS,如果还有别的求解器想要注册,那么整体思路是一致的。
01
—
HyperStudy如何调用求解器?
首先需要明确一点,所有求解器的调用均在HyperStudy后台进行,均是无交互调用(这一点可以在使用内部求解器时发现),所以其必然采用cmd命令的方式进行求解,也就是说他将用户提交的所有参数按照规定的方式提交给命令行,进行求解。
我们先从HyperStudy是如何调用自身求解器(即Altair公司内部求解器)看起,看一下他们的调用逻辑:
可以看见主要有如下参数:
label,注册求解器的名字,没什么用
varname,注册求解器的变量名,和我们没什么关系
type,注册求解器类型,不知道有什么影响,估计也和我们没有什么关系
preference,偏好,和我们没什么关系
path,求解器路径,这里是关键了
system arguments,系统参数,这里修改不了,不知道这个参数做什么的
user arguments,用户参数,可以编辑。
可见,path和user arguments是我们主要关注的
而我们计划使用Python调用求解器,所以我们需要注册一个Python,正好可以看见HyperStudy默认注册了自带的Python,我们可以复 制他的路径,注册一个自己的Python。
在HyperStudy中使用Python调用求解器的cmd命令格式肯定是这样的:Python XX.py arg1 arg2 arg3,所以在user arguments中应该传入我们的求解文件XX.py,求解过程必须包含要调用的求解器以及求解文件,所以arg1 我们需要传入求解文件, arg2 我们需要传入求解器编号。
02
—
Python 如何接受调用时传入的参数?
Python使用sys.argv接受传入参数,我们写一个小程序(1.py)验证一下:
import sys
if __name__ == "__main__":
f = open("log.txt", 'w', encoding="gbk")
try:
f.write('parameters' + '\n')
f.write('1: ' + sys.argv[0] + '\n')
f.write('2: ' + sys.argv[1] + '\n')
f.write('3: ' + sys.argv[2] + '\n')
except:
pass
f.close()
命令行执行 Python 1.py a b 此时我们可以看一下log.txt:
parameters
1: 1.py
2: a
3: b
03
—
各求解器cmd调用方式?
各求解器命令行调用方式需要在其帮助文档查证,然后使用一个小的示例文件验证一下就可以了。
04
—
一体式求解器设计
通过以上,我们知道了HyperStudy如何调用cmd,知道了Python如何接受命令行传入参数,也知道了求解器cmd运行指令,那么我们就可以开始着手于设计一个集成多个可调用求解器的py脚本。
该脚本根据HyperStudy传入的参数决定调用哪一个求解器求解输入的求解文件,如果有特殊需求,还可以根据传入参数定义求解参数(暂未,现在的求解参数均为定值),您可以随意扩展。
注册方式如下图:
整体逻辑就是:python batch.py fem solver。