首页/文章/ 详情

【HyperMesh宝典】之HyperStudy优化

7月前浏览2756

本文摘要(由AI生成):

本文主要介绍了Altair HyperStudy优化工具的使用方法,包括优化目标、优化约束、设计变量等要素。HyperStudy简单易用、算法高明,是Altair的重要优化工具之一。此外,本文还介绍了HyperMesh新界面中文教程、Templex语言、HyperStudy教程及Compose教程的下载链接,供读者学习。

优化技术历来是Altair的优势所在,Altair拥有众多优化工具,其中Altair HyperStudy™简单易用、算法高明,所以本文先介绍HyperStudy。此外,Altair最重要的优化工具当数Altair OptiStruct™,同时OptiStruct也是Altair Inspire™的优化内核,预计会在下一讲给大家介绍。

因HyperStudy相对简单,本文篇幅不长,也相对简单,但本文不过是个引子,文章最后有HyperMesh新界面中文教程、Templex语言,HyperStudy教程及Compose教程的下载链接,有兴趣的可以下载后再系统学习。

顺便说一句题外话,本文作者方献军老师表示:“我最喜欢的是Altair Compose™。”(可以在文末推荐链接查看Compose相关文章~)


 


     

例一:


首先要优化的结构是由三个实心杆组成的支架,如下图所示:


 


原始模型的性能水平如下:


工况1最大位移:22.85mm

工况2最大位移:75.72mm

体积:7656850mm3

(应力很小,不必考虑~)


优化三要素:


优化目标:最小化体积

优化约束:

        工况1连接点最大变形量 < 22.0mm

        工况2连接点最大变形量 < 75.0mm


设计变量:


1、 连接点可以在虚线框内任意移动

2、 三个杆的截面积变化范围如图中所示

形状变量需要使用HyperMorph创建,横向和纵向各一个。

截面积变量需要通过创建parameters得到。


 


最后,通过快捷键Ctrl+f搜索study进入HyperStudy,但是要注意不要关闭HyperMesh,因为HyperStudy需要利用HyperMesh进行模型更新。优化结果如下:


 



在这个例子中用到了网格变形(虽然只有一个点在动)和参数变量(双精度浮点数类型),实际上哪怕是更多的变量数目也不要紧,只不过是HyperMorph的操作会更加麻烦一些(文末链接中提供了培训资料下载),求解器的计算量会更大。对HyperStudy来说,任何求解器都只是一个黑盒,HyperStudy真正做的事情是:

✔  不断生成新的模型

✔  把新生成的模型提交计算

✔  从新的得到的结果文件提取关心的结果

如下图所示:

 


     

例二:


下图所示三维曲面结构在两个零件交接处有条轨道,希望使用HyperStudy找到在考虑重力的情况下小车在哪个位置时应力最大,哪个位置时应力最小。最后在HyperView或者HyperMesh中画个云图或者矢量图。这个例子的不同之处在于它的设计变量是离散的整数变量。


 


最常规的想法是在各个节点分别创建一个单独的工况进行分析,但是这并不是本例想要介绍的。本例只创建一个工况,但是有很多load collector(每个里面放一个节点的FORCE),让HyperStudy运行的时候不断更换工况中的load collector ID。其实还有更简单的方法,只创建一个力,一个工况,让HyperStudy运行的时候不断更换力作用节点的ID。这个留给感兴趣的人自己去尝试(过程几乎一模一样,而且不用写脚本了)。

考虑到这里创建的load collector数量显著大于10,可以写几行脚本搞定load collector的批量创建。脚本如下:

 


提供给HyperStudy的是一个fem文件。

需要在HyperStudy的Editor工具中进行参数化。


 


此外,还需要创建一个文本文件告诉HyperStudy可选的load collector的id号都有哪些。格式是每个变量一列。本例只有一个变量,因此一列就够了,部分数据如下:


4

5

6

7

8


注意:由于数据表示的是load collector的id,如果不小心写了一个不存在的id,那OptiStruct求解器恐怕就要报错退出了。

如果有多列(多个变量,不同的列用空格分隔),文件的内容大致如下:


 




最后得到的结果是如下两个位置:


 


可以使用Matrix Browser在HyperMesh中显示一个云图(过程略):


 


或者在HyperView中画一个更加直观的矢量图(箭头大小表示全模型最大应力的大小而不是箭头所在位置的应力):


 


方法是将HyperStudy得到的结果写成一个如下的hwascii格式文本文件。

PS:为什么不用Compose或者python进行绘图呢?因为它们显示不了网格模型。


 


本例的目的是说明在HyperStudy中可以把ID号变成变量。类似的,HyperStudy中的变量还可以是节点、单元、梁截面、材料、属性、载荷、工况等的id号。实际上有限元软件中的几乎所有数据都是以ID号作为识别号的,这样一来换个材料、改个梁截面等等就都轻而易举了。

HyperStudy中的变量还可以是字符串,用的场合不多,这里就不介绍啦~


   


在HyperStudy的Editor工具中进行参数化后得到的tpl文件实际上是一个程序源代码(可能连很多HyperStudy资深用户都没有意识到这点),这门编程语言叫 templex,语法继承自C语言,基本数据类型是矩阵(类似MATLAB)。HyperStudy和HyperGraph / HyperView 等模块都会用它。实际上大家日常工作中在HyperGraph里面使用的函数和操作都是基于templex的。

我们先来看一下HyperGraph中怎么使用:比如希望得到多条曲线的上包络线,由于templex的强大功能,自己只需要写一点点代码,如下:


 


可以把得到的新曲线的数值直接放在{}里面进行绘图(当然,也可以变成HyperGraph的一部分),下图中的实线是sin(x)和cos(x)曲线,点是上包络得到的结果:


 


如果需要处理的问题比较复杂,建议使用HyperWorks中的Compose,理由是:


  • Compose可以使用HyperGraph的读取接口

  • 兼容了MATLAB的编程语法(好处是很多编程问题在网上一搜就找到答案了)

  • 可以和python共享变量,只要能通过python解决的问题都可以解决了。



因为templex是编程语言,具有很大的灵活性,可以配合HyperStudy完成各种稀奇古怪匪夷所思的工作。这里抛砖引玉介绍一个比较特别的例子,下图是本例的简单模型。


 


本例的特别之处是:在tpl中通过templex语句实现了如果零件厚度这个设计变量大于1.1mm,单元7将从零件中移除掉(类似求解器的生死单元)。之所以选择这样简单的模型是希望大家看明白编程语言的关键,不被复杂的模型所蒙蔽。语句很简单,就是很普通的一句if语句。如下:


 

想象一下第二行可以换成任意多行的有限元卡片或者把include文件放在那里,那就可以表示任意复杂的结构和载荷了。


根据零件厚度不同,本例中得到的单元卡片是如下两种:


 


 

来源:Altair澳汰尔
OptiStructHyperMeshHyperViewInspireMATLAB材料曲面
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-03-26
最近编辑:7月前
Altair澳汰尔
澳汰尔工程软件(上海)有限公司
获赞 142粉丝 474文章 743课程 4
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