Topology optimization in Ansys Classic (rolling constraint)

preview_player
Показать описание
Simple topology optimization written in APDL. During the optimization rolling constraint has been applied (for other manufacturing constraints see my other videos). Achieved strain energy: 0.9981 Joule. For those who want to compare my results with other optimizer software, I provide the APDL code of the meshed model (with applied BCs and loads):

finish
/clear,start
finish
/prep7
!*************************************************
! INPUT *
!*************************************************
x_dist=25
x_length=95
x_thk=30
y_dist=-15
y_length=165
y_thk=30
h1_origx=40
h2_origx=70
h3_origx=105
h1_origy=0
h2_origy=0
h3_origy=135
d1=12
d2=18
r=20
thickness=20
bushing_arc_div=11
bushing_thk_div=2
bushing_leng_div=13
bushing_elemsize=1.5
bracket_elemsize=2
!*************************************************
! END INPUT *
!*************************************************
!
! Make geometry
!
k,1,x_dist,y_dist,0
k,2,x_dist+x_length,y_dist,0
k,3,x_dist+x_length,y_dist+y_length,0
k,4,x_dist+x_length-x_thk,y_dist+y_length,0
k,5,x_dist+x_length-x_thk,y_dist+y_thk+r,0
k,6,x_dist+x_length-x_thk-r,y_dist+y_thk,0
k,7,x_dist,y_dist+y_thk,0
lstr,1,2 $ lstr,2,3 $ lstr,3,4 $ lstr,4,5 $ larc,5,6,7,r $ lstr,6,7 $ lstr,7,1
cyl4,h1_origx,h1_origy,d2/2 $ cyl4,h2_origx,h2_origy,d2/2 $ cyl4,h3_origx,h3_origy,d2/2
al,1,2,3,4,5,6,7 $ asba,4,all
cyl4,h1_origx,h1_origy,d1/2,,,,thickness
cyl4,h2_origx,h2_origy,d1/2,,,,thickness
cyl4,h3_origx,h3_origy,d1/2,,,,thickness
vext,5,,,0,0,thickness
lstr,20,27 $ lstr,23,25 $ lstr,28,35 $ lstr,31,33 $ lstr,36,43 $ lstr,39,41
asbl,4,88 $ asbl,3,89 $ asbl,9,90 $ asbl,8,91 $ asbl,13,92 $ asbl,12,93
vdele,1,3,1 $ askin,85,93 $ askin,92,87 $ askin,77,89 $ askin,88,79
askin,81,91 $ askin,90,83 $ askin,84,48 $ askin,49,86 $ askin,76,28
askin,29,78 $ askin,80,38 $ askin,39,82 $ adele,1,2,1,1 $ adele,6,7,1,1 $ adele,10,11,1,1
al,110,25,98,57 $ al,26,110,60,100 $ al,59,112,27,100 $ al,112,58,98,24
al,35,102,61,114 $ al,36,114,64,104 $ al,63,116,37,104 $ al,62,102,34,116
al,45,94,65,106 $ al,46,106,68,96 $ al,47,96,67,108 $ al,66,94,44,108
al,16,109,43,95 $ al,40,109,19,97 $ al,41,97,18,107 $ al,17,95,42,107
al,13,103,32,115 $ al,12,117,33,103 $ al,30,117,15,105 $ al,31,105,14,115
al,23,99,8,113 $ al,113,11,101,20 $ al,21,101,10,111 $ al,9,99,22,111
kwplan,-1,10,52,57 $ vsbw,4 $ kwplan,-1,18,60,61 $ vsbw,2
csys,0 $ dsys,0 $ wpcsys,-1,0
va,1,4,22,42,48,69 $ va,2,25,35,43,48,68 $ va,6,24,34,43,49,67 $ va,7,23,36,42,49,66
va,9,-10,26,44,50,62 $ va,11,29,37,45,50,65 $ va,3,28,45,51,-52,64 $ va,27,38,44,51,53,63
va,12,-13,30,46,54,61 $ va,33,39,41,46,55,60 $ va,8,32,41,47,56,59 $ va,12,31,40,47,57,-58
!
! Mesh
!
et,1,185 $ et,2,185 $ et,3,4 $ et,4,21
r,3,99999999,99999999,99999999,1,1 $ r,4,0.1
mptemp,1,0 $ mpdata,dens,1,,7.8e-9 $ mpdata,ex,1,,210000 $ mpdata,prxy,1,,0.3
mptemp,1,0 $ mpdata,ex,3,,210000 $ mpdata,prxy,3,,0.3
vsel,s,,,1 $ vsel,a,,,3 $ vsel,a,,,4
vatt,1,,1 $ vsel,inve $ vatt,1,,2 $ allsel,all $ vsel,s,type,,2
allsel,below,volu $ esize,bushing_elemsize
lsel,s,,,8,27,1 $ lsel,a,,,30,37,1 $ lsel,a,,,40,47,1 $ lsel,a,,,57,68,1
cm,busharc,line $ lesize,all,,,bushing_arc_div,,,,,0 $ lsel,a,,,94,117,1
cm,bushlin,line $ lesize,all,,,bushing_thk_div,,,,,0 $ allsel,below,volu
cmsel,u,busharc $ cmsel,u,bushlin $ lesize,all,,,bushing_leng_div,,,,,0
allsel,below,volu $ esize,bracket_elemsize $ vsweep,all $ vsel,inve
allsel,below,volu $ vsweep,all
allsel,all $ csys,0 $ dsys,0 $ wpcsys,-1,0
wpoff,0,0,0-thickness/2 $ cswpla,20,0,1,1
csys,0 $ dsys,0 $ wpcsys,-1,0
vtran,20,all,,,,0,1
*get,maxnodenumber,node,0,num,maxd
*del,nodetombtmp
*dim,nodetombtmp,array,maxnodenumber,5
*vfill,nodetombtmp(1,1),ramp,1,1
*vget,nodetombtmp(1,2),node,0,loc,x
*vget,nodetombtmp(1,3),node,0,loc,y
*vget,nodetombtmp(1,4),node,0,loc,z
type,3 $ real,3 $ mat,3
*do,ar30,1,3,1
csys,0 $ dsys,0 $ wpcsys,-1,0
wpoff,h%ar30%_origx,h%ar30%_origy,0 $ cswpla,20,1,1,1 $ ksel,s,loc,x,d1*0.49,d1*0.51
lslk,s,1 $ asll,s,1 $ nsla,s,1 $ csys,0 $ dsys,0 $ wpcsys,-1,0
*vget,nodetombtmp(1,5),node,0,nsel
*get,numberofnodes,node,0,count
*del,nodetomb
*dim,nodetomb,array,numberofnodes,4
*do,ar21,1,4,1
*vmask,nodetombtmp(1,5)
*vfun,nodetomb(1,ar21),comp,nodetombtmp(1,ar21)
*enddo
*vscfun,ar22,sum,nodetomb(1,2)
*vscfun,ar23,sum,nodetomb(1,3)
*vscfun,ar24,sum,nodetomb(1,4)
ar22=ar22/numberofnodes $ ar23=ar23/numberofnodes $ ar24=ar24/numberofnodes
n,maxnodenumber+%ar30%,ar22,ar23,ar24 $ e,maxnodenumber+%ar30%,nodetomb(1:numberofnodes,1)
*enddo
csys,0 $ dsys,0 $ wpcsys,-1,0
nmodif,maxnodenumber+3,,,100 $ type,4 $ real,4 $ e,maxnodenumber+3 $ allsel,all
!
! BCs, Loads
!
f,maxnodenumber+3,fx,-1000 $ f,maxnodenumber+3,fy,-1000
nsel,s,,,maxnodenumber+1 $ d,all,ux $ nsel,a,,,maxnodenumber+2 $ d,all,uy
esln $ nsle
ar21=thickness/bushing_leng_div/2
nsel,r,loc,z,0-thickness/2-ar21,0-thickness/2+ar21
d,all,uz $ allsel,all
Рекомендации по теме
visit shbcf.ru