如何使用Optistruct进行应力拓扑优化或多目标、多约束优化

       Optistruct是一款非常优秀的商业有限元求解器、优化求解器,功能强大到炸裂,使用起来也很方便。但偶尔用起来也有一点点小麻烦,初学者经常会碰到的问题就是不知道怎么使用Optistruct进行多目标优化或应力优化这种涉及多个响应的优化。Optistruct中的响应是指要作为目标函数或约束函数的结构的性能,比如质量、体积、体积分数、应力、位移等等,其中应力和位移这种响应属于局部响应,即结构中有很多个这种响应,某点的位移或应力不能代表结构的整体性能。以应力优化为例,假如我们想要进行应力最小优化,我们实际上是要使结构中的最大应力最小,但是值得注意的是,优化过程中,具有最大应力的单元一直会变,因此不可能使某个应力值最小,而另外一方面,optistruct也只允许有一个目标函数,怎么办呢?

       通过查询各类资料,本人摸索出一个行之有效的方法,概述如下:

  1. 创建一个公式,应力优化经常使用p范数凝聚所有的应力值,结构中有多少个单元,公式中即有多少个未知数

    σpn=(Σ(σi)^pn)^(1/pn

  2. 创建NEL个应力响应,NEL为结构中的单元个数

  3. 创建一个总的响应,类型选择为:function,勾选第一步创建的公式,然后不要着急create,先点击edit,勾选response,在数目中输入单元个数,然后挨个在弹出的NEL个框中,填入一个个响应

  4. 在目标函数中,选择第三步创建的总响应作为目标函数。

    假如这么干的话,难点在于第二步和第三步,因为我们要创建NEL个应力响应,每个响应对应一个单元。第三步则要勾选一个个响应,这些响应要和公式中的未知数一一对应,NEL一般很大,手动创建太难了,为此我们很自然想到使用脚本自动创建这些数据,只要了解Optistruct的语言习惯,自动创建不是难题,本人在研究时,首先创建了基本的优化模型,并验证可运行,然后使用Python脚本自动完成了1-3步。对于下面的经典L型梁

    1.png  

其中有1600个单元,手动创建很不现实,部分响应和公式如下图所示

Snipaste_2020-09-25_18-11-11.jpg

使用本人单独开发的小脚本,很方便完成这部分内容,然后将它们粘贴到之前创建的简单优化模型中即可。

优化过程和优化后的效果如下图所示:

topo_process.gif

拓扑优化后的等值图如下图,可见应力集中的部位基本被消除。本人使用的p范数为6,大家可以尝试其它数值得到更优异的解:

topoed.png

而柔度最小化优化的结果是下面这样的,显然和应力最小拓扑优化是不一样的,因为拐角还是直的,没有去除应力集中。

compppppp.png

创建公式需要注意格式,感兴趣的同学可以尝试下载附件,附件包括脚本和有效的应力优化模型,谢谢。

同样使用本文的方法还可以求解多目标优化和多约束优化等等,不仅仅是拓扑优化,尺寸优化,形状优化也能解决,因为这三种优化类型都需要响应。

如何使用Optistruct进行应力拓扑优化或多目标、多约束优化的图6

该付费内容为:Python脚本和原模型

包含1个附件 15人购买
(16条)
默认 最新
运行出错,提示Stress/strain/force/failure responses are applied to element XX using the norm formulation. Such responses cannot be referenced by DRESP2/DRESP3 responses.
评论 1 点赞 1
回复
我也遇到了,怎么办,请问博主最后解决了吗?
评论 点赞
能否录一个视频讲解一下呢
评论 点赞 1

查看更多评论 >

点赞 27 评论 19 收藏 4
关注