*create,ceRVElaminate ! This macro apply the CE a one periodic RVE hexaedral laminated a=arg1 b=arg2 !------------------------------------------------------ ! LOAD !------------------------------------------------------ ! APPLIED STRAINS epxx=arg3 epyy=arg4 !---Note: must enter epsij=1/2*gamma epxy=arg5/2 !------------------------------------------------------ ! CREATE COMPONENT SET: periodic edge and periodic sides !------------------------------------------------------ ! select edges ab --------------------- nsel,s,loc,x,-a nsel,r,loc,y,-b cm,anbn_nodes,node nsel,s,loc,x,a nsel,r,loc,y,-b cm,apbn_nodes,node nsel,s,loc,x,-a nsel,r,loc,y,b cm,anbp_nodes,node nsel,s,loc,x,a nsel,r,loc,y,b cm,apbp_nodes,node ! select side a and -a ----------------- nsel,s,loc,x,-a cmsel,u,anbn_nodes cmsel,u,anbp_nodes cm,an_nodes,node nsel,s,loc,x,a cmsel,u,apbn_nodes cmsel,u,apbp_nodes cm,ap_nodes,node ! select side b and -b ----------------- nsel,s,loc,y,-b cmsel,u,anbn_nodes cmsel,u,apbn_nodes cm,bn_nodes,node nsel,s,loc,y,b cmsel,u,anbp_nodes cmsel,u,apbp_nodes cm,bp_nodes,node cmsel,all ALLSEL,ALL CEDELE,ALL ceeq=0 ! Periodic conditions of edges (2 couple of edges) pos_node= neg_node= cmsel,s,anbn_nodes *get,num_nodes,node,0,count,max *do,i,1,num_nodes,1 cmsel,s,anbn_nodes ! neg_node is undefined; use lowest active node number when i=1 *if,i,ne,1,then neg_node=ndnext(neg_node) *else *get,neg_node,node,0,num,min *endif ! get x,y,z locations of current node in active coord system x_=nx(neg_node) y_=ny(neg_node) z_=nz(neg_node) cmsel,s,apbp_nodes ! get closest node from component neg_a2 pos_node=node(-x_,-y_,z_) ceeq=ceeq+1 ce,ceeq,(epxx*(a*2))+(epxy*(b*2)),neg_node,ux,-1,pos_node,ux,1 ceeq=ceeq+1 ce,ceeq,(epyy*(b*2))+(epxy*(a*2)),neg_node,uy,-1,pos_node,uy,1 *enddo pos_node= neg_node= cmsel,s,anbp_nodes *get,num_nodes,node,0,count,max *do,i,1,num_nodes,1 cmsel,s,anbp_nodes ! neg_node is undefined; use lowest active node number when i=1 *if,i,ne,1,then neg_node=ndnext(neg_node) *else *get,neg_node,node,0,num,min *endif ! get x,y,z locations of current node in active coord system x_=nx(neg_node) y_=ny(neg_node) z_=nz(neg_node) cmsel,s,apbn_nodes ! get closest node from component neg_a2 pos_node=node(-x_,-y_,z_) ceeq=ceeq+1 ce,ceeq,(epxx*(a*2))+(-epxy*(b*2)),neg_node,ux,-1,pos_node,ux,1 ceeq=ceeq+1 ce,ceeq,(epyy*(b*2))+(-epxy*(a*2)),pos_node,uy,-1,neg_node,uy,1 *enddo ! Periodic contitions of sides (9 couple of sides) pos_node= neg_node= cmsel,s,ap_nodes *get,num_nodes,node,0,count,max *do,i,1,num_nodes,1 cmsel,s,an_nodes ! neg_node is undefined; use lowest active node number when i=1 *if,i,ne,1,then neg_node=ndnext(neg_node) *else *get,neg_node,node,0,num,min *endif ! get x,y,z locations of current node in active coord system x_=nx(neg_node) y_=ny(neg_node) z_=nz(neg_node) cmsel,s,ap_nodes ! get closest node from component neg_a2 pos_node=node(-x_,y_,z_) ceeq=ceeq+1 ce,ceeq,(epxx*(a*2)),neg_node,ux,-1,pos_node,ux,1 ceeq=ceeq+1 ce,ceeq,(epxy*(a*2)),neg_node,uy,-1,pos_node,uy,1 *enddo pos_node= neg_node= cmsel,s,bp_nodes *get,num_nodes,node,0,count,max *do,i,1,num_nodes,1 cmsel,s,bn_nodes ! neg_node is undefined; use lowest active node number when i=1 *if,i,ne,1,then neg_node=ndnext(neg_node) *else *get,neg_node,node,0,num,min *endif ! get x,y,z locations of current node in active coord system x_=nx(neg_node) y_=ny(neg_node) z_=nz(neg_node) cmsel,s,bp_nodes ! get closest node from component neg_a2 pos_node=node(x_,-y_,z_) ceeq=ceeq+1 ce,ceeq,(epyy*(b*2)),neg_node,uy,-1,pos_node,uy,1 ceeq=ceeq+1 ce,ceeq,(epxy*(b*2)),neg_node,ux,-1,pos_node,ux,1 *enddo cmsel,all allsel,all *end