AMReX-Hydro
AMReX-based hydro routines for low Mach number flows
 
Loading...
Searching...
No Matches
hydro_ebgodunov_corner_couple.H
Go to the documentation of this file.
1/**
2 * \file hydro_ebgodunov_corner_couple.H
3 * \addtogroup EBGodunov
4 * @{
5 *
6 */
7
8#ifndef EBGODUNOV_CORNER_COUPLE_H
9#define EBGODUNOV_CORNER_COUPLE_H
10
11#include <AMReX_Gpu.H>
12#include <AMReX_FArrayBox.H>
13#include <AMReX_Array.H>
14
15/* This header file contains the inlined __host__ __device__ functions required for
16 the scalar advection routines for 3D Godunov. It also contains function declarations
17 for controlling host functions. */
18
20
23 int i, int j, int k, int n, amrex::Real dt, amrex::Real dx,
24 bool iconserv, amrex::Real lo, amrex::Real hi,
33{
34 lo1 = lo;
35 hi1 = hi;
36
37 // Modify state on y-faces with x-derivatives to be used for computing state on z-faces
38 if (apy(i,j,k) > amrex::Real(0.))
39 {
40 if (apx(i+1,j-1,k) > amrex::Real(0.) && apx(i,j-1,k) > amrex::Real(0.))
41 {
42 // Here we add - dt/3 ( (q u)_x - q u_x ) = -dt/3 (u q_x )
43 lo1 += ( - dt/(amrex::Real(3.0)*dx)*(apx(i+1,j-1,k)*state(i+1,j-1,k,n)*umac(i+1,j-1,k)
44 - apx(i ,j-1,k)*state(i ,j-1,k,n)*umac(i ,j-1,k))
45 + dt/(amrex::Real(3.0)*dx)*s(i,j-1,k,n)*(apx(i+1,j-1,k)*umac(i+1,j-1,k)
46 -apx(i ,j-1,k)*umac(i ,j-1,k)) ) / vfrac(i,j-1,k);
47
48 // Here we add - dt/3 ( q divu ) if conservative
49 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j-1,k,n)*divu_cc(i,j-1,k) : amrex::Real(0.0);
50 }
51
52 if (apx(i+1,j,k) > amrex::Real(0.) && apx(i,j,k) > amrex::Real(0.))
53 {
54 // Here we add - dt/3 ( (q u)_x - q u_x ) = -dt/3 (u q_x )
55 hi1 += ( - dt/(amrex::Real(3.0)*dx)*(apx(i+1,j,k)*state(i+1,j,k,n)*umac(i+1,j,k)
56 - apx(i ,j,k)*state(i ,j,k,n)*umac(i ,j,k))
57 + dt/(amrex::Real(3.0)*dx)*s(i,j,k,n)*(apx(i+1,j,k)*umac(i+1,j,k) -
58 apx(i ,j,k)*umac(i ,j,k)) ) / vfrac(i,j,k);
59
60 // Here we add - dt/3 ( q divu ) if conservative
61 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
62 }
63 }
64}
65
68 int i, int j, int k, int n, amrex::Real dt, amrex::Real dx,
69 bool iconserv, amrex::Real lo, amrex::Real hi,
78{
79 lo1 = lo;
80 hi1 = hi;
81
82 // Modify state on z-faces with x-derivatives to be used for computing state on y-faces
83 if (apz(i,j,k) > amrex::Real(0.))
84 {
85 if (apx(i+1,j,k-1) > amrex::Real(0.) && apx(i,j,k-1) > amrex::Real(0.))
86 {
87 // Here we add - dt/3 ( (q u)_x - q u_x ) = -dt/3 (u q_x )
88 lo1 += ( - dt/(amrex::Real(3.0)*dx)*(apx(i+1,j,k-1)*state(i+1,j,k-1,n)*umac(i+1,j,k-1)
89 - apx(i ,j,k-1)*state(i ,j,k-1,n)*umac(i ,j,k-1))
90 + dt/(amrex::Real(3.0)*dx)*s(i,j,k-1,n)*(apx(i+1,j,k-1)*umac(i+1,j,k-1)
91 -apx(i ,j,k-1)*umac(i ,j,k-1)) ) / vfrac(i,j,k-1);
92
93 // Here we add - dt/3 ( q divu ) if conservative
94 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k-1,n)*divu_cc(i,j,k-1) : amrex::Real(0.0);
95 }
96 if (apx(i+1,j,k) > amrex::Real(0.) && apx(i,j,k) > amrex::Real(0.))
97 {
98 // Here we add - dt/3 ( (q u)_x - q u_x ) = -dt/3 (u q_x )
99 hi1 += ( - dt/(amrex::Real(3.0)*dx)*(apx(i+1,j,k)*state(i+1,j,k,n)*umac(i+1,j,k)
100 - apx(i ,j,k)*state(i ,j,k,n)*umac(i ,j,k))
101 + dt/(amrex::Real(3.0)*dx)*s(i,j,k,n)*(apx(i+1,j,k)*umac(i+1,j,k)
102 -apx(i ,j,k)*umac(i ,j,k)) ) / vfrac(i,j,k);
103
104 // Here we add - dt/3 ( q divu ) if conservative
105 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
106 }
107 }
108}
109
112 int i, int j, int k, int n, amrex::Real dt, amrex::Real dy,
113 bool iconserv, amrex::Real lo, amrex::Real hi,
122{
123 lo1 = lo;
124 hi1 = hi;
125
126 // Modify state on x-faces with y-derivatives to be used for computing state on z-faces
127 if (apx(i,j,k) > amrex::Real(0.))
128 {
129 if (apy(i-1,j+1,k) > amrex::Real(0.) && apy(i-1,j,k) > amrex::Real(0.))
130 {
131 // Here we add - dt/3 ( (q v)_y - q v_y ) = -dt/3 (v q_y )
132 lo1 += ( - dt/(amrex::Real(3.0)*dy)*(apy(i-1,j+1,k)*state(i-1,j+1,k,n)*vmac(i-1,j+1,k)
133 - apy(i-1,j ,k)*state(i-1,j ,k,n)*vmac(i-1,j ,k))
134 + dt/(amrex::Real(3.0)*dy)*s(i-1,j,k,n)*(apy(i-1,j+1,k)*vmac(i-1,j+1,k)
135 -apy(i-1,j ,k)*vmac(i-1,j ,k)) ) /vfrac(i-1,j,k);
136
137 // Here we add - dt/3 ( q divu ) if conservative
138 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i-1,j,k,n)*divu_cc(i-1,j,k) : amrex::Real(0.0);
139 }
140
141 if (apy(i,j+1,k) > amrex::Real(0.) && apy(i,j,k) > amrex::Real(0.))
142 {
143 // Here we add - dt/3 ( (q v)_y - q v_y ) = -dt/3 (v q_y )
144 hi1 += ( - dt/(amrex::Real(3.0)*dy)*(apy(i,j+1,k)*state(i,j+1,k,n)*vmac(i,j+1,k)
145 -apy(i,j ,k)*state(i,j ,k,n)*vmac(i,j ,k))
146 + dt/(amrex::Real(3.0)*dy)*s(i,j,k,n)*(apy(i,j+1,k)*vmac(i,j+1,k)
147 -apy(i,j ,k)*vmac(i,j ,k)) ) /vfrac(i,j,k);
148
149 // Here we add - dt/3 ( q divu ) if conservative
150 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
151 }
152 }
153}
154
157 int i, int j, int k, int n, amrex::Real dt, amrex::Real dy,
158 bool iconserv, amrex::Real lo, amrex::Real hi,
167{
168 lo1 = lo;
169 hi1 = hi;
170
171 // Modify state on z-faces with y-derivatives to be used for computing state on x-faces
172 if (apz(i,j,k) > amrex::Real(0.))
173 {
174 if (apy(i,j+1,k-1) > amrex::Real(0.) && apy(i,j,k-1) > amrex::Real(0.))
175 {
176 // Here we add - dt/3 ( (q v)_y - q v_y ) = -dt/3 (v q_y )
177 lo1 += ( - dt/(amrex::Real(3.0)*dy)*(apy(i,j+1,k-1)*state(i,j+1,k-1,n)*vmac(i,j+1,k-1)
178 - apy(i,j ,k-1)*state(i,j ,k-1,n)*vmac(i,j ,k-1))
179 + dt/(amrex::Real(3.0)*dy)*s(i,j,k-1,n)*(apy(i,j+1,k-1)*vmac(i,j+1,k-1)
180 -apy(i,j ,k-1)*vmac(i,j ,k-1)) ) /vfrac(i,j,k-1);
181
182 // Here we add - dt/3 ( q divu ) if conservative
183 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k-1,n)*divu_cc(i,j,k-1) : amrex::Real(0.0);
184 }
185
186 if (apy(i,j+1,k) > amrex::Real(0.) && apy(i,j,k) > amrex::Real(0.))
187 {
188 // Here we add - dt/3 ( (q v)_y - q v_y ) = -dt/3 (v q_y )
189 hi1 += ( - dt/(amrex::Real(3.0)*dy)*(apy(i,j+1,k)*state(i,j+1,k,n)*vmac(i,j+1,k)
190 - apy(i,j ,k)*state(i,j ,k,n)*vmac(i,j ,k))
191 + dt/(amrex::Real(3.0)*dy)*s(i,j,k,n)*(apy(i,j+1,k)*vmac(i,j+1,k)
192 -apy(i,j ,k)*vmac(i,j ,k)) ) /vfrac(i,j,k);
193
194 // Here we add - dt/3 ( q divu ) if conservative
195 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
196 }
197 }
198}
199
202 int i, int j, int k, int n, amrex::Real dt, amrex::Real dz,
203 bool iconserv, amrex::Real lo, amrex::Real hi,
212{
213 lo1 = lo;
214 hi1 = hi;
215
216 // Modify state on x-faces with z-derivatives to be used for computing state on y-faces
217 if (apx(i,j,k) > amrex::Real(0.))
218 {
219 if (apz(i-1,j,k+1) > amrex::Real(0.) && apz(i-1,j,k) > amrex::Real(0.))
220 {
221 // Here we add - dt/3 ( (q w)_z - q w_z ) = -dt/3 (w q_z )
222 lo1 += ( - dt/(amrex::Real(3.0)*dz)*(apz(i-1,j,k+1)*state(i-1,j,k+1,n)*wmac(i-1,j,k+1)
223 - apz(i-1,j,k )*state(i-1,j,k ,n)*wmac(i-1,j,k ))
224 + dt/(amrex::Real(3.0)*dz)*s(i-1,j,k,n)*(apz(i-1,j,k+1)*wmac(i-1,j,k+1)
225 -apz(i-1,j,k )*wmac(i-1,j,k )) ) / vfrac(i-1,j,k);
226
227 // Here we add - dt/3 ( q divu ) if conservative
228 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i-1,j,k,n)*divu_cc(i-1,j,k) : amrex::Real(0.0);
229 }
230
231 if (apz(i,j,k+1) > amrex::Real(0.) && apz(i,j,k) > amrex::Real(0.))
232 {
233 // Here we add - dt/3 ( (q w)_z - q w_z ) = -dt/3 (w q_z )
234 hi1 += ( - dt/(amrex::Real(3.0)*dz)*(apz(i,j,k+1)*state(i,j,k+1,n)*wmac(i,j,k+1)
235 - apz(i,j,k )*state(i,j,k ,n)*wmac(i,j,k ))
236 + dt/(amrex::Real(3.0)*dz)*s(i,j,k,n)*(apz(i,j,k+1)*wmac(i,j,k+1)
237 -apz(i,j,k )*wmac(i,j,k )) ) / vfrac(i,j,k);
238
239 // Here we add - dt/3 ( q divu ) if conservative
240 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
241 }
242 }
243}
244
247 int i, int j, int k, int n, amrex::Real dt, amrex::Real dz,
248 bool iconserv, amrex::Real lo, amrex::Real hi,
257{
258 lo1 = lo;
259 hi1 = hi;
260
261 // Modify state on y-faces with z-derivatives to be used for computing state on x-faces
262 if (apy(i,j,k) > amrex::Real(0.))
263 {
264 if (apz(i,j-1,k+1) > amrex::Real(0.) && apz(i,j-1,k) > amrex::Real(0.))
265 {
266 // Here we add - dt/3 ( (q w)_z - q w_z ) = -dt/3 (w q_z )
267 lo1 += ( - dt/(amrex::Real(3.0)*dz)*(apz(i,j-1,k+1)*state(i,j-1,k+1,n)*wmac(i,j-1,k+1)
268 - apz(i,j-1,k )*state(i,j-1,k ,n)*wmac(i,j-1,k))
269 + dt/(amrex::Real(3.0)*dz)*s(i,j-1,k,n)*(apz(i,j-1,k+1)*wmac(i,j-1,k+1)-
270 apz(i,j-1,k )*wmac(i,j-1,k )) ) /vfrac(i,j-1,k);
271
272 // Here we add - dt/3 ( q divu ) if conservative
273 lo1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j-1,k,n)*divu_cc(i,j-1,k) : amrex::Real(0.0);
274 }
275
276 if (apz(i,j,k+1) > amrex::Real(0.) && apz(i,j,k) > amrex::Real(0.))
277 {
278 // Here we add - dt/3 ( (q w)_z - q w_z ) = -dt/3 (w q_z )
279 hi1 += ( - dt/(amrex::Real(3.0)*dz)*(apz(i,j,k+1)*state(i,j,k+1,n)*wmac(i,j,k+1)
280 - apz(i,j,k )*state(i,j,k ,n)*wmac(i,j,k))
281 + dt/(amrex::Real(3.0)*dz)*s(i,j,k,n)*(apz(i,j,k+1)*wmac(i,j,k+1)
282 -apz(i,j,k)*wmac(i,j,k)) ) / vfrac(i,j,k);
283
284 // Here we add - dt/3 ( q divu ) if conservative
285 hi1 += (iconserv) ? - dt/(amrex::Real(3.0)) * s(i,j,k,n)*divu_cc(i,j,k) : amrex::Real(0.0);
286 }
287 }
288
289}
290}
291#endif
292/** @} */
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
amrex_real Real
Definition hydro_ebgodunov_corner_couple.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_xz(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dz, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &wmac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:201
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_zy(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dy, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &vmac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:156
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_zx(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dx, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &umac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:67
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_xy(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dy, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &vmac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:111
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_yx(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dx, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &umac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:22
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void EBGodunov_corner_couple_yz(amrex::Real &lo1, amrex::Real &hi1, int i, int j, int k, int n, amrex::Real dt, amrex::Real dz, bool iconserv, amrex::Real lo, amrex::Real hi, amrex::Array4< amrex::Real const > const &s, amrex::Array4< amrex::Real const > const &divu_cc, amrex::Array4< amrex::Real const > const &, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &wmac, amrex::Array4< amrex::Real const > const &state)
Definition hydro_ebgodunov_corner_couple.H:246