1、如何利用 ANSYS进行拓扑优化前言就目前而言,利用有限元进行优化主要分成两个阶段:(1) 进行拓扑优化,明确零件最佳的外形、刚度、体积,或者合理的固有频率,主要目的是确定优化的方向;(2) 进行尺寸优化,主要目的是确定优化后的的零件具体尺寸值,通常是在完成拓扑优化之后,再执行尺寸优化。在 ANSYS 中,利用拓扑优化,可以完成以下两个目的:(1) 在特定载荷和约束的条件下,确定零件的最佳外形,或者最小的体积(或者质量) ;(2) 利用拓扑优化,使零件达到需要的固有频率,避免在使用过程中产生共振等不利影响。本文主要就在 ANSYS 环境中如何执行拓扑优化进行说明。1、利用 ANSYS 进行拓扑
2、优化的过程在 ANSYS 中,执行优化,通常分为以下 6 个步骤:定义需要求解的结构问题选择合理的优化单元类型设定优化和非优化的区域定义载荷步或者需要提取的频率对优化过程进行定义和控制计算并查看结果1.1、定义需要求解的结构问题对于结构进行优化分析,定义结构的物理特性必不可少,例如,需要定义结构的杨氏模量、泊松比(其值在 0.10.4 之间) 、密度等相关的结构特性方面的信息,以供结构计算能够正常执行下去。1.2、选择合理的优化单元类型在 ANSYS 中,不是所有的单元类型都可以执行优化的,必须满足如下的规定:(1)2D 平面单元: PLANE82 单元和 PLANE183 单元;(2)3D
3、实体单元: SOLID92 单元和 SOLID95 单元;(3)壳单元:SHELL93 单元。上述单元的特性在帮助文件中有详细的说明,同时对于 2D 单元,应使用平面应力或者轴对称的单元选项。1.3、指定优化和非优化的区域在 ANSYS 中规定,单元类型编号为 1 的单元,才执行优化计算;否则,就不执行优化计算。例如,对于结构分析中,对于不能去除的部分区域将单元类型编号设定为2,就可以不执行优化计算,请见下面的代码片段:Et,1,solid92Et,2,solid92Type,1Vsel,s,num,1,2Vmesh,allType,2Vsel,s,num,3Vmesh,all说明:上述代码片
4、段定义相同的单元类型(solid92) ,但编号分别为 1 和2,并将单元类型编号 1 利用网格划分分配给了 1体和 2体,从而对其进行优化计算;而单元编号为 2 利用网格划分分配给了 3体,从而不执行优化计算。1.4、定义载荷步或者需要提取的频率1.4.1 线性结构静态分析对于结构优化而言,其总是在特定的载荷(或者载荷步) ,约束和目标下进行的,在优化分析的过程中,必须执行线性结构静态分析,才能获得需要的优化之后的形状。在 ANSYS 中,可以对单步载荷或者多步载荷执行优化分析,当然,单步载荷是最简单的了。然而,对于某个特定载荷步,必须使用LSWRITE 载荷步存储命令将载荷步预存起来,再用
5、 LSSOLVE 命令进行求解。先看看下面的代码片段:D,10,all,0,20,1Nsel,s,loc,y,0Sf,AllselLswrite,1Ddel,Sfdel,Nsel,s,loc,x,0,1D,all,all,0F,212,fx,Lswrite,2Lswrite,3FinishTocomp,mcomp,multiple,3Tovar,mcomp,objTovar,volume,con,10TodefToloop,20说明:该代码片段首先定义了 3 个载荷步,并利用 LSWRITE 命令将载荷步预存;之后利用 Tocomp 命令定义优化任务目标名称 mcomp,并将体积减少10作为优
6、化的约束条件,之后用 Todef 初始化优化过程,最后利用 Toloop 命令执行优化计算,最大计算次数 20 次。相关命令:TOCOMP、TOVAR、TODEF、TOEXE、TOLOOP 和简要说明。(1) TOCOMP:定义结构优化任务目标。 (如何理解COMPLIANCE:Compliance 本意是一致性,统一性,在结构优化分析中,特别是对于多个载荷步,需要在多个载荷步之间取得一致性的结果,才能满足结构优化分析的目标)(2) TOVAR:定义优化变量,可以是目标变量,也可以是约束变量等;(3) TODEF:定义优化的初始化条件或者收敛准则;(4) TOEXE:执行单次优化计算;(5)
7、TOLOOP:批量执行多次优化分析计算。说说 TOEXE 和 TOLOOP 之间的区别:TOEXE 执行单次优化分析计算,其本身不执行结构分析过程,因此,在利用 TOEXE 命令执行优化计算之前,需要利用 SOLVE 或者 LSSOLVE 命令先执行结构静态分析计算;而 TOLOOP是一个执行优化计算的宏命令,其中包含了 SOLVE 和 LSSOLVE 等命令,因此在上述代码片段中没有出现 SOLVE 或者 LSSOLVE 命令。就使用的便利性而言,利用 TOLOOP 命令可能更方便,但是利用 TOEXE 命令用户可以创建自己的优化宏命令,各有所长,主要是看用户如何使用这两个命令了。1.4.2
8、 模态优化分析在执行模态优化分析之前,需要使用 TOFREQ 和 TOVAR 定义模态分析任务名称和优化分析变量,这点和上述的结构优化分析过程类似。值得注意的是,在利用 MXPAND 指定模态频率分析计算中,需要将单元计算设定为“YES”,这样才能利用 TOEXE 命令正常执行优化计算过程,当然在MXPAND 之前还要使用 modopt 命令设定模态计算的选项;而利用 TOLOOP命令执行模态优化分析计算过程中,由于 TOLOOP 是编制好的宏命令,不需要使用 MXPAND 等命令,请见下面的代码片段:/solutionAntype,modalFinishTofreq,mfreq,recipr
9、ocal,3Tovar,mfreq,objTovar,volume,con,50Todef,1.0d-4Toloop,20说明:首先定义模态求解作为分析类型,之后利用 tofreq 设定频率优化作为优化任务,名称为 mfreq(其中 reciprocal 表示多阶模态频率,本例中为前 3阶模态) ,并利用命令 tovar 设定了体积减少 50作为优化的约束条件,之后设定优化的收敛准则,最后利用 toloop 命令执行最多 20 次优化迭代计算。在本例中,因为 toloop 是一个宏命令,所以并没有显式的使用 modopt 和 mxpand 命令,如果使用 toexe 命令,则用户必须显式的使用
10、 modopt 和 mxpand 命令。1.5、对优化过程进行定义和控制在 ANSYS 中执行优化过程有 2 种方式:(1) 采用 solve 和 toexe 命令相结合的机制,一步一步的执行优化计算,直到满足用户的优化目标和约束条件为止。(2) 采用 toloop 宏命令执行优化计算,可执行多次优化分析计算。说明:采用第二种方式操作更简单,推荐采用。总体上来说,执行优化计算过程大致上分为 4 个步骤:(1) 定义优化函数(或者方式和任务) ;(2) 定义优化目标或者约束条件;(3) 初始化优化过程;(4) 执行优化计算(可以是单次计算,也可以自动批量计算) 。以下分别进行描述:1.5.1、定
11、义优化函数在 ANSYS 中,主要采用以下两种方式定义优化函数:(1) 利用 TOCOMP 定义结构优化;(2) 利用 TOFREQ 定义频率优化。说明:可以利用 TOLIST 命令例举出所有定义了的优化函数。1.5.2、定义优化目标或者约束条件定义优化目标或者约束条件主要是利用 TOVAR 命令设定,看看下面的代码片段:Tocomp,comp,single,1Tovar, comp,objTovar, Volume,con, ,25Todef, 1.0d-4Toloop,10 ,1说明:首先利用 tocomp 命令定义了一个单步(single)的结果优化分析任务,并将任务名称(comp)作为
12、优化任务,并设定体积减少 25作为优化约束条件,之后初始化优化过程,并利用 toloop 命令批量执行优化计算,当然,可以使用 tostat 命令查询 tovar、todef 和 totype 命令的设定状态(totype 命令设定优化类型,具体说明可以参见帮助文件) 。同样,也可以利用如下的命令格式删除已经定义好的优化任务名称或者约束条件:Tovar, Reference_Name,DEL可以定义的优化目标和约束条件的组合方式见下表:序号 优化类型 优化目标 约束条件1 单步优化(single )体积(VOLUME)2结构优化(TOCOMP)多步优化(Multiple)体积(VOLUME)3
13、 单阶频率优化(Single)体积(VOLUME)4 加权平均频率优化(Weighted Mean)体积(VOLUME)5 一致平均频率优化(Reciprocal Mean)体积(VOLUME)6频率优化(TOFREQ)欧几里德范数频率优化(Euclidean norm)体积(VOLUME)7 体积(VOLUME) 单步结构载荷8 体积(VOLUME) 多部结构载荷1.5.3、初始化优化过程初始化优化过程主要是利用 TOTYPE 和 TODEF 命令分别设定优化计算执行的方式和终止计算(或者计算收敛的精度) ,具体说明如下:(1) TOTYPE:设定优化计算执行方式,主要有优化准则方式( Op
14、timality Criteria)和顺序凸状程序方式(Sequential Convex Programming) ,OC 方式可以定义仅将体积作为约束条件,而 SCP 方式必须定义优化计算的目标。(2) TODEF:设定优化计算的终止方式或者收敛精度。说明:优化计算的设定参数并不保存到数据库中,如果用户利用 RESUME恢复数据库,则需要重新利用TOCOMP、TOFREQ、TOVAR 、TOTYPE 、TODEF 等命令进行重新设定。1.5.4、执行优化计算执行优化计算分为单次优化计算和批量多次自动优化计算两种方式,以下分别说明:(1) 利用 SOLVETOEXE 方式,看看下面的代码片段
15、:TOCOMP,COMP,Single,1TOVAR,COMP,OBJTOVAR,VOLUME,CON, ,25TOTYPE,OCTODEF,1.0d-4/SOLUTIONSOLVETOEXEFINISH/POST1PLNSOL,TOPO*GET,TOPSTAT,TOPO, ,CONV*STAT,TOPSTAT/SOLUTIONSOLVETOEXEFINISH/POST1说明:首先利用 TOCOMP、TOVAR 等命令设定好优化定义,之后进入求解模块,利用 SOLVETOEXE 命令组合求解单次优化计算,之后进入后处理模块,显示拓扑优化的结果;再进入求解模块,再一次执行优化计算,直到满足用户的
16、计算目标为止。再看看一个利用单步优化计算进行频率优化的代码片段:TOFREQ,FREQ1,SINGLE,1TOVAR,FREQ1 ,OBJTOVAR,VOLUME,CON, ,25TOTYPE,SCPTODEF,1.0d-4/SOLUTIONANTYPE,MODALMODOPT,LANB ,1MXPAND,1, , ,YESSOLVETOEXEFINISHTOPLOT,0*GET,TOPSTAT,TOPO, ,CONV*STAT,TOPSTAT/SOLUTIONSOLVETOEXEFINISHTOPLOT,0说明:采用单步优化频率计算过程类似于单步结构优化计算过程,不再赘述。(2) 自动批量多
17、次优化计算该方式是 ANSYS 中推荐采用的优化计算方式,主要命令是 TOLOOP,其本身是一个宏命令,看看下面的代码片段,并要注意和 SOLVETOEXE 方式的区别:LSWRITELSWRITELSWRITETOCOMP,MCOMP,MULTIPLE,3TOVAR,MCOMP ,OBJTOVAR,VOLUME,CON, ,30TODEF,0.001TOLOOP,20 ,1说明:本段程序代码首先定义 3 个载荷步,之后定义了优化分析的设定等,最后利用 TOLOOP 命令执行最多 20 次的优化计算迭代。1.6、查看优化计算的结果当优化计算完毕,优化的结果存放在结果文件中(*.RST) ,用户
18、可以使用如下的命令格式查看优化计算的结果:(1) 对于节点计算的结果,用 PLNSOL,TOPO 或者 PRNSOL,TOPO 显示虚密度(虚密度是指去除和保留部分的指标,是一个 01 之间的值,虚密度为 0,表示可以去除;虚密度为 1,表示应该保留) ,当然也可以使用 TOPLOT,0 命令显示节点计算结果。(2) 对于单元计算的结果,用 PLESOL,TOPO 或者 PRESOL,TOPO 显示虚密度,当然也可以使用 TOPLOT,1 命令显示单元计算结果。(3) 另外,也可以使用 TOGRAPH 和 TOPRINT 显示优化计算过程,看看下面的代码片段:/POST1TOPLOT,1PLN
19、SOL,TOPOTOGRAPH,OBJTOGRAPH,CON,VOLUMETOPRINT,OBJTOPRINT,CON(4) 也可以利用 ANSYS 中的单元表格功能进行结果显示,看看下面的代码片段:ETABLE,EDENS,TOPOPLETAB,EDENSPRETAB,EDENSESEL,S,ETAB,EDENS,0.9,1.0EPLOT(5) 如何查看优化计算过程是否收敛和迭代的次数?看看下面的代码片段:*GET,TOPCV,TOPO , ,CONV*GET,TITER ,TOPO, ,ITER*GET,TOBJ,TOPO,ITER1,TOHO*GET,TCON,TOPO,ITER1 ,T
20、OHC,1*STAT,说明:变量 TOPCV1 表示优化计算收敛,TITER 变量表示优化计算的次数,TOBJ 变量表示优化计算最终的目标值, TCON 变量表示约束条件值。(6) 对于频率优化计算,特别是对于加权平均、一致性平均和欧几里德范数,可以通过如下的代码片段命令获得优化计算后的频率:*GET,FREQ1,MODE , 1,FREQ*GET,FREQ2,MODE , 2,FREQ*GET,FREQ3,MODE , 3,FREQ说明:可以进入后处理模块(/POST1)和利用 SET 和 PLDISP 命令获得对应的振形。2、拓扑优化有关的命令简要说明总体说明:拓扑优化的命令均以 TO 开
21、头,共计12 个,现简单说明如下:(1)TOCOMP,REFName,Type,NUMLC,LCARR命令功能:定义单步或者多部一致性结果拓扑优化任务。参数解释:REFName:优化任务名称,最多 8 个字符;Type:优化载荷步类型,可以是 Single(单步)或者 Multiply(多步) ;NUMLC:对于单步载荷,指定对哪个载荷步进行优化计算;对于多步载荷,指定需要考虑的载荷步总数;LCARR:对于多步载荷,利用该参数可以定义多个载荷步之间权重,需要将各个载荷步的权重先定义在一个数组中,再用权重数组的方式加以引用。(2)TOFREQ,REFName,Type,NFreq,Frqarr,
22、TargVal命令功能:定义单个或者多个频率拓扑优化任务。参数解释:REFName:优化任务名称,最多 8 个字符;Type:可以是 Single、Weighted 、Reciprocal、Euclidean 四种优化形式;NFreq:对于 TypeSingle,该参数表示频率的标志值;对于Weighted、Reciprocal 、Euclidean 这三种方式,该参数表示频率的总体阶数;Frqarr:对于 TypeWeighted、Reciprocal,该参数表示加权数组,用权重数组的方式加以引用;对于 TypeEuclidean,该参数表示目标频率;TargVal:对于 TypeRecip
23、rocal,该参数用于定义目标频率。(3) TOVAR,REFName,Type ,Lower,Upper,Boundtype命令功能:定义优化变量和类型。参数解释:REFName:优化任务名称,最多 8 个字符,它是利用 TOCOMP 或者 TOFREQ命令定义的;Type:优化变量类型,可以是 OBJ、CON 和 DEL;Lower:当 TypeCON 时,优化变量的下限;Upper:当 TypeCON 时,优化变量的上限;Boundtype:当 TypeCON 时,表示优化变量的类型,可以是 PERCENT(百分数)或者 ACTUAL(实际值) 。命令缺省:TOVAR,VOLUME,OB
24、J(4) TOTYPE,Type命令功能:定义拓扑优化求解类型。参数解释:Type:可以是 OC(优化准则方式,默认值) ,或者 SCP(顺序凸度程序方式) 。在使用 OC 方式时,只能将 VOLUME 作为限制条件,而 SCP 方式可以对于任何优化方式进行采用。(5) TODEF,ACCUR命令功能:定义拓扑优化初始化精度控制或者收敛准则。参数解释:ACCUR:精度控制或者收敛精度,默认值0.0005。(6) TOEXE命令功能:执行单次拓扑优化,无参数。(7) TOLOOP,Niter ,Plot命令功能:批量执行多次拓扑优化计算。参数解释:Niter:优化计算执行次数,最大 100 次,
25、默认值 1 次;Plot:Plot0 表示每次计算完成后不显示计算结果;Plot1 表示每次计算完成后显示计算结果。(8) TOPLOT,Aver命令功能:显示拓扑优化计算的结果。参数解释:Aver:Aver 0 表示显示的节点结果进行平滑处理(默认值) ;Aver1 表示显示的节点不进行平滑处理。(9) TOSTAT命令功能:显示拓扑优化的状态和计算结果信息,无参数。(10) TOPRINT,Type ,RefName命令功能:打印拓扑优化迭代计算的历史过程信息。参数解释:Type:TypeOBJ 表示打印目标优化变量的求解过程 VS 迭代步数;TypeCON 表示打印约束优化变量的求解过程 VS 迭代步数;RefName:当使用多步约束的参考名称,缺省是第一个约束名称。(11) TOGRAPH,Type,RefName命令功能:打印拓扑优化迭代计算的历史过程信息。参数解释:Type:TypeOBJ 表示打印目标优化变量的求解过程 VS 迭代步数;TypeCON 表示打印约束优化变量的求解过程 VS 迭代步数;RefName:当使用多个约束的参考名称,缺省是第一个约束变量名称。(12) TOLIST命令功能:打印已定义的所有优化计算任务,无参数。