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, eqn_idx%mom%beg
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 = eqn_idx%mom%beg + 1, eqn_idx%mom%end
431 l(i) = lambda_factor*lambda2*dvel_ds(dir_idx(i - eqn_idx%cont%end))
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 = eqn_idx%E, eqn_idx%adv%end - 1
465 l(i) = lambda_factor*lambda2*dadv_ds(i - eqn_idx%mom%end)
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 = eqn_idx%species%beg, eqn_idx%species%end
501 l(i) = lambda_factor*lambda2*dys_ds(i - eqn_idx%species%beg + 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
554 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
555 l(2:eqn_idx%adv%end - 1) = 0._wp
556 l(eqn_idx%adv%end) = l(1)
557
558 end subroutine s_compute_slip_wall_l
559
560 !> Nonreflecting subsonic buffer CBC (Thompson 1987, pg. 13)
561 subroutine s_compute_nonreflecting_subsonic_buffer_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
562
563
564# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
565#ifdef _CRAYFTN
566# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
567#if MFC_OpenACC
568# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
569!$acc routine seq
570# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
571#elif MFC_OpenMP
572# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
573
574# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
575
576# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
577!$omp declare target device_type(any)
578# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
579#else
580# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
581!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_buffer_L
582# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
583#endif
584# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
585#elif MFC_OpenACC
586# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
587!$acc routine seq
588# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
589#elif MFC_OpenMP
590# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
591
592# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
593
594# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
595!$omp declare target device_type(any)
596# 162 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
597#endif
598
599 real(wp), dimension(3), intent(in) :: lambda
600# 168 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
601 real(wp), dimension(sys_size), intent(inout) :: l
602# 170 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
603# 176 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
604 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
605 real(wp), dimension(num_dims), intent(in) :: dvel_ds
606 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
607 real(wp), dimension(num_species), intent(in) :: dys_ds
608# 181 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
609 real(wp), intent(in) :: rho, c
610 real(wp), intent(in) :: dpres_ds
611 real(wp) :: lambda_factor
612
613 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(1)))
614 l(1) = lambda_factor*lambda(1)*(dpres_ds - rho*c*dvel_ds(dir_idx(1)))
615
616 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(2)))
617 call s_fill_density_l(l, lambda_factor, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
618 call s_fill_velocity_l(l, lambda_factor, lambda(2), dvel_ds)
619 call s_fill_advection_l(l, lambda_factor, lambda(2), dadv_ds)
620 call s_fill_chemistry_l(l, lambda_factor, lambda(2), dys_ds)
621
622 lambda_factor = (5.e-1_wp - 5.e-1_wp*sign(1._wp, lambda(3)))
623 l(eqn_idx%adv%end) = lambda_factor*lambda(3)*(dpres_ds + rho*c*dvel_ds(dir_idx(1)))
624
626
627 !> Nonreflecting subsonic inflow CBC (Thompson 1990, pg. 455)
628 subroutine s_compute_nonreflecting_subsonic_inflow_l(lambda, L, rho, c, dpres_ds, dvel_ds)
629
630
631# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
632#ifdef _CRAYFTN
633# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
634#if MFC_OpenACC
635# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
636!$acc routine seq
637# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
638#elif MFC_OpenMP
639# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
640
641# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
642
643# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
644!$omp declare target device_type(any)
645# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
646#else
647# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
648!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_inflow_L
649# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
650#endif
651# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
652#elif MFC_OpenACC
653# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
654!$acc routine seq
655# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
656#elif MFC_OpenMP
657# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
658
659# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
660
661# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
662!$omp declare target device_type(any)
663# 202 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
664#endif
665
666 real(wp), dimension(3), intent(in) :: lambda
667# 208 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
668 real(wp), dimension(sys_size), intent(inout) :: l
669# 210 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
670# 213 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
671 real(wp), dimension(num_dims), intent(in) :: dvel_ds
672# 215 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
673 real(wp), intent(in) :: rho, c, dpres_ds
674
675 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
676 l(2:eqn_idx%adv%end) = 0._wp
677 if (chemistry) l(eqn_idx%species%beg:eqn_idx%species%end) = 0._wp
678
680
681 !> Nonreflecting subsonic outflow CBC (Thompson 1990, pg. 454)
682 subroutine s_compute_nonreflecting_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
683
684
685# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
686#ifdef _CRAYFTN
687# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
688#if MFC_OpenACC
689# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
690!$acc routine seq
691# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
692#elif MFC_OpenMP
693# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
694
695# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
696
697# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
698!$omp declare target device_type(any)
699# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
700#else
701# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
702!DIR$ INLINEALWAYS s_compute_nonreflecting_subsonic_outflow_L
703# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
704#endif
705# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
706#elif MFC_OpenACC
707# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
708!$acc routine seq
709# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
710#elif MFC_OpenMP
711# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
712
713# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
714
715# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
716!$omp declare target device_type(any)
717# 226 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
718#endif
719
720 real(wp), dimension(3), intent(in) :: lambda
721# 232 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
722 real(wp), dimension(sys_size), intent(inout) :: l
723# 234 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
724# 240 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
725 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
726 real(wp), dimension(num_dims), intent(in) :: dvel_ds
727 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
728 real(wp), dimension(num_species), intent(in) :: dys_ds
729# 245 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
730 real(wp), intent(in) :: rho, c
731 real(wp), intent(in) :: dpres_ds
732
733 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
734 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
735 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
736 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
737 call s_fill_chemistry_l(l, 1._wp, lambda(2), dys_ds)
738 l(eqn_idx%adv%end) = 0._wp
739
741
742 !> Force-free subsonic outflow CBC (Thompson 1990, pg. 454)
743 subroutine s_compute_force_free_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
744
745
746# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
747#ifdef _CRAYFTN
748# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
749#if MFC_OpenACC
750# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
751!$acc routine seq
752# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
753#elif MFC_OpenMP
754# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
755
756# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
757
758# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
759!$omp declare target device_type(any)
760# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
761#else
762# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
763!DIR$ INLINEALWAYS s_compute_force_free_subsonic_outflow_L
764# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
765#endif
766# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
767#elif MFC_OpenACC
768# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
769!$acc routine seq
770# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
771#elif MFC_OpenMP
772# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
773
774# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
775
776# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
777!$omp declare target device_type(any)
778# 260 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
779#endif
780
781 real(wp), dimension(3), intent(in) :: lambda
782# 266 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
783 real(wp), dimension(sys_size), intent(inout) :: l
784# 268 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
785# 273 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
786 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
787 real(wp), dimension(num_dims), intent(in) :: dvel_ds
788 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
789# 277 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
790 real(wp), intent(in) :: rho, c
791 real(wp), intent(in) :: dpres_ds
792
793 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
794 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
795 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
796 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
797 l(eqn_idx%adv%end) = l(1) + 2._wp*rho*c*lambda(2)*dvel_ds(dir_idx(1))
798
800
801 !> Constant pressure subsonic outflow CBC (Thompson 1990, pg. 455)
802 subroutine s_compute_constant_pressure_subsonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds)
803
804
805# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
806#ifdef _CRAYFTN
807# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
808#if MFC_OpenACC
809# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
810!$acc routine seq
811# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
812#elif MFC_OpenMP
813# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
814
815# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
816
817# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
818!$omp declare target device_type(any)
819# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
820#else
821# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
822!DIR$ INLINEALWAYS s_compute_constant_pressure_subsonic_outflow_L
823# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
824#endif
825# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
826#elif MFC_OpenACC
827# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
828!$acc routine seq
829# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
830#elif MFC_OpenMP
831# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
832
833# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
834
835# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
836!$omp declare target device_type(any)
837# 291 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
838#endif
839
840 real(wp), dimension(3), intent(in) :: lambda
841# 297 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
842 real(wp), dimension(sys_size), intent(inout) :: l
843# 299 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
844# 304 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
845 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
846 real(wp), dimension(num_dims), intent(in) :: dvel_ds
847 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
848# 308 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
849 real(wp), intent(in) :: rho, c
850 real(wp), intent(in) :: dpres_ds
851
852 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
853 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
854 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
855 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
856 l(eqn_idx%adv%end) = -l(1)
857
859
860 !> Supersonic inflow CBC (Thompson 1990, pg. 453)
862
863
864# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
865#ifdef _CRAYFTN
866# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
867#if MFC_OpenACC
868# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
869!$acc routine seq
870# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
871#elif MFC_OpenMP
872# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
873
874# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
875
876# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
877!$omp declare target device_type(any)
878# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
879#else
880# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
881!DIR$ INLINEALWAYS s_compute_supersonic_inflow_L
882# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
883#endif
884# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
885#elif MFC_OpenACC
886# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
887!$acc routine seq
888# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
889#elif MFC_OpenMP
890# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
891
892# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
893
894# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
895!$omp declare target device_type(any)
896# 322 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
897#endif
898# 326 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
899 real(wp), dimension(sys_size), intent(inout) :: l
900# 328 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
901 l(1:eqn_idx%adv%end) = 0._wp
902 if (chemistry) l(eqn_idx%species%beg:eqn_idx%species%end) = 0._wp
903
904 end subroutine s_compute_supersonic_inflow_l
905
906 !> Supersonic outflow CBC (Thompson 1990, pg. 453)
907 subroutine s_compute_supersonic_outflow_l(lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds, dYs_ds)
908
909
910# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
911#ifdef _CRAYFTN
912# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
913#if MFC_OpenACC
914# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
915!$acc routine seq
916# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
917#elif MFC_OpenMP
918# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
919
920# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
921
922# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
923!$omp declare target device_type(any)
924# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
925#else
926# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
927!DIR$ INLINEALWAYS s_compute_supersonic_outflow_L
928# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
929#endif
930# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
931#elif MFC_OpenACC
932# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
933!$acc routine seq
934# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
935#elif MFC_OpenMP
936# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
937
938# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
939
940# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
941!$omp declare target device_type(any)
942# 336 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
943#endif
944
945 real(wp), dimension(3), intent(in) :: lambda
946# 342 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
947 real(wp), dimension(sys_size), intent(inout) :: l
948# 344 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
949# 350 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
950 real(wp), dimension(num_fluids), intent(in) :: mf, dalpha_rho_ds
951 real(wp), dimension(num_dims), intent(in) :: dvel_ds
952 real(wp), dimension(num_fluids), intent(in) :: dadv_ds
953 real(wp), dimension(num_species), intent(in) :: dys_ds
954# 355 "/home/runner/work/MFC/MFC/src/simulation/m_compute_cbc.fpp"
955 real(wp), intent(in) :: rho, c
956 real(wp), intent(in) :: dpres_ds
957
958 l(1) = f_base_l1(lambda, rho, c, dpres_ds, dvel_ds)
959 call s_fill_density_l(l, 1._wp, lambda(2), c, mf, dalpha_rho_ds, dpres_ds)
960 call s_fill_velocity_l(l, 1._wp, lambda(2), dvel_ds)
961 call s_fill_advection_l(l, 1._wp, lambda(2), dadv_ds)
962 call s_fill_chemistry_l(l, 1._wp, lambda(2), dys_ds)
963 l(eqn_idx%adv%end) = lambda(3)*(dpres_ds + rho*c*dvel_ds(dir_idx(1)))
964
965 end subroutine s_compute_supersonic_outflow_l
966
967end 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
type(eqn_idx_info) eqn_idx
All conserved-variable equation index ranges and scalars.