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