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