MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_conduction.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
2!>
3!! @file
4!! @brief Contains module m_conduction
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
21! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
22! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
23# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
24# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
25# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
26
27# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45! New line at end of file is required for FYPP
46# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
47# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
48# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
49# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54
55# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
61! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
62! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
63# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
64# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
65# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
66
67# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69
70# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71
72# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
73
74# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
75
76# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
77
78# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
79
80# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
81
82# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
83
84# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
85! New line at end of file is required for FYPP
86# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
87
88# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150
151# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152
153# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154
155# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
156
157# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
158
159# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
160
161# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
162
163# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
164! New line at end of file is required for FYPP
165# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
166# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
167# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
168# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173
174# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177
178# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
180! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
181! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
182# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
183# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
184# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
185
186# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
187# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
188
189# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190
191# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
192
193# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
194
195# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
196
197# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
198
199# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
200
201# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
202
203# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
204! New line at end of file is required for FYPP
205# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
206
207# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252
253# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
254
255# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
256
257# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
258
259# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
260
261# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
262! New line at end of file is required for FYPP
263# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
264
265! GPU parallel region (scalar reductions, maxval/minval)
266# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! GPU parallel loop over threads (most common GPU macro)
269# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Required closing for GPU_PARALLEL_LOOP
272# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Mark routine for device compilation
275# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Declare device-resident data
278# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Inner loop within a GPU parallel region
281# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Scoped GPU data region
284# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Host code with device pointers (for MPI with GPU buffers)
287# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289! Allocate device memory (unscoped)
290# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291
292! Free device memory
293# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294
295! Atomic operation on device
296# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297
298! End atomic capture block
299# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
300
301! Copy data between host and device
302# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
303
304! Synchronization barrier
305# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
306
307! Import GPU library module (openacc or omp_lib)
308# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
309
310! Emit code only for AMD compiler
311# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
312
313! Emit code for non-Cray compilers
314# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
315
316! Emit code only for Cray compiler
317# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
318
319! Emit code for non-NVIDIA compilers
320# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
321
322# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
323# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
324! New line at end of file is required for FYPP
325# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
326
327# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
328
329! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
330! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
331! example see misc/nvidia_uvm/bind.sh.
332# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
333
334! Allocate and create GPU device memory
335# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
336
337! Free GPU device memory and deallocate
338# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
339
340! Cray-specific GPU pointer setup for vector fields
341# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
342
343! Cray-specific GPU pointer setup for scalar fields
344# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
345
346! Cray-specific GPU pointer setup for acoustic source spatials
347# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
348
349# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
350
351# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
352! New line at end of file is required for FYPP
353# 6 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp" 2
354# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
355! This file exists so that Fypp can be run without generating case.fpp files for
356! each target. This is useful when generating documentation, for example. This
357! should also let MFC be built with CMake directly, without invoking mfc.sh.
358
359! For pre-process.
360# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
361
362! For moving immersed boundaries in simulation
363# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
364# 7 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp" 2
365
366!> @brief Fourier heat conduction, div(k grad T), as a face-centered source flux on the energy equation. The term has no
367!! cross-derivatives, so the direction-split face difference below is exact for it.
369
371
372 implicit none
373
375
376 type(int_bounds_info) :: isc1, isc2, isc3
377
378# 19 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
379#if defined(MFC_OpenACC)
380# 19 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
381!$acc declare create(isc1, isc2, isc3)
382# 19 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
383#elif defined(MFC_OpenMP)
384# 19 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
385!$omp declare target (isc1, isc2, isc3)
386# 19 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
387#endif
388# 20 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
389 integer, dimension(3) :: offsets_c
390
391# 21 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
392#if defined(MFC_OpenACC)
393# 21 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
394!$acc declare create(offsets_c)
395# 21 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
396#elif defined(MFC_OpenMP)
397# 21 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
398!$omp declare target (offsets_c)
399# 21 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
400#endif
401# 22 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
402
403contains
404
405 !> Accumulate -k*dT/dx_idir into the energy source flux at each idir-normal face.
406 subroutine s_compute_conduction_source_flux(idir, q_prim_qp, q_T_sf, flux_src_vf, irx, iry, irz)
407
408 integer, intent(in) :: idir
409 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_qp
410 type(scalar_field), intent(in) :: q_t_sf
411 type(scalar_field), dimension(sys_size), intent(inout) :: flux_src_vf
412 type(int_bounds_info), intent(in) :: irx, iry, irz
413 real(wp) :: k_face, dt_dxi, grid_spacing, alpha_face
414 integer :: x, y, z, i
415
416 isc1 = irx; isc2 = iry; isc3 = irz
417 offsets_c = 0
418 offsets_c(idir) = 1
419
420
421# 40 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
422#if defined(MFC_OpenACC)
423# 40 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
424!$acc update device(isc1, isc2, isc3, offsets_c)
425# 40 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
426#elif defined(MFC_OpenMP)
427# 40 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
428!$omp target update to(isc1, isc2, isc3, offsets_c)
429# 40 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
430#endif
431# 41 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
432
433
434# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
435
436# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
437#if defined(MFC_OpenACC)
438# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
439!$acc parallel loop collapse(3) gang vector default(present) private(k_face, dT_dxi, grid_spacing, alpha_face, i)
440# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
441#elif defined(MFC_OpenMP)
442# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
443
444# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
445
446# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
447
448# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
449!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
450# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
451!$omp& private(k_face, dT_dxi, grid_spacing, alpha_face, i)
452# 42 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
453#endif
454# 43 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
455 do z = isc3%beg, isc3%end
456 do y = isc2%beg, isc2%end
457 do x = isc1%beg, isc1%end
458 select case (idir)
459 case (1)
460 grid_spacing = x_cc(x + 1) - x_cc(x)
461 case (2)
462 grid_spacing = y_cc(y + 1) - y_cc(y)
463 case (3)
464 grid_spacing = z_cc(z + 1) - z_cc(z)
465 ! 3D cylindrical z is the azimuth: dz is in radians. The r**2 carries both metric
466 ! factors of (1/r**2) d2T/dtheta2, since m_rhs divides this flux by dz alone.
467 if (grid_geometry == 3) grid_spacing = y_cc(y)**2*grid_spacing
468 end select
469
470 ! Volume-fraction-weighted face conductivity. Raw cell-centered alphas over- and
471 ! undershoot near interfaces, so clamp the face average as the viscous path does.
472 k_face = 0._wp
473
474# 61 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
475#if defined(MFC_OpenACC)
476# 61 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
477!$acc loop seq
478# 61 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
479#elif defined(MFC_OpenMP)
480# 61 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
481
482# 61 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
483#endif
484# 62 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
485 do i = 1, num_fluids
486 alpha_face = 0.5_wp*(q_prim_qp(eqn_idx%adv%beg + i - 1)%sf(x, y, &
487 & z) + q_prim_qp(eqn_idx%adv%beg + i - 1)%sf(x + offsets_c(1), y + offsets_c(2), &
488 & z + offsets_c(3)))
489 alpha_face = min(max(alpha_face, 0._wp), 1._wp)
490 k_face = k_face + alpha_face*fluid_k_therm(i)
491 end do
492
493 dt_dxi = (q_t_sf%sf(x + offsets_c(1), y + offsets_c(2), z + offsets_c(3)) - q_t_sf%sf(x, y, z))/grid_spacing
494
495 flux_src_vf(eqn_idx%E)%sf(x, y, z) = flux_src_vf(eqn_idx%E)%sf(x, y, z) - k_face*dt_dxi
496 end do
497 end do
498 end do
499
500# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
501#if defined(MFC_OpenACC)
502# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
503!$acc end parallel loop
504# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
505#elif defined(MFC_OpenMP)
506# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
507
508# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
509!$omp end target teams loop
510# 76 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
511#endif
512# 77 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
513
515
516 !> Cell-centered -k*dT/dr for the axis cell of a cylindrical grid. The generic geometric source in m_rhs uses face values of
517 !! flux_src(E) in this role; the axis cell has no face pair, so it reads tau_Re_vf(E) instead. Accumulates: call after
518 !! s_compute_viscous_stress_cylindrical_boundary, which zeroes tau_Re_vf(mom%beg:E); without viscosity this routine does that
519 !! zeroing itself.
520 subroutine s_compute_conduction_axis_source(q_prim_vf, q_T_sf, tau_Re_vf, ix, iy, iz)
521
522 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
523 type(scalar_field), intent(in) :: q_t_sf
524 type(scalar_field), dimension(1:sys_size), intent(inout) :: tau_re_vf
525 type(int_bounds_info), intent(in) :: ix, iy, iz
526 real(wp) :: k_cell, dt_dr, dr_l, dr_r, alpha_cell
527 integer :: j, k, l, i
528
529 isc1 = ix; isc2 = iy; isc3 = iz
530
531# 94 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
532#if defined(MFC_OpenACC)
533# 94 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
534!$acc update device(isc1, isc2, isc3)
535# 94 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
536#elif defined(MFC_OpenMP)
537# 94 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
538!$omp target update to(isc1, isc2, isc3)
539# 94 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
540#endif
541# 95 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
542
543 if (.not. viscous) then
544
545# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
546
547# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
548#if defined(MFC_OpenACC)
549# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
550!$acc parallel loop collapse(3) gang vector default(present) private(i)
551# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
552#elif defined(MFC_OpenMP)
553# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
554
555# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
556
557# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
558
559# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
560!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i)
561# 97 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
562#endif
563# 98 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
564 do l = isc3%beg, isc3%end
565 do k = isc2%beg, isc2%end
566 do j = isc1%beg, isc1%end
567
568# 101 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
569#if defined(MFC_OpenACC)
570# 101 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
571!$acc loop seq
572# 101 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
573#elif defined(MFC_OpenMP)
574# 101 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
575
576# 101 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
577#endif
578# 102 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
579 do i = eqn_idx%mom%beg, eqn_idx%E
580 tau_re_vf(i)%sf(j, k, l) = 0._wp
581 end do
582 end do
583 end do
584 end do
585
586# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
587#if defined(MFC_OpenACC)
588# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
589!$acc end parallel loop
590# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
591#elif defined(MFC_OpenMP)
592# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
593
594# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
595!$omp end target teams loop
596# 108 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
597#endif
598# 109 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
599 end if
600
601
602# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
603
604# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
605#if defined(MFC_OpenACC)
606# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
607!$acc parallel loop collapse(3) gang vector default(present) private(k_cell, dT_dr, dr_l, dr_r, alpha_cell, i)
608# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
609#elif defined(MFC_OpenMP)
610# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
611
612# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
613
614# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
615
616# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
617!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
618# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
619!$omp& private(k_cell, dT_dr, dr_l, dr_r, alpha_cell, i)
620# 111 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
621#endif
622# 112 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
623 do l = isc3%beg, isc3%end
624 do k = isc2%beg + 1, isc2%end - 1
625 do j = isc1%beg, isc1%end
626 k_cell = 0._wp
627
628# 116 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
629#if defined(MFC_OpenACC)
630# 116 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
631!$acc loop seq
632# 116 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
633#elif defined(MFC_OpenMP)
634# 116 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
635
636# 116 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
637#endif
638# 117 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
639 do i = 1, num_fluids
640 alpha_cell = min(max(q_prim_vf(eqn_idx%adv%beg + i - 1)%sf(j, k, l), 0._wp), 1._wp)
641 k_cell = k_cell + alpha_cell*fluid_k_therm(i)
642 end do
643
644 ! Distance-weighted central difference. The axisymmetric grid halves the cell at
645 ! r = 0, so the plain form would be only first order over exactly this stencil.
646 dr_l = y_cc(k) - y_cc(k - 1)
647 dr_r = y_cc(k + 1) - y_cc(k)
648 dt_dr = ((q_t_sf%sf(j, k, l) - q_t_sf%sf(j, k - 1, l))*dr_r/dr_l + (q_t_sf%sf(j, k + 1, l) - q_t_sf%sf(j, k, &
649 & l))*dr_l/dr_r)/(dr_l + dr_r)
650
651 tau_re_vf(eqn_idx%E)%sf(j, k, l) = tau_re_vf(eqn_idx%E)%sf(j, k, l) - k_cell*dt_dr
652 end do
653 end do
654 end do
655
656# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
657#if defined(MFC_OpenACC)
658# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
659!$acc end parallel loop
660# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
661#elif defined(MFC_OpenMP)
662# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
663
664# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
665!$omp end target teams loop
666# 133 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
667#endif
668# 134 "/home/runner/work/MFC/MFC/src/simulation/m_conduction.fpp"
669
671
672end module m_conduction
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Fourier heat conduction, div(k grad T), as a face-centered source flux on the energy equation....
type(int_bounds_info) isc3
type(int_bounds_info) isc2
integer, dimension(3) offsets_c
type(int_bounds_info) isc1
subroutine, public s_compute_conduction_axis_source(q_prim_vf, q_t_sf, tau_re_vf, ix, iy, iz)
Cell-centered -k*dT/dr for the axis cell of a cylindrical grid. The generic geometric source in m_rhs...
subroutine, public s_compute_conduction_source_flux(idir, q_prim_qp, q_t_sf, flux_src_vf, irx, iry, irz)
Accumulate -k*dT/dx_idir into the energy source flux at each idir-normal face.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp), dimension(:), allocatable, target y_cc
real(wp), dimension(:), allocatable, target z_cc
real(wp), dimension(:), allocatable, target x_cc