/out,e_exten,out
*msg,info
< e_exten Version 2/28/98 >
/gopr
*get,cpw1,active,,time,wall
*get,cpu1,active,,time,cpu
*set,_real
fini
/prep7
immed
type,arg6
cm,c_e1,elem
cm,c_e2,elem
nsle
cm,c_n1,node
*get,ndmns,node,,num,min
*get,_ecnt,elem,,count
*get,_ncnt,node,,count
alls
*get,ndmx,node,,num,max
*get,elmx,elem,,num,max
cmsel,,c_e1
*set,_in
*dim,_in,,elmx
*set,_jn
*dim,_jn,,elmx
*set,_kn
*dim,_kn,,elmx
*set,_ln
*dim,_ln,,elmx
*set,_mn
*dim,_mn,,elmx
*set,_nn
*dim,_nn,,elmx
*set,_on
*dim,_on,,elmx
*set,_pn
*dim,_pn,,elmx
*set,_er
*dim,_er,,elmx
*set,_em
*dim,_em,,elmx
*set,_mskv
*dim,_mskv,,elmx
*vget,_mskv(1),elem,1,esel
*voper,_mskv(1),_mskv(1),gt,0
nd_inc=ndmx-ndmns+1
nsle
csys,arg1
ngen,arg2+1,nd_inc,all,,,arg3,arg4,arg5
*vmask,_mskv(1)
*vget,_in(1),elem,1,node,1
*vmask,_mskv(1)
*vget,_jn(1),elem,1,node,2
*vmask,_mskv(1)
*vget,_kn(1),elem,1,node,3
*vmask,_mskv(1)
*vget,_ln(1),elem,1,node,4
*vmask,_mskv(1)
*voper,_mn(1),_in(1),add,nd_inc
*vmask,_mskv(1)
*voper,_nn(1),_jn(1),add,nd_inc
*vmask,_mskv(1)
*voper,_on(1),_kn(1),add,nd_inc
*vmask,_mskv(1)
*voper,_pn(1),_ln(1),add,nd_inc
*vmask,_mskv(1)
*vget,_em(1),elem,1,attr,mat
*vmask,_mskv(1)
*vget,_er(1),elem,1,attr,real
/nopr
/out,e_gen,tmp
/out,e_exten,out,,append
/gopr
*set,r_arr
*dim,r_arr,,1
cm,cre1,elem
cm,cre2,elem
*do,_irel1,1,_ecnt
/gopr
*get,_elmx,elem,,num,max
*if,_elmx,eq,0,exit
*get,_real,elem,_elmx,attr,real
r_arr(1)=_real
esel,r,real,,_real
*get,_eecnt,elem,,count
*set,_mskv
*dim,_mskv,,elmx
*vget,_mskv(1),elem,1,esel
*voper,_mskv(1),_mskv(1),gt,0
*set,_e_esys
*dim,_e_esys,,elmx
*vmask,_mskv(1)
*vget,_e_esys(1),elem,1,attr,esys
*vmask,_mskv(1)
*vscfun,_esysx,max,_e_esys(1)
*if,_esysx,gt,0,then
*set,e_arr
*dim,e_arr,,1
cm,cre3,elem
cm,cre4,elem
*do,_irel2,1,_ecnt
/gopr
*msg,info,_irel2
cycle in _irel2: %i
*get,_elmx1,elem,,num,max
*if,_elmx1,eq,0,exit
*get,_cesys,elem,_elmx1,attr,esys
*if,_cesys,lt,11,then
esel,u,esys,,11,_esysx
*else
esel,r,esys,,_cesys
*endif
*set,_mskve1
*dim,_mskve1,,elmx
*vget,_mskve1(1),elem,1,esel
*voper,_mskve1(1),_mskve1(1),gt,0
e_arr(1)=_cesys
/nopr
/out,e_gen,tmp,,append
*if,_cesys,ge,11,then
*vwrite,r_arr(1),e_arr(1)
('real,',f6.0,' $ esys,',f6.0)
*else
*vwrite,r_arr(1)
('real,',f6.0)
*endif
*vmask,_mskve1(1)
*vwrite,_em(1),_in(1),_jn(1),_kn(1),_ln(1),_mn(1),_nn(1),_on(1),_pn(1)
('mat,',f4.0,'$e',8(',',f7.0))
/out,e_exten,out,,append
/gopr
cm,cre5,elem
cmsel,,cre3
cmsel,u,cre5
cm,cre3,elem
*get,_eecnt,elem,,count
*msg,info,_irel2,_eecnt,e_arr(1)
Number of elements at end of %i cycle: %g for ESYS of %i
*enddo
cmsel,,cre4
*else
/nopr
/out,e_gen,tmp,,append
*vwrite,r_arr(1)
('real,',f6.0)
*vmask,_mskv(1)
*vwrite,_em(1),_in(1),_jn(1),_kn(1),_ln(1),_mn(1),_nn(1),_on(1),_pn(1)
('mat,',f4.0,'$e',8(',',f7.0))
/out,e_exten,out,,append
/gopr
*endif
cmsel,,c_e2
esel,u,real,,_real
cm,c_e2,elem
*enddo
/out,e_exten,out,,append
/nopr
/inp,e_gen,tmp
/gopr
*if,arg2,gt,1,then
egen,arg2,nd_inc,all
*endif
*get,cpu2,active,,time,cpu
dcpu=cpu2-cpu1
*get,cpw2,active,,time,wall
dcpw=3600*(cpw2-cpw1)
/out
*msg,info
e_exten macro
*msg,info,dcpu
CPU time (sec) to generate the elements:_______________ %g
*msg,info,dcpw
Wall clock time (sec) to generate the elements:________ %g
csys