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