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