29 character*8 lakon(*),lakonl
31 integer i,j,ne0,nope,kon(*),ipkon(*),indexe,konl(26),nelem,
32 & iflag,nopes,nfaces,ig,ifaceq(8,6),ifacet(6,4),ifacew(8,5),
33 & mi(*),ielmat(mi(3),*),imat,elemmin
35 real*8 xi,et,ze,weight,co(3,*),xl(3,26),xsj,shp(4,26),xl2(3,9),
36 & xsj2(3),xs2(3,7),shp2(7,9),hmin,area,volume,
37 & wavspd,dtvol,safefac,alpha,bet,gam,critom,damping,
38 & wavespeed(*),geomfac,quadfac
40 data ifaceq /4,3,2,1,11,10,9,12,
41 & 5,6,7,8,13,14,15,16,
43 & 2,3,7,6,10,19,14,18,
44 & 3,4,8,7,11,20,15,19,
45 & 4,1,5,8,12,17,16,20/
46 data ifacet /1,3,2,7,6,5,
50 data ifacew /1,3,2,9,8,7,0,0,
65 bet=(1.d0-alpha)*(1.d0-alpha)/4.d0
71 critom=dsqrt(damping*damping*(1+2*alpha*(1-gam))
72 & *(1+2*alpha*(1-gam))
73 & +2*(gam+2*alpha*(gam-bet)) )
74 critom=0.98*(-damping*(1+2*alpha*(1-gam))+critom)
75 & /(gam+2*alpha*(gam-bet))
79 if(ipkon(nelem).lt.0) cycle
87 if(lakon(nelem)(4:5).eq.
'20')
then 93 elseif(lakon(nelem)(4:4).eq.
'8')
then 97 elseif(lakon(nelem)(4:5).eq.
'10')
then 102 elseif(lakon(nelem)(4:4).eq.
'4')
then 106 elseif(lakon(nelem)(4:5).eq.
'15')
then 110 elseif(lakon(nelem)(4:4).eq.
'6')
then 120 if((lakon(nelem)(4:5).eq.
'20').or.
121 & (lakon(nelem)(4:4).eq.
'8'))
then 127 elseif((lakon(nelem)(4:5).eq.
'10').or.
128 & (lakon(nelem)(4:4).eq.
'4'))
then 134 elseif((lakonl(4:5).eq.
'15').or.
135 & (lakonl(4:4).eq.
'6'))
then 143 konl(i)=kon(indexe+i)
145 xl(j,i)=co(j,konl(i))
150 call shape20h(xi,et,ze,xl,xsj,shp,iflag)
151 elseif(nope.eq.8)
then 152 call shape8h(xi,et,ze,xl,xsj,shp,iflag)
153 elseif(nope.eq.10)
then 155 elseif(nope.eq.4)
then 156 call shape4tet (xi,et,ze,xl,xsj,shp,iflag)
157 elseif(nope.eq.15)
then 158 call shape15w(xi,et,ze,xl,xsj,shp,iflag)
160 call shape6w(xi,et,ze,xl,xsj,shp,iflag)
163 wavspd=wavespeed(imat)
168 if((lakon(nelem)(4:5).eq.
'20').or.
169 & (lakon(nelem)(4:4).eq.
'8'))
then 172 elseif((lakon(nelem)(4:5).eq.
'10').or.
173 & (lakon(nelem)(4:4).eq.
'4'))
then 174 volume=weight*xsj/3.d0
176 elseif ( (lakonl(4:5).eq.
'15').or.
177 & (lakonl(4:4).eq.
'6'))
then 178 volume=weight*xsj/2.d0
185 if(lakon(nelem)(4:4).eq.
'6')
then 191 elseif(lakon(nelem)(4:5).eq.
'15')
then 199 if((nope.eq.20).or.(nope.eq.8))
then 202 xl2(j,i)=co(j,konl(ifaceq(i,ig)))
205 elseif((nope.eq.10).or.(nope.eq.4))
then 208 xl2(j,i)=co(j,konl(ifacet(i,ig)))
214 xl2(j,i)=co(j,konl(ifacew(i,ig)))
219 if((nopes.eq.4).or.(nopes.eq.8))
then 230 call shape8q(xi,et,xl2,xsj2,xs2,shp2,iflag)
231 elseif(nopes.eq.4)
then 232 call shape4q(xi,et,xl2,xsj2,xs2,shp2,iflag)
233 elseif(nopes.eq.6)
then 234 call shape6tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
235 elseif(nopes.eq.7)
then 236 call shape7tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
238 call shape3tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
241 area=weight*dsqrt(xsj2(1)*xsj2(1)+xsj2(2)*xsj2(2)+
243 hmin=
min(hmin,(volume/area))
248 if(critom/2*hmin/wavspd*geomfac.lt.dtvol)
then 252 dtvol=
min(dtvol,critom/2* hmin/wavspd*geomfac)
subroutine shape6w(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape6w.f:20
subroutine shape8q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape8q.f:20
subroutine shape3tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape3tri.f:20
subroutine shape7tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape7tri.f:20
subroutine shape10tet(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape10tet.f:20
#define min(a, b)
Definition: cascade.c:31
subroutine shape8h(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape8h.f:20
subroutine shape15w(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape15w.f:20
subroutine shape4q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape4q.f:20
subroutine shape20h(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape20h.f:20
subroutine shape4tet(xi, et, ze, xl, xsj, shp, iflag)
Definition: shape4tet.f:20
subroutine shape6tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape6tri.f:20