37
38
39
40
41
42#include "implicit_f.inc"
43
44
45
46
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
77#include "units_c.inc"
78#include "comlock.inc"
79
80
81
82 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT
83 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
84 my_real,
INTENT(IN) :: time,timestep
85 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
86 my_real ,
DIMENSION(NEL),
INTENT(IN) :: deps1,deps2,eps1,eps2,off
87
88
89
90 INTEGER ,DIMENSION(NEL), INTENT(INOUT) :: FOFF
91 my_real ,
DIMENSION(NEL),
INTENT(INOUT) :: dfmax,sig1,sig2
92 my_real ,
DIMENSION(NEL),
INTENT(OUT) :: tdel
93 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
94
95
96
97 INTEGER (*), NFUNC, IFUNC(NFUNC)
99 EXTERNAL finter
100
101
102
103 INTEGER :: I,J,NINDX1,NINDX2,NDIR
104 my_real :: xfac,rf1,rr1,rf2,rr2,dydx,epsr1,epsr2,epsf1,epsf2,dmg1,dmg2
105 INTEGER ,DIMENSION(NEL) :: INDX1,INDX2
106 my_real ,
DIMENSION(NEL) :: rfac1,rfac2,epsp1,epsp2
107
108
109
110
111 nindx1 = 0
112 nindx2 = 0
113 epsf1 = uparam(1)
114 epsr1 = uparam(2)
115 epsf2 = uparam(3)
116 epsr2 = uparam(4)
117 xfac = uparam(5)
118 ndir = nint(uparam(6))
119
120
121
122 IF (ifunc(1) > 0) THEN
123 DO i=1,nel
124 epsp1(i) = xfac * deps1(i) /
max(timestep,em20)
125 epsp2(i) = xfac * deps2(i) /
max(timestep,em20)
126 rfac1(i) = finter(ifunc(1),epsp1(i),npf,tf,dydx)
127 rfac1(i) =
max(rfac1(i),em20)
128 rfac2(i) = finter(ifunc(1),epsp2(i),npf,tf,dydx)
129 rfac2(i) =
max(rfac2(i),em20)
130 ENDDO
131 ELSE
132 rfac1(1:nel) = one
133 rfac2(1:nel) = one
134 ENDIF
135
136 DO i=1,nel
137 dmg1 = zero
138 dmg2 = zero
139 rf1 = epsf1*rfac1(i)
140 rr1 = epsr1*rfac1(i)
141 rf2 = epsf2*rfac2(i)
142 rr2 = epsr2*rfac2(i)
143 IF (eps1(i) > rf1) dmg1 =
min(one, (eps1(i)-rf1)/(rr1-rf1))
144 IF (eps2(i) > rf2) dmg2 =
min(one, (eps2(i)-rf2)/(rr2-rf2))
145
146 IF (uvar(i,1) == zero .and. dmg1 > zero) THEN
147 nindx1 = nindx1 + 1
148 indx1(nindx1) = i
149 ENDIF
150 IF (uvar(i,2) == zero .and. dmg2 > zero) THEN
151 nindx2 = nindx2 + 1
152 indx2(nindx2) = i
153 ENDIF
154 uvar(i,1) =
max(uvar(i,1), dmg1)
155 uvar(i,2) =
max(uvar(i,2), dmg2)
156 IF (uvar(i,1)>zero .and. sig1(i)>zero) sig1(i) = sig1(i)*(one-uvar(i,1))
157 IF (uvar(i,2)>zero .and. sig2(i)>zero) sig2(i) = sig2(i)*(one-uvar(i,2))
158 IF (ndir == 2) THEN
159 IF (uvar(i,1) == one .AND. uvar(i,2) == one) THEN
160 foff(i) = 0
161 tdel(i) = time
162 ENDIF
163 ELSE
164 IF (uvar(i,1) == one .OR. uvar(i,2) == one) THEN
165 foff(i) = 0
166 tdel(i) = time
167 ENDIF
168 ENDIF
169 ENDDO
170
171
172 DO i=1,nel
173 dfmax(i) =
max(dfmax(i), uvar(i,1))
174 dfmax(i) =
max(dfmax(i), uvar(i,2))
175 ENDDO
176
177
178
179 DO j=1,nindx1
180 i = indx1(j)
181 IF (uvar(i,1) > zero) THEN
182#include "lockon.inc"
183 WRITE(iout, 1100) ngl(i),ipg,ilay,ipt,time
184 WRITE(istdo,1100) ngl(i),ipg,ilay,ipt,time
185#include "lockoff.inc"
186 ENDIF
187 ENDDO
188 DO j=1,nindx2
189 i = indx2(j)
190 IF (uvar(i,2) > zero) THEN
191#include "lockon.inc"
192 WRITE(iout, 2100) ngl(i),ipg,ilay,ipt,time
193 WRITE(istdo,2200) ngl(i),ipg,ilay,ipt,time
194#include "lockoff.inc"
195 ENDIF
196 ENDDO
197
198 1100 FORMAT(1x,'START DAMAGE (FABRIC) OF FIBER 1, ELEMENT ',i10,1x,',GAUSS PT',
199 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
200 1200 FORMAT(1x,'START DAMAGE (FABRIC) OF FIBER 2, ELEMENT ',i10,1x,',GAUSS PT',
201 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
202 2100 FORMAT(1x,'START DAMAGE (FABRIC) OF FIBER 1, ELEMENT ',i10,1x,',GAUSS PT',
203 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
204 2200 FORMAT(1x,'START DAMAGE (FABRIC) OF FIBER 2, ELEMENT ',i10,1x,',GAUSS PT',
205 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
206 3000 FORMAT(1x,'FAILURE (FABRIC) OF ELEMENT ',i10,1x,',GAUSS PT',
207 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
208
209 RETURN