37
38
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "units_c.inc"
47#include "comlock.inc"
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 INTEGER ,INTENT(IN) :: NEL,NFUNC,NUPARAM,NUVAR,IPG,ILAY,IPT,LF_DAMMX
76 INTEGER, DIMENSION(NFUNC), INTENT(IN) :: IFUNC
77 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
79 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: off,hardm,
80 . signxx,signyy,signxy,signyz,signzx
81 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
82
83
84
85 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
86 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel
87 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
88 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
89
90
91
92 INTEGER NPF(*)
94 EXTERNAL finter
95
96
97
98
99
100
101
102
103
104
105 INTEGER :: I,J,NINDX,CHECK
106 INTEGER ,DIMENSION(NEL) :: INDX
107 my_real :: s1,s2,ss,s12,dydx1,dydx2,s2dydx1,sigsr,sig3d
108 my_real ,
DIMENSION(NEL) :: sig1,sig2,lambdanxt
109
110 DO i=1,nel
111 sig1(i) = zero
112 sig2(i) = zero
113 lambdanxt(i) = zero
114 ENDDO
115 nindx = 0
116
117 DO i=1,nel
118 IF (off(i) == zero) THEN
119 uvar(i,1)= zero
120 uvar(i,2)= zero
121 END IF
122 ENDDO
123
124
125
126 DO i=1,nel
127 IF (off(i) == one .and. foff(i) == 1) THEN
128 s12= signxy(i)
129 s1 = half*(signxx(i) + signyy(i))
130 s2 = half*(signxx(i) - signyy(i))
131 sig1(i) = s1 + sqrt(s2**2 + s12**2)
132 ss = s1 - sqrt(s2**2 + s12**2)
133 sig2(i) = ss
134
135 IF(ss >= sig1(i))THEN
136 sig2(i) = sig1(i)
137 sig1(i) = ss
138 ENDIF
139 check = 1
140 IF (sig2(i)/=zero) THEN
141 ss = sig1(i)/sig2(i)
142 IF ((ss < -one .AND. ss < zero) .OR.
143 . (sig1(i) < zero .AND. sig2(i) < zero)) THEN
144 check = 0
145 ENDIF
146 ENDIF
147
148 s1 = sig1(i)
149 s2 = sig2(i)
150 sig1(i) = sig1(i)/
max(hardm(i),em20)
151 sig2(i) = sig2(i)/
max(hardm(i),em20)
152 IF (check == 1 ) THEN
153
154 sigsr = finter(ifunc(1),sig2(i),npf,tf,dydx1)
155 sig3d = finter(ifunc(2),sig2(i),npf,tf,dydx2)
156 IF(sigsr < abs(sig2(i)).AND.sig3d < abs(sig2(i))) THEN
157 lambdanxt(i) = two
158 ELSEIF(sigsr < abs(sig2(i))) THEN
159 sigsr = abs(sig2(i))
160 lambdanxt(i) = one + ((sig1(i) - sigsr)/(sig3d - sigsr))
161 ELSE
162
163 lambdanxt(i) = one + ((sig1(i) - sigsr)/(sig3d - sigsr))
164 ENDIF
165 lambdanxt(i) =
max(lambdanxt(i),zero)
166 lambdanxt(i) =
min(lambdanxt(i),two)
167 ELSE
168 lambdanxt(i) = zero
169 ENDIF
170 ENDIF
171 ENDDO
172
173
174 DO i=1,nel
175 IF (off(i) == one .and. foff(i) == 1) THEN
176 IF (lambdanxt(i) >= two) THEN
177 nindx = nindx + 1
178 indx(nindx) = i
179 foff(i) = 0
180 tdel(i) = time
181 ENDIF
182 ENDIF
183 ENDDO
184
185 IF (nindx > 0) THEN
186 DO j=1,nindx
187 i = indx(j)
188#include "lockon.inc"
189 WRITE(iout, 2000) ngl(i),ipt,lambdanxt(i)
190 WRITE(istdo,2100) ngl(i),ipt,time,lambdanxt(i)
191#include "lockoff.inc"
192 END DO
193 ENDIF
194
195
196
197 DO i=1,nel
198 dfmax(i,2) =
max(dfmax(i,2),lambdanxt(i))
199 uvar(i,1) = sig1(i)
200 uvar(i,2) = sig2(i)
201 dfmax(i,1) =
min(one, dfmax(i,2)/two) ! maximum dmg
for output : 0 < dfmax < 1
202 ENDDO
203
204 2000 FORMAT(1x,'(NXT FAILURE) FOR SHELL ELEMENT '
205 .'LAYER',i10,':',/
206 . 1x,'WITH FAILURE FACTOR :',1pe20.13)
207 2100 FORMAT(1x,'(NXT FAILURE) FOR SHELL ELEMENT',i10,1x,
208 .'LAYER',i10,':',/,
209 . 1x,'AT TIME :',1pe20.13/,
210 . 1x,'WITH FAILURE FACTOR :',1pe20.13)
211
212 RETURN
for(i8=*sizetab-1;i8 >=0;i8--)