MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_helper_basic.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
2!>
3!! @file
4!! @brief Contains module m_helper_basic
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/common/m_helper_basic.fpp" 2
321
322!> @brief Basic floating-point utilities: approximate equality, default detection, and coordinate bounds
324
328
329 implicit none
330
331 private
334
335contains
336
337 !> Check if two floating point numbers of wp are within tolerance.
338 !! @param tol_input Relative error (default = 1.e-10_wp).
339 logical elemental function f_approx_equal(a, b, tol_input) result(res)
340
341
342# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
343#if MFC_OpenACC
344# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
345!$acc routine seq
346# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
347#elif MFC_OpenMP
348# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
349
350# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
351
352# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
353!$omp declare target device_type(any)
354# 26 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
355#endif
356 real(wp), intent(in) :: a, b
357 real(wp), optional, intent(in) :: tol_input
358 real(wp) :: tol
359
360 if (present(tol_input)) then
361 tol = tol_input
362 else
363 if (wp == single_precision) then
364 tol = 1.e-6_wp
365 else
366 tol = 1.e-10_wp
367 end if
368 end if
369
370 if (a == b) then
371 res = .true.
372 else if (a == 0._wp .or. b == 0._wp .or. (abs(a) + abs(b) < tiny(a))) then
373 res = (abs(a - b) < (tol*tiny(a)))
374 else
375 res = (abs(a - b)/min(abs(a) + abs(b), huge(a)) < tol)
376 end if
377
378 end function f_approx_equal
379
380 !> Check if a wp value approximately matches any element of an array within tolerance.
381 !! @param tol_input Relative error (default = 1e-10_wp).
382 logical function f_approx_in_array(a, b, tol_input) result(res)
383
384
385# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
386#if MFC_OpenACC
387# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
388!$acc routine seq
389# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
390#elif MFC_OpenMP
391# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
392
393# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
394
395# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
396!$omp declare target device_type(any)
397# 55 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
398#endif
399 real(wp), intent(in) :: a
400 real(wp), intent(in) :: b(:)
401 real(wp), optional, intent(in) :: tol_input
402 real(wp) :: tol
403 integer :: i
404
405 res = .false.
406
407 if (present(tol_input)) then
408 tol = tol_input
409 else
410 if (wp == single_precision) then
411 tol = 1.e-6_wp
412 else
413 tol = 1.e-10_wp
414 end if
415 end if
416
417 do i = 1, size(b)
418 if (f_approx_equal(a, b(i), tol)) then
419 res = .true.
420 exit
421 end if
422 end do
423
424 end function f_approx_in_array
425
426 !> Checks if a real(wp) variable is of default value.
427 logical elemental function f_is_default(var) result(res)
428
429
430# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
431#if MFC_OpenACC
432# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
433!$acc routine seq
434# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
435#elif MFC_OpenMP
436# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
437
438# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
439
440# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
441!$omp declare target device_type(any)
442# 86 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
443#endif
444 real(wp), intent(in) :: var
445
446 res = f_approx_equal(var, dflt_real)
447
448 end function f_is_default
449
450 !> Checks if ALL elements of a real(wp) array are of default value.
451 logical function f_all_default(var_array) result(res)
452
453 real(wp), intent(in) :: var_array(:)
454
455 res = all(f_is_default(var_array))
456
457 end function f_all_default
458
459 !> Checks if a real(wp) variable is an integer.
460 logical elemental function f_is_integer(var) result(res)
461
462
463# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
464#if MFC_OpenACC
465# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
466!$acc routine seq
467# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
468#elif MFC_OpenMP
469# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
470
471# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
472
473# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
474!$omp declare target device_type(any)
475# 105 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
476#endif
477 real(wp), intent(in) :: var
478
479 res = f_approx_equal(var, real(nint(var), wp))
480
481 end function f_is_integer
482
483 !> Compute ghost-cell buffer size and set interior/buffered coordinate index bounds.
484 subroutine s_configure_coordinate_bounds(recon_type, weno_polyn, muscl_polyn, igr_order, buff_size, idwint, idwbuff, viscous, &
485 & bubbles_lagrange, m, n, p, num_dims, igr, ib)
486
487 integer, intent(in) :: recon_type, weno_polyn, muscl_polyn
488 integer, intent(in) :: m, n, p, num_dims, igr_order
489 integer, intent(inout) :: buff_size
490 type(int_bounds_info), dimension(3), intent(inout) :: idwint, idwbuff
491 logical, intent(in) :: viscous, bubbles_lagrange
492 logical, intent(in) :: igr
493 logical, intent(in) :: ib
494
495 ! Determine ghost cell buffer size for boundary conditions
496
497 if (igr) then
498 buff_size = (igr_order - 1)/2 + 2
499 else if (recon_type == recon_type_weno) then
500 if (viscous) then
501 buff_size = 2*weno_polyn + 2
502 else
503 buff_size = weno_polyn + 2
504 end if
505 else if (recon_type == recon_type_muscl) then
506 buff_size = muscl_polyn + 2
507 end if
508
509 ! Correction for smearing function in the lagrangian subgrid bubble model
510 if (bubbles_lagrange) then
511 buff_size = max(buff_size, 6)
512 end if
513
514 if (ib) then
515 buff_size = max(buff_size, 10)
516 end if
517
518 ! Configuring Coordinate Direction Indexes
519 idwint(1)%beg = 0; idwint(2)%beg = 0; idwint(3)%beg = 0
520 idwint(1)%end = m; idwint(2)%end = n; idwint(3)%end = p
521
522 idwbuff(1)%beg = -buff_size
523 if (num_dims > 1) then; idwbuff(2)%beg = -buff_size; else; idwbuff(2)%beg = 0; end if
524 if (num_dims > 2) then; idwbuff(3)%beg = -buff_size; else; idwbuff(3)%beg = 0; end if
525
526 idwbuff(1)%end = idwint(1)%end - idwbuff(1)%beg
527 idwbuff(2)%end = idwint(2)%end - idwbuff(2)%beg
528 idwbuff(3)%end = idwint(3)%end - idwbuff(3)%beg
529
530 end subroutine s_configure_coordinate_bounds
531
532 !> Updates the min and max number of cells in each set of axes
533 !! @param bounds Min and max values to update
534 elemental subroutine s_update_cell_bounds(bounds, m, n, p)
535
536 type(cell_num_bounds), intent(out) :: bounds
537 integer, intent(in) :: m, n, p
538
539 bounds%mn_max = max(m, n)
540 bounds%np_max = max(n, p)
541 bounds%mp_max = max(m, p)
542 bounds%mnp_max = max(m, n, p)
543 bounds%mn_min = min(m, n)
544 bounds%np_min = min(n, p)
545 bounds%mp_min = min(m, p)
546 bounds%mnp_min = min(m, n, p)
547
548 end subroutine s_update_cell_bounds
549
550end module m_helper_basic
Compile-time constant parameters: default values, tolerances, and physical constants.
integer, parameter recon_type_muscl
integer, parameter recon_type_weno
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical function, public f_all_default(var_array)
Checks if ALL elements of a real(wp) array are of default value.
logical elemental function, public f_is_integer(var)
Checks if a real(wp) variable is an integer.
logical function, public f_approx_in_array(a, b, tol_input)
Check if a wp value approximately matches any element of an array within tolerance.
logical elemental function, public f_approx_equal(a, b, tol_input)
Check if two floating point numbers of wp are within tolerance.
elemental subroutine, public s_update_cell_bounds(bounds, m, n, p)
Updates the min and max number of cells in each set of axes.
subroutine, public s_configure_coordinate_bounds(recon_type, weno_polyn, muscl_polyn, igr_order, buff_size, idwint, idwbuff, viscous, bubbles_lagrange, m, n, p, num_dims, igr, ib)
Compute ghost-cell buffer size and set interior/buffered coordinate index bounds.
logical elemental function, public f_is_default(var)
Checks if a real(wp) variable is of default value.
Working-precision kind selection (half/single/double) and corresponding MPI datatype parameters.
integer, parameter wp
Change to single_precision if needed.
integer, parameter single_precision