“ HyperStudy一直是我最喜欢的优化引擎,使用python可以为其创建复杂的响应,更是可以创建基于个人平时工作常用的优化目标,如原点平均动刚度,则该响应即可直接用于优化设计。本文的目的是介绍一下HyperStudy注册Python函数的流程。”
HyperStudy注册python函数的流程非常简单:
定义一个有返回值的函数,因为其返回值是作为响应的或用于计算的,所以必须要有返回值;
编写HyperStudy preferences文件.mvw,在其内注册1中定义的函数;
在HyperStudy中使用2中的mvw文件。
01
—
复杂响应的python函数
定义一个复杂相应函数,存为.py文件。本文以源点平均动刚度为例,定义DynamicStiffnessForHS.py文件其内容如下:
from numpy import trapz
def dynamic_k_avg(x, y):
pi = 3.141592653
f = x[-1] ** 3 - x[0] ** 3
area = trapz(y, x, dx=0.001)
# print(area)
return area, 4 * pi * pi * f / (3 * area)
def dk(x, y):
return dynamic_k_avg(x, y)[1]
02
—
HyperStudy preferences文件.mvw
文件内容如下:
*Id("HyperStudy v21.0")
*BeginDefaults()
*BeginPlotDefaults()
*RegisterPythonFunction("dk","K:\my-simulation\Abaqus\Abaqus_MainGui_customize\abaqus_plugins\dynamic_stiffness\DynamicStiffnessForHS.py",2)
*EndPlotDefaults()
*EndDefaults()
可以看出*RegisterPythonFunction就是注册python函数的关键指令,关于该指令说明如下:
03
—
使用preferences文件.mvw
启动HyperStudy
file菜单,点击Use Preferences File
选择编写好的.mvw文件
04
—
函数的使用
需要注意的是HyperStudy向Python传递数组类型的参数时,是使用{}的而不是[],如下的在HyperStudy中的计算结果与直接使用python时一致的。