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