本文摘要(由AI生成):
本文是 HyperWorks 优化实例向导的第三期,重点讲解了使用 TCL 脚本实现梁结构参数优化的方法。内容分为优化三要素、优化目标、优化步骤、预备工作、编写优化 TCL 文件、添加模型、定义设计变量、创建响应、选择优化算法、展示优化结果、导入优化结果以及优化实例的扩展十二个部分,展示了 Altair HyperMesh 的另类用法。
HyperWorks优化实例向导第三期来啦!上一讲我们介绍了各种梁单元相关的优化方法,这一讲打算再扩展一下这个主题,顺便展示一下Altair HyperMesh™的另类用法。
首先介绍一个使用tcl脚本实现梁结构参数优化的例子。
优化三要素如下:
1
设计变量
👉 L2是顶部长度尺寸变量,范围是10~18米(底部是车道/人行道位置,所以L1是固定值,不进行优化)。
👉H是外形高度尺寸变量,范围是1~10米。
👉L2分成的段数也是一个变量,取值范围是3~20段。
👉 圆形截面的半径也是一个优化变量,取值范围是20mm~100mm
👉 工字梁截面也是优化变量,但是只能在预定义的5种工字梁截面中进行选择。
所以模型可能是这样的:
也可能是这样的:
下图是右上角三个梁连接部位的局部放大视图,3D显示分离只是软件显示的效果,实际上是完全焊接为一体的。
响应是下图中底边中点999999号节点的y向位移绝对值和体积响应。
2
优化约束
999999号节点的y向位移绝对值小于50mm
3
优化目标
体积最小化
整个优化过程分为两步:
第一步:通过HyperMesh批处理程序hmbatch.exe运行一个tcl文件产生后续Altair OptiStruct™计算用的fem模型文件。为了方便后续Altair HyperStudy™优化时选取响应点,对提取优化位移响应的节点进行了重新编号。
第二步:HyperStudy调用OptiStruct运行刚刚得到的fem文件得到优化计算结果。
TIPS:为了防止还没有开始优化就栽跟头,还需要以下预备工作!
1
编写tcl脚本,这个脚本从零开始完成了所有建模工作,如果有兴趣可以看看下面的视频教程(目前已经是HyperMesh二次开发视频教程库)的一部分。
(点击上方图片获取下载链接)
2
在cmd窗口用hmbatch.exe运行tcl脚本得到fem文件具体方法是用cd命令切换到tcl脚本所在目录后,执行如下程序:
如果执行成功,会在tcl目录下生成一个bridge.fem文件。
3
使用OptiStruct程序运行bridge.fem文件得到计算结果。
如果计算结果正确,那么说明tcl脚本得到的fem文件没毛病,接下来可以开始优化工作了!
优化tcl文件
使用HyperStudy的Editor工具参数化tcl文件,并保存为tpl文件。文件很长,涉及参数化的部分如下:
添加模型
启动HyperStudy,工作目录设定为tcl文件所在目录,然后添加两个模型。
模型1是Parameterized File,求解器选择HM Batch ,参数输入-tcl ${file}
模型2的类型是Operator,需要fem文件作为输入文件,但是此时还没有fem文件在该目录下,需要先点击Next到Test Models步骤后先运行一下model1生成一个fem文件(也可以从外部拷贝一个到模型1的目录下骗一下HyperStudy😄)。
运行后再次回到Define Models步骤继续,点击Model Resources,然后在对话框中添加一个resource,类型是Add File,表示每一次迭代运算都会生成一个新的模型。
Define Models设置好后如下图所示:
定义设计变量
5个设计变量的范围如下:
设计变量的数据类型、模式及离散取值如下图:
注意到isecname项设置为了Categorical,表示各个截面之间没有先后关系。如果设置为离散变量,HyperStudy认为各个截面是有先后顺序的,DOE的时候可能只取前后两个截面进行。
创建两个响应
分别是体积和999999节点的y向位移绝对值。
优化设置
优化只需要设置好目标和约束。
优化算法选择GRSM
迭代次数为15次(问题比较简单,因此不需要太多迭代步,以节约时间)。
优化结果
导入结果
将优化结果的fem文件导入到HyperMesh看看劳动成果,效果如下:
各个设计变量的值以及响应如下:
体积从1.42e9减小到了1.14e9
y向位移绝对值从48减小到了37
刚度提高的同时重量还变小了,有什么理由不使用优化呢?
其实上面这个优化例子,绝大部分的工作量都被写脚本给揽走了,从节点-单元-材料-属性-载荷-工况一步步都是代码搞定的。
实际优化时大部分时候可以不要这么老实,该偷懒的时候要偷懒😜。
具体方法我们也来举个🌰。下面这个例子是HyperStudy开发部门的同事分享的。
RIB1板只可以调厚度,其余板只可以选择有或者没有。
对下图中ID号为3的component选择export
对应命令*entitysuppressoutput components 3 0
修改ID号为1的属性的厚度为0.00545
对应命令*setvalue props id=1 STATUS=1 95=0.00545
前后再加上打开模型,加载OptiStruct模板,后面在加上导出fem文件,完整的tcl脚本如下(总共就10行,而且大部分都是抄的command.tcl):
有了tcl脚本后,剩下的事情和上一个例子也就差别不大了。
优化tcl文件
使用HyperStudy的Editor工具参数化tcl文件,并保存为tpl文件。
添加模型
启动HyperStudy,工作目录设定为tcl文件所在目录,然后添加第一个模型。
模型1是Parameterized File,求解器选择HM Batch ,参数输入-tcl ${file}
由于每次运行都需要rib_parameterization.hm,所以需要通过Model Resources 复 制到工作目录。
模型2的类型是Operator,需要fem文件作为输入文件,但是此时还没有fem文件在该目录下,需要先点击Next到Test Models步骤后先运行一下model1生成一个fem文件(也可以从外部拷贝一个到模型1的目录下骗一下HyperStudy😄)。
运行后再次回到Define Models步骤继续,点击Model Resources,然后在对话框中添加一个resource,类型是Add File。
Define Models设置好后如下图所示:
定义设计变量
4个设计变量的变化范围如下:
设计变量的数据类型、模式及离散取值如下图:
创建两个响应并设置好目标和约束
优化算法选择GRSM
迭代次数为15次(问题比较简单,因此不需要太多迭代步,以节约时间)。
优化结果
各个设计变量的值以及响应如下图所示:
这个例子当然不是实际的结构,主要目的是展示一下HyperMesh怎么样在后台修改模型的。
实际上如果要做DOE也是类似的
我们可以做一个部分因子法DOE:
各次试验的变量组合即响应如下:
线性效应如下:
帕累托图如下:
通过使用程序控制HyperMesh,优化一下就变得自由了,例如某处的结构可以如下所示的各种不同结构中的一种。实际上几乎有无限的可能性。
或者是下图的样式
这些变形对于morph来说恐怕要求太高了,但是HyperMesh脚本却是可以轻松搞定的,只需要把morph的几个中间状态网格预存到hm文件里面,优化时就可以轻松切换了。
例2的的HyperMesh模型需要使用2020版才能打开哟~
如果你要优化下图中的输电塔,你可以这样做:
1.先从拓扑优化得到各个梁的位置分布
2.创建梁单元模型进行截面大小的优化
3.如果你想更进一步,还可以在上一步中同时加上形状优化