38
39
40
41 USE python_funct_mod
42 USE sensor_mod
43 use glob_therm_mod
44
45
46
47#include "implicit_f.inc"
48#include "param_c.inc"
49
50
51
52#include "com04_c.inc"
53#include "com08_c.inc"
54#include "parit_c.inc"
55
56
57
58 type (glob_therm_) ,intent(inout) :: glob_therm
59 INTEGER ,INTENT(IN) :: NSENSOR
60 INTEGER NPC(*),IAD(4,*)
61 INTEGER IBCR(GLOB_THERM%NIRADIA,*)
62
64 . fradia(glob_therm%LFACTHER,*), tf(*), x(3,*),
65 . fthesky(lsky), temp(*), fthe(*)
66 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
67 TYPE(PYTHON_) :: PYTHON
68
69
70
71 INTEGER NL, N1, N2, N3, N4, ISENS,
72 . IFUNC_OLD,IFUNC,IAD1,IAD2,IAD3,IAD4
73 INTEGER IFLAG
74 my_real :: nx, ny, nz, dydx, ts, flux,
75 . ts_old, fcx, fcy, t_inf, te,
area,
76 . startt, stopt, fcy_old, emisig, offg
79 EXTERNAL finter
80 INTEGER :: OMP_GET_THREAD_NUM,ITSK
81 EXTERNAL omp_get_thread_num
82 INTEGER S1
83 INTEGER :: ISMOOTH
84
85
86 ismooth = 0
87 s1 = numnod
88 ifunc_old = 0
89 ts_old = zero
90 fcy_old= zero
91 heat_radia_l = zero
92 t_inf = zero
93 n1 = 0
94 n2 = 0
95 n3 = 0
96 n4 = 0
97 IF(iparit==0) THEN
98 itsk = omp_get_thread_num()
99
100
101
102
103 DO nl=1,glob_therm%NUMRADIA
105 IF(offg <= zero) cycle
106 startt = fradia(4,
nl)
109 IF(isens == 0)THEN
110 ts = tt*glob_therm%THEACCFACT - startt
111 ELSE
112 startt = startt + sensor_tab(isens)%TSTART
113 stopt = stopt + sensor_tab(isens)%TSTART
114 ts = tt*glob_therm%THEACCFACT -(startt + sensor_tab(isens)%TSTART)
115 ENDIF
116
117 IF(tt*glob_therm%THEACCFACT < startt) cycle
118 IF(tt*glob_therm%THEACCFACT > stopt ) cycle
127
128
129
130 IF(ifunc_old /= ifunc .OR. ts_old /= ts .OR. fcy_old /= fcy ) THEN
131 ismooth = 0
132 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
133 IF(ismooth < 0) THEN
134 CALL python_call_funct1d(python, -ismooth,ts*fcx, t_inf)
135 t_inf = fcy*t_inf
136 ELSE
137 t_inf = fcy*finter(ifunc, ts*fcx,npc,tf,dydx)
138 ENDIF
139 ifunc_old = ifunc
140 ts_old = ts
141 fcy_old= fcy
142 ENDIF
143
144 IF(n4 > 0)THEN
145
146 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2))
147 + -(x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
148 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2))
149 + -(x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
150 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2))
151 + -(x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
152
153 te = fourth*(temp(n1) + temp(n2) + temp(n3) + temp(n4))
154 area = half*sqrt( nx*nx + ny*ny + nz*nz)
155 flux =
area*emisig*(t_inf
156 heat_radia_l = heat_radia_l + flux
157 flux = fourth*flux
158
159 fthe(s1*itsk+n1) = fthe(s1*itsk+n1) + flux
160 fthe(s1*itsk+n2) = fthe(s1*itsk+n2) + flux
161 fthe(s1*itsk+n3)= fthe(s1*itsk+n3) + flux
162 fthe(s1*itsk+n4)= fthe(s1*itsk+n4) + flux
163
164
165 ELSEIF(n3 > 0) THEN
166
167 nx= (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2))
168 + -(x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
169 ny= (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2))
170 + -(x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
171 nz= (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2))
172 + -(x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
173
174 te = third*(temp(n1) + temp(n2) + temp(n3) )
175 area = half*sqrt( nx*nx + ny*ny + nz*nz)
176 flux =
area*emisig*(t_inf**4 - te**4)*dt1*glob_therm%THEACCFACT
177 heat_radia_l = heat_radia_l + flux
178 flux = third*flux
179
180 fthe(s1*itsk+n1) = fthe(s1*itsk+n1) + flux
181 fthe(s1*itsk+n2) = fthe(s1*itsk+n2) + flux
182 fthe(s1*itsk+n3)= fthe(s1*itsk+n3) + flux
183 ELSE
184
185 ny= -x(3,n2)+x(3,n1)
186 nz= x(2,n2)-x(2,n1)
187
188 te = half*(temp(n1) + temp(n2) )
189 area = sqrt( ny*ny + nz*nz)
190 flux =
area*emisig*(t_inf**4 - te**4)*dt1*glob_therm%THEACCFACT
191 glob_therm%HEAT_RADIA = glob_therm%HEAT_RADIA + flux
192 flux = half*flux
193
194 fthe(s1*itsk+n1)=fthe(s1*itsk+n1) + flux
195 fthe(s1*itsk+n2)=fthe(s1*itsk+n2) + flux
196
197 ENDIF
198 ENDDO
199
200
201
202 glob_therm%HEAT_RADIA = glob_therm%HEAT_RADIA + heat_radia_l
203
204
205 ELSE
206
207
208
209
210
211 DO nl=1,glob_therm%NUMRADIA
212 startt = fradia(4,
nl)
216 IF(isens == 0)THEN
217 ts = tt*glob_therm%THEACCFACT - startt
218 ELSE
219 startt = startt + sensor_tab(isens)%TSTART
220 stopt = stopt + sensor_tab(isens)%TSTART
221 ts = tt*glob_therm%THEACCFACT -(startt + sensor_tab(isens)%TSTART)
222 ENDIF
223 iflag = 1
224 IF(tt*glob_therm%THEACCFACT < startt) iflag = 0
225 IF(tt*glob_therm%THEACCFACT > stopt ) iflag = 0
226 IF(offg <= zero) iflag = 0
227
228
229
230 IF(iflag==1) THEN
239 IF(ifunc_old /= ifunc .OR. ts_old /= ts) THEN
240 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
241 IF(ismooth < 0 .AND. ifunc > 0) THEN
242 CALL python_call_funct1d(python, -ismooth,ts*fcx, t_inf)
243 ELSE
244 t_inf = finter(ifunc,ts*fcx,npc,tf,dydx)
245 ENDIF
246 ifunc_old = ifunc
247 ts_old = ts
248 ENDIF
249 t_inf = fcy*t_inf
250
251 IF(n4 > 0)THEN
252 nx= (x(2,n3)-x(2,n1))*(x(3,n4)-x(3,n2))
253 + -(x(3,n3)-x(3,n1))*(x(2,n4)-x(2,n2))
254 ny= (x(3,n3)-x(3,n1))*(x(1,n4)-x(1,n2))
255 + -(x(1,n3)-x(1,n1))*(x(3,n4)-x(3,n2))
256 nz= (x(1,n3)-x(1,n1))*(x(2,n4)-x(2,n2))
257 + -(x(2,n3)-x(2,n1))*(x(1,n4)-x(1,n2))
258 te = fourth*(temp(n1) + temp(n2) + temp(n3) + temp(n4))
259 area = half*sqrt( nx*nx + ny*ny + nz*nz)
260 flux =
area*emisig*(t_inf**4 - te**4)*dt1*glob_therm%THEACCFACT
261 heat_radia_l = heat_radia_l + flux
262 flux = fourth*flux
263
265 fthesky(iad1) = flux
267 fthesky(iad2) = flux
269 fthesky(iad3) = flux
271 fthesky(iad4) = flux
272
273 ELSEIF( n3 > 0) THEN
274
275 nx= (x(2,n3)-x(2,n1))*(x(3,n3)-x(3,n2))
276 + -(x(3,n3)-x(3,n1))*(x(2,n3)-x(2,n2))
277 ny= (x(3,n3)-x(3,n1))*(x(1,n3)-x(1,n2))
278 + -(x(1,n3)-x(1,n1))*(x(3,n3)-x(3,n2))
279 nz= (x(1,n3)-x(1,n1))*(x(2,n3)-x(2,n2))
280 + -(x(2,n3)-x(2,n1))*(x(1,n3)-x(1,n2))
281
282 te = third*(temp(n1) + temp(n2) + temp(n3) )
283 area = half*sqrt( nx*nx + ny*ny + nz*nz)
284 flux =
area*emisig*(t_inf**4 - te**4)*dt1*glob_therm%THEACCFACT
285 heat_radia_l = heat_radia_l + flux
286 flux = third*flux
287
289 fthesky(iad1) = flux
290
292 fthesky(iad2) = flux
293
295 fthesky(iad3) = flux
296
297 ELSE
298
299 ny= -x(3,n2)+x(3,n1)
300 nz= x(2,n2)-x(2,n1)
301
302
303 te = half*(temp(n1) + temp(n2) )
304 area = sqrt( ny*ny + nz*nz)
305 flux =
area*emisig*(t_inf**4 - te**4)*dt1*glob_therm%THEACCFACT
306 heat_radia_l = heat_radia_l + flux
307 flux = half*flux
308
310 fthesky(iad1) = flux
311
313 fthesky(iad2) = flux
314 ENDIF
315
316 ELSE
318 fthesky(iad1) = zero
320 fthesky(iad2) = zero
321 IF(n4 > 0)THEN
323 fthesky(iad3) = zero
325 fthesky(iad4) = zero
326 ELSEIF(n3 > 0)THEN
328 fthesky(iad3) = zero
329 ENDIF
330 ENDIF
331 ENDDO
332
333
334
335 glob_therm%HEAT_RADIA = glob_therm%HEAT_RADIA + heat_radia_l
336
337
338
339 ENDIF
340
341 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
character *2 function nl()