MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_global_parameters_common.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
2!>
3!! @file
4!! @brief Contains module m_global_parameters_common
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
7! This file exists so that Fypp can be run without generating case.fpp files for
8! each target. This is useful when generating documentation, for example. This
9! should also let MFC be built with CMake directly, without invoking mfc.sh.
10
11! For pre-process.
12# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 167 "/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# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70
71# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72
73# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74! New line at end of file is required for FYPP
75# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
76
77# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153! New line at end of file is required for FYPP
154# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
155# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
156# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
157# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166
167# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168
169# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172
173# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176
177# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178
179# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180
181# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182! New line at end of file is required for FYPP
183# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
184
185# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240! New line at end of file is required for FYPP
241# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
242
243! GPU parallel region (scalar reductions, maxval/minval)
244# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246! GPU parallel loop over threads (most common GPU macro)
247# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249! Required closing for GPU_PARALLEL_LOOP
250# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252! Mark routine for device compilation
253# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255! Declare device-resident data
256# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! Inner loop within a GPU parallel region
259# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Scoped GPU data region
262# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Host code with device pointers (for MPI with GPU buffers)
265# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Allocate device memory (unscoped)
268# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! Free device memory
271# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Atomic operation on device
274# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! End atomic capture block
277# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Copy data between host and device
280# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Synchronization barrier
283# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Import GPU library module (openacc or omp_lib)
286# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! Emit code only for AMD compiler
289# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Emit code for non-Cray compilers
292# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Emit code only for Cray compiler
295# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Emit code for non-NVIDIA compilers
298# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302! New line at end of file is required for FYPP
303# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
304
305# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
308! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
309! example see misc/nvidia_uvm/bind.sh.
310# 55 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312! Allocate and create GPU device memory
313# 75 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314
315! Free GPU device memory and deallocate
316# 83 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318! Cray-specific GPU pointer setup for vector fields
319# 107 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320
321! Cray-specific GPU pointer setup for scalar fields
322# 123 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324! Cray-specific GPU pointer setup for acoustic source spatials
325# 148 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326
327# 154 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
328
329# 161 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
330! New line at end of file is required for FYPP
331# 7 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp" 2
332
333!> @brief Shared global parameters and equation-index setup for all three executables. Each per-target m_global_parameters uses this
334!! module (default-public, so all symbols re-export to downstream consumers via two-hop use-association).
336
337#ifdef MFC_MPI
338 use mpi
339#endif
340
342 use m_thermochem, only: num_species
345
346 implicit none
347
348 ! All namelist-bound scalar and array declarations (per-target, regenerated at build time by the ninja custom command)
349# 1 "/home/runner/work/MFC/MFC/build/include/pre_process/generated_decls.fpp" 1
350! AUTO-GENERATED - do not edit directly. Regenerate: cmake reconfigure
351!
352real(wp) :: bx0
353real(wp) :: ca
354real(wp) :: r0ref
355real(wp) :: re_inv
356real(wp) :: web
357real(wp) :: a_x
358real(wp) :: a_y
359real(wp) :: a_z
360logical :: adv_n
362integer :: avg_state
365character(LEN=path_len) :: case_dir
366logical :: cfl_adap_dt
367logical :: cfl_const_dt
368logical :: cont_damage
369logical :: cyl_coord
370integer :: dist_type
371logical :: down_sample
374logical :: fft_wrt
375character(LEN=path_len) :: file_extension
377character(LEN=path_len) :: files_dir
378real(wp), dimension(num_fluids_max) :: fluid_rho
381logical :: ib
382logical :: igr
383integer :: igr_order
384integer :: loops_x
385integer :: loops_y
386integer :: loops_z
387integer :: m
388logical :: mhd
394logical :: mixture_err
395integer :: model_eqns
396logical :: mpp_lim
397integer :: muscl_order
398integer :: n
399integer :: n_start
400integer :: n_start_old
401integer :: nb
403integer :: num_fluids
404integer :: num_ibs
405integer :: num_patches
407logical :: old_grid
408logical :: old_ic
409integer :: p
410real(wp) :: palpha_eps
411logical :: parallel_io
412logical :: perturb_flow
415logical :: perturb_sph
417real(wp) :: pi_fac
418real(wp) :: poly_sigma
419logical :: polydisperse
420logical :: polytropic
421integer :: precision
422real(wp) :: ptgalpha_eps
423logical :: qbmm
425integer :: recon_type
426logical :: relativity
427logical :: relax
428integer :: relax_model
429real(wp) :: rhorv
431real(wp) :: sigr
432real(wp) :: sigv
433real(wp) :: sigma
435logical :: stretch_x
436logical :: stretch_y
437logical :: stretch_z
439integer :: t_step_old
440integer :: t_step_start
441integer :: thermal
442logical :: viscous
443integer :: weno_order
444real(wp) :: x_a
445real(wp) :: x_b
446real(wp) :: y_a
447real(wp) :: y_b
448real(wp) :: z_a
449real(wp) :: z_b
450type(physical_parameters), dimension(num_fluids_max) :: fluid_pp !< Per-fluid stiffened-gas EOS parameters, Reynolds numbers, and shear modulus
451type(subgrid_bubble_physical_parameters) :: bub_pp !< Subgrid bubble physical parameters
452type(ic_patch_parameters), dimension(num_patches_max) :: patch_icpp !< IC patch parameters
453type(bc_patch_parameters), dimension(num_bc_patches_max) :: patch_bc !< Boundary condition patch parameters
454type(ib_patch_parameters), dimension(num_ib_patches_max_namelist) :: patch_ib !< Immersed boundary patch parameters
455type(ib_airfoil_parameters), dimension(num_ib_airfoils_max) :: ib_airfoil !< Per-airfoil NACA user inputs
456type(ib_stl_parameters), dimension(num_stl_models_max) :: stl_models !< Per-STL model parameters
457type(reactive_burn_parameters) :: rburn !< Condensed-phase reactive-burn (programmed detonation) parameters
459# 25 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp" 2
460
461 ! Case-optimization declarations: parameters (under MFC_CASE_OPTIMIZATION) or plain variables for
462 ! num_dims, num_vels, weno_polyn, muscl_polyn, weno_num_stencils, wenojs, igr, etc.
463# 1 "/home/runner/work/MFC/MFC/build/include/pre_process/generated_case_opt_decls.fpp" 1
464! AUTO-GENERATED - do not edit directly. Regenerate: cmake reconfigure
465!
466integer :: num_dims
467integer :: num_vels
468integer :: weno_polyn
469integer :: muscl_polyn
470# 29 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp" 2
471
472 !> @name Annotations of the structure of the state and flux vectors in terms of the size and configuration of the system of
473 !! equations
474 !> @{
475 integer :: sys_size !< Number of unknowns in system of equations
476 type(eqn_idx_info) :: eqn_idx !< All conserved-variable equation index ranges and scalars
477 !> @}
478
479 !> @name Chemistry modeling (Fypp compile-time constant; same value in all targets)
480 !> @{
481 logical, parameter :: chemistry = .false.
482 !> @}
483
484 !> @name Hypoelastic shear stress state (identical across all three executables)
485 !> @{
486 integer :: shear_num !< Number of shear stress components
487 integer, dimension(3) :: shear_indices !< Indices of the stress components that represent shear stress
488 integer :: shear_bc_flip_num !< Number of shear stress components to reflect for boundary conditions
489 integer, dimension(3, 2) :: shear_bc_flip_indices !< Shear stress BC reflection indices (1:3, 1:shear_BC_flip_num)
490 !> @}
491
492 !> @name Material properties derived from fluid_pp
493 !> @{ One declaration is shared by all executables and initialized by m_variables_conversion after the case parameters have been
494 !! read.
495 real(wp), allocatable, dimension(:) :: gammas, gs_min, pi_infs, ps_inf, cvs, qvs, qvps
496
497# 54 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
498#if defined(MFC_OpenACC)
499# 54 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
500!$acc declare create(gammas, gs_min, pi_infs, ps_inf, cvs, qvs, qvps)
501# 54 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
502#elif defined(MFC_OpenMP)
503# 54 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
504!$omp declare target (gammas, gs_min, pi_infs, ps_inf, cvs, qvs, qvps)
505# 54 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
506#endif
507 !> @}
508
509 !> @name Fluids participating in shear and bulk viscosity
510 !> @{
511 integer, dimension(2) :: re_size = 0
512 integer :: re_size_max = 0
513 integer, allocatable, dimension(:,:) :: re_idx
514
515# 62 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
516#if defined(MFC_OpenACC)
517# 62 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
518!$acc declare create(Re_size, Re_size_max, Re_idx)
519# 62 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
520#elif defined(MFC_OpenMP)
521# 62 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
522!$omp declare target (Re_size, Re_size_max, Re_idx)
523# 62 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
524#endif
525 !> @}
526
527 !> Minimum cell widths. These are distinct from the per-cell width arrays named dx, dy, and dz in simulation and post-process.
528 real(wp) :: dx_min, dy_min, dz_min
529
530
531# 68 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
532#if defined(MFC_OpenACC)
533# 68 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
534!$acc declare create(sys_size, eqn_idx)
535# 68 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
536#elif defined(MFC_OpenMP)
537# 68 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
538!$omp declare target (sys_size, eqn_idx)
539# 68 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
540#endif
541
542# 69 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
543#if defined(MFC_OpenACC)
544# 69 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
545!$acc declare create(shear_num, shear_indices, shear_BC_flip_num, shear_BC_flip_indices)
546# 69 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
547#elif defined(MFC_OpenMP)
548# 69 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
549!$omp declare target (shear_num, shear_indices, shear_BC_flip_num, shear_BC_flip_indices)
550# 69 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
551#endif
552
553 !> @name Processor coordinates and parallel-IO addressing (identical declaration across all three targets)
554 !> @{
555 integer, allocatable, dimension(:) :: proc_coords !< Processor coordinates in MPI_CART_COMM
556 integer, allocatable, dimension(:) :: start_idx !< Starting cell-center index of local processor in global grid
557 integer :: num_procs_x = 1 !< Number of MPI ranks in x-direction
558 integer :: num_procs_y = 1 !< Number of MPI ranks in y-direction
559 integer :: num_procs_z = 1 !< Number of MPI ranks in z-direction
560 !> @}
561
562 !> @name MPI info for parallel IO with Lustre file systems (identical across all three targets)
563 !> @{
564 character(len=name_len) :: mpiiofs
565 integer :: mpi_info_int
566 !> @}
567
568contains
569
570 !> Initialize equation-index state (eqn_idx and sys_size) from the namelist parameters. This is the shared skeleton: it covers
571 !! the model_eqns dispatch, all eqn_idx field assignments, and the hypoelastic/surface-tension/chemistry extensions.
572 !!
573 !! @param nmom_in Number of carried moments per R0 location (per-target: pre/post pass an
574 !! integer variable; sim passes its integer parameter nmom = 6). Used only in the 5eq
575 !! qbmm bubble-index calculation (eqn_idx%bub%end = eqn_idx%adv%end + nb_in*nmom_in).
576 !!
577 !! Per-target callers are responsible for the following after this call:
578 !! - qbmm_idx allocations and fills (diverge between pre vs sim/post)
579 !! - sim-only: gam = bub_pp%gam_g, nmomsp/nmomtot, Re_idx allocation, GPU_UPDATE calls
580 !! - post-only: beta_idx increment (bubbles_lagrange path), offset/grid allocations
581 impure subroutine s_initialize_eqn_idx(nmom_in, nb_in, six_eqn_alf_is_advected)
582
583 integer, intent(in) :: nmom_in
584 integer, intent(in) :: nb_in
585 logical, intent(in) :: six_eqn_alf_is_advected
586
587 ! Gamma/Pi_inf Model
588
590 ! Annotating structure of the state and flux vectors belonging to the system of
591 ! equations defined by the selected number of spatial dimensions and the gamma/pi_inf model
592 eqn_idx%cont%beg = 1
593 eqn_idx%cont%end = eqn_idx%cont%beg
594 eqn_idx%mom%beg = eqn_idx%cont%end + 1
595 eqn_idx%mom%end = eqn_idx%cont%end + num_vels
596 eqn_idx%E = eqn_idx%mom%end + 1
597 eqn_idx%adv%beg = eqn_idx%E + 1
598 eqn_idx%adv%end = eqn_idx%adv%beg + 1
599 eqn_idx%gamma = eqn_idx%adv%beg
600 eqn_idx%pi_inf = eqn_idx%adv%end
601 sys_size = eqn_idx%adv%end
602
603 ! Volume Fraction Model (5-equation model)
604 else if (model_eqns == model_eqns_5eq) then
605 ! Annotating structure of the state and flux vectors belonging to the system of
606 ! equations defined by the selected number of spatial dimensions and the volume fraction model
607 eqn_idx%cont%beg = 1
608 eqn_idx%cont%end = num_fluids
609 eqn_idx%mom%beg = eqn_idx%cont%end + 1
610 eqn_idx%mom%end = eqn_idx%cont%end + num_vels
611 eqn_idx%E = eqn_idx%mom%end + 1
612
613 if (igr) then
614 ! IGR: volume fractions after energy (N-1 for N fluids; skipped when num_fluids=1)
615 eqn_idx%adv%beg = eqn_idx%E + 1
616 eqn_idx%adv%end = eqn_idx%E + num_fluids - 1
617 else
618 ! WENO/MUSCL + Riemann tracks a total of (N) volume fractions for N fluids
619 eqn_idx%adv%beg = eqn_idx%E + 1
620 eqn_idx%adv%end = eqn_idx%E + num_fluids
621 end if
622
623 sys_size = eqn_idx%adv%end
624
625 if (bubbles_euler) then
626 eqn_idx%alf = eqn_idx%adv%end
627 else
628 eqn_idx%alf = 1
629 end if
630
631 if (bubbles_euler) then
632 eqn_idx%bub%beg = sys_size + 1
633 if (qbmm) then
634 eqn_idx%bub%end = eqn_idx%adv%end + nb_in*nmom_in
635 else
636 if (.not. polytropic) then
637 eqn_idx%bub%end = sys_size + 4*nb_in
638 else
639 eqn_idx%bub%end = sys_size + 2*nb_in
640 end if
641 end if
642 sys_size = eqn_idx%bub%end
643
644 if (adv_n) then
645 eqn_idx%n = eqn_idx%bub%end + 1
646 sys_size = eqn_idx%n
647 end if
648 end if
649
650 if (mhd) then
651 eqn_idx%B%beg = sys_size + 1
652 if (n == 0) then
653 eqn_idx%B%end = sys_size + 2 ! 1D: By, Bz
654 else
655 eqn_idx%B%end = sys_size + 3 ! 2D/3D: Bx, By, Bz
656 end if
657 sys_size = eqn_idx%B%end
658 end if
659
660 ! Volume Fraction Model (6-equation model)
661 else if (model_eqns == model_eqns_6eq) then
662 ! Annotating structure of the state and flux vectors belonging to the system of
663 ! equations defined by the selected number of spatial dimensions and the volume fraction model
664 eqn_idx%cont%beg = 1
665 eqn_idx%cont%end = num_fluids
666 eqn_idx%mom%beg = eqn_idx%cont%end + 1
667 eqn_idx%mom%end = eqn_idx%cont%end + num_vels
668 eqn_idx%E = eqn_idx%mom%end + 1
669 eqn_idx%adv%beg = eqn_idx%E + 1
670 eqn_idx%adv%end = eqn_idx%E + num_fluids
671 if (six_eqn_alf_is_advected) eqn_idx%alf = eqn_idx%adv%end
672 eqn_idx%int_en%beg = eqn_idx%adv%end + 1
673 eqn_idx%int_en%end = eqn_idx%adv%end + num_fluids
674 sys_size = eqn_idx%int_en%end
675 end if
676
678 if (hypoelasticity) then
679 eqn_idx%stress%beg = sys_size + 1
680 eqn_idx%stress%end = sys_size + (num_dims*(num_dims + 1))/2
681 if (cyl_coord) eqn_idx%stress%end = eqn_idx%stress%end + 1
682 ! number of stresses is 1 in 1D, 3 in 2D, 4 in 2D-Axisym, 6 in 3D
683 sys_size = eqn_idx%stress%end
684
685 ! shear stress index is 2 for 2D and 2,4,5 for 3D
686 if (num_dims == 1) then
687 shear_num = 0
688 else if (num_dims == 2) then
689 shear_num = 1
690 shear_indices(1) = eqn_idx%stress%beg - 1 + 2
693 ! Both x-dir and y-dir: flip tau_xy only
694 else if (num_dims == 3) then
695 shear_num = 3
696 shear_indices(1:3) = eqn_idx%stress%beg - 1 + (/2, 4, 5/)
698 shear_bc_flip_indices(1,1:2) = shear_indices((/1, 2/))
699 shear_bc_flip_indices(2,1:2) = shear_indices((/1, 3/))
700 shear_bc_flip_indices(3,1:2) = shear_indices((/2, 3/))
701 ! x-dir: flip tau_xy and tau_xz; y-dir: flip tau_xy and tau_yz; z-dir: flip tau_xz and tau_yz
702 end if
703 end if
704
705 if (surface_tension) then
706 eqn_idx%c = sys_size + 1
707 sys_size = eqn_idx%c
708 end if
709
710 if (cont_damage) then
711 eqn_idx%damage = sys_size + 1
712 sys_size = eqn_idx%damage
713 end if
714
715 if (hyper_cleaning) then
716 eqn_idx%psi = sys_size + 1
717 sys_size = eqn_idx%psi
718 end if
719 end if
720
721 if (chemistry) then
722 eqn_idx%species%beg = sys_size + 1
723 eqn_idx%species%end = sys_size + num_species
724 sys_size = eqn_idx%species%end
725 end if
726
727 end subroutine s_initialize_eqn_idx
728
729 !> Configure MPI parallel I/O settings and allocate processor coordinate arrays. Shared across all three executables;
730 !! num_dims/num_vels are computed here for pre/post unconditionally and for sim only when not case-optimized (in which case they
731 !! are compile-time parameters). Callers must have already populated n and p (grid dimensions).
733
734#ifdef MFC_MPI
735 integer :: ierr !< Generic flag used to identify and report MPI errors
736#endif
737
738 ! Under case-optimization, num_dims and num_vels are compile-time parameters; skip assignment.
739# 258 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
740 num_dims = 1 + min(1, n) + min(1, p)
741
742 if (mhd) then
743 num_vels = 3
744 else
746 end if
747# 266 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
748
749 allocate (proc_coords(1:num_dims))
750
751 if (parallel_io .neqv. .true.) return
752
753#ifdef MFC_MPI
754 ! Option for Lustre file system (Darter/Comet/Stampede)
755 write (mpiiofs, '(A)') '/lustre_'
756 mpiiofs = trim(mpiiofs)
757 call mpi_info_create(mpi_info_int, ierr)
758 call mpi_info_set(mpi_info_int, 'romio_ds_write', 'disable', ierr)
759
760 ! Option for UNIX file system (Hooke/Thomson) WRITE(mpiiofs, '(A)') '/ufs_' mpiiofs = TRIM(mpiiofs) mpi_info_int =
761 ! MPI_INFO_NULL
762
763 allocate (start_idx(1:num_dims))
764#endif
765
767
768 !> Shared finalize core: deallocate proc_coords and start_idx. Per-target finalize routines call this first, then handle their
769 !! own extras (qbmm_idx, grid arrays, MPI_IO_DATA null/dealloc - those reference per-target typed variables and stay
770 !! per-target).
772
773 deallocate (proc_coords)
774
775#ifdef MFC_MPI
776 if (parallel_io) then
777 deallocate (start_idx)
778 end if
779#endif
780
782
783 !> Assign default values to the user-input parameters that are shared across all three executables (pre_process, simulation,
784 !! post_process). Per-target defaults (bc_io, cfl_dt, precision, nb, chem_params, bub_pp scalar companions, fluid_pp loop, patch
785 !! arrays, output flags) remain in the per-target s_assign_default_values_to_user_inputs routines, which call this subroutine
786 !! first, then call s_update_cell_bounds(cells_bounds, m, n, p) (cells_bounds is per-target), then apply their own assignments.
787 impure subroutine s_assign_common_defaults
788
789 ! Logistics
790 case_dir = '.'
791
792 ! Computational domain parameters (m/n/p set here; caller must call s_update_cell_bounds after)
793 m = dflt_int; n = 0; p = 0
794
795 cyl_coord = .false.
796
797 ! CFL adaptive time-stepping flags
798 cfl_adap_dt = .false.
799 cfl_const_dt = .false.
800
801 ! Time-stepping bookkeeping
804
805 ! Simulation algorithm
807 relax = .false.
809 hypoelasticity = .false.
810 cont_damage = .false.
811 hyper_cleaning = .false.
812
813 ! Condensed-phase reactive burn
814 reactive_burn = .false.
815 rburn%k = dflt_real
816 rburn%pign = dflt_real
817 rburn%pref = dflt_real
818 rburn%n = dflt_real
819 rburn%ta = 0._wp
820
821 ! Case-optimization params: under case-opt these are compile-time constants in sim (skip assignment); in pre/post
822 ! MFC_CASE_OPTIMIZATION is always False so the block always executes there.
823# 342 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
828 igr = .false.
830 mhd = .false.
831 relativity = .false.
832 viscous = .false.
833# 352 "/home/runner/work/MFC/MFC/src/common/m_global_parameters_common.fpp"
834
835 ! Not a case-optimization parameter, so it stays a runtime variable in every build.
837
838 ! Tait EOS
839
840 ! Bubble modeling flags and parameters
842 bubbles_euler = .false.
843 polydisperse = .false.
845 qbmm = .false.
846 surface_tension = .false.
847 adv_n = .false.
849 bubbles_lagrange = .false.
850
851 ! Immersed boundaries
852 ib = .false.
854
855 ! MHD (background field)
856 bx0 = dflt_real
857
858 ! Output and I/O options
859 parallel_io = .false.
860 file_per_process = .false.
861 down_sample = .false.
862 fft_wrt = .false.
863
864 ! Mixture conversion and sound-speed behavior
866 alt_soundspeed = .false.
867 mixture_err = .false.
872
873 end subroutine s_assign_common_defaults
874
Compile-time constant parameters: default values, tolerances, and physical constants.
integer, parameter model_eqns_5eq
integer, parameter name_len
Maximum name length.
integer, parameter dflt_int
Default integer value.
real(wp), parameter dflt_real
Default real value.
integer, parameter recon_type_muscl
integer, parameter recon_type_weno
integer, parameter model_eqns_6eq
integer, parameter model_eqns_gamma_law
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Shared global parameters and equation-index setup for all three executables. Each per-target m_global...
type(ib_stl_parameters), dimension(num_stl_models_max) stl_models
Per-STL model parameters.
integer, dimension(:), allocatable start_idx
Starting cell-center index of local processor in global grid.
impure subroutine s_finalize_global_parameters_common
Shared finalize core: deallocate proc_coords and start_idx. Per-target finalize routines call this fi...
type(ic_patch_parameters), dimension(num_patches_max) patch_icpp
IC patch parameters.
type(subgrid_bubble_physical_parameters) bub_pp
Subgrid bubble physical parameters.
integer shear_num
Number of shear stress components.
real(wp), dimension(:), allocatable qvs
real(wp), dimension(:), allocatable gammas
integer sys_size
Number of unknowns in system of equations.
real(wp), dimension(:), allocatable gs_min
real(wp) dx_min
Minimum cell widths. These are distinct from the per-cell width arrays named dx, dy,...
integer num_procs_y
Number of MPI ranks in y-direction.
integer, dimension(:,:), allocatable re_idx
type(physical_parameters), dimension(num_fluids_max) fluid_pp
Per-fluid stiffened-gas EOS parameters, Reynolds numbers, and shear modulus.
integer shear_bc_flip_num
Number of shear stress components to reflect for boundary conditions.
type(bc_patch_parameters), dimension(num_bc_patches_max) patch_bc
Boundary condition patch parameters.
real(wp), dimension(:), allocatable cvs
integer, dimension(:), allocatable proc_coords
Processor coordinates in MPI_CART_COMM.
integer num_procs_x
Number of MPI ranks in x-direction.
type(eqn_idx_info) eqn_idx
All conserved-variable equation index ranges and scalars.
integer num_procs_z
Number of MPI ranks in z-direction.
integer, dimension(3, 2) shear_bc_flip_indices
Shear stress BC reflection indices (1:3, 1:shear_BC_flip_num).
real(wp), dimension(num_fluids_max) fluid_rho
type(ib_patch_parameters), dimension(num_ib_patches_max_namelist) patch_ib
Immersed boundary patch parameters.
impure subroutine s_initialize_parallel_io_common
Configure MPI parallel I/O settings and allocate processor coordinate arrays. Shared across all three...
real(wp), dimension(:), allocatable qvps
real(wp), dimension(:), allocatable pi_infs
type(ib_airfoil_parameters), dimension(num_ib_airfoils_max) ib_airfoil
Per-airfoil NACA user inputs.
impure subroutine s_assign_common_defaults
Assign default values to the user-input parameters that are shared across all three executables (pre_...
integer, dimension(3) shear_indices
Indices of the stress components that represent shear stress.
type(reactive_burn_parameters) rburn
Condensed-phase reactive-burn (programmed detonation) parameters.
real(wp), dimension(:), allocatable ps_inf
impure subroutine s_initialize_eqn_idx(nmom_in, nb_in, six_eqn_alf_is_advected)
Initialize equation-index state (eqn_idx and sys_size) from the namelist parameters....
All conserved-variable equation indices, computed at startup from model_eqns and enabled features....
User-input parameters for a NACA 4-digit airfoil (namelist-safe: scalars only).
User-input parameters for an STL/OBJ immersed boundary model (namelist-safe: scalars + fixed arrays).
Derived type adding initial condition (ic) patch parameters as attributes NOTE: The requirements for ...
Derived type annexing the physical parameters (PP) of the fluids. These include the specific heat rat...
Condensed-phase reactive-burn (programmed pressure detonation) parameters. The rate is dlambda/dt = k...
Derived type annexing the physical parameters required for sub-grid bubble models.