35 1 NEL ,IPROP ,UVAR ,NUVAR ,FR_WAVE,
36 2 FX ,FY ,FZ ,XMOM ,YMOM ,
37 3 ZMOM ,E ,OFF ,STIFM ,STIFR ,
38 4 VISCM ,VISCR ,MASS ,XINER ,DT ,
39 5 XL ,VX ,RY1 ,RZ1 ,RX ,
44#include "implicit_f.inc"
49 INTEGER NEL,NUVAR,IPROP,
50 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
54 . FX(*), FY(*), FZ(*), E(*), VX(*),MASS(*) ,XINER(*),
55 . ry1(*), rz1(*), off(*), xmom(*), ymom(*),
56 . zmom(*), rx(*), ry2(*), rz2(*),xl(*),
57 . stifm(*) ,stifr(*) , viscm(*) ,viscr(*) ,fr_wave(*) ,
58 . get_u_mat, get_u_geo, get_u_func
59 EXTERNAL get_u_mnu,get_u_pnu,get_u_mid,get_u_pid,
60 . get_u_mat,get_u_geo, get_u_func
70 INTEGER J,N,NINDX,NMAX,INDEX(MVSIZ),IFUNC
72 . FAC,RHO,AREA,IXX,IYY,IZZ,IMYZ,YOUNG,G,
73 . area1,ixx1,iyy1,izz1,rho1,young1,g1,
74 . area2,ixx2,iyy2,izz2,rho2,young2,g2
75 my_real r_y1,r_y2,r_z1,r_z2,r_y,r_z,r_x,facx,facy,facz,
76 . ay1,ay2,az1,az2,ay,az,by1,by2,bz1,bz2,by,bz,g3,
77 . cx1,cx2,cx,area_y(mvsiz),area_z(mvsiz),
78 . yld(mvsiz),dre,drg,dpla_i,dpla_j(mvsiz),dfe,dfg,
79 . err,f,df,yld_i,c1,fn,fm,y1,y2,
80 . pnx,pnx2,pny,pny2,pnz,pnz2,pmx,pmx2,pmy,pmy2,pmz,pmz2,
81 . nx2,ny2,nz2,mx2,my2,mz2,tempy,tempz,ktran,krot,
82 . nx(mvsiz),ny(mvsiz),nz(mvsiz),youngm(mvsiz),gm(mvsiz),
83 . mx(mvsiz),my(mvsiz),mz(mvsiz),svm(mvsiz),h(mvsiz),
84 . epsvxx(mvsiz),epsvxy(mvsiz),epsvxz(mvsiz),
85 . epscbx(mvsiz),epscby(mvsiz),epscbz(mvsiz),
86 . signxx(mvsiz),signxy(mvsiz),signxz(mvsiz),
87 . momnxx(mvsiz),momnyy(mvsiz),momnzz(mvsiz),
88 . gama(mvsiz),gamac(mvsiz),xl2(mvsiz),devol,
89 . pc1,dc1,pr1,ps1,dc2,pr2,ps2,dc,pr,ps,ueq,dtemp,
90 . sig01,sig02, sig0,hpla,h1,h2,m1,m2,m,dsigy,cc1,
96 iprop1 = get_u_pnu(1,iprop,kprop)
97 area1 = get_u_geo(2,iprop1)
98 ixx1 = get_u_geo(3,iprop1)
99 iyy1 = get_u_geo(4,iprop1)
100 izz1 = get_u_geo(5,iprop1)
101 r_y1= get_u_geo(6,iprop1)
102 r_z1= get_u_geo(7,iprop1)
103 iprop2 = get_u_pnu(2,iprop,kprop)
104 area2 = get_u_geo(2,iprop2)
105 ixx2 = get_u_geo(3,iprop2)
106 iyy2 = get_u_geo(4,iprop2)
107 izz2 = get_u_geo(5,iprop2)
108 imat1 = get_u_pnu(1,iprop1,kmat)
109 ifunc = get_u_mnu(1,imat1,kfunc)
110 young1 = get_u_mat(7,imat1)
111 g1 = get_u_mat(6,imat1)
112 rho1 = get_u_mat(0,imat1)
113 ay1 = get_u_mat(8,imat1)
114 az1 = get_u_mat(9,imat1)
115 by1 = get_u_mat(10,imat1)
116 bz1 = get_u_mat(11,imat1)
117 cx1 = get_u_mat(12,imat1)
118 dc1 = get_u_mat(13,imat1)
119 pr1 = get_u_mat(14,imat1)
120 ps1 = get_u_mat(15,imat1)
121 sig01 = get_u_mat(16,imat1)
122 h1 = get_u_mat(17,imat1)
123 m1 = get_u_mat(18,imat1)
124 fac1 = get_u_mat(19,imat1)
125 imat2 = get_u_pnu(1,iprop2,kmat)
126 young2 = get_u_mat(7,imat2)
127 g2 = get_u_mat(6,imat2)
128 rho2 = get_u_mat(0,imat2)
129 ay2 = get_u_mat(8,imat2)
130 az2 = get_u_mat(9,imat2)
131 by2 = get_u_mat(10,imat2)
132 bz2 = get_u_mat(11,imat2)
133 cx2 = get_u_mat(12,imat2)
134 dc2 = get_u_mat(13,imat2)
135 pr2 = get_u_mat(14,imat2)
136 ps2 = get_u_mat(15,imat2)
137 sig02 = get_u_mat(16,imat2)
138 h2 = get_u_mat(17,imat2)
139 m2 = get_u_mat(18,imat2)
140 r_y2 = get_u_geo(6,iprop2)
141 r_z2 = get_u_geo(7,iprop2)
142 rho = half*(rho1+rho2)
143 area = half*(area1+area2)
145 ixx = half*(ixx1+ixx2)
146 iyy = half*(iyy1+iyy2)
147 izz = half*(izz1+izz2)
148 r_y = half*(r_y1+r_y2)
149 r_z = half*(r_z1+r_z2)
157 young = half*(young1+young2)
159 facx = r_x/
max(ixx,em20)
160 facy = r_y/
max(iyy,em20)
161 facz = r_z/
max(izz,em20)
162 tempy = g*area/
max(twelve*young*iyy,em20)
163 tempz = g*area/
max(twelve*young*izz,em20)
169 sig0 = half*(sig01+sig02)
177 youngm(i) = young*(1-uvar(n0+4,i))
178 gm(i) = g*(1-uvar(n0+4,i))
180 dtemp = one/
max(xl(i),em20)
181 epsvxx(i) = vx(i)*dtemp
182 epsvxy(i) = -half*(rz1(i) + rz2(i))
183 epsvxz(i) = half*(ry1(i) + ry2(i))
184 epscbx(i) = r_x*rx(i)*dtemp
185 epscby(i) = r_y*(ry2(i) - ry1(i))*dtemp
186 epscbz(i) = r_z*(rz2(i) - rz1(i))*dtemp
189 area_y(i) = area/(one +tempy*xl2(i))
190 area_z(i) = area/(one +tempz*xl2(i))
191 signxx(i) = fx(i)/
max(area,em20)+youngm(i)*epsvxx(i)*dt
192 signxy(i) = fy(i)/
max(area_y(i),em20)+gm(i)*epsvxy(i)*dt
193 signxz(i) = fz(i)/
max(area_z(i),em20)+gm(i)*epsvxz(i)*dt
194 momnxx(i) = xmom(i)*facx+gm(i)*epscbx(i)*dt
195 momnyy(i) = ymom(i)*facy+youngm(i)*epscby(i)*dt
196 momnzz(i) = zmom(i)*facz+youngm(i)*epscbz(i)*dt
205 y1= fac1*get_u_func(ifunc,uvar(n0,i),y2)
207 yld(i) =
max(y1,em20)
210 y1 = sig0+hpla*(uvar(n0,i))**m
213 yld(i) =
max(y1,em20)
215 uvar(n0+1,i)=
min(yld(i),uvar(n0+1,i
218 c1=one-fourth*exp(-pc1)
219 gamac(i)=cx*three_over_4/
max(c1,em20)
221 pc1 = six*youngm(i)*(uvar(n0+3,i)/uvar(n0+1,i))
222 cc1 = (three*pi/sixteen)**2
223 c1=one - (one - cc1)*exp(-pc1)
224 gama(i)=cc1/
max(c1,em20)
229 mx(i)=gamac(i)*momnxx(i)
230 my(i)=by*gama(i)*momnyy(i)
231 mz(i)=bz*gama(i)*momnzz(i)
232 svm(i)=nx(i)*nx(i)+three*(ny(i)*ny(i)+nz(i)*nz(i)+mx(i)*mx(i))+
233 1 my(i)*my(i)+mz(i)*mz(i)
236 fac2 = g/
max(em20,young)
241 dtemp = one/
max(xl(i),em20)
242 ktran =
max(area,fac2*area_y(i),fac2*area_z(i))*dtemp
243 krot = four *
max(iyy*dtemp,izz*dtemp)
244 stifm(i) = youngm(i)*ktran
245 stifr(i) =
max( gm(i)*ixx*dtemp,youngm(i)*krot)
249 xiner(i) = xl(i)*rho*
max(ixx,imyz+area*xl2(i)/twelve)
254 IF (svm(i) > yld(i) .AND. off(i) == one)
THEN
263 dpla_j(i)=(svm(i)-yld(i))/(g3+h(i))
275 DO WHILE (err > em4 .AND. n < nmax)
280 yld_i =yld(i)+h(i)*dpla_i
281 ELSEIF (uvar(n0,i) > em20)
THEN
282 yld_i =yld(i)+h(i)*m*dpla_i*(uvar(n0,i)+dpla_i)**(m-1)
286 dre =youngm(i)*dpla_i/yld_i
289 pny =one/(one+three*drg*ay**2)
290 pnz =one/(one+three*drg*az**2)
291 pmx =one/(one+three*drg*gamac(i)**2)
292 pmy =one/(one+dre*(by*gama(i))**2)
293 pmz =one/(one+dre*(bz*gama(i))**2)
306 fn=nx2*pnx2+3.*(ny2*pny2+nz2*pnz2)
307 fm=3.*mx2*pmx2+my2*pmy2+mz2*pmz2
308 f = fn+fm-yld_i*yld_i
309 dfe = nx2*pnx2*pnx+my2*pmy2*pmy*(by*gama(i))**2
310 . +mz2*pmz2*pmz*(bz*gama(i))**2
311 dfg = ny2*pny2*pny*ay**2+nz2*pnz2*pnz*az**2
312 . +mx2*pmx2*pmx*gamac(i)**2
314 dsigy = -h(i)*yld_i*two
315 ELSEIF (uvar(n0,i)>em20)
THEN
316 dsigy = -(h(i)*yld_i*m*(dpla_i+uvar(n0,i))**(m-1))*two
320 df =(-dfe*(youngm(i)-dre*h(i))/yld_i
321 . -nine*dfg*(g-drg*h(i))/yld_i)*two
324 dpla_j(i)=
max(zero,dpla_i-f/df)
333 uvar(n0,i) = uvar(n0,i) + dpla_j(i)
337 yld_i =yld(i)+h(i)*dpla_i
338 ELSEIF (uvar(n0,i) > em20)
THEN
339 yld_i =yld(i)+h(i)*m*dpla_i*(uvar(n0,i))**(m-1)
347 pny =one/(one+three*drg*ay**2)
348 pnz =one/(one+three*drg*az**2)
349 pmx =one/(one+three*drg*gamac(i)**2)
350 pmy =one/(one+dre*(by*gama(i))**2)
351 pmz =one/(one+dre*(bz*gama(i))**2)
353 signxx(i) = signxx(i)*pnx
354 signxy(i) = signxy(i)*pny
355 signxz(i) = signxz(i)*pnz
356 momnxx(i) = momnxx(i)*pmx
358 momnzz(i) = momnzz(i)*pmz
360 uvar(n0+2,i) = uvar(n0+2,i)+three*c1*gamac(i)**2*abs(momnxx(i))
361 ueq = c1*sqrt( signxx(i)**2
363 1 *(by**4*momnyy(i)**2 + bz**4*momnzz(i)**2) )
364 uvar(n0+3,i) = uvar(n0+3,i) + ueq
368 IF (uvar(n0,i) > ps)
THEN
369 devol = dc*dpla_i/(pr - ps)
374 uvar(n0+4,i) = uvar(n0+4,i)+devol
376 IF (uvar(n0,i) >= pr .OR. uvar(n0+4,i) >= dc)
THEN
386 fx(i) = signxx(i)*area*off(i)
387 fy(i) = signxy(i)*area_y(i)*off(i)
388 fz(i) = signxz(i)*area_z(i)*off(i)
389 xmom(i) = momnxx(i)*off(i)/facx
390 ymom(i) = momnyy(i)*off(i)/facy
391 zmom(i) = momnzz(i)*off(i)/facz