35
36
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "units_c.inc"
45#include "comlock.inc"
46
47
48
49 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,,LF_DAMMX
50 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
51 my_real ,
INTENT(IN) :: time,timestep
52 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: off,
53 . signxx,signyy,signxy,signyz,signzx
54 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
55
56
57
58 INTEGER ,INTENT(OUT) ::DMG_FLAG
59 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
60 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
61 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel,dmg_scale
62 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
63
64
65
66 INTEGER :: I,,NINDX,IFAIL_SH
67 INTEGER ,DIMENSION(NEL) :: INDX
69 . x11,x22,s12,tmax,fcut
71 . asrate,findex,rfactr,
72 . sxx(nel),syy(nel),sxy(nel)
73
74
75
76
77
78 x11 = uparam(1)
79 x22 = uparam(2)
80 s12 = uparam(3)
81 tmax = uparam(4)
82 fcut = uparam(5)
83 ifail_sh = int(uparam(6))
84
85
86 dmg_flag = 1
87
88
89 IF (fcut > zero) THEN
90 asrate = two*pi*fcut*timestep
91 asrate = asrate/(one+asrate)
92 DO i = 1,nel
93 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,2)
94 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,3)
95 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,4)
96 uvar(i,2) = sxx(i)
97 uvar(i,3) = syy(i)
98 uvar(i,4) = sxy(i)
99 ENDDO
100 ELSE
101 DO i = 1,nel
102 sxx(i) = signxx(i)
103 syy(i) = signyy(i)
104 sxy(i) = signxy(i)
105 ENDDO
106 ENDIF
107
108
109
110
111
112 nindx = 0
113 indx(1:nel) = 0
114
115
116 DO i=1,nel
117
118
119 IF (dfmax(i,1)<one) THEN
120
121
122 findex = (sxx(i)/x11)**2 - ((sxx(i)*syy(i))/(x11**2)) +
123 . (syy(i)/x22)**2 + (sxy(i)/s12)**2
124 findex =
max(zero,findex)
125
126
127 dfmax(i,2) = one/
max(sqrt(findex),em20)
128
129
130 dfmax(i,1) =
min(one ,
max(findex,dfmax(i,1)))
131 IF (dfmax(i,1) >= one) THEN
132 nindx = nindx+1
133 indx(nindx) = i
134 IF (ifail_sh > 0) THEN
135 uvar(i,1) = time
136 ENDIF
137 ENDIF
138 ENDIF
139
140
141 IF ((uvar(i,1) > zero).AND.(foff(i) /= 0).AND.(ifail_sh > 0)) THEN
142 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
143 IF (dmg_scale(i) < em02) THEN
144 foff(i) = 0
145 tdel(i) = time
146 dmg_scale(i) = zero
147 ENDIF
148 ENDIF
149 ENDDO
150
151
152 ! - printout DATA about failed elements
153
154 IF (nindx > 0) THEN
155 DO j=1,nindx
156 i = indx(j)
157#include "lockon.inc"
158 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
159 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
160#include "lockoff.inc"
161 END DO
162 END IF
163
164 2000 FORMAT(1x,'FAILURE (TSAIHILL) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
165 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3)
166 2100 FORMAT(1x,'FAILURE (TSAIHILL) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
167 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
168