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