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. NVIDIA unified memory page placement hint
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 (ib_state_wrt .and. .not. ib) then
366# 40 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
367 call s_prohibit_abort(.and..not."ib_state_wrt ib", "ib_state_wrt requires ib to be enabled")
368# 40 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
369 end if
370 if (many_ib_patch_parallelism .and. .not. ib) then
371# 41 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
372 call s_prohibit_abort(.and..not."many_ib_patch_parallelism ib", "many_ib_patch_parallelism requires ib to be enabled")
373# 41 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
374 end if
375
376 if (num_particle_clouds > 0) then
378 end if
379
380 end subroutine s_check_inputs
381
382 !> Checks constraints on compiler options
383 impure subroutine s_check_inputs_compilers
384
385#if !defined(MFC_OpenACC) && !(defined(__PGI) || defined(_CRAYFTN))
386 if (rdma_mpi) then
387# 53 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
388 call s_prohibit_abort("rdma_mpi", "Unsupported value of rdma_mpi for the current compiler")
389# 53 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
390 end if
391#endif
392
393 end subroutine s_check_inputs_compilers
394
395 !> Checks constraints on WENO scheme parameters
396 impure subroutine s_check_inputs_weno
397
398 character(len=5) :: numstr !< for int to string conversion
399
400 call s_int_to_str(num_stcls_min*weno_order, numstr)
401 if (m + 1 < num_stcls_min*weno_order) then
402# 64 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
403 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))
404# 64 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
405 end if
406# 66 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
407 if (n + 1 < min(1, n)*num_stcls_min*weno_order) then
408# 66 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
409 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))
410# 66 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
411 end if
412# 69 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
413 if (p + 1 < min(1, p)*num_stcls_min*weno_order) then
414# 69 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
415 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))
416# 69 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
417 end if
418# 72 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
419
420 end subroutine s_check_inputs_weno
421
422 !> Validate that the grid resolution is sufficient for the MUSCL reconstruction order
423 impure subroutine s_check_inputs_muscl
424
425 character(len=5) :: numstr !< for int to string conversion
426
427 call s_int_to_str(num_stcls_min*muscl_order, numstr)
428 if (m + 1 < num_stcls_min*muscl_order) then
429# 81 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
430 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))
431# 81 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
432 end if
433# 83 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
434 if (n + 1 < min(1, n)*num_stcls_min*muscl_order) then
435# 83 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
436 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))
437# 83 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
438 end if
439# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
440 if (p + 1 < min(1, p)*num_stcls_min*muscl_order) then
441# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
442 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))
443# 86 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
444 end if
445# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
446 if (muscl_order == muscl_order_first_order .and. int_comp > 0) then
447# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
448 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)")
449# 89 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
450 end if
451# 91 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
452
453 end subroutine s_check_inputs_muscl
454
455 !> Checks constraints on time stepping parameters
457
458 if (.not. cfl_dt) then
459 if (dt <= 0) then
460# 98 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
461 call s_prohibit_abort("dt <= 0", "")
462# 98 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
463 end if
464 end if
465
466 end subroutine s_check_inputs_time_stepping
467
468 !> Validate NVIDIA unified virtual memory configuration parameters
470
471#ifdef __NVCOMPILER_GPU_UNIFIED_MEM
472 if (nv_uvm_igr_temps_on_gpu > 3 .or. nv_uvm_igr_temps_on_gpu < 0) then
473# 107 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
474 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]")
475# 107 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
476 end if
477# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
478 if (nv_uvm_igr_temps_on_gpu == 3 .and. igr_iter_solver == 2) then
479# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
480 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")
481# 109 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
482 end if
483# 111 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
484#endif
485
486 end subroutine s_check_inputs_nvidia_uvm
487
488 !> Checks that each active particle cloud has a valid packing_method specified
490
491 integer :: i
492 character(len=5) :: idxstr
493
494 do i = 1, num_particle_clouds
495 call s_int_to_str(i, idxstr)
496 if (particle_cloud(i)%packing_method == dflt_int) then
497# 123 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
498 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)")
499# 123 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
500 end if
501# 126 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
502 if (particle_cloud(i)%packing_method /= 1 .and. particle_cloud(i)%packing_method /= 2) then
503# 126 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
504 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)")
505# 126 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
506 end if
507# 128 "/home/runner/work/MFC/MFC/src/simulation/m_checker.fpp"
508 end do
509
510 end subroutine s_check_inputs_particle_clouds
511
512end 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_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...
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
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.