39 1 NEL ,NUVAR ,NPF ,TF ,TIME ,
41 4 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 5 DPLA ,EPSP ,TSTAR ,UVAR ,NTABLF ,ITABLF ,
43 6 OFF ,TABLE ,DFMAX ,TDELE ,NFUNC ,IFUNC )
52#include "implicit_f.inc"
86 INTEGER,
INTENT(IN) :: NFUNC
87 INTEGER,
INTENT(IN) :: NTABLF
88 INTEGER,
DIMENSION(NFUNC) ,
INTENT(IN) :: IFUNC
89 INTEGER,
DIMENSION(NTABLF) ,
INTENT(IN) :: ITABLF
91 my_real time,uparam(*),aldt(nel),
92 . signxx(nel),signyy(nel),signzz(nel),
93 . signxy(nel),signyz(nel),signzx(nel),
94 . dpla(nel),epsp(nel),tstar(nel)
99 my_real,
DIMENSION(NEL,3) :: XX0
101 . UVAR(NEL,NUVAR), OFF(NEL), DFMAX(NEL),TDELE(NEL)
106 my_real FINTER ,TF(*)
118 INTEGER I,J,IDEL,IDEV,NINDX,
119 . IFUN_EL,IFUN_TEMP,ID_DD ,ITAB_EPSF
121 INTEGER,
DIMENSION(MVSIZ) :: INDX
123 INTEGER,
DIMENSION(MVSIZ) :: INDX_2
124 INTEGER,
DIMENSION(NEL,3) :: IPOS
125 my_real,
DIMENSION(MVSIZ) :: epsf,yy,dydx,dp
126 my_real :: dcrit,dd,dn,sc_temp,sc_el,el_ref
128 . p,sigm,svm,sxx,syy,szz,df,fac,lambda,
129 . xi,theta, det,y1scale,
134 sflag = int(uparam(1))
149 ELSEIF (sflag == 2)
THEN
151 ELSEIF (sflag == 3)
THEN
161 p = third*(signxx(i) + signyy(i) + signzz(i))
165 svm = half*(sxx**2 + syy**2 + szz**2)
166 . + signxy(i)**2+ signzx(i)**2 + signyz(i)**2
167 svm = sqrt(three*svm)
168 sigm = p /
max(em20,svm)
170 det = sxx*syy*szz + two*signxy(i)*signzx(i)*signyz(i)-
171 . sxx*signyz(i)**2-szz*signxy(i)**2-syy*signzx(i)**2
173 xi = one/
max(em20,svm**3)
174 xi = half*twenty7*det*xi
175 IF(xi < -one) xi = -one
176 IF(xi > one) xi = one
177 theta = one - two*acos(xi)/pi
179 xx0(i,2)=epsp(i) *x1scale
182 itab_epsf = itablf(1)
184 CALL table_vinterp(table(itab_epsf),nel,nel,ipos,xx0,yy,dydx)
185 epsf(1:nel) = yy(1:nel)*y1scale
193 IF (ifun_el > 0)
THEN
194 lambda = aldt(i) / el_ref
195 fac = sc_el*finter(ifun_el,lambda,npf,tf,df)
196 epsf(i) = epsf(i)* fac
199 IF (ifun_temp > 0)
THEN
200 fac = sc_temp*finter(ifun_temp,tstar(i),npf,tf,df)
201 epsf(i) = epsf(i)* fac
208 IF (off(i) < 0.1) off(i)=zero
209 IF (off(i) < one) off(i)=off(i)*four_over_5
221 IF (sflag==1 .AND. off(i)==one)
THEN
222 nindx_2 = nindx_2 + 1
224 dp(i) = finter(id_dd,uvar(i,1),npf,tf,df)
229 IF (sflag==1 .AND. off(i)==one)
THEN
230 nindx_2 = nindx_2 + 1
232 dp(i) = dn*dd**(one-one/dn)
237#include "vectorize.inc"
240 IF (epsf(i) > zero) uvar(i,1)=uvar(i,1)+dp(i)*dpla(i)/epsf(i)
241 IF (uvar(i,1) >= dcrit)
THEN
248 IF (nindx > 0 .AND. imconv == 1)
THEN
251 WRITE(iout, 1000) ngl(indx(j))
252 WRITE(istdo,1100) ngl(indx(j)),time
253#include "lockoff.inc"
264 IF (off(i) == one .AND. (sflag==2 .OR. sflag==
THEN
265 nindx_2 = nindx_2 + 1
268 IF (uvar(i,1) < dcrit)
THEN
271 dp(i) = finter(id_dd,uvar(i,1),npf,tf,df)
273 dp(i) = dn*dd**(one-one/dn)
279#include "vectorize.inc"
283 IF (epsf(i) > zero) uvar(i,1)=uvar(i,1)+dp(i)*dpla(i)/epsf(i)
284 IF (uvar(i,1) >= dcrit)
THEN
287 p = third*(signxx(i) + signyy(i) + signzz(i))
294 ELSEIF (sflag == 2)
THEN
295 p = third*(signxx(i) + signyy(i) + signzz(i))
302 IF (nindx > 0.AND.imconv == 1)
THEN
306 WRITE(iout, 2000) ngl(i)
307 WRITE(istdo,2100) ngl(i),time
308#include "lockoff.inc"
315 dfmax(i)=
min(one,
max(dfmax(i),uvar(i,1)/dcrit))
318 1000
FORMAT(1x,
'DELETE SOLID ELEMENT NUMBER ',i10)
319 1100
FORMAT(1x,
'DELETE SOLID ELEMENT NUMBER ',i10,
320 .
' AT TIME :',1pe12.4)
322 2000
FORMAT(1x,
' DEVIATORIC STRESS SET TO ZERO',i10)
323 2100
FORMAT(1x,
' DEVIATORIC STRESS SET TO ZERO',i10,
324 .
' AT TIME :',1pe12.4)
subroutine fail_tab_s(nel, nuvar, npf, tf, time, uparam, ngl, aldt, signxx, signyy, signzz, signxy, signyz, signzx, dpla, epsp, tstar, uvar, ntablf, itablf, off, table, dfmax, tdele, nfunc, ifunc)