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