MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_checker.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
2!>
3!!@file
4!!@brief Contains module m_checker
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# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32
33# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34! New line at end of file is required for FYPP
35# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
36# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
37# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
38# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63! New line at end of file is required for FYPP
64# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
65
66# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142! New line at end of file is required for FYPP
143# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
144# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
145# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
146# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165
166# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171! New line at end of file is required for FYPP
172# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
173
174# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229! New line at end of file is required for FYPP
230# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
231
232! GPU parallel region (scalar reductions, maxval/minval)
233# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! GPU parallel loop over threads (most common GPU macro)
236# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Required closing for GPU_PARALLEL_LOOP
239# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Mark routine for device compilation
242# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Declare device-resident data
245# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Inner loop within a GPU parallel region
248# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Scoped GPU data region
251# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Host code with device pointers (for MPI with GPU buffers)
254# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Allocate device memory (unscoped)
257# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Free device memory
260# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Atomic operation on device
263# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! End atomic capture block
266# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Copy data between host and device
269# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Synchronization barrier
272# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Import GPU library module (openacc or omp_lib)
275# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for AMD compiler
278# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-Cray compilers
281# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Emit code only for Cray compiler
284# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Emit code for non-NVIDIA compilers
287# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291! New line at end of file is required for FYPP
292# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
293
294# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
295
296! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
297! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
298! example see misc/nvidia_uvm/bind.sh.
299# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Allocate and create GPU device memory
302# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Free GPU device memory and deallocate
305# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for vector fields
308# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310! Cray-specific GPU pointer setup for scalar fields
311# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Cray-specific GPU pointer setup for acoustic source spatials
314# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
319! New line at end of file is required for FYPP
320# 6 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp" 2
321# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
322! This file exists so that Fypp can be run without generating case.fpp files for
323! each target. This is useful when generating documentation, for example. This
324! should also let MFC be built with CMake directly, without invoking mfc.sh.
325
326! For pre-process.
327# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
328
329! For moving immersed boundaries in simulation
330# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
331# 7 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp" 2
332
333!> @brief Validates simulation input parameters for consistency and supported configurations
335
337 use m_mpi_proxy
338 use m_helper
341
342 implicit none
343
344 private; public :: s_check_inputs
345
346contains
347
348 !> Checks compatibility of parameters in the input file. Used by the simulation stage
349 impure subroutine s_check_inputs
350
352
353 if (igr) then
355 else
356 if (recon_type == recon_type_weno) then
358 else if (recon_type == recon_type_muscl) then
360 end if
361 end if
362
364
365 if (chemistry .and. chem_params%reaction_substeps < 0) then
366# 40 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
367 call s_prohibit_abort(.and."chemistry chem_params%reaction_substeps < 0", "chem_params%reaction_substeps must be >= 0 (0 = reaction source in the flow RHS; > 0 = operator-split sub-stepping)")
368# 40 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
369 end if
370# 42 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
371
372 if (chemistry .and. igr .and. chem_params%reaction_substeps > 0) then
373# 43 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
374 call s_prohibit_abort(.and..and."chemistry igr chem_params%reaction_substeps > 0", "operator-split reaction sub-stepping (reaction_substeps > 0) is not supported with igr: the reactor reads the post-flow (rho, e, T) state, which the IGR update path does not guarantee")
375# 43 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
376 end if
377# 45 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
378
379 if (chemistry .and. chem_params%adap_substeps .and. chem_params%reaction_substeps < 1) then
380# 46 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
381 call s_prohibit_abort(.and..and."chemistry chem_params%adap_substeps chem_params%reaction_substeps < 1", "chem_params%adap_substeps requires reaction_substeps >= 1 (the operator-split floor)")
382# 46 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
383 end if
384# 48 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
385
386 if (chemistry .and. chem_params%adap_substeps .and. chem_params%reaction_substeps_max < chem_params%reaction_substeps) then
387# 49 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
388 call s_prohibit_abort(.and..and."chemistry chem_params%adap_substeps chem_params%reaction_substeps_max < chem_params%reaction_substeps", "chem_params%reaction_substeps_max must be >= reaction_substeps when adap_substeps = T")
389# 49 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
390 end if
391# 52 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
392
393 if (ib_state_wrt .and. .not. ib) then
394# 53 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
395 call s_prohibit_abort(.and..not."ib_state_wrt ib", "ib_state_wrt requires ib to be enabled")
396# 53 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
397 end if
398 if (many_ib_patch_parallelism .and. .not. ib) then
399# 54 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
400 call s_prohibit_abort(.and..not."many_ib_patch_parallelism ib", "many_ib_patch_parallelism requires ib to be enabled")
401# 54 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
402 end if
403
404 if (bf_spatial_support .and. (n == 0 .or. p /= 0)) then
405# 56 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
406 call s_prohibit_abort(.and..or."bf_spatial_support (n == 0 p /= 0)", "bf_spatial_support is implemented for 2D only (it forces mom%beg and mom%beg+1)")
407# 56 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
408 end if
409# 58 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
410
411 if (num_particle_clouds > 0) then
413 end if
414
415 if (synthetic_turbulence) then
417 end if
418
419 end subroutine s_check_inputs
420
421 !> Checks constraints on compiler options
422 impure subroutine s_check_inputs_compilers
423
424#if !defined(MFC_OpenACC) && !(defined(__PGI) || defined(_CRAYFTN))
425 if (rdma_mpi) then
426# 73 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
427 call s_prohibit_abort("rdma_mpi", "Unsupported value of rdma_mpi for the current compiler")
428# 73 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
429 end if
430#endif
431
432 end subroutine s_check_inputs_compilers
433
434 !> Checks constraints on WENO scheme parameters
435 impure subroutine s_check_inputs_weno
436
437 character(len=5) :: numstr !< for int to string conversion
438
439 call s_int_to_str(num_stcls_min*weno_order, numstr)
440 if (m + 1 < num_stcls_min*weno_order) then
441# 84 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
442 call s_prohibit_abort("m + 1 < num_stcls_min*weno_order", "m must be greater than or equal to (num_stcls_min*weno_order - 1), whose value is " // trim(numstr))
443# 84 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
444 end if
445# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
446 if (n + 1 < min(1, n)*num_stcls_min*weno_order) then
447# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
448 call s_prohibit_abort("n + 1 < min(1, n)*num_stcls_min*weno_order", "For 2D simulation, n must be greater than or equal to (num_stcls_min*weno_order - 1), whose value is " // trim(numstr))
449# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
450 end if
451# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
452 if (p + 1 < min(1, p)*num_stcls_min*weno_order) then
453# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
454 call s_prohibit_abort("p + 1 < min(1, p)*num_stcls_min*weno_order", "For 3D simulation, p must be greater than or equal to (num_stcls_min*weno_order - 1), whose value is " // trim(numstr))
455# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
456 end if
457# 92 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
458
459 end subroutine s_check_inputs_weno
460
461 !> Validate that the grid resolution is sufficient for the MUSCL reconstruction order
462 impure subroutine s_check_inputs_muscl
463
464 character(len=5) :: numstr !< for int to string conversion
465
466 call s_int_to_str(num_stcls_min*muscl_order, numstr)
467 if (m + 1 < num_stcls_min*muscl_order) then
468# 101 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
469 call s_prohibit_abort("m + 1 < num_stcls_min*muscl_order", "m must be greater than or equal to (num_stcls_min*muscl_order - 1), whose value is " // trim(numstr))
470# 101 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
471 end if
472# 103 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
473 if (n + 1 < min(1, n)*num_stcls_min*muscl_order) then
474# 103 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
475 call s_prohibit_abort("n + 1 < min(1, n)*num_stcls_min*muscl_order", "For 2D simulation, n must be greater than or equal to (num_stcls_min*muscl_order - 1), whose value is " // trim(numstr))
476# 103 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
477 end if
478# 106 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
479 if (p + 1 < min(1, p)*num_stcls_min*muscl_order) then
480# 106 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
481 call s_prohibit_abort("p + 1 < min(1, p)*num_stcls_min*muscl_order", "For 3D simulation, p must be greater than or equal to (num_stcls_min*muscl_order - 1), whose value is " // trim(numstr))
482# 106 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
483 end if
484# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
485 if (muscl_order == muscl_order_first_order .and. int_comp > 0) then
486# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
487 call s_prohibit_abort(.and."muscl_order == muscl_order_first_order int_comp > 0", "int_comp requires muscl_order >= 2 (muscl_order=1 leaves the reconstruction workspace uninitialised)")
488# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
489 end if
490# 111 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
491
492 end subroutine s_check_inputs_muscl
493
494 !> Checks constraints on time stepping parameters
496
497 if (.not. cfl_dt) then
498 if (dt <= 0) then
499# 118 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
500 call s_prohibit_abort("dt <= 0", "")
501# 118 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
502 end if
503 end if
504
505 end subroutine s_check_inputs_time_stepping
506
507 !> Validate NVIDIA unified virtual memory configuration parameters
509
510#ifdef __NVCOMPILER_GPU_UNIFIED_MEM
511 if (nv_uvm_igr_temps_on_gpu > 3 .or. nv_uvm_igr_temps_on_gpu < 0) then
512# 127 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
513 call s_prohibit_abort(.or."nv_uvm_igr_temps_on_gpu > 3 nv_uvm_igr_temps_on_gpu < 0", "nv_uvm_igr_temps_on_gpu must be in the range [0, 3]")
514# 127 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
515 end if
516# 129 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
517 if (nv_uvm_igr_temps_on_gpu == 3 .and. igr_iter_solver == 2) then
518# 129 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
519 call s_prohibit_abort(.and."nv_uvm_igr_temps_on_gpu == 3 igr_iter_solver == 2", "nv_uvm_igr_temps_on_gpu must be in the range [0, 2] for igr_iter_solver == 2")
520# 129 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
521 end if
522# 131 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
523#endif
524
525 end subroutine s_check_inputs_nvidia_uvm
526
527 !> Checks that each active particle cloud has a valid packing_method specified
529
530 integer :: i
531 character(len=5) :: idxstr
532
533 do i = 1, num_particle_clouds
534 call s_int_to_str(i, idxstr)
535 if (particle_cloud(i)%packing_method == dflt_int) then
536# 143 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
537 call s_prohibit_abort("particle_cloud(i)%packing_method == dflt_int", "particle_cloud("//trim(idxstr) //")%packing_method must be specified (1 = rejection sampling, 2 = lattice)")
538# 143 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
539 end if
540# 146 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
541 if (particle_cloud(i)%packing_method /= 1 .and. particle_cloud(i)%packing_method /= 2) then
542# 146 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
543 call s_prohibit_abort(.and."particle_cloud(i)%packing_method /= 1 particle_cloud(i)%packing_method /= 2", "particle_cloud("//trim(idxstr) //")%packing_method must be 1 (rejection sampling) or 2 (lattice)")
544# 146 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
545 end if
546# 148 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
547 end do
548
549 end subroutine s_check_inputs_particle_clouds
550
551 !> Checks that each active synthetic-turbulence forcing zone has a fully specified position and a positive size in every active
552 !! dimension
554
555 integer :: i, d
556 character(len=5) :: idxstr
557
558 if (num_turbulent_sources <= 0) then
559# 159 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
560 call s_prohibit_abort("num_turbulent_sources <= 0", "num_turbulent_sources must be > 0 when synthetic_turbulence is enabled")
561# 159 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
562 end if
563
564 do i = 1, num_turbulent_sources
565 call s_int_to_str(i, idxstr)
566 do d = 1, num_dims
567 if (f_is_default(turb_pos(i, d))) then
568# 164 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
569 call s_prohibit_abort("f_is_default(turb_pos(i, d))", "turb_pos("//trim(idxstr) //",:) must be specified for all num_dims when synthetic_turbulence is enabled")
570# 164 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
571 end if
572# 167 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
573 if (f_is_default(synth_l(i, d)) .or. synth_l(i, d) <= 0._wp) then
574# 167 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
575 call s_prohibit_abort(.or."f_is_default(synth_L(i, d)) synth_L(i, d) <= 0._wp", "synth_L("//trim(idxstr)//",:) must be positive for all num_dims when synthetic_turbulence is enabled")
576# 167 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
577 end if
578# 169 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
579 end do
580 end do
581
583
584end module m_checker
Validates simulation input parameters for consistency and supported configurations.
impure subroutine, public s_check_inputs
Checks compatibility of parameters in the input file. Used by the simulation stage.
impure subroutine s_check_inputs_time_stepping
Checks constraints on time stepping parameters.
impure subroutine s_check_inputs_particle_clouds
Checks that each active particle cloud has a valid packing_method specified.
impure subroutine s_check_inputs_weno
Checks constraints on WENO scheme parameters.
impure subroutine s_check_inputs_synthetic_turbulence
Checks that each active synthetic-turbulence forcing zone has a fully specified position and a positi...
impure subroutine s_check_inputs_muscl
Validate that the grid resolution is sufficient for the MUSCL reconstruction order.
impure subroutine s_check_inputs_compilers
Checks constraints on compiler options.
impure subroutine s_check_inputs_nvidia_uvm
Validate NVIDIA unified virtual memory configuration parameters.
Compile-time constant parameters: default values, tolerances, and physical constants.
integer, parameter dflt_int
Default integer value.
integer, parameter num_stcls_min
Minimum # of stencils.
integer, parameter recon_type_muscl
integer, parameter muscl_order_first_order
integer, parameter recon_type_weno
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp), dimension(num_turb_sources_max, 3) turb_pos
real(wp), dimension(num_turb_sources_max, 3) synth_l
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical elemental function, public f_is_default(var)
Check if a real(wp) variable is of default value.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
elemental subroutine, public s_int_to_str(i, res)
Convert an integer to its trimmed string representation.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.