首页/文章/ 详情

利用ANSYS子结构技术,求解超大规模问题

4年前浏览4297

如图1所示的空间悬臂梁结构(仅为说明问题),采用SOLID185单元,设置单元尺寸为15mm时,大约有3000万个自由度(方程数),当内存较大而硬盘空间足够时,采用PCG方程求解器也可完成计算试试你的机器配置,看看ANSYS能否求解1000万自由度规模的结构)。但如果图1的梁更长、更宽时,采用相同的网格尺寸会导致无法计算,甚至网格划分都很困难。这种情况可采用子结构技术去实现,前文(ANSYS多尺度建模中,大尺寸与小尺寸的布尔运算极限)的鱼骨梁也可采用子结构技术。

image.png

子结构就是将一群各类单元用矩阵凝聚为一个单元,这个矩阵单元(MATRIX50)称为超单元,超单元与其他单元类型一样使用。子结构技术除可节省机时外,还可在有限的设备资源上求解超大规模的问题,尤其是有重复的几何结构模型中效果更佳。

使用子结构技术包括生成超单元、使用超单元、扩展超单元三部分。生成超单元通过定义一组主自由度,该组主自由度描述超单元与模型中其他单元的边界。使用部分就是将超单元与模型整体相连进行分析,整个模型可仅由一个超单元组成,也可以由一个或多个超单元与非超单元连接而成;使用部分的求解仅限于主自由度和非超单元自由度,因此可以大大减小模型规模。扩展部分就是从整体计算结果开始,分别独立求解各个超单元中所有的自由度。

当求解超大规模的模型时,硬盘空间要足够,因为在求解过程中可能会产生很多超大文件。

下面采用子结构技术求解并说明步骤与方法,为方便起见(受内存和外存限制),子结构单元尺寸采用50mm控制。使用子结构技术有三大步骤,一个有非超单元和多个超单元(子结构)的静力分析过程综合如下:

!生成子结构(超单元)

FINISH/CLEAR

/FILNAME,CREAT

/PREP7

…………!生成子结构部分模型

/SOLU

ANTYPE,SUBST!子结构分析

SEOPT,MYZJG!子结构名及选项

M,……!主自由度

D,……!荷载

SAVE!保存数据库文件CREAT.DB

SOLVE!生成MYZJG.SUB文件

!===========================

!使用子结构

FINISH$/CLEAR

/FILNAME,USEFJG!文件名自定义

/PREP7$ET,1,MATRIX50!超单元类型

ET,2,……!非超单元的单元类型

……!生成非超单元部分模型

TYPE,1!指向超单元类型

SETRAN,……!从既有子结构文件创建一个超单元

SE,……!定义由SETRAN创建的超单元

NSEL,……!选择超单元界面结点

CPINTF,ALL!耦合结点

…………!耦合超单元与非超单元节点自由度

ALLSEL,ALL

/SOLU!进入求解层

ANTYPE,……!分析类型和分析选项

……

D,……!非超单元上的载荷

---

SFE,……!施加超单元载荷向量

SAVE!存储数据库文件

SOLVE

FINISH

/POST1

PLNSOL,U,SUM!查看整体模型的非超单元结果

!==========================

!扩展子结构中的结果

FINISH$/CLEAR!!

/FILNAME,CREAT!切换到生成部分文件名

RESUME!读入生成部分数据库

/ASSIGN,RST,MYZJG1,RST!将计算后的结果文件保存为MYZJG1.RST

/SOLU!求解开始

EXPASS,ON!激活扩展选项

SEEXP,MYZJG1,USEFJG!要扩展的子结构名(MYZJG1)

SOLVE$FINISH!

/POST1$PLNSOL,S,X!查看子结构MYZJG1的解

…………!重复上述步骤,扩展所有子结构的解

!========================

!在整个模型中查看子结构结果

FINISH$/CLEAR!!!

/FILNAME,USEFJG!切换到使用部分文件名

RESUME

/POST1!进入后处理

ZJ=5!假定为第5个子结构

CMSFILE,ADD,MYZJG%ZJ%,RST,OFF!添加某个子结构的结果

SET,LAST

PLNSOL,S,X

以图1结构为例,图2为子结构、子结构网格、主自由度等,以及使用过程中的多个子结构、节点耦合等过程,图2h)为整体结构的结果云图,可以查看非超单元部分,但此时不能查看子结构的结果。

