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