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! New line at end of file is required for FYPP
33# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
34# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
35# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
36# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59! New line at end of file is required for FYPP
60# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
61
62# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
63# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
64# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
65# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
66# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67
68# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69
70# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138! New line at end of file is required for FYPP
139# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
140# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
141# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
142# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
144# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
145# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
146# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147
148# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153
154# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165! New line at end of file is required for FYPP
166# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
167
168# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
169
170# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
171
172# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
173
174# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223! New line at end of file is required for FYPP
224# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
225
226! GPU parallel region (scalar reductions, maxval/minval)
227# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
228
229! GPU parallel loop over threads (most common GPU macro)
230# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232! Required closing for GPU_PARALLEL_LOOP
233# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! Mark routine for device compilation
236# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Declare device-resident data
239# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Inner loop within a GPU parallel region
242# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Scoped GPU data region
245# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Host code with device pointers (for MPI with GPU buffers)
248# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Allocate device memory (unscoped)
251# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Free device memory
254# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Atomic operation on device
257# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! End atomic capture block
260# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Copy data between host and device
263# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Synchronization barrier
266# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Import GPU library module (openacc or omp_lib)
269# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Emit code only for AMD compiler
272# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Emit code for non-Cray compilers
275# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for Cray compiler
278# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-NVIDIA compilers
281# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285! New line at end of file is required for FYPP
286# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
287
288# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
291! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
292! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
293# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
294
295! Allocate and create GPU device memory
296# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298! Free GPU device memory and deallocate
299# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Cray-specific GPU pointer setup for vector fields
302# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Cray-specific GPU pointer setup for scalar fields
305# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for acoustic source spatials
308# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313! New line at end of file is required for FYPP
314# 6 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp" 2
315
316!> @brief Basic floating-point utilities: approximate equality, default detection, and coordinate bounds
318
321
322 implicit none
323
324 private
327
328contains
329
330 !> Check if two floating point numbers of wp are within tolerance.
331 !! @param tol_input Relative error (default = 1.e-10_wp).
332 logical elemental function f_approx_equal(a, b, tol_input) result(res)
333
334
335# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
336#if MFC_OpenACC
337# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
338!$acc routine seq
339# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
340#elif MFC_OpenMP
341# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
342
343# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
344
345# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
346!$omp declare target device_type(any)
347# 25 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
348#endif
349 real(wp), intent(in) :: a, b
350 real(wp), optional, intent(in) :: tol_input
351 real(wp) :: tol
352
353 if (present(tol_input)) then
354 tol = tol_input
355 else
356 if (wp == single_precision) then
357 tol = 1.e-6_wp
358 else
359 tol = 1.e-10_wp
360 end if
361 end if
362
363 if (a == b) then
364 res = .true.
365 else if (a == 0._wp .or. b == 0._wp .or. (abs(a) + abs(b) < tiny(a))) then
366 res = (abs(a - b) < (tol*tiny(a)))
367 else
368 res = (abs(a - b)/min(abs(a) + abs(b), huge(a)) < tol)
369 end if
370
371 end function f_approx_equal
372
373 !> Check if a wp value approximately matches any element of an array within tolerance.
374 !! @param tol_input Relative error (default = 1e-10_wp).
375 logical function f_approx_in_array(a, b, tol_input) result(res)
376
377
378# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
379#if MFC_OpenACC
380# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
381!$acc routine seq
382# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
383#elif MFC_OpenMP
384# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
385
386# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
387
388# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
389!$omp declare target device_type(any)
390# 54 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
391#endif
392 real(wp), intent(in) :: a
393 real(wp), intent(in) :: b(:)
394 real(wp), optional, intent(in) :: tol_input
395 real(wp) :: tol
396 integer :: i
397
398 res = .false.
399
400 if (present(tol_input)) then
401 tol = tol_input
402 else
403 if (wp == single_precision) then
404 tol = 1.e-6_wp
405 else
406 tol = 1.e-10_wp
407 end if
408 end if
409
410 do i = 1, size(b)
411 if (f_approx_equal(a, b(i), tol)) then
412 res = .true.
413 exit
414 end if
415 end do
416
417 end function f_approx_in_array
418
419 !> Checks if a real(wp) variable is of default value.
420 logical elemental function f_is_default(var) result(res)
421
422
423# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
424#if MFC_OpenACC
425# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
426!$acc routine seq
427# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
428#elif MFC_OpenMP
429# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
430
431# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
432
433# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
434!$omp declare target device_type(any)
435# 85 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
436#endif
437 real(wp), intent(in) :: var
438
439 res = f_approx_equal(var, dflt_real)
440
441 end function f_is_default
442
443 !> Checks if ALL elements of a real(wp) array are of default value.
444 logical function f_all_default(var_array) result(res)
445
446 real(wp), intent(in) :: var_array(:)
447
448 res = all(f_is_default(var_array))
449
450 end function f_all_default
451
452 !> Checks if a real(wp) variable is an integer.
453 logical elemental function f_is_integer(var) result(res)
454
455
456# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
457#if MFC_OpenACC
458# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
459!$acc routine seq
460# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
461#elif MFC_OpenMP
462# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
463
464# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
465
466# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
467!$omp declare target device_type(any)
468# 104 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
469#endif
470 real(wp), intent(in) :: var
471
472 res = f_approx_equal(var, real(nint(var), wp))
473
474 end function f_is_integer
475
476 !> Compute ghost-cell buffer size and set interior/buffered coordinate index bounds.
477 subroutine s_configure_coordinate_bounds(recon_type, weno_polyn, muscl_polyn, igr_order, buff_size, idwint, idwbuff, viscous, &
478
479 & bubbles_lagrange, m, n, p, num_dims, igr, ib)
480
481 integer, intent(in) :: recon_type, weno_polyn, muscl_polyn
482 integer, intent(in) :: m, n, p, num_dims, igr_order
483 integer, intent(inout) :: buff_size
484 type(int_bounds_info), dimension(3), intent(inout) :: idwint, idwbuff
485 logical, intent(in) :: viscous, bubbles_lagrange
486 logical, intent(in) :: igr
487 logical, intent(in) :: ib
488
489 ! Determine ghost cell buffer size for boundary conditions
490
491 if (igr) then
492 buff_size = (igr_order - 1)/2 + 2
493 else if (recon_type == weno_type) then
494 if (viscous) then
495 buff_size = 2*weno_polyn + 2
496 else
497 buff_size = weno_polyn + 2
498 end if
499 else if (recon_type == muscl_type) then
500 buff_size = muscl_polyn + 2
501 end if
502
503 ! Correction for smearing function in the lagrangian subgrid bubble model
504 if (bubbles_lagrange) then
505 buff_size = max(buff_size, 6)
506 end if
507
508 if (ib) then
509 buff_size = max(buff_size, 10)
510 end if
511
512 ! Configuring Coordinate Direction Indexes
513 idwint(1)%beg = 0; idwint(2)%beg = 0; idwint(3)%beg = 0
514 idwint(1)%end = m; idwint(2)%end = n; idwint(3)%end = p
515
516 idwbuff(1)%beg = -buff_size
517 if (num_dims > 1) then; idwbuff(2)%beg = -buff_size; else; idwbuff(2)%beg = 0; end if
518 if (num_dims > 2) then; idwbuff(3)%beg = -buff_size; else; idwbuff(3)%beg = 0; end if
519
520 idwbuff(1)%end = idwint(1)%end - idwbuff(1)%beg
521 idwbuff(2)%end = idwint(2)%end - idwbuff(2)%beg
522 idwbuff(3)%end = idwint(3)%end - idwbuff(3)%beg
523
524 end subroutine s_configure_coordinate_bounds
525
526 !> Updates the min and max number of cells in each set of axes
527 !! @param bounds Min and max values to update
528 elemental subroutine s_update_cell_bounds(bounds, m, n, p)
529
530 type(cell_num_bounds), intent(out) :: bounds
531 integer, intent(in) :: m, n, p
532
533 bounds%mn_max = max(m, n)
534 bounds%np_max = max(n, p)
535 bounds%mp_max = max(m, p)
536 bounds%mnp_max = max(m, n, p)
537 bounds%mn_min = min(m, n)
538 bounds%np_min = min(n, p)
539 bounds%mp_min = min(m, p)
540 bounds%mnp_min = min(m, n, p)
541
542 end subroutine s_update_cell_bounds
543
544end module m_helper_basic
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