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