34 1 NEL ,NUPARAM ,NFUNC ,IFUNC ,
35 2 NPF ,TF ,TIME ,UPARAM ,
36 3 NGL ,IPG ,ILAY ,IPTT ,
37 4 EPSXX ,EPSYY ,EPSXY ,LF_DAMMX ,
38 5 DEPSXX ,DEPSYY ,DEPSXY ,PLA ,
39 6 ZT ,OFF ,FOFF ,TDEL ,
40 7 FLD_IDX ,DAM ,DFMAX ,DT1 ,
41 8 NIPARAM ,IPARAM ,NUVAR ,UVAR )
47#include "implicit_f.inc"
79 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NFUNC,IPG,ILAY,IPTT,NIPARAM,NUVAR,
81 INTEGER,
DIMENSION(NEL) :: NGL
82 INTEGER,
DIMENSION(NFUNC) :: IFUNC
83 INTEGER,
DIMENSION(NIPARAM) :: IPARAM
84 my_real,
INTENT(IN) :: TIME,ZT,DT1
85 my_real,
DIMENSION(NEL),
INTENT(IN) :: OFF,
86 . EPSXX,EPSYY,EPSXY,DEPSXX,DEPSYY,DEPSXY,PLA
87 my_real,
DIMENSION(NUPARAM) :: uparam
91 INTEGER ,
DIMENSION(NEL),
INTENT(INOUT) :: FOFF,FLD_IDX
92 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
93 my_real ,
DIMENSION(NEL),
INTENT(INOUT) :: dam,tdel
94 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
99 my_real finter , finterfld ,tf(*)
111 INTEGER :: ,II,J,IENG,LENF,NINDX,NINDXF,IFAIL_SH,ISTRESS,IMARGIN
112 INTEGER ,
DIMENSION(NEL) :: INDX,INDXF
113 my_real :: RANI,R1,R2,S1,S2,SS,Q,E12,FACT_MARGIN,FACT_LOOSEMETAL,
115 my_real ,
ALLOCATABLE,
DIMENSION(:) :: XF
116 my_real ,
DIMENSION(NEL) :: EMAJ,EMIN,EM,DEMAJ,DEMIN,BETA
117 INTEGER,
DIMENSION(NEL) :: IPOS,ILENP,IADP
118 my_real,
DIMENSION(NEL) :: TAB_LOC,Y_LOC,DYDX_LOC
126 fact_margin = uparam(1)
128 fact_loosemetal = uparam(4)
130 IF (uparam(6) > zero)
THEN
133 alpha = two*pi*fcut*dt1/(one + two*pi*fcut*dt1)
142 IF (ifail_sh == 1)
THEN
144 ELSEIF (ifail_sh == 2)
THEN
146 ELSEIF (ifail_sh == 3)
THEN
148 ELSEIF (ifail_sh == 4)
THEN
156 IF (off(i) == one .and. foff(i) == 1)
THEN
163 ! - minor and major(true) strain deformation
165#include "vectorize.inc"
170 s1 = half*(epsxx(i) + epsyy(i))
171 s2 = half*(epsxx(i) - epsyy(i))
172 q = sqrt(s2**2 + e12**2)
175 IF (emin(i) >= emaj(i))
THEN
182 s1 = half*(depsxx(i) + depsyy(i))
183 s2 = half*(depsxx(i) - depsyy(i))
184 q = sqrt(s2**2 + e12**2)
188 demaj(i) = alpha*demaj(i) + (one - alpha)*uvar(i,2)
189 demin(i) = alpha*demin(i) + (one - alpha)*uvar(i,3)
190 beta(i) = demin(i)/sign(
max(abs(demaj(i)),em20),demaj(i))
204 lenf = npf(ifunc(1)+ 1) - npf(ifunc(1))
207 xf(i) = log(tf(ii + i-1) + one)
210#include "vectorize.inc"
213 em(i) = finterfld(emin(i),lenf,xf)
214 dam(i) = emaj(i) / em(i)
216 dfmax(i,1) =
min(one, dam(i))
223#include "vectorize.inc"
227 iadp(j) = npf(ifunc(1)) / 2 + 1
228 ilenp(j) = npf(ifunc(1)+1) / 2 -iadp(j) - ipos(j)
231 CALL vinter2(tf,iadp,ipos,ilenp,nindx,tab_loc,dydx_loc,y_loc)
232#include "vectorize.inc"
236 dam(i) = emaj(i) / em(i)
238 dfmax(i,1) =
min(one,dam(i))
241 ELSEIF (ieng == 2)
THEN
242#include "vectorize.inc"
246 iadp(j) = npf(ifunc(1)) / 2 + 1
247 ilenp(j) = npf(ifunc(1)+1) / 2 -iadp(j) - ipos(j)
250 CALL vinter2(tf,iadp,ipos,ilenp,nindx,tab_loc,dydx_loc,y_loc)
251#include "vectorize.inc"
255 dam(i) =
max(pla(i) / em(i),dam(i))
257 dfmax(i,1) =
min(one,dam(i))
269 IF (imargin == 3)
THEN
270#include "vectorize.inc"
275 ELSEIF (emaj(i) >= em(i)*(one - fact_margin))
THEN
277 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
279 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
281 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
286 dfmax(i,3) = fld_idx(i)
289#include "vectorize.inc"
292 IF (emaj(i) >= em(i))
THEN
294 ELSEIF (emaj(i) >= em(i) - fact_margin)
THEN
296 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
298 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
300 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
305 dfmax(i,3) = fld_idx(i)
309 IF (imargin == 3)
THEN
310#include "vectorize.inc"
313 IF (pla(i) >= em(i))
THEN
314 fld_idx(i) =
max(6,fld_idx(i))
315 ELSEIF (pla(i) >= em(i)*(one - fact_margin))
THEN
316 fld_idx(i) =
max(5,fld_idx(i))
317 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
318 fld_idx(i) =
max(1,fld_idx(i))
319 ELSEIF (pla(i) >= abs(beta(i)))
THEN
320 fld_idx(i) =
max(4,fld_idx(i))
321 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
322 fld_idx(i) =
max(3,fld_idx(i))
324 fld_idx(i) =
max(2,fld_idx(i))
326 dfmax(i,3) = fld_idx(i)
329#include "vectorize.inc"
332 IF (pla(i) >= em(i))
THEN
333 fld_idx(i) =
max(6,fld_idx(i))
334 ELSEIF (pla(i) >= em(i) - fact_margin)
THEN
335 fld_idx(i) =
max(5,fld_idx(i))
336 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
337 fld_idx(i) =
max(1,fld_idx(i))
338 ELSEIF (pla(i) >= abs(beta(i)))
THEN
339 fld_idx(i) =
max(4,fld_idx(i))
340 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
341 fld_idx(i) =
max(3,fld_idx(i))
343 fld_idx(i) =
max(2,fld_idx(i))
345 dfmax(i,3) = fld_idx(i)
353 IF ((ifail_sh == 3 .and. zt == zero) .or. ifail_sh < 3)
THEN
355#include "vectorize.inc"
358 IF (emaj(i) >= em(i))
THEN
366#include "vectorize.inc"
369 IF (pla(i) >= em(i))
THEN
382 WRITE(iout, 2000) ngl
383 WRITE(istdo,2100) ngl(i),ipg,ilay,iptt,time
384#include "lockoff.inc"
388 2000
FORMAT(1x,
'FAILURE (FLD) OF SHELL ELEMENT '',GAUSS PT',i2,1x,
',LAYER',i3,
389 . 1x,
',INTEGRATION PT',i3)
390 2100
FORMAT(1x,
'FAILURE (FLD) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',i2,1x,
',LAYER',i3,
391 . 1x,
',INTEGRATION PT',i3,1x,
'AT TIME :',1pe12.4)
subroutine fail_fld_c(nel, nuparam, nfunc, ifunc, npf, tf, time, uparam, ngl, ipg, ilay, iptt, epsxx, epsyy, epsxy, lf_dammx, depsxx, depsyy, depsxy, pla, zt, off, foff, tdel, fld_idx, dam, dfmax, dt1, niparam, iparam, nuvar, uvar)