41
42
43
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "units_c.inc"
53#include "comlock.inc"
54
55
56
57 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT
58 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
60 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: off,thk,aldt,dpla,epsp,
61 . temp,signxx,signyy,signxy,signyz,signzx
62 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
63
64
65
66 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
67 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: dfmax
68 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel
69 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
70
71
72
73 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
75 EXTERNAL finter
76
77
78
79 INTEGER :: I,J,J1,J2,K,IP_THICK,NINDX,NINDXF,IFAIL_SH,NRATE,
80 . IFUN_EL,IFUN_TEMP
81 INTEGER, DIMENSION(NEL) :: INDX,INDXF,IPOSV,IADP,ILENP
82 INTEGER IPOST(NEL,2)
83 INTEGER ,DIMENSION(NFUNC) :: IFUN_STR
84
85 my_real :: p,svm,df,fac,lambda,dcrit,el_ref,sc_el,sc_temp,p_thick,
86 . dp,dd,dn,yy,yy_n,ef1,ef2
87 my_real,
DIMENSION(NFUNC) :: yfac,rate
88 my_real,
DIMENSION(NEL) :: epsf,epsf_n,sigm,yyv,dxdyv,lambdav
89
90
91
92
93
94 IF (uvar(1,2) == zero) THEN
95 uvar(1:nel,2) = aldt(1:nel)
96 ENDIF
97
98 ifail_sh = int(uparam(2))
99 p_thick = uparam(3)
100 dcrit = uparam(4)
101 dd = uparam(5)
102 dn = uparam(6)
103 sc_temp = uparam(7)
104 sc_el = uparam(8)
105 el_ref = uparam(9)
106 nrate = nfunc - 2
107 yfac(1:nrate) = uparam(11+1 :11+nrate)
108 rate(1:nrate) = uparam(11+nrate:11+nrate*2)
109
110
111 ifun_str(1:nrate) = ifunc(1:nrate)
112
113 ifun_el = ifunc(nrate+1)
114 ifun_temp = ifunc(nrate+2)
115
116 nindxf = 0
117 nindx = 0
118 DO i=1,nel
119 IF (off(i) == one .and. foff(i) == 1) THEN
120 nindx = nindx+1
121 indx(nindx) = i
122 ENDIF
123 ENDDO
124
125
126
127 DO j=1,nindx
128 i = indx(j)
129 j1 = 1
130 DO k=2, nrate-1
131 IF (epsp(i) > rate(i)) j1 = k
132 ENDDO
133 p = third*(signxx(i) + signyy(i))
134 svm = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
135 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
136 sigm = p /
max(em20,svm)
137
138 IF (nrate > 1) THEN
139 j2 = j1+1
140 ef1 = yfac(j1)*finter(ifunc(j1),sigm,npf,tf,df)
141 ef2 = yfac(j2)*finter(ifunc(j2),sigm,npf,tf,df)
142 fac = (epsp(i) - rate(j1)) / (rate(j2) - rate(j1))
143 epsf(i) =
max(ef1 + fac*(ef2 - ef1), em20)
144 ELSE
145 epsf(i) = yfac(j1)*finter(ifunc(j1),sigm,npf,tf,df)
146 ENDIF
147 ENDDO
148
149 IF (ifun_el > 0) THEN
150#include "vectorize.inc"
151 DO j=1,nindx
152 i = indx(j)
153
154 lambdav(j) = uvar(i,2) / el_ref
155 iposv(j) = nint(uvar(i,3))
156 iadp(j) = npf(ifun_el) / 2 + 1
157 ilenp(j) = npf(ifun_el + 1) / 2 -iadp(j) - iposv(j)
158 ENDDO
159
160 CALL vinter(tf,iadp,iposv,ilenp,nindx,lambdav,dxdyv,yyv)
161
162#include "vectorize.inc"
163 DO j=1,nindx
164 i = indx(j)
165 fac = sc_el*yyv(j)
166 epsf(i) = epsf(i)* fac
167 uvar(i,3) = iposv(j)
168 ENDDO
169 ENDIF
170
171#include "vectorize.inc"
172 DO j=1,nindx
173 i = indx(j)
174 epsf_n(i) = zero
175 ENDDO
176
177 IF (ifun_temp > 0) THEN
178 DO j=1,nindx
179 i = indx(j)
180 fac = sc_temp*finter(ifun_temp,temp(i),npf,tf,df)
181 epsf(i) = epsf(i)* fac
182 ENDDO
183 ENDIF
184
185 DO j=1,nindx
186 i = indx(j)
187 IF (uvar(i,1) < dcrit) THEN
188 IF (uvar(i,1) == zero) THEN
189 dp = one
190 ELSE
191 dp = dn*uvar(i,1)**(one-one/dn)
192 ENDIF
193 IF (epsf(i) > zero) uvar(i,1) = uvar(i,1)+dp*dpla(i)/epsf(i)
194
195 IF (uvar(i,1) >= dcrit) THEN
196 nindxf = nindxf+1
197 indxf(nindxf) = i
198 tdel(i)= time
199 IF (ifail_sh == 3) THEN
200 foff(i) = -1
201 ELSE
202 foff(i) = 0
203 ENDIF
204 ENDIF
205 ENDIF
206 ENDDO
207
208
209
210
211 DO j=1,nindx
212 i = indx(j)
213 dfmax(i)=
min(one,
max(dfmax(i),uvar(i,1)/dcrit))
214 ENDDO
215
216
217
218 IF (nindxf > 0) THEN
219 DO j=1,nindxf
220 i = indxf(j)
221#include "lockon.inc"
222 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
223 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
224#include "lockoff.inc"
225 ENDDO
226 ENDIF
227
228 2000 FORMAT(1x,'FAILURE (FTAB) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
229 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3)
230 2100 FORMAT(1x,'FAILURE (FTAB) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
231 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
232
233 RETURN
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)