MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_body_forces.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
2!>
3!! @file
4!! @brief Contains module m_body_forces
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/simulation/m_body_forces.fpp" 2
292
293!> @brief Computes gravitational and user-defined body force source terms for the momentum equations
295
296 use m_derived_types !< definitions of the derived types
297
298 use m_global_parameters !< definitions of the global parameters
299
301
302 use m_nvtx
303
304! $:USE_GPU_MODULE()
305
306 implicit none
307
308 private;
309 public :: s_compute_body_forces_rhs, &
312
313 real(wp), allocatable, dimension(:, :, :) :: rhom
314
315# 28 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
316#if defined(MFC_OpenACC)
317# 28 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
318!$acc declare create(rhoM)
319# 28 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
320#elif defined(MFC_OpenMP)
321# 28 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
322!$omp declare target (rhoM)
323# 28 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
324#endif
325
326contains
327
328 !> This subroutine initializes the module global array of mixture
329 !! densities in each grid cell
331
332 ! Simulation is at least 2D
333 if (n > 0) then
334 ! Simulation is 3D
335 if (p > 0) then
336#ifdef MFC_DEBUG
337# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
338 block
339# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
340 use iso_fortran_env, only: output_unit
341# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
342
343# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
344 print *, 'm_body_forces.fpp:40: ', '@:ALLOCATE(rhoM(-buff_size:buff_size + m, -buff_size:buff_size + n, -buff_size:buff_size + p))'
345# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
346
347# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
348 call flush (output_unit)
349# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
350 end block
351# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
352#endif
353# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
355# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
356
357# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
358
359# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
360#if defined(MFC_OpenACC)
361# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
362!$acc enter data create(rhoM)
363# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
364#elif defined(MFC_OpenMP)
365# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
366!$omp target enter data map(always,alloc:rhoM)
367# 40 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
368#endif
369# 43 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
370 ! Simulation is 2D
371 else
372#ifdef MFC_DEBUG
373# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
374 block
375# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
376 use iso_fortran_env, only: output_unit
377# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
378
379# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
380 print *, 'm_body_forces.fpp:45: ', '@:ALLOCATE(rhoM(-buff_size:buff_size + m, -buff_size:buff_size + n, 0:0))'
381# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
382
383# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
384 call flush (output_unit)
385# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
386 end block
387# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
388#endif
389# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
390 allocate (rhom(-buff_size:buff_size + m, -buff_size:buff_size + n, 0:0))
391# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
392
393# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
394
395# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
396#if defined(MFC_OpenACC)
397# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
398!$acc enter data create(rhoM)
399# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
400#elif defined(MFC_OpenMP)
401# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
402!$omp target enter data map(always,alloc:rhoM)
403# 45 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
404#endif
405# 48 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
406 end if
407 ! Simulation is 1D
408 else
409#ifdef MFC_DEBUG
410# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
411 block
412# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
413 use iso_fortran_env, only: output_unit
414# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
415
416# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
417 print *, 'm_body_forces.fpp:51: ', '@:ALLOCATE(rhoM(-buff_size:buff_size + m, 0:0, 0:0))'
418# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
419
420# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
421 call flush (output_unit)
422# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
423 end block
424# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
425#endif
426# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
427 allocate (rhom(-buff_size:buff_size + m, 0:0, 0:0))
428# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
429
430# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
431
432# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
433#if defined(MFC_OpenACC)
434# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
435!$acc enter data create(rhoM)
436# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
437#elif defined(MFC_OpenMP)
438# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
439!$omp target enter data map(always,alloc:rhoM)
440# 51 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
441#endif
442# 54 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
443 end if
444
446
447 !> This subroutine computes the acceleration at time t
449
450 real(wp), intent(in) :: t
451
452# 64 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
453 if (bf_x) then
454 accel_bf(1) = g_x+k_x*sin(w_x*t - p_x)
455 end if
456# 64 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
457 if (bf_y) then
458 accel_bf(2) = g_y+k_y*sin(w_y*t - p_y)
459 end if
460# 64 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
461 if (bf_z) then
462 accel_bf(3) = g_z+k_z*sin(w_z*t - p_z)
463 end if
464# 68 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
465
466
467# 69 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
468#if defined(MFC_OpenACC)
469# 69 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
470!$acc update device(accel_bf)
471# 69 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
472#elif defined(MFC_OpenMP)
473# 69 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
474!$omp target update to(accel_bf)
475# 69 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
476#endif
477
478 end subroutine s_compute_acceleration
479
480 !> This subroutine calculates the mixture density at each cell
481 !! center
482 !! param q_cons_vf Conservative variable
483 subroutine s_compute_mixture_density(q_cons_vf)
484
485 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
486 integer :: i, j, k, l !< standard iterators
487
488
489# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
490
491# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
492#if defined(MFC_OpenACC)
493# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
494!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
495# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
496#elif defined(MFC_OpenMP)
497# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
498
499# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
500
501# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
502
503# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
504!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
505# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
506#endif
507# 81 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
508
509 do l = 0, p
510 do k = 0, n
511 do j = 0, m
512 rhom(j, k, l) = 0._wp
513 do i = 1, num_fluids
514 rhom(j, k, l) = rhom(j, k, l) + &
515 q_cons_vf(contxb + i - 1)%sf(j, k, l)
516 end do
517 end do
518 end do
519 end do
520
521# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
522
523# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
524#if defined(MFC_OpenACC)
525# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
526!$acc end parallel loop
527# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
528#elif defined(MFC_OpenMP)
529# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
530
531# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
532
533# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
534!$omp end target teams loop
535# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
536#endif
537# 93 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
538
539
540 end subroutine s_compute_mixture_density
541
542 !> This subroutine calculates the source term due to body forces
543 !! so the system can be advanced in time
544 !! @param q_cons_vf Conservative variables
545 !! @param q_prim_vf Primitive variables
546 !! @param rhs_vf Right-hand side accumulator
547 subroutine s_compute_body_forces_rhs(q_prim_vf, q_cons_vf, rhs_vf)
548
549 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
550 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
551 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
552
553 integer :: i, j, k, l !< Loop variables
554
555 call s_compute_acceleration(mytime)
557
558
559# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
560
561# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
562#if defined(MFC_OpenACC)
563# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
564!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
565# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
566#elif defined(MFC_OpenMP)
567# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
568
569# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
570
571# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
572
573# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
574!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l)
575# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
576#endif
577# 113 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
578
579 do i = momxb, e_idx
580 do l = 0, p
581 do k = 0, n
582 do j = 0, m
583 rhs_vf(i)%sf(j, k, l) = 0._wp
584 end do
585 end do
586 end do
587 end do
588
589# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
590
591# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
592#if defined(MFC_OpenACC)
593# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
594!$acc end parallel loop
595# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
596#elif defined(MFC_OpenMP)
597# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
598
599# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
600
601# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
602!$omp end target teams loop
603# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
604#endif
605# 123 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
606
607
608 if (bf_x) then ! x-direction body forces
609
610
611# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
612
613# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
614#if defined(MFC_OpenACC)
615# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
616!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
617# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
618#elif defined(MFC_OpenMP)
619# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
620
621# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
622
623# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
624
625# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
626!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
627# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
628#endif
629# 127 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
630
631 do l = 0, p
632 do k = 0, n
633 do j = 0, m
634 rhs_vf(momxb)%sf(j, k, l) = rhs_vf(momxb)%sf(j, k, l) + &
635 rhom(j, k, l)*accel_bf(1)
636 rhs_vf(e_idx)%sf(j, k, l) = rhs_vf(e_idx)%sf(j, k, l) + &
637 q_cons_vf(momxb)%sf(j, k, l)*accel_bf(1)
638 end do
639 end do
640 end do
641
642# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
643
644# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
645#if defined(MFC_OpenACC)
646# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
647!$acc end parallel loop
648# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
649#elif defined(MFC_OpenMP)
650# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
651
652# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
653
654# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
655!$omp end target teams loop
656# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
657#endif
658# 138 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
659
660 end if
661
662 if (bf_y) then ! y-direction body forces
663
664
665# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
666
667# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
668#if defined(MFC_OpenACC)
669# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
670!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
671# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
672#elif defined(MFC_OpenMP)
673# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
674
675# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
676
677# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
678
679# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
680!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
681# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
682#endif
683# 143 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
684
685 do l = 0, p
686 do k = 0, n
687 do j = 0, m
688 rhs_vf(momxb + 1)%sf(j, k, l) = rhs_vf(momxb + 1)%sf(j, k, l) + &
689 rhom(j, k, l)*accel_bf(2)
690 rhs_vf(e_idx)%sf(j, k, l) = rhs_vf(e_idx)%sf(j, k, l) + &
691 q_cons_vf(momxb + 1)%sf(j, k, l)*accel_bf(2)
692 end do
693 end do
694 end do
695
696# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
697
698# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
699#if defined(MFC_OpenACC)
700# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
701!$acc end parallel loop
702# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
703#elif defined(MFC_OpenMP)
704# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
705
706# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
707
708# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
709!$omp end target teams loop
710# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
711#endif
712# 154 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
713
714 end if
715
716 if (bf_z) then ! z-direction body forces
717
718
719# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
720
721# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
722#if defined(MFC_OpenACC)
723# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
724!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
725# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
726#elif defined(MFC_OpenMP)
727# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
728
729# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
730
731# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
732
733# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
734!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
735# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
736#endif
737# 159 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
738
739 do l = 0, p
740 do k = 0, n
741 do j = 0, m
742 rhs_vf(momxe)%sf(j, k, l) = rhs_vf(momxe)%sf(j, k, l) + &
743 rhom(j, k, l)*accel_bf(3)
744 rhs_vf(e_idx)%sf(j, k, l) = rhs_vf(e_idx)%sf(j, k, l) + &
745 q_cons_vf(momxe)%sf(j, k, l)*accel_bf(3)
746 end do
747 end do
748 end do
749
750# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
751
752# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
753#if defined(MFC_OpenACC)
754# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
755!$acc end parallel loop
756# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
757#elif defined(MFC_OpenMP)
758# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
759
760# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
761
762# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
763!$omp end target teams loop
764# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
765#endif
766# 170 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
767
768
769 end if
770
771 end subroutine s_compute_body_forces_rhs
772
773 !> @brief Deallocates module variables used for body force computations.
775
776#ifdef MFC_DEBUG
777# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
778 block
779# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
780 use iso_fortran_env, only: output_unit
781# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
782
783# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
784 print *, 'm_body_forces.fpp:179: ', '@:DEALLOCATE(rhoM)'
785# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
786
787# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
788 call flush (output_unit)
789# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
790 end block
791# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
792#endif
793# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
794
795# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
796#if defined(MFC_OpenACC)
797# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
798!$acc exit data delete(rhoM)
799# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
800#elif defined(MFC_OpenMP)
801# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
802!$omp target exit data map(release:rhoM)
803# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
804#endif
805# 179 "/home/runner/work/MFC/MFC/src/simulation/m_body_forces.fpp"
806 deallocate (rhom)
807
808 end subroutine s_finalize_body_forces_module
809
810end module m_body_forces
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Computes gravitational and user-defined body force source terms for the momentum equations.
subroutine, public s_compute_body_forces_rhs(q_prim_vf, q_cons_vf, rhs_vf)
This subroutine calculates the source term due to body forces so the system can be advanced in time.
impure subroutine, public s_initialize_body_forces_module
This subroutine initializes the module global array of mixture densities in each grid cell.
subroutine s_compute_mixture_density(q_cons_vf)
This subroutine calculates the mixture density at each cell center param q_cons_vf Conservative varia...
subroutine s_compute_acceleration(t)
This subroutine computes the acceleration at time t.
real(wp), dimension(:, :, :), allocatable rhom
impure subroutine, public s_finalize_body_forces_module
Deallocates module variables used for body force computations.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer buff_size
The number of cells that are necessary to be able to store enough boundary conditions data to march t...
NVIDIA NVTX profiling API bindings for GPU performance instrumentation.
Definition m_nvtx.f90:6
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.