36
37
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "units_c.inc"
46#include "comlock.inc"
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT,LF_DAMMX
77 INTEGER ,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
82
83
84
85 INTEGER ,INTENT(OUT) ::DMG_FLAG
86 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
87 my_real ,
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
90
91
92
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)
98
99 sigt1 = uparam(1)
100 sigt2 = uparam(2)
101 sigc1 = uparam(3)
102 sigc2 = uparam(4)
103 fsig12 = uparam(5)
104 pp12 = uparam(6)
105 pn12 = uparam(7)
106 pn22 = uparam(8)
107 tmax = uparam(9)
108 fcut = uparam(12)
109 IF (fcut > zero) THEN
110 fsmooth = 1
111 asrate = two*pi*fcut*timestep
112 asrate = asrate/(one+asrate)
113 ELSE
114 fsmooth = 0
115 ENDIF
116
117 dmg_flag = 1
118 nindx = 0
119 IF (fsmooth > 0) THEN
120 DO i = 1,nel
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)
124 uvar(i,2) = sxx(i)
125 uvar(i,3) = syy(i)
126 uvar(i,4) = sxy(i)
127 ENDDO
128 ELSE
129 DO i = 1,nel
130 sxx(i) = signxx(i)
131 syy(i) = signyy(i)
132 sxy(i) = signxy(i)
133 ENDDO
134 ENDIF
135
136 DO i=1,nel
137 IF (off(i) == one .and. foff(i) == 1) THEN
138 f1 = zero
139 fa = zero
140 fb = zero
141 fc = zero
142
143 IF (uvar(i,1) == zero) THEN
144
145
146
147 IF (sxx(i) >= zero) THEN
148 f1 = sxx(i)/sigt1
149 dfmax(i,2) =
max(dfmax(i,2),f1)
150 dfmax(i,2) =
min(dfmax(i,2),one)
151 ELSE
152 f1 = -sxx(i)/sigc1
153 dfmax(i,3) =
max(dfmax(i,3),f1)
154 dfmax(i,3) =
min(dfmax(i,3),one)
155 ENDIF
156
157
158
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)
166 ELSE
167 fac = half/(one + pn22)/fsig12
168 fc = (sxy(i)*fac)**2 + (syy(i)/sigc2)**2
169 fc =-fc*sigc2/syy(i)
170 dfmax(i,6) =
max(dfmax(i,6),fc)
171 dfmax(i,6) =
min(dfmax(i,6),one)
172 ENDIF
173 fb = sqrt(sxy(i)**2 + (pn12*syy(i))**2 )
174 . + pn12*syy(i)
175 fb = fb/fsig12
176 dfmax(i,5) =
max(dfmax(i,5),fb)
177 dfmax(i,5) =
min(dfmax(i,5),one)
178
179 dammx =
min(one,
max(f1,fa,fb,fc))
180 dfmax(i,1) =
min(one,dammx)
181 IF (dammx >= one) THEN
182 nindx = nindx+1
183 indx(nindx) = i
184 uvar(i,1) = time
185 ENDIF
186 ENDIF
187
188 IF (uvar(i,1) > zero) THEN
189 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
190 IF (dmg_scale(i) < em02) THEN
191 foff(i) = 0
192 tdel(i) = time
193 dmg_scale(i) = zero
194 ENDIF
195 ENDIF
196 ENDIF
197 ENDDO
198
199
200
201 IF (nindx > 0) THEN
202 DO j=1,nindx
203 i = indx(j)
204#include "lockon.inc"
205 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
206 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
207#include "lockoff.inc"
208 END DO
209 END IF
210
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)
215
216 RETURN