44 use element_mod , only : nixs
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "mvsiz_p.inc"
53
54
55
56#include "com08_c.inc"
57#include "param_c.inc"
58
59
60
61 INTEGER , IXS(NIXS,*),IPARG(NPARG,*),IELES(*),
62 . IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),IX4(MVSIZ),
63 . IELECI(MVSIZ),NPC(*),
64 . ,IFUNCTK
65 my_real,
intent(in) :: theaccfact
67 . pm(npropm,*),temp(*),tempi(mvsiz),xi(mvsiz),yi(mvsiz),
68 . zi(mvsiz),x1(mvsiz),y1(mvsiz),z1(mvsiz),x2(mvsiz),y2(mvsiz),
69 . z2(mvsiz),x3(mvsiz),y3(mvsiz),z3(mvsiz),x4(mvsiz),y4(mvsiz),
70 . z4(mvsiz),rstif,phi(mvsiz),areas(mvsiz),gapv(mvsiz),
71 . penrad(mvsiz),fni(mvsiz),tf(*),condint(mvsiz),efrict(mvsiz),
72 . phi1(mvsiz),phi2(mvsiz),phi3(mvsiz),phi4(mvsiz),h1(mvsiz),
73 . h2(mvsiz),h3(mvsiz),h4(mvsiz),
74 . x(3,*),tint,frad,drad,dydx,xthe,fheatm,fheats
75
76
77
78 INTEGER I,MAT
79
81 . sx1 , sy1 , sz1 , sx2 , sy2 , sz2,
82 . ts, tm,tstifm,
83 . tstift,dist,
norm,cond,p,rstiff,
84 . areac,phim
86 . finter
87 EXTERNAL finter
88
89 IF(ifunctk==0)THEN
90
91
92
93
94 DO i=1,jlt
95 phi(i) = zero
96
97 ts = tempi(i)
98 condint(i) = zero
99
100
101
102
103 sx1=(y1(i)-y3(i))*(z2(i)-z4(i)) - (z1(i)-z3(i))*(y2(i)-y4(i))
104 sy1=(z1(i)-z3(i))*(x2(i)-x4(i)) - (x1(i)-x3(i))*(z2(i)-z4(i))
105 sz1=(x1(i)-x3(i))*(y2(i)-y4(i)) - (y1(i)-y3(i))*(x2(i)-x4(i))
106
107 norm = sqrt(sx1**2 + sy1**2 + sz1**2)
108
109
110
111 IF(ix3(i)/=ix4(i))THEN
112 sx2 = fourth*(x1(i) + x2(i) + x3(i) + x4(i)) - xi(i)
113 sy2 = fourth*(y1(i) + y2(i) + y3(i) + y4(i)) - yi(i)
114 sz2 = fourth*(z1(i) + z2(i) + z3(i) + z4(i)) - zi(i)
115 ELSE
116 sx2 = third*(x1(i) + x2(i) + x3(i)) - xi(i)
117 sy2 = third*(y1(i) + y2(i) + y3(i)) - yi(i)
118 sz2 = third*(z1(i) + z2(i) + z3(i)) - zi(i)
119 END IF
120
121
122
123
124
125 dist = (sx2*sx1+sy2*sy1+sz2*sz1) /
max(em15,
norm)
126
127
128
129
130
131 penrad(i)=abs(dist)
132
133 IF(areas(i) == zero )THEN
135 ELSE
136 areac = areas(i)
137 ENDIF
138
139 IF(iform == 0 )THEN
140 IF(penrad(i) <= drad.AND.penrad(i)>= gapv(i))THEN
141
142
143
144 phi(i) = frad * areac * (tint*tint+ts*ts)
145 . * (tint + ts) * (tint - ts) * dt1 * theaccfact
146 ELSE
147
148
149
150 mat = ieleci(i)
151 IF(mat > 0 ) THEN
152 cond=pm(75,mat)+pm(76,mat)*ts
153 tstifm =
max(dist,zero) / cond
154 ELSE
155 cond = zero
156 tstifm = zero
157 ENDIF
158
159 tstift = tstifm + rstif
160 condint(i) = areac * theaccfact / tstift
161 phi(i) = areac * (tint
162
163 ENDIF
164 phi1(i) = zero
165 phi2(i) = zero
166 phi3(i) = zero
167 phi4(i) = zero
168
169
170
171 IF(fheats/=zero) phi(i) = phi(i) + fheats * efrict(i)
172 ELSE
173
174
175
176
177 tm = h1(i)*temp(ix1(i)) + h2(i)*temp(ix2(i))
178 . + h3(i)*temp(ix3(i)) + h4(i)*temp(ix4(i))
179 ts = tempi(i)
180
181 IF(penrad(i) <= drad.AND.penrad(i)>= gapv(i))THEN
182
183
184
185 phi(i) = frad * areac * (tm*tm+ts*ts)
186 . * (tm + ts) * (tm - ts) * dt1 * theaccfact
187 ELSE
188
189
190
191 phi(i) = areac * (tm - ts) * dt1 * theaccfact / rstif
192 condint(i) = areac * theaccfact / rstif
193 ENDIF
194 phi1(i) = -phi(i) *h1(i)
195 phi2(i) = -phi(i) *h2(i)
196 phi3(i) = -phi(i) *h3(i)
197 phi4(i) = -phi(i) *h4(i)
198
199
200
201 phi(i) = phi(i) + fheats * efrict(i)
202
203 phim = fheatm * efrict(i)
204 phi1(i) = phi1(i) + phim*h1(i)
205 phi2(i) = phi2(i) + phim*h2(i)
206 phi3(i) = phi3(i) + phim*h3(i)
207 phi4(i) = phi4(i) + phim*h4(i)
208 ENDIF
209 ENDDO
210 ELSE
211
212
213
214
215 DO i=1,jlt
216 phi(i) = zero
217
218 ts = tempi(i)
219
220
221
222 sx1=(y1(i)-y3(i))*(z2(i)-z4(i)) - (z1(i)-z3(i))*(y2(i)-y4(i))
223 sy1=(z1(i)-z3(i))*(x2(i)-x4(i)) - (x1(i)-x3(i))*(z2(i)-z4(i))
224 sz1=(x1(i)-x3(i))*(y2(i)-y4(i)) - (y1(i)-y3(i))*(x2(i)-x4(i))
225
226 norm = sqrt(sx1**2 + sy1**2 + sz1**2)
227
228
229
230 IF(ix3(i)/=ix4(i))THEN
231 sx2 = fourth*(x1(i) + x2(i) + x3(i) + x4(i)) - xi(i)
232 sy2 = fourth*(y1(i) + y2(i) + y3(i) + y4(i)) - yi(i)
233 sz2 = fourth*(z1(i) + z2(i) + z3(i) + z4(i)) - zi(i)
234 ELSE
235 sx2 = third*(x1(i) + x2(i) + x3(i)) - xi(i)
236 sy2 = third*(y1(i) + y2(i) + y3(i)) - yi(i)
237 sz2 = third*(z1(i) + z2(i) + z3(i)) - zi(i)
238 END IF
239
240
241
242
243
244 dist = (sx2*sx1+sy2*sy1+sz2*sz1) /
max(em15,
norm)
245
246
247
248
249
250 penrad(i)=abs(dist)
251
252 IF(areas(i) == zero )THEN
254 ELSE
255 areac = areas(i)
256 ENDIF
257
258 IF(iform == 0 )THEN
259 IF(penrad(i) <= drad.AND.penrad(i)>= gapv(i))THEN
260
261
262
263 phi(i) = frad * areac * (tint*tint+ts*ts)
264 . * (tint + ts) * (tint - ts) * dt1 * theaccfact
265 ELSE
266
267
268
269 mat = ieleci(i)
270
271
272
273
274 p = xthe * abs(fni(i)) / areac
275 rstiff = rstif /
max(em30,finter(ifunctk,p,npc,tf,dydx))
276 IF(mat > 0 ) THEN
277 cond=pm(75,mat)+pm(76,mat)*ts
278 tstifm =
max(dist,zero) / cond
279 ELSE
280 cond = zero
281 tstifm = zero
282 ENDIF
283
284 tstift = tstifm + rstiff
285 condint(i) = areac * theaccfact / tstift
286
287 phi(i) = areac * (tint - ts) * dt1 * theaccfact / tstift
288 ENDIF
289 phi1(i) = zero
290 phi2(i) = zero
291 phi3(i) = zero
292 phi4(i) = zero
293 ELSE
294
295
296
297
298 tm = h1(i)*temp(ix1(i)) + h2(i)*temp(ix2(i))
299 . + h3(i)*temp(ix3(i)) + h4(i)*temp(ix4(i))
300 ts = tempi(i)
301
302 IF(penrad(i) <= drad.AND.penrad(i)>= gapv(i))THEN
303
304
305
306 phi(i) = frad * areac * (tm*tm+ts*ts)
307 . * (tm + ts) * (tm- ts) * dt1 * theaccfact
308 ELSE
309
310
311
312 p = xthe * abs(fni(i)) / areac
313 rstiff = rstif /
max(em30,finter(ifunctk,p,npc,tf,dydx))
314
315 phi(i) = areac * (tm - ts) * dt1 * theaccfact / rstiff
316 condint(i) = areac * theaccfact / rstiff
317 ENDIF
318
319
320
321 phi(i) = phi(i) + fheats * efrict(i)
322
323 phim = fheatm * efrict(i)
324 phi1(i) = phi1(i) + phim*h1(i)
325 phi2(i) = phi2(i) + phim*h2(i)
326 phi3(i) = phi3(i) + phim*h3(i)
327 phi4(i) = phi4(i) + phim*h4(i)
328
329 ENDIF
330 ENDDO
331 ENDIF
332
333 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB