35
36
37
38#include "implicit_f.inc"
39
40#include "units_c.inc"
41#include "comlock.inc"
42
43
44
45 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,
46 . ILAY,IP,NPG,NGL(NEL),LF_DAMMX
48 . time,timestep,uparam(nuparam)
50 . signxx(nel),signyy(nel),signzz(nel),
51 . signxy(nel),signyz(nel),signzx(nel)
52
53
54
55 INTEGER, INTENT(INOUT) :: NOFF(NEL)
57 . uvar(nel,nuvar),off(nel),
58 . tdele(nel),dmg_scale(nel),loff(nel)
59 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
60
61
62
63 INTEGER
64 . I,J,INDX(NEL),NINDX,INDX0(NEL),NINDX0,
65 . IFAIL_SO
67 . x11,x22,s12,tmax,fcut
69 . asrate,sxx(nel),syy(nel),szz(nel),
70 . sxy(nel),syz(nel),szx(nel),findex
71
72
73
74
75
76 x11 = uparam(1)
77 x22 = uparam(2)
78 s12 = uparam(3)
79 tmax = uparam(4)
80 fcut = uparam(5)
81 ifail_so = int(uparam(7))
82
83
84 IF (fcut > zero) THEN
85 DO i = 1,nel
86 asrate = two*pi*fcut*timestep
87 asrate = asrate/(one+asrate)
88 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,2)
89 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,3)
90 szz(i) = asrate*signzz(i) + (one - asrate)*uvar(i,4)
91 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,5)
92 syz(i) = asrate*signyz(i) + (one - asrate)*uvar(i,6)
93 szx(i) = asrate*signzx(i) + (one - asrate)*uvar(i,7)
94 uvar(i,2) = sxx(i)
95 uvar(i,3) = syy(i)
96 uvar(i,4) = szz(i)
97 uvar(i,5) = sxy(i)
98 uvar(i,6) = syz(i)
99 uvar(i,7) = szx(i)
100 ENDDO
101 ELSE
102 DO i = 1,nel
103 sxx(i) = signxx(i)
104 syy(i) = signyy(i)
105 szz(i) = signzz(i)
106 sxy(i) = signxy(i)
107 syz(i) = signyz(i)
108 szx(i) = signzx(i)
109 ENDDO
110 ENDIF
111
112
113
114
115
116 nindx = 0
117 nindx0 = 0
118 indx = 0
119 indx0 = 0
120
121
122 DO i=1,nel
123
124
125 IF (dfmax(i,1)<one) THEN
126
127
128 findex = (sxx(i)/x11)**2 - ((sxx(i)*syy(i))/(x11**2)) +
129 . (syy(i)/x22)**2 + (sxy(i)/s12)**2 -
130 . ((sxx(i)*szz(i))/(x11**2)) + (szz(i)/x22)**2 +
131 . (szx(i)/s12)**2
132 findex =
max(zero,findex)
133
134
135 dfmax(i,2) = one/
max(sqrt(findex),em20)
136
137
138 dfmax(i,1) =
min(one ,
max(findex,dfmax(i,1)))
139 IF (dfmax(i,1) >= one) THEN
140 nindx = nindx+1
141 indx(nindx) = i
142 IF (ifail_so > 0) THEN
143 uvar(i,1) = time
144 ENDIF
145 ENDIF
146 ENDIF
147
148
149 IF ((uvar(i,1) > zero).AND.(loff(i) /= zero).AND.
150 . (ifail_so > 0).AND.(off(i) /= zero)) THEN
151 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
152 IF (dmg_scale(i) < em02) THEN
153 loff(i) = zero
154 tdele(i) = time
155 dmg_scale(i) = zero
156 IF (ifail_so == 1) THEN
157 off(i) = zero
158 nindx0 = nindx0 + 1
159 indx0(nindx0) = i
160 ELSEIF (ifail_so == 2) THEN
161 noff(i) = noff(i) + 1
162 IF (int(noff(i)) >= npg) THEN
163 off(i) = zero
164 nindx0 = nindx0 + 1
165 indx0(nindx0) = i
166 ENDIF
167 ENDIF
168 ENDIF
169 ENDIF
170 ENDDO
171
172
173
174
175 IF(nindx > 0)THEN
176 DO j=1,nindx
177 i = indx(j)
178#include "lockon.inc"
179 WRITE(iout, 1000) ngl(i),ip,ilay
180 WRITE(istdo,1100) ngl(i),ip,ilay,time
181#include "lockoff.inc"
182 END DO
183 ENDIF
184
185 IF(nindx0 > 0)THEN
186 DO j=1,nindx0
187 i = indx0(j)
188#include "lockon.inc"
189 WRITE(iout, 1200) ngl(i),time
190 WRITE(istdo,1200) ngl(i),time
191#include "lockoff.inc"
192 END DO
193 ENDIF
194
195 1000 FORMAT(1x,'FAILURE (TSAIHILL) OF SOLID ELEMENT ',i10,1x,
196 .',GAUSS PT',i5,1x,',LAYER',i5)
197 1100 FORMAT(1x,'FAILURE (TSAIHILL) OF SOLID ELEMENT ',i10,1x,
198 .',GAUSS PT',i5,1x,',LAYER',i5,1x,'AT TIME :',1pe20.13)
199 1200 FORMAT(1x,'-- RUPTURE OF SOLID ELEMENT : ',i10,1x,
200 .'AT TIME :',1pe20.13)
201
202 RETURN