image.png

扩展子结构结果后,均可查看各子结构的结果,这与普通单元查看结果相同,各子结构的应力云图如图3所示。

image.png

图4为在整个模型中查看各子结构结果的云图,命令流中的CMSxxx和RSTOFF都是为此准备的,命令流最后给出了单个子结构在整体模型如何查看结果。如果要在整体模型中查看所有非超单元和所有子结构的结果云图,可以将所有结果添加进来查看(不知何因,将所有子结构结果都加进来时,大多数情况下是失败的,但偶尔会成功,你不妨试试看)。

image.png

以上操作的命令流如下,并且命令流中尽量给出详尽的解释。

!================================

!生成子结构

FINISH$/CLEAR!!!(清除)

/FILNAME,CREAT!生成子结构的文件名

/PREP7$B=1000$H=2000$R=200

B1=600$H1=1200$HB=1200

!创建空腔部分(1/4)

BLC4,,,B1/2,H1/2

CYL4,B1/2-R,H1/2-R,R,,,90

AOVLAP,ALL

ASEL,S,LOC,Y,H1/2-R,H1/2

ASEL,R,LOC,X,B1/2-R/2,B1/2

ADELE,ALL,,,1$ASEL,ALL

AADD,ALL$NUMMMP,ALL

!创建面(1/4)

BLC4,,,B/2,H/2$ASBA,2,1

WPOFF,B1/2-R$WPROTA,,,90$ASBW,ALL

WPOFF,,H1/2-R,R

WPROTA,,90$ASBW,ALL

WPOFF,,,-R-R/2$ASBW,ALL

KWPAVE,KP(B/2,H1/2 R/2,0)

WPROTA,,-45$ASBW,ALL$WPCSYS,-1

K,500,0,0,0$K,501,0,0,HB

L,500,501$LINE1=_RETURN

VDRAG,ALL,,,,,,LINE1$LDELE,LINE1

!划分网格(单元尺寸50)

ET,1,185$MP,EX,1,2.1E5

MP,PRXY,1,0.3$MP,DENS,1,1.0

ESIZE,50$MSHKEY,1$MSHAPE,0

VMESH,ALL

!生成整个子结构的模型

VSYMM,X,ALL$VSYMM,Y,ALL

NUMMRG,ALL$NUMCMP,ALL$FINISH

/SOLU$ANTYPE,SUBST!子结构分析

SEOPT,MYZJG!定义子结构名字MYZJG

CMSOPT,FIX,1

!两个侧面节点(子结构与子结构的连接点)

NSEL,S,LOC,X,-B/2

NSEL,A,LOC,X,B/2

M,ALL,ALL!定义主自由度

!施加荷载(也可不在这里施加荷载,

!但需将施加荷载的点定义为主自由度)

ASEL,S,LOC,Y,H/2

SFA,ALL,1,PRES,1$ALLSEL,ALL

SAVE!保存,CREAT.DB,扩展时用

SOLVE$FINISH

!!===========================

!使用子结构(超单元)

FINISH$/CLEAR!!!!

/FILNAME,USEFJG!完整结构文件名

/PREP7$B=1000$H=2000$R=200.0

B1=600$H1=1200$L=10000$HB=1200

ET,1,SOLID185$ET,2,MATRIX50

MP,EX,1,2.1E5$MP,PRXY,1,0.3

!创建非子结构部分的模型和网格

!该部分与子结构相连的节点必须重合,以便耦合

BLC4,,-H/2,B/2,H,HB

BLC4,L-B/2,-H/2,B/2,H,HB

WPROTA,,90$VSBW,ALL

WPOFF,,,H1/2-R$VSBW,ALL

WPOFF,,,1.5*R$VSBW,ALL

WPCSYS,-1$WPROTA,,-90

WPOFF,,,H1/2-R$VSBW,ALL!

WPOFF,,,1.5*R$VSBW,ALL!

WPCSYS,-1$ESIZE,50$MSHKEY,1

TYPE,1$MAT,1$VMESH,ALL

!生成多个超单元(子结构)

TYPE,2

*DO,I,1,9

*GET,MAXN,NODE,,NUM,MAX

!从既有子结构文件创建一个超单元

