31 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
32 2 TIME ,NGL ,IPG ,ILAY ,IPT ,
33 3 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
34 4 OFF ,FOFF ,DMG_FLAG ,DMG_SCALE ,
35 5 DFMAX ,LF_DAMMX ,TDEL ,TIMESTEP )
41#include "implicit_f.inc"
76 INTEGER ,
INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY
77INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
78 my_real ,
INTENT(IN) :: TIME,TIMESTEP
79 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: OFF,
80 . SIGNXX,SIGNYY,SIGNXY,SIGNYZ,SIGNZX
81 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
85 INTEGER ,
INTENT(OUT) ::DMG_FLAG
86 INTEGER ,
DIMENSION(NEL) ,
INTENT(INOUT) :: FOFF
87 ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: DFMAX
88 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: TDEL,DMG_SCALE
89 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: UVAR
93 INTEGER :: I,J,NINDX,FSMOOTH
94 INTEGER ,
DIMENSION(NEL) :: INDX
95 my_real :: SIGT1,SIGT2, SIGC1,SIGC2,FSIG12,F1,FA,FB,FC,
96 . PN12,PP12,PN22,FAC,TMAX,DAMMX,FCUT,ASRATE,
97 . SXX(NEL),SYY(NEL),SXY(NEL)
109 IF (fcut > zero)
THEN
111 asrate = two*pi*fcut*timestep
112 asrate = asrate/(one+asrate)
119 IF (fsmooth > 0)
THEN
121 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,2)
122 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,3)
123 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,4)
137 IF (off(i) == one .and. foff(i) == 1)
THEN
143 IF (uvar(i,1) == zero)
THEN
147 IF (sxx(i) >= zero)
THEN
149 dfmax(i,2) =
max(dfmax(i,2),f1)
150 dfmax(i,2) =
min(dfmax(i,2),one)
153 dfmax(i,3) =
max(dfmax(i,3),f1)
154 dfmax(i,3) =
min(dfmax(i,3),one)
159 IF (syy(i) >= zero)
THEN
160 fac = one - pp12*sigt2/fsig12
161 fac = fac*syy(i)/sigt2
162 fa = sqrt((sxy(i)/fsig12)**2 + fac*fac)
163 . + pp12*syy(i)/fsig12
164 dfmax(i,4) =
max(dfmax(i,4),fa)
165 dfmax(i,4) =
min(dfmax(i,4),one)
167 fac = half/(one + pn22)/fsig12
168 fc = (sxy(i)*fac)**2 + (syy(i)/sigc2)**2
170 dfmax(i,6) =
max(dfmax(i,6),fc)
171 dfmax(i,6) =
min(dfmax(i,6),one)
173 fb = sqrt(sxy(i)**2 + (pn12*syy(i))**2 )
176 dfmax(i,5) =
max(dfmax(i,5),fb)
177 dfmax(i,5) =
min(dfmax(i,5),one)
179 dammx =
min(one,
max(f1,fa,fb,fc))
180 dfmax(i,1) =
min(one,dammx)
181 IF (dammx >= one)
THEN
188 IF (uvar(i,1) > zero)
THEN
189 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
190 IF (dmg_scale(i) < em02)
THEN
205 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
206 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
207#include "lockoff.inc"
211 2000
FORMAT(1x,
'FAILURE (PUCK) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
212 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3)
213 2100
FORMAT(1x,
'FAILURE (PUCK) OF SHELL ELEMENT ',i10,1x,
',GAUSS PT',
214 . i2,1x,
',LAYER',i3,1x,
',INTEGRATION PT',i3,1x,
'AT TIME :',1pe12.4)
subroutine fail_puck_c(nel, nuparam, nuvar, uparam, uvar, time, ngl, ipg, ilay, ipt, signxx, signyy, signxy, signyz, signzx, off, foff, dmg_flag, dmg_scale, dfmax, lf_dammx, tdel, timestep)