40
41
42
43 USE python_funct_mod
44 USE sensor_mod
45 use glob_therm_mod
46
47
48
49#include "implicit_f.inc"
50#include "comlock.inc"
51#include "param_c.inc"
52
53
54
55#include "com04_c.inc"
56#include "com08_c.inc"
57#include "parit_c.inc"
58#include "units_c.inc"
59
60
61
62 type (glob_therm_) ,intent(inout) :: glob_therm
63 INTEGER ,INTENT(IN) :: NSENSOR
64 INTEGER NPC(*),IAD(4,*)
65 INTEGER IBFFLUX(GLOB_THERM%NITFLUX,*)
66 INTEGER IXS(NIXS,*)
68 . fbfflux(glob_therm%LFACTHER,*), tf(*), x(3,*),
69 . fthesky(lsky), fthe(*)
70 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
71 TYPE(PYTHON_) :: PYTHON
72
73
74
75 INTEGER NL, N1, N2, N3, N4, N5, N6, N7, N8, ISENS,
76 . IFUNC_OLD,IFUNC,IAD1,IAD2,IAD3,IAD4,IFLAG
77 INTEGER IEL
78 my_real nx, ny, nz, dydx, ts, flux, ts_old, fcx, fcy, flux_dens,
area
80 my_real tta, ttb, dt1a, dt1n, volg, bid
82 EXTERNAL finter
83 INTEGER ::
84
85 ifunc_old = 0
86 ts_old = zero
87 fcy_old = zero
88 flux_dens = zero
89 n4 = zero
90 dt1n = zero
91
92 IF(iparit == 0) THEN
93
94
95
96 DO nl=1,glob_therm%NFXFLUX
97
99
100 startt = fbfflux(4,
nl)
101 stopt = fbfflux(5,
nl)
102 tta = tt *glob_therm%THEACCFACT
103 dt1a = dt1*glob_therm%THEACCFACT
104 ttb = tta - dt1a
105 IF(isens == 0)THEN
106 ts = tta - startt
107 ELSE
108 startt = startt + sensor_tab(isens)%TSTART
109 stopt = stopt + sensor_tab(isens)%TSTART
110 ts = tta - startt
111 ENDIF
112
113 IF(tta < startt .OR. ttb >= stopt) cycle
114 IF(tta > stopt ) THEN
115 IF(ttb <= startt) THEN
116 dt1n = stopt - startt
117 ELSE
118 dt1n = stopt - ttb
119 ENDIF
120 ELSEIF(tta <= stopt) THEN
121 IF(ttb <= startt) THEN
122 dt1n = tta - startt
123 ELSE
124 dt1n = dt1a
125 ENDIF
126 ENDIF
127
128 ifunc = ibfflux(5,
nl)
131 IF(ifunc_old /= ifunc .OR. ts_old /= ts .OR. fcy_old /= fcy ) THEN
132 ismooth = 0
133 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
134 IF(ismooth < 0) THEN
135 CALL python_call_funct1d(python, -ismooth,ts*fcx, flux_dens)
136 flux_dens = fcy*flux_dens
137 ELSE
138 flux_dens = fcy*finter(ifunc, ts*fcx,npc,tf,dydx)
139 ENDIF
140 ifunc_old = ifunc
141 ts_old = ts
142 fcy_old = fcy
143 ENDIF
144
145
146
147 IF(ibfflux(10,
nl) == 0)
THEN
152
153 IF(n4 > 0)THEN
154
155 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2))
156 + -(x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
157 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2))
158 + -(x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
159 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2))
160 + -(x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
161
162 area = half*sqrt(nx*nx + ny*ny + nz*nz)
163 flux =
area*flux_dens*dt1n
164 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
165 flux = fourth*flux
166
167 fthe(n1) = fthe(n1) + flux
168 fthe(n2) = fthe(n2) + flux
169 fthe(n3) = fthe(n3) + flux
170 fthe(n4) = fthe(n4) + flux
171
172 ELSEIF(n3 > 0) THEN
173 nx= (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2))
174 + -(x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
175 ny= (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2))
176 + -(x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
177 nz= (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2))
178 + -(x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
179
180 area = half*sqrt( nx*nx + ny*ny + nz*nz)
181 flux =
area*flux_dens*dt1n
182 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
183 flux = third*flux
184
185 fthe(n1) = fthe(n1) + flux
186 fthe(n2) = fthe(n2) + flux
187 fthe(n3) = fthe(n3) + flux
188
189 ELSE
190 ny= -x(3,n2)+x(3,n1)
191 nz= x(2,n2)-x(2,n1)
192
193 area = sqrt(ny*ny + nz*nz)
194 flux =
area*flux_dens*dt1n
195 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
196 flux = half*flux
197
198 fthe(n1) = fthe(n1) + flux
199 fthe(n2) = fthe(n2) + flux
200
201 ENDIF
202
203
204
205 ELSE
207 IF(iel == 0) THEN
208 ibfflux(1,
nl)=ibfflux(8,
nl)
210 ENDIF
211 n1 = ixs(2,iel)
212 n2 = ixs(3,iel)
213 n3 = ixs(4,iel)
214 n4 = ixs(5,iel)
215 n5 = ixs(6,iel)
216 n6 = ixs(7,iel)
217 n7 = ixs(8,iel)
218 n8 = ixs(9,iel)
219
220 IF(n1 == n2 .AND. n3 == n4 .AND. n5 == n8 .AND. n6 == n7) THEN
221 CALL s4volume(x, volg, 1, n1, n3, n6, n5)
222 ELSE
223 CALL s8evolume(x, volg, bid, 1, 0, 0, 0, n1, n2, n3, n4, n5, n6, n7, n8)
224 ENDIF
225
226 flux = volg*flux_dens*dt1n
227 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
228 flux = one_over_8*flux
229
230 fthe(n1) = fthe(n1) + flux
231 fthe(n2) = fthe(n2) + flux
232 fthe(n3) = fthe(n3) + flux
233 fthe(n4) = fthe(n4) + flux
234 fthe(n5) = fthe(n5) + flux
235 fthe(n6) = fthe(n6) + flux
236 fthe(n7) = fthe(n7) + flux
237 fthe(n8) = fthe(n8) + flux
238 ENDIF
239 ENDDO
240
241
242 ELSE
243
244
245
246
247 DO nl=1,glob_therm%NFXFLUX
248 isens = ibfflux(6,
nl)
249 startt = fbfflux(4,
nl)
250 stopt = fbfflux(5,
nl)
251 tta = tt *glob_therm%THEACCFACT
252 dt1a = dt1*glob_therm%THEACCFACT
253 IF (isens == 0)THEN
254 ts = tta - startt
255 ELSE
256 startt = startt + sensor_tab(isens)%TSTART
257 stopt = stopt + sensor_tab(isens)%TSTART
258 ts = tta - startt
259 ENDIF
260 iflag = 1
261 IF(tta < startt) iflag = 0
262 IF(tta > stopt ) iflag = 0
263
264 IF(ibfflux(10,
nl) == 0)
THEN
265
266
267
268 IF(iflag==1) THEN
273 ifunc = ibfflux(5,
nl)
276 IF(ifunc_old /= ifunc .OR. ts_old /= ts) THEN
277 ismooth = 0
278 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
279 IF(ismooth < 0) THEN
280 CALL python_call_funct1d(python, -ismooth,ts*fcx, flux_dens)
281 ELSE
282 flux_dens = finter(ifunc,ts*fcx,npc,tf,dydx)
283 ENDIF
284 ifunc_old = ifunc
285 ts_old = ts
286 ENDIF
287
288
289 IF(n4 > 0)THEN
290 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2))
291 + -(x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
292 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2))
293 + -(x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
294 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2))
295 + -(x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
296
297 area = half*sqrt(nx*nx + ny*ny + nz*nz)
298 flux =
area*flux_dens*fcy*dt1a
299 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
300 flux = fourth*flux
301
303 fthesky(iad1) = flux
305 fthesky(iad2) = flux
307 fthesky(iad3) = flux
309 fthesky(iad4) = flux
310
311 ELSEIF( n3 > 0) THEN
312 nx= (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2))
313 + -(x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
314 ny= (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2))
315 + -(x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
316 nz= (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2))
317 + -(x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
318
319 area = half*sqrt(nx*nx + ny*ny + nz*nz)
320 flux =
area*flux_dens*fcy*dt1a
321 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
322 flux = third*flux
323
325 fthesky(iad1) = flux
327 fthesky(iad2) = flux
329 fthesky(iad3) = flux
330
331 ELSE
332 ny= -x(3,n2)+x(3,n1)
333 nz= x(2,n2)-x(2,n1)
334
335 area = sqrt(ny*ny + nz*nz)
336 flux =
area*flux_dens*fcy*dt1a
337 glob_therm%HEAT_FFLUX = glob_therm%HEAT_FFLUX + flux
338 flux = half*flux
339
341 fthesky(iad1) = flux
343 fthesky(iad2) = flux
344 ENDIF
345
346 ELSE
348 fthesky(iad1) = zero
350 fthesky(iad2) = zero
351 IF(n4 > 0)THEN
353 fthesky(iad3) = zero
355 fthesky(iad4) = zero
356 ELSEIF(n3 > 0)THEN
358 fthesky(iad3) = zero
359 ENDIF
360 ENDIF
361 ELSE
362
363
364
365 WRITE(iout,'(//A)') ' VOLUMIC HEAT FLUX IS NOT
366 . COMPATIBLE WITH /PARITH/ON: USE /PARITH/OFF'
367 WRITE(6,*) ' VOLUMIC HEAT FLUX IS NOT ',
368 . 'COMPATIBLE WITH /PARITH/ON: USE /PARITH/OFF'
369 CALL flush(6)
371 ENDIF
372 ENDDO
373
374 ENDIF
375
376 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine s4volume(x, vol, nel, nc1, nc2, nc3, nc4)
subroutine s8evolume(x, volg, volp, nela, nptr, npts, nptt, nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8)
character *2 function nl()