SETRAN,MYZJG,,MAXN,MYZJG%I%,,,B*I

SE,MYZJG%I%!定义这个超单元

*ENDDO

!将超单元的主自由度耦合

ESEL,S,TYPE,,2$NSLE,S,ALL

CPINTF,ALL!图2(F)

!将非超单元与超单元主自由度连接(耦合)

ALLSEL$NSEL,S,LOC,X,B/2

NSEL,A,LOC,X,L-B/2

CPINTF,ALL!图2G)

ALLSEL,ALL!施加约束

ASEL,S,LOC,X,0$DA,ALL,ALL

!施加荷载(在非超单元上施加荷载)

ASEL,S,LOC,Y,H/2$SFA,ALL,1,PRES,1

!施加超单元荷载(荷载系数)

ESEL,S,TYPE,,2

SFE,ALL,1,SELV,,1

ALLSEL,ALL!

SAVE !保存整个模型,即USEFJG.DB

/SOLU$SOLVE$FINISH

/POST1$PLNSOL,S,X!图2H)

!将超单元之外的结果写入文件FJGFC.RST中

!在总查看整个模型结果时用

ESEL,U,TYPE,,2

RSPLIT,ALL,ESEL,FJGFC

FINISH!

!!!!===========================

!扩展求解子结构中的结果

FINISH$/CLEAR!!!!!

/FILNAME,CREAT!切换文件名为生成时

RESUME!恢复数据库

!将运行后的结果文件赋予MYZJG1.RST

/ASSIGN,RST,MYZJG1,RST

/SOLU$EXPASS,ON!扩展子结构1

!查看整个模型结果时用,

!OFFNM源于非超单元节点总数或单元数

!RSTOFF和CMSxxx用于总体模型中时的设置,否则不用使用。

OFFNM=250000

SEEXP,MYZJG1,USEFJG,,ON

NUMEXP,ALL

RSTOFF,NODE,OFFNM

RSTOFF,ELEM,OFFNM

SOLVE$FINISH!!!!!

!可以查看子结构1的结果

!/POST1$PLNSOL,U,SUM

!PLNSOL,S,EQV$PLNSOL,S,X

!扩展其余子结构,用循环(示例而已)

*DO,I,2,9

FINISH!!

/ASSIGN,RST,MYZJG%I%,RST

/SOLU$EXPASS,ON

SEEXP,MYZJG%I%,USEFJG,,ON

NUMEXP,ALL!

RSTOFF,NODE,OFFNM I*30000

RSTOFF,ELEM,OFFNM I*30000

SOLVE!

/POST1$PLNSOL,S,X

/IMAGE,SAVE,T%I%SX,PNG!出图

*ENDDO!

!============================

!查看整个模型的结果

FINISH$/CLEAR!!!!!!!

!切换文件名为使用的文件名

/FILNAME,USEFJG

RESUME!恢复USEFJG.DB

/POST1!后处理

CMSFILE,ADD,FJGFC,RST,OFF

ZJ=5

CMSFILE,ADD,MYZJG%ZJ%,RST,OFF

SET,LAST$PLNSOL,S,X

!下面为全部加进子结构结果

!*DO,I,1,9

!CMSFILE,ADD,MYZJG%I%,RST,OFF

!*ENDDO

!SET,LAST$PLNSOL,U,SUM

虽然使用子结构可以解决大规模模型的计算问题,但使用超单元时不能采用PCG方程求解器,也不尽人意。其次,使用超单元时不能使用iMPC技术实现装配,因此非超单元与超单元界面上节点必须对应,否则耦合就有困难。

总之,使用子结构技术总是可以解决大规模模型的计算或大尺寸与小尺寸模型的计算问题,当计算资源受限时也是一种解决途径。

---------------------------------------------------------------------------------------------

版权声明:

原创文章,来源铁大王新敏,本文已经授权,欢迎分享,如需转载请联系作者。


代码&命令求解技术网格处理MechanicalMechanical APDLWorkbench
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-11-21
最近编辑:4年前
王新敏
硕士 | 教授 好好学习,天天快乐
获赞 122粉丝 613文章 96课程 0
点赞
收藏
未登录
1条评论
仿真秀0422193852
签名征集中
2年前
王老师,你好!我问一下子结构在多组合工况的结构扩展到子结构上?
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