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