MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_compute_cbc.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
2!>
3!! @file
4!! @brief CBC computation module
5# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
6! This file exists so that Fypp can be run without generating case.fpp files for
7! each target. This is useful when generating documentation, for example. This
8! should also let MFC be built with CMake directly, without invoking mfc.sh.
9
10! For pre-process.
11# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
12
13! For moving immersed boundaries in simulation
14# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
15# 5 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp" 2
16# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
17# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
19# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
31! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
32! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
33# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
34# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
35# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
36
37# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55! New line at end of file is required for FYPP
56# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
57# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
58# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
59# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
71! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
72! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
73# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
74# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
75# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
76
77# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
78# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
79
80# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
81
82# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
83
84# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
85
86# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
87
88# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
89
90# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
91
92# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
93
94# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
95! New line at end of file is required for FYPP
96# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
97
98# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150
151# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152
153# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154
155# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
156
157# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
158
159# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
160
161# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
162
163# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
164
165# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
166
167# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
168
169# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
170
171# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
172
173# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
174! New line at end of file is required for FYPP
175# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
176# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
177# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
178# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183
184# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
185# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
187
188# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
189# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
190! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
191! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
192# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
193# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
194# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
195
196# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
197# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
198
199# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
200
201# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
202
203# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
204
205# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
206
207# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
208
209# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
210
211# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
212
213# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
214! New line at end of file is required for FYPP
215# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
216
217# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252
253# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
254
255# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
256
257# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
258
259# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
260
261# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
262
263# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
264
265# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
266
267# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
268
269# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
270
271# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
272! New line at end of file is required for FYPP
273# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
274
275! GPU parallel region (scalar reductions, maxval/minval)
276# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
277
278! GPU parallel loop over threads (most common GPU macro)
279# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
280
281! Required closing for GPU_PARALLEL_LOOP
282# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
283
284! Mark routine for device compilation
285# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
286
287! Declare device-resident data
288# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289
290! Inner loop within a GPU parallel region
291# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292
293! Scoped GPU data region
294# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295
296! Host code with device pointers (for MPI with GPU buffers)
297# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
298
299! Allocate device memory (unscoped)
300# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301
302! Free device memory
303# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
304
305! Atomic operation on device
306# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
307
308! End atomic capture block
309# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
310
311! Copy data between host and device
312# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313
314! Synchronization barrier
315# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
316
317! Import GPU library module (openacc or omp_lib)
318# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
319
320! Emit code only for AMD compiler
321# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
322
323! Emit code for non-Cray compilers
324# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325
326! Emit code only for Cray compiler
327# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
328
329! Emit code for non-NVIDIA compilers
330# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
331
332# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
333# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
334! New line at end of file is required for FYPP
335# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
336
337# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338
339! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
340! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
341! example see misc/nvidia_uvm/bind.sh.
342# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
343
344! Allocate and create GPU device memory
345# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
346
347! Free GPU device memory and deallocate
348# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
349
350! Cray-specific GPU pointer setup for vector fields
351# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
352
353! Cray-specific GPU pointer setup for scalar fields
354# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
355
356! Cray-specific GPU pointer setup for acoustic source spatials
357# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
358
359# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
360
361# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
362! New line at end of file is required for FYPP
363# 6 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp" 2
364
365!> @brief Characteristic boundary condition (CBC) computations for subsonic inflow, outflow, and slip walls
367
369
370 implicit none
371
376
377contains
378 !> Base L1 calculation
379 function f_base_l1(lambda, rho, c, dpres_ds, dvel_ds) result(L1)
380
381
382# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
383#if MFC_OpenACC
384# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
385!$acc routine seq
386# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
387#elif MFC_OpenMP
388# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
389
390# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
391
392# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
393!$omp declare target device_type(any)
394# 23 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
395#endif
396# 24 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
397 real(wp), dimension(3), intent(in) :: lambda
398 real(wp), intent(in) :: rho, c, dpres_ds
399# 29 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
400 real(wp), dimension(num_dims), intent(in) :: dvel_ds
401# 31 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
402 real(wp) :: l1
403 l1 = lambda(1)*(dpres_ds - rho*c*dvel_ds(dir_idx(1)))
404
405 end function f_base_l1
406
407 !> Fill density L variables
408 subroutine s_fill_density_l(L, lambda_factor, lambda2, c, mf, dalpha_rho_ds, dpres_ds)
409
410
411# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
412#if MFC_OpenACC
413# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
414!$acc routine seq
415# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
416#elif MFC_OpenMP
417# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
418
419# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
420
421# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
422!$omp declare target device_type(any)
423# 39 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
424#endif
425# 40 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
426# 43 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
427 real(wp), dimension(sys_size), intent(inout) :: L
428# 45 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
429# 48 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
430 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
431# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
432 real(wp), intent(in) :: lambda_factor, lambda2, c
433 real(wp), intent(in) :: dpres_ds
434 integer :: i
435
436 do i = 2, eqn_idx%mom%beg
437 l(i) = lambda_factor*lambda2*(c*c*dalpha_rho_ds(i - 1) - mf(i - 1)*dpres_ds)
438 end do
439
440 end subroutine s_fill_density_l
441
442 !> Fill velocity L variables
443 subroutine s_fill_velocity_l(L, lambda_factor, lambda2, dvel_ds)
444
445
446# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
447#if MFC_OpenACC
448# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
449!$acc routine seq
450# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
451#elif MFC_OpenMP
452# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
453
454# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
455
456# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
457!$omp declare target device_type(any)
458# 63 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
459#endif
460# 64 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
461# 67 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
462 real(wp), dimension(sys_size), intent(inout) :: L
463# 69 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
464# 72 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
465 real(wp), dimension(num_dims), intent(in) :: dvel_ds
466# 74 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
467 real(wp), intent(in) :: lambda_factor, lambda2
468 integer :: i
469
470 do i = eqn_idx%mom%beg + 1, eqn_idx%mom%end
471 l(i) = lambda_factor*lambda2*dvel_ds(dir_idx(i - eqn_idx%cont%end))
472 end do
473
474 end subroutine s_fill_velocity_l
475
476 !> Fill advection L variables
477 subroutine s_fill_advection_l(L, lambda_factor, lambda2, dadv_ds)
478
479
480# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
481#if MFC_OpenACC
482# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
483!$acc routine seq
484# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
485#elif MFC_OpenMP
486# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
487
488# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
489
490# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
491!$omp declare target device_type(any)
492# 86 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
493#endif
494# 87 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
495# 90 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
496 real(wp), dimension(sys_size), intent(inout) :: L
497# 92 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
498# 95 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
499 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
500# 97 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
501 real(wp), intent(in) :: lambda_factor, lambda2
502 integer :: i
503
504 do i = eqn_idx%E, eqn_idx%adv%end - 1
505 l(i) = lambda_factor*lambda2*dadv_ds(i - eqn_idx%mom%end)
506 end do
507
508 end subroutine s_fill_advection_l
509
510 !> Fill chemistry L variables
511 subroutine s_fill_chemistry_l(L, lambda_factor, lambda2, dYs_ds)
512
513
514# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
515#if MFC_OpenACC
516# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
517!$acc routine seq
518# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
519#elif MFC_OpenMP
520# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
521
522# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
523
524# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
525!$omp declare target device_type(any)
526# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
527#endif
528# 110 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
529# 113 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
530 real(wp), dimension(sys_size), intent(inout) :: L
531# 115 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
532 real(wp), dimension(1), intent(in) :: dYs_ds
533# 116 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
534 real(wp), intent(in) :: lambda_factor, lambda2
535 integer :: i
536
537 if (.not. chemistry) return
538
539 do i = eqn_idx%species%beg, eqn_idx%species%end
540 l(i) = lambda_factor*lambda2*dys_ds(i - eqn_idx%species%beg + 1)
541 end do
542
543 end subroutine s_fill_chemistry_l
544
545 !> Slip wall CBC (Thompson 1990, pg. 451)
546 subroutine s_compute_slip_wall_l(lambda, L, rho, c, dpres_ds, dvel_ds)
547
548
549# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
550#ifdef _CRAYFTN
551# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
552#if MFC_OpenACC
553# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
554!$acc routine seq
555# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
556#elif MFC_OpenMP
557# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
558
559# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
560
561# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
562!$omp declare target device_type(any)
563# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
564#else
565# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
566!DIR$ INLINEALWAYS s_compute_slip_wall_L
567# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
568#endif
569# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
570#elif MFC_OpenACC
571# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
572!$acc routine seq
573# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
574#elif MFC_OpenMP
575# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
576
577# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
578
579# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
580!$omp declare target device_type(any)
581# 130 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
582#endif
583# 131 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
584
585 real(wp), dimension(3), intent(in) :: lambda
586# 136 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
587 real(wp), dimension(sys_size), intent(inout) :: l
588# 138 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
589# 141 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
590 real(wp), dimension(num_dims), intent(in) :: dvel_ds
591# 143 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
592 real(wp), intent(in) :: rho, c, dpres_ds
593
594 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
595 l(2:eqn_idx%adv%end - 1) = 0._wp
596 l(eqn_idx%adv%end) = l(1)
597
598 end subroutine s_compute_slip_wall_l
599
600 !> Nonreflecting subsonic buffer CBC (Thompson 1987, pg. 13)
601 subroutine s_compute_nonreflecting_subsonic_buffer_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
602
603
604# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
605#ifdef _CRAYFTN
606# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
607#if MFC_OpenACC
608# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
609!$acc routine seq
610# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
611#elif MFC_OpenMP
612# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
613
614# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
615
616# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
617!$omp declare target device_type(any)
618# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
619#else
620# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
621!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_buffer_L
622# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
623#endif
624# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
625#elif MFC_OpenACC
626# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
627!$acc routine seq
628# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
629#elif MFC_OpenMP
630# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
631
632# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
633
634# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
635!$omp declare target device_type(any)
636# 154 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
637#endif
638# 155 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
639
640 real(wp), dimension(3), intent(in) :: lambda
641# 160 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
642 real(wp), dimension(sys_size), intent(inout) :: l
643# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
644# 167 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
645 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
646 real(wp), dimension(num_dims), intent(in) :: dvel_ds
647 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
648# 171 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
649 real(wp), dimension(1), intent(in) :: dys_ds
650# 172 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
651 real(wp), intent(in) :: rho, c
652 real(wp), intent(in) :: dpres_ds
653 real(wp) :: lambda_factor
654
655 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(1)))
656 l(1) = lambda_factor*lambda(1)*(dpres_ds - rho*c*dvel_ds(dir_idx(1)))
657
658 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(2)))
659 call s_fill_density_l(l, lambda_factor, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
660 call s_fill_velocity_l(l, lambda_factor, lambda(2), dvel_ds)
661 call s_fill_advection_l(l, lambda_factor, lambda(2), dadv_ds)
662 call s_fill_chemistry_l(l, lambda_factor, lambda(2), dys_ds)
663
664 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(3)))
665 l(eqn_idx%adv%end) = lambda_factor*lambda(3)*(dpres_ds + rho*c*dvel_ds(dir_idx(1)))
666
668
669 !> Nonreflecting subsonic inflow CBC (Thompson 1990, pg. 455)
670 subroutine s_compute_nonreflecting_subsonic_inflow_l(lambda, L, rho, c, dpres_ds, dvel_ds)
671
672
673# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
674#ifdef _CRAYFTN
675# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
676#if MFC_OpenACC
677# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
678!$acc routine seq
679# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
680#elif MFC_OpenMP
681# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
682
683# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
684
685# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
686!$omp declare target device_type(any)
687# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
688#else
689# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
690!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_inflow_L
691# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
692#endif
693# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
694#elif MFC_OpenACC
695# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
696!$acc routine seq
697# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
698#elif MFC_OpenMP
699# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
700
701# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
702
703# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
704!$omp declare target device_type(any)
705# 193 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
706#endif
707# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
708
709 real(wp), dimension(3), intent(in) :: lambda
710# 199 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
711 real(wp), dimension(sys_size), intent(inout) :: l
712# 201 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
713# 204 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
714 real(wp), dimension(num_dims), intent(in) :: dvel_ds
715# 206 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
716 real(wp), intent(in) :: rho, c, dpres_ds
717
718 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
719 l(2:eqn_idx%adv%end) = 0._wp
720 if (chemistry) l(eqn_idx%species%beg:eqn_idx%species%end) = 0._wp
721
723
724 !> Nonreflecting subsonic outflow CBC (Thompson 1990, pg. 454)
725 subroutine s_compute_nonreflecting_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
726
727
728# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
729#ifdef _CRAYFTN
730# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
731#if MFC_OpenACC
732# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
733!$acc routine seq
734# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
735#elif MFC_OpenMP
736# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
737
738# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
739
740# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
741!$omp declare target device_type(any)
742# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
743#else
744# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
745!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_outflow_L
746# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
747#endif
748# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
749#elif MFC_OpenACC
750# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
751!$acc routine seq
752# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
753#elif MFC_OpenMP
754# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
755
756# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
757
758# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
759!$omp declare target device_type(any)
760# 217 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
761#endif
762# 218 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
763
764 real(wp), dimension(3), intent(in) :: lambda
765# 223 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
766 real(wp), dimension(sys_size), intent(inout) :: l
767# 225 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
768# 230 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
769 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
770 real(wp), dimension(num_dims), intent(in) :: dvel_ds
771 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
772# 234 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
773 real(wp), dimension(1), intent(in) :: dys_ds
774# 235 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
775 real(wp), intent(in) :: rho, c
776 real(wp), intent(in) :: dpres_ds
777
778 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
779 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
780 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
781 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
782 call s_fill_chemistry_l(l, 1._wp, lambda(2), dys_ds)
783 l(eqn_idx%adv%end) = 0._wp
784
786
787 !> Force-free subsonic outflow CBC (Thompson 1990, pg. 454)
788 subroutine s_compute_force_free_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
789
790
791# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
792#ifdef _CRAYFTN
793# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
794#if MFC_OpenACC
795# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
796!$acc routine seq
797# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
798#elif MFC_OpenMP
799# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
800
801# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
802
803# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
804!$omp declare target device_type(any)
805# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
806#else
807# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
808!DIR$ INLINEALWAYS s_compute_force_free_subsonic_outflow_L
809# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
810#endif
811# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
812#elif MFC_OpenACC
813# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
814!$acc routine seq
815# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
816#elif MFC_OpenMP
817# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
818
819# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
820
821# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
822!$omp declare target device_type(any)
823# 250 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
824#endif
825# 251 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
826
827 real(wp), dimension(3), intent(in) :: lambda
828# 256 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
829 real(wp), dimension(sys_size), intent(inout) :: l
830# 258 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
831# 263 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
832 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
833 real(wp), dimension(num_dims), intent(in) :: dvel_ds
834 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
835# 267 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
836 real(wp), intent(in) :: rho, c
837 real(wp), intent(in) :: dpres_ds
838
839 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
840 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
841 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
842 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
843 l(eqn_idx%adv%end) = l(1) + 2._wp*rho*c*lambda(2)*dvel_ds(dir_idx(1))
844
846
847 !> Constant pressure subsonic outflow CBC (Thompson 1990, pg. 455)
848 subroutine s_compute_constant_pressure_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
849
850
851# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
852#ifdef _CRAYFTN
853# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
854#if MFC_OpenACC
855# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
856!$acc routine seq
857# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
858#elif MFC_OpenMP
859# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
860
861# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
862
863# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
864!$omp declare target device_type(any)
865# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
866#else
867# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
868!DIR$ INLINEALWAYS s_compute_constant_pressure_subsonic_outflow_L
869# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
870#endif
871# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
872#elif MFC_OpenACC
873# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
874!$acc routine seq
875# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
876#elif MFC_OpenMP
877# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
878
879# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
880
881# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
882!$omp declare target device_type(any)
883# 281 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
884#endif
885# 282 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
886
887 real(wp), dimension(3), intent(in) :: lambda
888# 287 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
889 real(wp), dimension(sys_size), intent(inout) :: l
890# 289 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
891# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
892 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
893 real(wp), dimension(num_dims), intent(in) :: dvel_ds
894 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
895# 298 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
896 real(wp), intent(in) :: rho, c
897 real(wp), intent(in) :: dpres_ds
898
899 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
900 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
901 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
902 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
903 l(eqn_idx%adv%end) = -l(1)
904
906
907 !> Supersonic inflow CBC (Thompson 1990, pg. 453)
909
910
911# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
912#ifdef _CRAYFTN
913# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
914#if MFC_OpenACC
915# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
916!$acc routine seq
917# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
918#elif MFC_OpenMP
919# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
920
921# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
922
923# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
924!$omp declare target device_type(any)
925# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
926#else
927# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
928!DIR$ INLINEALWAYS s_compute_supersonic_inflow_L
929# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
930#endif
931# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
932#elif MFC_OpenACC
933# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
934!$acc routine seq
935# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
936#elif MFC_OpenMP
937# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
938
939# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
940
941# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
942!$omp declare target device_type(any)
943# 312 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
944#endif
945# 313 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
946# 316 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
947 real(wp), dimension(sys_size), intent(inout) :: l
948# 318 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
949 l(1:eqn_idx%adv%end) = 0._wp
950 if (chemistry) l(eqn_idx%species%beg:eqn_idx%species%end) = 0._wp
951
952 end subroutine s_compute_supersonic_inflow_l
953
954 !> Supersonic outflow CBC (Thompson 1990, pg. 453)
955 subroutine s_compute_supersonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
956
957
958# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
959#ifdef _CRAYFTN
960# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
961#if MFC_OpenACC
962# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
963!$acc routine seq
964# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
965#elif MFC_OpenMP
966# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
967
968# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
969
970# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
971!$omp declare target device_type(any)
972# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
973#else
974# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
975!DIR$ INLINEALWAYS s_compute_supersonic_outflow_L
976# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
977#endif
978# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
979#elif MFC_OpenACC
980# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
981!$acc routine seq
982# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
983#elif MFC_OpenMP
984# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
985
986# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
987
988# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
989!$omp declare target device_type(any)
990# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
991#endif
992# 327 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
993
994 real(wp), dimension(3), intent(in) :: lambda
995# 332 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
996 real(wp), dimension(sys_size), intent(inout) :: l
997# 334 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
998# 339 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
999 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
1000 real(wp), dimension(num_dims), intent(in) :: dvel_ds
1001 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
1002# 343 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
1003 real(wp), dimension(1), intent(in) :: dys_ds
1004# 344 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
1005 real(wp), intent(in) :: rho, c
1006 real(wp), intent(in) :: dpres_ds
1007
1008 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
1009 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
1010 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
1011 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
1012 call s_fill_chemistry_l(l, 1._wp, lambda(2), dys_ds)
1013 l(eqn_idx%adv%end) = lambda(3)*(dpres_ds + rho*c*dvel_ds(dir_idx(1)))
1014
1015 end subroutine s_compute_supersonic_outflow_l
1016
1017end module m_compute_cbc
integer, intent(in) l
Characteristic boundary condition (CBC) computations for subsonic inflow, outflow,...
subroutine s_fill_velocity_l(l, lambda_factor, lambda2, dvel_ds)
Fill velocity L variables.
subroutine, public s_compute_nonreflecting_subsonic_buffer_l(lambda, l, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dys_ds)
Nonreflecting subsonic buffer CBC (Thompson 1987, pg. 13).
subroutine, public s_compute_force_free_subsonic_outflow_l(lambda, l, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
Force-free subsonic outflow CBC (Thompson 1990, pg. 454).
subroutine, public s_compute_nonreflecting_subsonic_inflow_l(lambda, l, rho, c, dpres_ds, dvel_ds)
Nonreflecting subsonic inflow CBC (Thompson 1990, pg. 455).
subroutine, public s_compute_supersonic_outflow_l(lambda, l, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dys_ds)
Supersonic outflow CBC (Thompson 1990, pg. 453).
subroutine s_fill_density_l(l, lambda_factor, lambda2, c, mf, dalpha_rho_ds, dpres_ds)
Fill density L variables.
subroutine, public s_compute_constant_pressure_subsonic_outflow_l(lambda, l, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
Constant pressure subsonic outflow CBC (Thompson 1990, pg. 455).
subroutine s_fill_chemistry_l(l, lambda_factor, lambda2, dys_ds)
Fill chemistry L variables.
subroutine, public s_compute_slip_wall_l(lambda, l, rho, c, dpres_ds, dvel_ds)
Slip wall CBC (Thompson 1990, pg. 451).
subroutine, public s_compute_supersonic_inflow_l(l)
Supersonic inflow CBC (Thompson 1990, pg. 453).
subroutine, public s_compute_nonreflecting_subsonic_outflow_l(lambda, l, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dys_ds)
Nonreflecting subsonic outflow CBC (Thompson 1990, pg. 454).
subroutine s_fill_advection_l(l, lambda_factor, lambda2, dadv_ds)
Fill advection L variables.
real(wp) function f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
Base L1 calculation.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer, dimension(3) dir_idx