32 1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
33 2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,
34 3 UVAR ,NGL ,IPG ,ILAY ,IPTT ,
35 4 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
36 6 OFF ,FOFF ,FLD_IDX ,DAM ,DFMAX ,
37 7 NIPARAM ,IPARAM ,PLA ,LF_DAMMX )
43#include "implicit_f.inc"
75 INTEGER,
INTENT(IN) :: ,NUPARAM,NUVAR,NFUNC,IPG,ILAY,IPTT,NIPARAM,LF_DAMMX
76 INTEGER ,
DIMENSION(NEL) :: NGL
77 INTEGER ,
DIMENSION(NFUNC) :: IFUNC
79 my_real ,
DIMENSION(NEL),
INTENT(IN) :: TIMESTEP,OFF,
80 . EPSXX,EPSYY,,EPSYZ,EPSZX,PLA
81 my_real,
DIMENSION(NUPARAM) :: uparam
82 INTEGER,
DIMENSION(NIPARAM) :: IPARAM
86 INTEGER ,
DIMENSION(NEL),
INTENT(INOUT) :: FOFF,FLD_IDX
87 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
88 my_real ,
DIMENSION(NEL),
INTENT(OUT) :: dam
89 my_real uvar(nel,nuvar)
94 my_real finter , finterfld ,tf(*)
106 INTEGER :: I,II,J,IENG,LENF,NINDX,IMARGIN
107 INTEGER ,
DIMENSION(NEL) :: INDX,INDXF
108 my_real :: RANI,R1,R2,S1,S2,SS,Q,DYDX,E12,FACT_MARGIN,
109 my_real ,
ALLOCATABLE,
DIMENSION(:) :: XF
110 my_real ,
DIMENSION(NEL) :: EMAJ,EMIN,EM,BETA
118 fact_margin = uparam(1)
120 fact_loosemetal = uparam(4)
121 ! ->
Integer parameters
128 IF (off(i) == one .and. foff(i) == 1)
THEN
140 s1 = half*(epsxx(i) + epsyy(i))
141 s2 = half*(epsxx(i) - epsyy(i))
142 q = sqrt(s2**2 + e12**2)
145 IF (emin(i) >= emaj(i))
THEN
150 beta(i) = emin(i)/
max(emaj(i),em20)
162 lenf = npf(ifunc(1)+ 1) - npf(ifunc(1))
165 xf(i) = log(tf(ii + i-1) + one)
170 em(i) = finterfld(emin(i),lenf,xf)
171 dam(i) = emaj(i) / em(i)
173 dfmax(i,1) =
min(one, dam(i))
182 em(i) = finter(ifunc(1),emin(i),npf,tf,dydx)
183 dam(i) = emaj(i) / em(i)
185 dfmax(i,1) =
min(one, dam(i))
188 ELSEIF (ieng == 2)
THEN
191 em(i) = finter(ifunc(1),beta(i),npf,tf,dydx)
192 dam(i) = pla(i) / em(i)
194 dfmax(i,1) =
min(one, dam(i))
206 IF (imargin == 3)
THEN
209 IF (emaj(i) >= em(i))
THEN
211 ELSEIF (emaj(i) >= em(i)*(one - fact_margin))
THEN
213 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
215 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
217 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
222 dfmax(i,3) = fld_idx(i)
227 IF (emaj(i) >= em(i))
THEN
229 ELSEIF (emaj(i) >= em(i) - fact_margin)
THEN
231 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
233 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
235 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
240 dfmax(i,3) = fld_idx(i)
244 IF (imargin == 3)
THEN
247 IF (pla(i) >= em(i))
THEN
249 ELSEIF (pla(i) >= em(i)*(one - fact_margin))
THEN
251 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
253 ELSEIF (pla(i) >= abs(beta(i)))
THEN
255 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
260 dfmax(i,3) = fld_idx(i)
265 IF (pla(i) >= em(i))
THEN
267 ELSEIF (pla(i) >= em(i) - fact_margin)
THEN
269 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
271 ELSEIF (pla(i) >= abs(beta(i)))
THEN
273 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
278 dfmax(i,3) = fld_idx(i)
subroutine fail_fld_tsh(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, time, timestep, uparam, uvar, ngl, ipg, ilay, iptt, epsxx, epsyy, epsxy, epsyz, epszx, off, foff, fld_idx, dam, dfmax, niparam, iparam, pla, lf_dammx)