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# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 245 "/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# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 376 "/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# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 308 "/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# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
227
228# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
229
230# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232# 104 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
233
234# 119 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
235
236# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239
240# 171 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
241
242# 182 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246# 204 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
247
248# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250# 225 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252# 236 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
253
254# 246 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256# 252 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258# 258 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
259
260# 264 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262# 270 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264# 272 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
265# 273 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266! New line at end of file is required for FYPP
267# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
268
269# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
270
271! Caution:
272! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
273! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
274! For an example see misc/nvidia_uvm/bind.sh.
275# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
276
277# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
278
279# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
280
281# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
282
283# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
284
285# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
286
287# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
288
289# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
290! New line at end of file is required for FYPP
291# 6 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp" 2
292
293!> @brief Basic floating-point utilities: approximate equality, default detection, and coordinate bounds
295
296 use m_derived_types !< definitions of the derived types
297
298 implicit none
299
300 private;
301 public :: f_approx_equal, &
303 f_is_default, &
305 f_is_integer, &
308
309contains
310
311 !> This procedure checks if two floating point numbers of wp are within tolerance.
312 !! @param a First number.
313 !! @param b Second number.
314 !! @param tol_input Relative error (default = 1.e-10_wp).
315 !! @return Result of the comparison.
316 logical elemental function f_approx_equal(a, b, tol_input) result(res)
317
318# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
319#if MFC_OpenACC
320# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
321!$acc routine seq
322# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
323#elif MFC_OpenMP
324# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
325
326# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
327
328# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
329!$omp declare target device_type(any)
330# 31 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
331#endif
332 real(wp), intent(in) :: a, b
333 real(wp), optional, intent(in) :: tol_input
334 real(wp) :: tol
335
336 if (present(tol_input)) then
337 tol = tol_input
338 else
339 tol = 1.e-10_wp
340 end if
341
342 if (a == b) then
343 res = .true.
344 else if (a == 0._wp .or. b == 0._wp .or. (abs(a) + abs(b) < tiny(a))) then
345 res = (abs(a - b) < (tol*tiny(a)))
346 else
347 res = (abs(a - b)/min(abs(a) + abs(b), huge(a)) < tol)
348 end if
349 end function f_approx_equal
350
351 !> This procedure checks if the point numbers of wp belongs to another array are within tolerance.
352 !! @param a First number.
353 !! @param b Array that contains several point numbers.
354 !! @param tol_input Relative error (default = 1e-10_wp).
355 !! @return Result of the comparison.
356 logical function f_approx_in_array(a, b, tol_input) result(res)
357
358# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
359#if MFC_OpenACC
360# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
361!$acc routine seq
362# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
363#elif MFC_OpenMP
364# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
365
366# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
367
368# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
369!$omp declare target device_type(any)
370# 57 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
371#endif
372 real(wp), intent(in) :: a
373 real(wp), intent(in) :: b(:)
374 real(wp), optional, intent(in) :: tol_input
375 real(wp) :: tol
376 integer :: i
377
378 res = .false.
379
380 if (present(tol_input)) then
381 tol = tol_input
382 else
383 tol = 1e-10_wp
384 end if
385
386 do i = 1, size(b)
387 if (f_approx_equal(a, b(i), tol)) then
388 res = .true.
389 exit
390 end if
391 end do
392 end function f_approx_in_array
393
394 !> Checks if a real(wp) variable is of default value.
395 !! @param var Variable to check.
396 logical elemental function f_is_default(var) result(res)
397
398# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
399#if MFC_OpenACC
400# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
401!$acc routine seq
402# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
403#elif MFC_OpenMP
404# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
405
406# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
407
408# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
409!$omp declare target device_type(any)
410# 83 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
411#endif
412 real(wp), intent(in) :: var
413
414 res = f_approx_equal(var, dflt_real)
415 end function f_is_default
416
417 !> Checks if ALL elements of a real(wp) array are of default value.
418 !! @param var_array Array to check.
419 logical function f_all_default(var_array) result(res)
420 real(wp), intent(in) :: var_array(:)
421
422 res = all(f_is_default(var_array))
423
424 !logical :: res_array(size(var_array))
425 !integer :: i
426
427 ! do i = 1, size(var_array)
428 ! res_array(i) = f_is_default(var_array(i))
429 ! end do
430
431 ! res = all(res_array)
432 end function f_all_default
433
434 !> Checks if a real(wp) variable is an integer.
435 !! @param var Variable to check.
436 logical elemental function f_is_integer(var) result(res)
437
438# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
439#if MFC_OpenACC
440# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
441!$acc routine seq
442# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
443#elif MFC_OpenMP
444# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
445
446# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
447
448# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
449!$omp declare target device_type(any)
450# 109 "/home/runner/work/MFC/MFC/src/common/m_helper_basic.fpp"
451#endif
452 real(wp), intent(in) :: var
453
454 res = f_approx_equal(var, real(nint(var), wp))
455 end function f_is_integer
456
457 subroutine s_configure_coordinate_bounds(recon_type, weno_polyn, muscl_polyn, &
458 igr_order, buff_size, idwint, idwbuff, &
459 viscous, bubbles_lagrange, m, n, p, num_dims, igr, ib)
460
461 integer, intent(in) :: recon_type, weno_polyn, muscl_polyn
462 integer, intent(in) :: m, n, p, num_dims, igr_order
463 integer, intent(inout) :: buff_size
464 type(int_bounds_info), dimension(3), intent(inout) :: idwint, idwbuff
465 logical, intent(in) :: viscous, bubbles_lagrange
466 logical, intent(in) :: igr
467 logical, intent(in) :: ib
468
469 ! Determining the number of cells that are needed in order to store
470 ! sufficient boundary conditions data as to iterate the solution in
471 ! the physical computational domain from one time-step iteration to
472 ! the next one
473 if (igr) then
474 buff_size = (igr_order - 1)/2 + 2
475 elseif (recon_type == weno_type) then
476 if (viscous) then
477 buff_size = 2*weno_polyn + 2
478 else
479 buff_size = weno_polyn + 2
480 end if
481 elseif (recon_type == muscl_type) then
482 buff_size = muscl_polyn + 2
483 end if
484
485 ! Correction for smearing function in the lagrangian subgrid bubble model
486 if (bubbles_lagrange) then
487 buff_size = max(buff_size, 6)
488 end if
489
490 if (ib) then
491 buff_size = max(buff_size, 10)
492 end if
493
494 ! Configuring Coordinate Direction Indexes
495 idwint(1)%beg = 0; idwint(2)%beg = 0; idwint(3)%beg = 0
496 idwint(1)%end = m; idwint(2)%end = n; idwint(3)%end = p
497
498 idwbuff(1)%beg = -buff_size
499 if (num_dims > 1) then; idwbuff(2)%beg = -buff_size; else; idwbuff(2)%beg = 0; end if
500 if (num_dims > 2) then; idwbuff(3)%beg = -buff_size; else; idwbuff(3)%beg = 0; end if
501
502 idwbuff(1)%end = idwint(1)%end - idwbuff(1)%beg
503 idwbuff(2)%end = idwint(2)%end - idwbuff(2)%beg
504 idwbuff(3)%end = idwint(3)%end - idwbuff(3)%beg
505
506 end subroutine s_configure_coordinate_bounds
507
508 !> Updates the min and max number of cells in each set of axes
509 !! @param bounds Min ans max values to update
510 !! @param m Number of cells in x-axis
511 !! @param n Number of cells in y-axis
512 !! @param p Number of cells in z-axis
513 elemental subroutine s_update_cell_bounds(bounds, m, n, p)
514 type(cell_num_bounds), intent(out) :: bounds
515 integer, intent(in) :: m, n, p
516
517 bounds%mn_max = max(m, n)
518 bounds%np_max = max(n, p)
519 bounds%mp_max = max(m, p)
520 bounds%mnp_max = max(m, n, p)
521 bounds%mn_min = min(m, n)
522 bounds%np_min = min(n, p)
523 bounds%mp_min = min(m, p)
524 bounds%mnp_min = min(m, n, p)
525
526 end subroutine s_update_cell_bounds
527
528end 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)
This procedure checks if the point numbers of wp belongs to another array are within tolerance.
logical elemental function, public f_approx_equal(a, b, tol_input)
This procedure checks 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)
logical elemental function, public f_is_default(var)
Checks if a real(wp) variable is of default value.