Topology optimization in Ansys Classic (one sided tool split constraint)

preview_player
Показать описание
Simple topology optimization written in APDL. During the optimization one sided tool split (like casting, forging) constraint has been applied (for other manufacturing constraints see my other videos). Achieved strain energy: 0.5166 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
Рекомендации по теме
Комментарии
Автор

Hi TARGE170 I saw this video and I want to know if you can tell me how do you get the strain energy and convergence values for the problem, I'm working with topology optimization in trusses and I'm using APDL but I cant get these values, I hope you can help me regards.

MARTIN