MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_surface_tension.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
2!>
3!! @file
4!! @brief Contains module m_surface_tension
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
7! This file exists so that Fypp can be run without generating case.fpp files for
8! each target. This is useful when generating documentation, for example. This
9! should also let MFC be built with CMake directly, without invoking mfc.sh.
10
11! For pre-process.
12# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49! New line at end of file is required for FYPP
50# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
51# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
52# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
53# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70
71# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72
73# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74
75# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
76
77# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
78
79# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80
81# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82! New line at end of file is required for FYPP
83# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
84
85# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153
154# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155
156# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157
158# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159
160# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161! New line at end of file is required for FYPP
162# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
163# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
164# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
165# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178
179# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180
181# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182
183# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
184
185# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186
187# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
188
189# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190
191# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
192
193# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
194! New line at end of file is required for FYPP
195# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
196
197# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252! New line at end of file is required for FYPP
253# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
254
255! GPU parallel region (scalar reductions, maxval/minval)
256# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! GPU parallel loop over threads (most common GPU macro)
259# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Required closing for GPU_PARALLEL_LOOP
262# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Mark routine for device compilation
265# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Declare device-resident data
268# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! Inner loop within a GPU parallel region
271# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Scoped GPU data region
274# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Host code with device pointers (for MPI with GPU buffers)
277# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Allocate device memory (unscoped)
280# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Free device memory
283# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Atomic operation on device
286# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! End atomic capture block
289# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Copy data between host and device
292# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Synchronization barrier
295# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Import GPU library module (openacc or omp_lib)
298# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300! Emit code only for AMD compiler
301# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302
303! Emit code for non-Cray compilers
304# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305
306! Emit code only for Cray compiler
307# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308
309! Emit code for non-NVIDIA compilers
310# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311
312# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314! New line at end of file is required for FYPP
315# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
316
317# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
320! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
321! example see misc/nvidia_uvm/bind.sh.
322# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324! Allocate and create GPU device memory
325# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326
327! Free GPU device memory and deallocate
328# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330! Cray-specific GPU pointer setup for vector fields
331# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
332
333! Cray-specific GPU pointer setup for scalar fields
334# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
335
336! Cray-specific GPU pointer setup for acoustic source spatials
337# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338
339# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
340
341# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
342! New line at end of file is required for FYPP
343# 7 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp" 2
344
345!> @brief Computes capillary source fluxes and color-function gradients for the diffuse-interface surface tension model
347
350 use m_mpi_proxy
352 use m_weno
353 use m_muscl
354 use m_helper
356
357 implicit none
358
361
362 !> @name color function gradient components and magnitude
363 !> @{
364 type(scalar_field), allocatable, dimension(:) :: c_divs
365 !> @}
366
367# 29 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
368#if defined(MFC_OpenACC)
369# 29 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
370!$acc declare create(c_divs)
371# 29 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
372#elif defined(MFC_OpenMP)
373# 29 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
374!$omp declare target (c_divs)
375# 29 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
376#endif
377
378 !> @name cell boundary reconstructed gradient components and magnitude
379 !> @{
380 real(wp), allocatable, dimension(:,:,:,:) :: gl_x, gr_x
381 !> @}
382
383# 35 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
384#if defined(MFC_OpenACC)
385# 35 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
386!$acc declare create(gL_x, gR_x)
387# 35 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
388#elif defined(MFC_OpenMP)
389# 35 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
390!$omp declare target (gL_x, gR_x)
391# 35 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
392#endif
393
395
396# 38 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
397#if defined(MFC_OpenACC)
398# 38 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
399!$acc declare create(is1, is2, is3, iv)
400# 38 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
401#elif defined(MFC_OpenMP)
402# 38 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
403!$omp declare target (is1, is2, is3, iv)
404# 38 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
405#endif
406
407contains
408
409 !> Allocate and initialize surface tension module arrays
411
412 integer :: j
413
414#ifdef MFC_DEBUG
415# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
416 block
417# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
418 use iso_fortran_env, only: output_unit
419# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
420
421# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
422 print *, 'm_surface_tension.fpp:47: ', '@:ALLOCATE(c_divs(1:num_dims + 1))'
423# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
424
425# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
426 call flush (output_unit)
427# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
428 end block
429# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
430#endif
431# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
432 allocate (c_divs(1:num_dims + 1))
433# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
434
435# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
436
437# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
438#if defined(MFC_OpenACC)
439# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
440!$acc enter data create(c_divs)
441# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
442#elif defined(MFC_OpenMP)
443# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
444!$omp target enter data map(always,alloc:c_divs)
445# 47 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
446#endif
447
448 do j = 1, num_dims + 1
449#ifdef MFC_DEBUG
450# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
451 block
452# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
453 use iso_fortran_env, only: output_unit
454# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
455
456# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
457 print *, 'm_surface_tension.fpp:50: ', '@:ALLOCATE(c_divs(j)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))'
458# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
459
460# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
461 call flush (output_unit)
462# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
463 end block
464# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
465#endif
466# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
467 allocate (c_divs(j)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))
468# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
469
470# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
471
472# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
473#if defined(MFC_OpenACC)
474# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
475!$acc enter data create(c_divs(j)%sf)
476# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
477#elif defined(MFC_OpenMP)
478# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
479!$omp target enter data map(always,alloc:c_divs(j)%sf)
480# 50 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
481#endif
482#ifdef _CRAYFTN
483# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
484 block
485# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
486#ifdef MFC_DEBUG
487# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
488 block
489# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
490 use iso_fortran_env, only: output_unit
491# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
492
493# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
494 print *, 'm_surface_tension.fpp:51: ', '@:ACC_SETUP_SFs(c_divs(j))'
495# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
496
497# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
498 call flush (output_unit)
499# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
500 end block
501# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
502#endif
503# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
504
505# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
506
507# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
508#if defined(MFC_OpenACC)
509# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
510!$acc enter data copyin(c_divs(j))
511# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
512#elif defined(MFC_OpenMP)
513# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
514!$omp target enter data map(to:c_divs(j))
515# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
516#endif
517# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
518 if (associated(c_divs(j)%sf)) then
519# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
520
521# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
522#if defined(MFC_OpenACC)
523# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
524!$acc enter data copyin(c_divs(j)%sf)
525# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
526#elif defined(MFC_OpenMP)
527# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
528!$omp target enter data map(to:c_divs(j)%sf)
529# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
530#endif
531# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
532 end if
533# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
534 end block
535# 51 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
536#endif
537 end do
538
539#ifdef MFC_DEBUG
540# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
541 block
542# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
543 use iso_fortran_env, only: output_unit
544# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
545
546# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
547 print *, 'm_surface_tension.fpp:54: ', '@:ALLOCATE(gL_x(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end, num_dims + 1))'
548# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
549
550# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
551 call flush (output_unit)
552# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
553 end block
554# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
555#endif
556# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
557 allocate (gl_x(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end, num_dims + 1))
558# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
559
560# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
561
562# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
563#if defined(MFC_OpenACC)
564# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
565!$acc enter data create(gL_x)
566# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
567#elif defined(MFC_OpenMP)
568# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
569!$omp target enter data map(always,alloc:gL_x)
570# 54 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
571#endif
572#ifdef MFC_DEBUG
573# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
574 block
575# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
576 use iso_fortran_env, only: output_unit
577# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
578
579# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
580 print *, 'm_surface_tension.fpp:55: ', '@:ALLOCATE(gR_x(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end, num_dims + 1))'
581# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
582
583# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
584 call flush (output_unit)
585# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
586 end block
587# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
588#endif
589# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
590 allocate (gr_x(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end, num_dims + 1))
591# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
592
593# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
594
595# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
596#if defined(MFC_OpenACC)
597# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
598!$acc enter data create(gR_x)
599# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
600#elif defined(MFC_OpenMP)
601# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
602!$omp target enter data map(always,alloc:gR_x)
603# 55 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
604#endif
605
607
608 !> Compute the capillary source flux from reconstructed color-gradient fields
609 !> Capillary stress tensor of Schmidmayer et al. JCP (2017) for one face. Omega is intent(inout): the entries a given
610 !! dimensionality does not define are left as the caller had them, which is what the macro this replaced did.
611 subroutine s_compute_capillary_stress_tensor(sigma_c, w1, w2, w3, normW, Omega)
612
613
614# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
615#ifdef _CRAYFTN
616# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
617#if MFC_OpenACC
618# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
619!$acc routine seq
620# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
621#elif MFC_OpenMP
622# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
623
624# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
625
626# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
627!$omp declare target device_type(any)
628# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
629#else
630# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
631!DIR$ INLINEALWAYS s_compute_capillary_stress_tensor
632# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
633#endif
634# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
635#elif MFC_OpenACC
636# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
637!$acc routine seq
638# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
639#elif MFC_OpenMP
640# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
641
642# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
643
644# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
645!$omp declare target device_type(any)
646# 64 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
647#endif
648
649 real(wp), intent(in) :: sigma_c, w1, w2, w3, normW
650# 70 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
651 real(wp), dimension(num_dims, num_dims), intent(inout) :: Omega
652# 72 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
653
654 omega(1, 1) = -sigma_c*(w2*w2 + w3*w3)/normw
655# 75 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
656 omega(2, 1) = sigma_c*w1*w2/normw
657 omega(1, 2) = omega(2, 1)
658
659 omega(2, 2) = -sigma_c*(w1*w1 + w3*w3)/normw
660# 80 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
661
662 if (p > 0) then
663# 83 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
664 omega(3, 1) = sigma_c*w1*w3/normw
665 omega(1, 3) = omega(3, 1)
666
667 omega(3, 2) = sigma_c*w2*w3/normw
668 omega(2, 3) = omega(3, 2)
669
670 omega(3, 3) = -sigma_c*(w1*w1 + w2*w2)/normw
671# 91 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
672 end if
673
675
676 subroutine s_compute_capillary_source_flux(vSrc_rsx_vf, flux_src_vf, id, isx, isy, isz)
677
678 real(wp), dimension(-1:,-1:,-1:,1:), intent(in) :: vsrc_rsx_vf
679 type(scalar_field), dimension(sys_size), intent(inout) :: flux_src_vf
680 integer, intent(in) :: id
681 type(int_bounds_info), intent(in) :: isx, isy, isz
682
683# 105 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
684 real(wp), dimension(num_dims, num_dims) :: omega
685# 107 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
686 real(wp) :: w1l, w1r, w2l, w2r, w3l, w3r, w1, w2, w3
687 real(wp) :: normwl, normwr, normw
688 integer :: j, k, l, i
689
690 if (id == 1) then
691
692# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
693
694# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
695#if defined(MFC_OpenACC)
696# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
697!$acc parallel loop collapse(3) gang vector default(present) private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
698# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
699#elif defined(MFC_OpenMP)
700# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
701
702# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
703
704# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
705
706# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
707!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
708# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
709!$omp& private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
710# 112 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
711#endif
712 do l = isz%beg, isz%end
713 do k = isy%beg, isy%end
714 do j = isx%beg, isx%end
715 w1l = gl_x(j, k, l, 1)
716 w2l = gl_x(j, k, l, 2)
717 w3l = 0._wp
718 if (p > 0) w3l = gl_x(j, k, l, 3)
719
720 w1r = gr_x(j + 1, k, l, 1)
721 w2r = gr_x(j + 1, k, l, 2)
722 w3r = 0._wp
723 if (p > 0) w3r = gr_x(j + 1, k, l, 3)
724
725 normwl = gl_x(j, k, l, num_dims + 1)
726 normwr = gr_x(j + 1, k, l, num_dims + 1)
727
728 w1 = (w1l + w1r)/2._wp
729 w2 = (w2l + w2r)/2._wp
730 w3 = (w3l + w3r)/2._wp
731 normw = (normwl + normwr)/2._wp
732
733 if (normw > capillary_cutoff) then
734 call s_compute_capillary_stress_tensor(sigma, w1, w2, w3, normw, omega)
735
736 do i = 1, num_dims
737 flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, k, l) = flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, k, &
738 & l) + omega(1, i)
739
740 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, l) + omega(1, &
741 & i)*vsrc_rsx_vf(j, k, l, i)
742 end do
743
744 ! Continuum surface force capillary stress, Schmidmayer et al. JCP (2017)
745 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, &
746 & l) + sigma*c_divs(num_dims + 1)%sf(j, k, l)*vsrc_rsx_vf(j, k, l, 1)
747 end if
748 end do
749 end do
750 end do
751
752# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
753#if defined(MFC_OpenACC)
754# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
755!$acc end parallel loop
756# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
757#elif defined(MFC_OpenMP)
758# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
759
760# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
761!$omp end target teams loop
762# 152 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
763#endif
764 else if (id == 2) then
765# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
766
767# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
768
769# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
770#if defined(MFC_OpenACC)
771# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
772!$acc parallel loop collapse(3) gang vector default(present) private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
773# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
774#elif defined(MFC_OpenMP)
775# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
776
777# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
778
779# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
780
781# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
782!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
783# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
784!$omp& private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
785# 155 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
786#endif
787 do l = isz%beg, isz%end
788 do k = isy%beg, isy%end
789 do j = isx%beg, isx%end
790 w1l = gl_x(j, k, l, 1)
791 w2l = gl_x(j, k, l, 2)
792 w3l = 0._wp
793 if (p > 0) w3l = gl_x(j, k, l, 3)
794
795 w1r = gr_x(j, k + 1, l, 1)
796 w2r = gr_x(j, k + 1, l, 2)
797 w3r = 0._wp
798 if (p > 0) w3r = gr_x(j, k + 1, l, 3)
799
800 normwl = gl_x(j, k, l, num_dims + 1)
801 normwr = gr_x(j, k + 1, l, num_dims + 1)
802
803 w1 = (w1l + w1r)/2._wp
804 w2 = (w2l + w2r)/2._wp
805 w3 = (w3l + w3r)/2._wp
806 normw = (normwl + normwr)/2._wp
807
808 if (normw > capillary_cutoff) then
809 call s_compute_capillary_stress_tensor(sigma, w1, w2, w3, normw, omega)
810
811 do i = 1, num_dims
812 flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, k, l) = flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, &
813 & k, l) + omega(2, i)
814
815 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, l) + omega(2, &
816 & i)*vsrc_rsx_vf(j, k, l, i)
817 end do
818
819 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, &
820 & l) + sigma*c_divs(num_dims + 1)%sf(j, k, l)*vsrc_rsx_vf(j, k, l, 2)
821 end if
822 end do
823 end do
824 end do
825
826# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
827#if defined(MFC_OpenACC)
828# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
829!$acc end parallel loop
830# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
831#elif defined(MFC_OpenMP)
832# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
833
834# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
835!$omp end target teams loop
836# 194 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
837#endif
838# 196 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
839 else if (id == 3) then
840# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
841
842# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
843
844# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
845#if defined(MFC_OpenACC)
846# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
847!$acc parallel loop collapse(3) gang vector default(present) private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
848# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
849#elif defined(MFC_OpenMP)
850# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
851
852# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
853
854# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
855
856# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
857!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
858# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
859!$omp& private(Omega, w1L, w2L, w3L, w1R, w2R, w3R, w1, w2, w3, normWL, normWR, normW)
860# 198 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
861#endif
862 do l = isz%beg, isz%end
863 do k = isy%beg, isy%end
864 do j = isx%beg, isx%end
865 w1l = gl_x(j, k, l, 1)
866 w2l = gl_x(j, k, l, 2)
867 w3l = 0._wp
868 if (p > 0) w3l = gl_x(j, k, l, 3)
869
870 w1r = gr_x(j, k, l + 1, 1)
871 w2r = gr_x(j, k, l + 1, 2)
872 w3r = 0._wp
873 if (p > 0) w3r = gr_x(j, k, l + 1, 3)
874
875 normwl = gl_x(j, k, l, num_dims + 1)
876 normwr = gr_x(j, k, l + 1, num_dims + 1)
877
878 w1 = (w1l + w1r)/2._wp
879 w2 = (w2l + w2r)/2._wp
880 w3 = (w3l + w3r)/2._wp
881 normw = (normwl + normwr)/2._wp
882
883 if (normw > capillary_cutoff) then
884 call s_compute_capillary_stress_tensor(sigma, w1, w2, w3, normw, omega)
885
886 do i = 1, num_dims
887 flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, k, l) = flux_src_vf(eqn_idx%mom%beg + i - 1)%sf(j, &
888 & k, l) + omega(3, i)
889
890 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, l) + omega(3, &
891 & i)*vsrc_rsx_vf(j, k, l, i)
892 end do
893
894 flux_src_vf(eqn_idx%E)%sf(j, k, l) = flux_src_vf(eqn_idx%E)%sf(j, k, &
895 & l) + sigma*c_divs(num_dims + 1)%sf(j, k, l)*vsrc_rsx_vf(j, k, l, 3)
896 end if
897 end do
898 end do
899 end do
900
901# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
902#if defined(MFC_OpenACC)
903# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
904!$acc end parallel loop
905# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
906#elif defined(MFC_OpenMP)
907# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
908
909# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
910!$omp end target teams loop
911# 237 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
912#endif
913# 239 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
914 end if
915
917
918 !> Compute color-function gradients and reconstruct them at cell boundaries
919 impure subroutine s_get_capillary(q_prim_vf, bc_type)
920
921 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
922 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
923 type(int_bounds_info) :: isx, isy, isz
924 integer :: j, k, l, i
925
926 isx%beg = -1; isy%beg = 0; isz%beg = 0
927
928 if (m > 0) isy%beg = -1; if (p > 0) isz%beg = -1
929
930 isx%end = m; isy%end = n; isz%end = p
931
932 ! compute gradient components
933
934# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
935
936# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
937#if defined(MFC_OpenACC)
938# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
939!$acc parallel loop collapse(3) gang vector default(present)
940# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
941#elif defined(MFC_OpenMP)
942# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
943
944# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
945
946# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
947
948# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
949!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
950# 258 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
951#endif
952 do l = 0, p
953 do k = 0, n
954 do j = 0, m
955 c_divs(1)%sf(j, k, l) = 1._wp/(x_cc(j + 1) - x_cc(j - 1))*(q_prim_vf(eqn_idx%c)%sf(j + 1, k, &
956 & l) - q_prim_vf(eqn_idx%c)%sf(j - 1, k, l))
957 end do
958 end do
959 end do
960
961# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
962#if defined(MFC_OpenACC)
963# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
964!$acc end parallel loop
965# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
966#elif defined(MFC_OpenMP)
967# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
968
969# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
970!$omp end target teams loop
971# 267 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
972#endif
973
974
975# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
976
977# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
978#if defined(MFC_OpenACC)
979# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
980!$acc parallel loop collapse(3) gang vector default(present)
981# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
982#elif defined(MFC_OpenMP)
983# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
984
985# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
986
987# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
988
989# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
990!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
991# 269 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
992#endif
993 do l = 0, p
994 do k = 0, n
995 do j = 0, m
996 c_divs(2)%sf(j, k, l) = 1._wp/(y_cc(k + 1) - y_cc(k - 1))*(q_prim_vf(eqn_idx%c)%sf(j, k + 1, &
997 & l) - q_prim_vf(eqn_idx%c)%sf(j, k - 1, l))
998 end do
999 end do
1000 end do
1001
1002# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1003#if defined(MFC_OpenACC)
1004# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1005!$acc end parallel loop
1006# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1007#elif defined(MFC_OpenMP)
1008# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1009
1010# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1011!$omp end target teams loop
1012# 278 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1013#endif
1014
1015 if (p > 0) then
1016
1017# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1018
1019# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1020#if defined(MFC_OpenACC)
1021# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1022!$acc parallel loop collapse(3) gang vector default(present)
1023# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1024#elif defined(MFC_OpenMP)
1025# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1026
1027# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1028
1029# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1030
1031# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1032!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1033# 281 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1034#endif
1035 do l = 0, p
1036 do k = 0, n
1037 do j = 0, m
1038 c_divs(3)%sf(j, k, l) = 1._wp/(z_cc(l + 1) - z_cc(l - 1))*(q_prim_vf(eqn_idx%c)%sf(j, k, &
1039 & l + 1) - q_prim_vf(eqn_idx%c)%sf(j, k, l - 1))
1040 end do
1041 end do
1042 end do
1043
1044# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1045#if defined(MFC_OpenACC)
1046# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1047!$acc end parallel loop
1048# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1049#elif defined(MFC_OpenMP)
1050# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1051
1052# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1053!$omp end target teams loop
1054# 290 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1055#endif
1056 end if
1057
1058
1059# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1060
1061# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1062#if defined(MFC_OpenACC)
1063# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1064!$acc parallel loop collapse(3) gang vector default(present)
1065# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1066#elif defined(MFC_OpenMP)
1067# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1068
1069# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1070
1071# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1072
1073# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1074!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1075# 293 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1076#endif
1077 do l = 0, p
1078 do k = 0, n
1079 do j = 0, m
1080 c_divs(num_dims + 1)%sf(j, k, l) = 0._wp
1081
1082# 298 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1083#if defined(MFC_OpenACC)
1084# 298 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1085!$acc loop seq
1086# 298 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1087#elif defined(MFC_OpenMP)
1088# 298 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1089
1090# 298 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1091#endif
1092 do i = 1, num_dims
1093 c_divs(num_dims + 1)%sf(j, k, l) = c_divs(num_dims + 1)%sf(j, k, l) + c_divs(i)%sf(j, k, l)**2._wp
1094 end do
1095
1096 c_divs(num_dims + 1)%sf(j, k, l) = sqrt(real(c_divs(num_dims + 1)%sf(j, k, l), kind=wp))
1097 end do
1098 end do
1099 end do
1100
1101# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1102#if defined(MFC_OpenACC)
1103# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1104!$acc end parallel loop
1105# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1106#elif defined(MFC_OpenMP)
1107# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1108
1109# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1110!$omp end target teams loop
1111# 307 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1112#endif
1113
1114 call s_populate_capillary_buffers(c_divs, bc_type, bc_xyz_info(bc_x, bc_y, bc_z))
1115
1116 iv%beg = 1; iv%end = num_dims + 1
1117
1118 ! reconstruct gradient components at cell boundaries
1120
1121 end subroutine s_get_capillary
1122
1123 !> Reconstruct left and right cell-boundary values of capillary variables
1124 subroutine s_reconstruct_cell_boundary_values_capillary(v_vf, vL_x, vR_x, norm_dir)
1125
1126 type(scalar_field), dimension(iv%beg:iv%end), intent(in) :: v_vf
1127 real(wp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,iv%beg:), intent(out) :: vL_x
1128 real(wp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,iv%beg:), intent(out) :: vR_x
1129 integer, intent(in) :: norm_dir
1130 integer :: i, j, k, l
1131
1132
1133# 327 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1134#if defined(MFC_OpenACC)
1135# 327 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1136!$acc update device(iv)
1137# 327 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1138#elif defined(MFC_OpenMP)
1139# 327 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1140!$omp target update to(iv)
1141# 327 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1142#endif
1143
1144
1145# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1146
1147# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1148#if defined(MFC_OpenACC)
1149# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1150!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
1151# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1152#elif defined(MFC_OpenMP)
1153# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1154
1155# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1156
1157# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1158
1159# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1160!$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)
1161# 329 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1162#endif
1163 do i = iv%beg, iv%end
1164 do l = idwbuff(3)%beg, idwbuff(3)%end
1165 do k = idwbuff(2)%beg, idwbuff(2)%end
1166 do j = idwbuff(1)%beg, idwbuff(1)%end
1167 vl_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
1168 vr_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
1169 end do
1170 end do
1171 end do
1172 end do
1173
1174# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1175#if defined(MFC_OpenACC)
1176# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1177!$acc end parallel loop
1178# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1179#elif defined(MFC_OpenMP)
1180# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1181
1182# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1183!$omp end target teams loop
1184# 340 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1185#endif
1186
1188
1189 !> Finalize the surface tension module
1191
1192 integer :: j
1193
1194 do j = 1, num_dims
1195#ifdef MFC_DEBUG
1196# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1197 block
1198# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1199 use iso_fortran_env, only: output_unit
1200# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1201
1202# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1203 print *, 'm_surface_tension.fpp:350: ', '@:DEALLOCATE(c_divs(j)%sf)'
1204# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1205
1206# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1207 call flush (output_unit)
1208# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1209 end block
1210# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1211#endif
1212# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1213
1214# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1215#if defined(MFC_OpenACC)
1216# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1217!$acc exit data delete(c_divs(j)%sf)
1218# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1219#elif defined(MFC_OpenMP)
1220# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1221!$omp target exit data map(release:c_divs(j)%sf)
1222# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1223#endif
1224# 350 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1225 deallocate (c_divs(j)%sf)
1226 end do
1227
1228#ifdef MFC_DEBUG
1229# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1230 block
1231# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1232 use iso_fortran_env, only: output_unit
1233# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1234
1235# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1236 print *, 'm_surface_tension.fpp:353: ', '@:DEALLOCATE(c_divs)'
1237# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1238
1239# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1240 call flush (output_unit)
1241# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1242 end block
1243# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1244#endif
1245# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1246
1247# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1248#if defined(MFC_OpenACC)
1249# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1250!$acc exit data delete(c_divs)
1251# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1252#elif defined(MFC_OpenMP)
1253# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1254!$omp target exit data map(release:c_divs)
1255# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1256#endif
1257# 353 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1258 deallocate (c_divs)
1259
1260#ifdef MFC_DEBUG
1261# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1262 block
1263# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1264 use iso_fortran_env, only: output_unit
1265# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1266
1267# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1268 print *, 'm_surface_tension.fpp:355: ', '@:DEALLOCATE(gL_x, gR_x)'
1269# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1270
1271# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1272 call flush (output_unit)
1273# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1274 end block
1275# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1276#endif
1277# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1278
1279# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1280#if defined(MFC_OpenACC)
1281# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1282!$acc exit data delete(gL_x, gR_x)
1283# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1284#elif defined(MFC_OpenMP)
1285# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1286!$omp target exit data map(release:gL_x, gR_x)
1287# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1288#endif
1289# 355 "/home/runner/work/MFC/MFC/src/simulation/m_surface_tension.fpp"
1290 deallocate (gl_x, gr_x)
1291
1293
1294end module m_surface_tension
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
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...
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
MUSCL reconstruction with interface sharpening for contact-preserving advection.
Computes capillary source fluxes and color-function gradients for the diffuse-interface surface tensi...
real(wp), dimension(:,:,:,:), allocatable gl_x
type(int_bounds_info) is3
type(scalar_field), dimension(:), allocatable c_divs
impure subroutine, public s_get_capillary(q_prim_vf, bc_type)
Compute color-function gradients and reconstruct them at cell boundaries.
subroutine s_reconstruct_cell_boundary_values_capillary(v_vf, vl_x, vr_x, norm_dir)
Reconstruct left and right cell-boundary values of capillary variables.
subroutine s_compute_capillary_stress_tensor(sigma_c, w1, w2, w3, normw, omega)
Compute the capillary source flux from reconstructed color-gradient fields Capillary stress tensor of...
impure subroutine, public s_initialize_surface_tension_module
Allocate and initialize surface tension module arrays.
subroutine, public s_compute_capillary_source_flux(vsrc_rsx_vf, flux_src_vf, id, isx, isy, isz)
impure subroutine, public s_finalize_surface_tension_module
Finalize the surface tension module.
type(int_bounds_info) is2
type(int_bounds_info) is1
type(int_bounds_info) iv
real(wp), dimension(:,:,:,:), allocatable gr_x
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
WENO/WENO-Z/TENO reconstruction with optional monotonicity-preserving bounds and mapped weights.
Integer bounds for variables.
Derived type annexing a scalar field (SF).