20 const amrex::Real dtdx,
21 const amrex::Real velL,
22 const amrex::Real velR,
26 const amrex::Real alpha,
27 amrex::Array4<amrex::Real const>
const& volfrac,
28 amrex::Array4<amrex::Real>
const& vofL,
29 amrex::Array4<amrex::Real>
const& vofR)
31 amrex::Real x0, deltax;
32 amrex::Real aL = velL * dtdx;
33 amrex::Real aR = velR * dtdx;
35 vofL(i, j, k) = 0.0_rt;
36 vofR(i, j, k) = 0.0_rt;
40 vofL(i, j, k) = 1.0_rt;
43 vofR(i, j, k) = 1.0_rt;
51 vofL(i, j, k) =
cut_volume(mx, my, mz, alpha, x0, deltax);
56 vofR(i, j, k) =
cut_volume(mx, my, mz, alpha, x0, deltax);
58 }
else if (dir == 1) {
61 vofL(i, j, k) =
cut_volume(my, mz, mx, alpha, x0, deltax);
66 vofR(i, j, k) =
cut_volume(my, mz, mx, alpha, x0, deltax);
68 }
else if (dir == 2) {
71 vofL(i, j, k) =
cut_volume(mz, mx, my, alpha, x0, deltax);
76 vofR(i, j, k) =
cut_volume(mz, mx, my, alpha, x0, deltax);
87 const amrex::Real dxi,
88 const amrex::Real velL,
89 const amrex::Real velR,
90 amrex::Array4<amrex::Real>
const& volfrac,
91 amrex::Array4<amrex::Real const>
const& fluxF,
92 amrex::Array4<amrex::Real const>
const& fluxC)
96 volfrac(i, j, k) += ((fluxF(i, j, k) - fluxF(i + 1, j, k)) * dxi) +
97 (fluxC(i, j, k) * (velR - velL));
98 }
else if (dir == 1) {
99 volfrac(i, j, k) += ((fluxF(i, j, k) - fluxF(i, j + 1, k)) * dxi) +
100 (fluxC(i, j, k) * (velR - velL));
101 }
else if (dir == 2) {
102 volfrac(i, j, k) += ((fluxF(i, j, k) - fluxF(i, j, k + 1)) * dxi) +
103 (fluxC(i, j, k) * (velR - velL));
106 volfrac(i, j, k) = amrex::max<amrex::Real>(
107 0.0_rt, amrex::min<amrex::Real>(1.0_rt, volfrac(i, j, k)));
115 const amrex::Real disp,
116 amrex::Array4<amrex::Real>
const& f_f,
117 amrex::Array4<amrex::Real>
const& vofL,
118 amrex::Array4<amrex::Real>
const& vofR,
119 amrex::Array4<amrex::Real>
const& advalpha_f,
120 amrex::GpuArray<BC, AMREX_SPACEDIM * 2> BCs,
124 auto bclo = BCs[amrex::Orientation(dir, amrex::Orientation::low)];
125 auto bchi = BCs[amrex::Orientation(dir, amrex::Orientation::high)];
132 vofR(domlo - 1, j, k) = 0.0_rt;
133 vofL(domlo, j, k) = 0.0_rt;
139 if (i == domhi + 1) {
140 vofL(domhi + 1, j, k) = 0.0_rt;
141 vofR(domhi, j, k) = 0.0_rt;
146 advalpha_f(i, j, k) = vofR(i - 1, j, k) + vofL(i, j, k);
147 f_f(i, j, k) = advalpha_f(i, j, k) * disp;
150 }
else if (dir == 1) {
154 vofR(i, domlo - 1, k) = 0.0_rt;
155 vofL(i, domlo, k) = 0.0_rt;
160 if (j == domhi + 1) {
161 vofL(i, domhi + 1, k) = 0.0_rt;
162 vofR(i, domhi, k) = 0.0_rt;
165 advalpha_f(i, j, k) = vofR(i, j - 1, k) + vofL(i, j, k);
166 f_f(i, j, k) = advalpha_f(i, j, k) * disp;
167 }
else if (dir == 2) {
171 vofR(i, j, domlo - 1) = 0.0_rt;
172 vofL(i, j, domlo) = 0.0_rt;
177 if (k == domhi + 1) {
178 vofL(i, j, domhi + 1) = 0.0_rt;
179 vofR(i, j, domhi) = 0.0_rt;
182 advalpha_f(i, j, k) = vofR(i, j, k - 1) + vofL(i, j, k);
183 f_f(i, j, k) = advalpha_f(i, j, k) * disp;
187AMREX_GPU_DEVICE AMREX_FORCE_INLINE
void c_mask(
191 amrex::Array4<amrex::Real>
const& volfrac,
192 amrex::Array4<amrex::Real>
const& volfrac_masked)
194 if (volfrac(i, j, k) > 0.5_rt) {
195 volfrac_masked(i, j, k) = 1.0_rt;
197 volfrac_masked(i, j, k) = 0.0_rt;
205 amrex::Array4<amrex::Real>
const& volfrac)
207 amrex::Real small_vof = 1.0e-6_rt;
208 amrex::Real volFxL = volfrac(i - 1, j, k);
209 amrex::Real volFxR = volfrac(i + 1, j, k);
210 amrex::Real volFyL = volfrac(i, j - 1, k);
211 amrex::Real volFyR = volfrac(i, j + 1, k);
212 amrex::Real volFzL = volfrac(i, j, k - 1);
213 amrex::Real volFzR = volfrac(i, j, k + 1);
215 if (volfrac(i, j, k) > 0.0_rt && volFxL < small_vof && volFxR < small_vof &&
216 volFyL < small_vof && volFyR < small_vof && volFzL < small_vof &&
217 volFzR < small_vof) {
218 volfrac(i, j, k) = 0.0_rt;
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void fluxes_bc_save(const int i, const int j, const int k, const int dir, const amrex::Real disp, amrex::Array4< amrex::Real > const &f_f, amrex::Array4< amrex::Real > const &vofL, amrex::Array4< amrex::Real > const &vofR, amrex::Array4< amrex::Real > const &advalpha_f, amrex::GpuArray< BC, AMREX_SPACEDIM *2 > BCs, const int domlo, const int domhi)
Definition split_advection.H:110
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void eulerian_implicit(const int i, const int j, const int k, const int dir, const amrex::Real dtdx, const amrex::Real velL, const amrex::Real velR, const amrex::Real mx, const amrex::Real my, const amrex::Real mz, const amrex::Real alpha, amrex::Array4< amrex::Real const > const &volfrac, amrex::Array4< amrex::Real > const &vofL, amrex::Array4< amrex::Real > const &vofR)
Definition split_advection.H:15
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void remove_vof_debris(const int i, const int j, const int k, amrex::Array4< amrex::Real > const &volfrac)
Definition split_advection.H:201
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real cut_volume(const amrex::Real m1, const amrex::Real m2, const amrex::Real m3, const amrex::Real alpha, const amrex::Real r0, const amrex::Real dr0)
Definition volume_fractions.H:367
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void balance_eulerian_fluxes(const int i, const int j, const int k, const int dir, const amrex::Real dxi, const amrex::Real velL, const amrex::Real velR, amrex::Array4< amrex::Real > const &volfrac, amrex::Array4< amrex::Real const > const &fluxF, amrex::Array4< amrex::Real const > const &fluxC)
Definition split_advection.H:82
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void c_mask(const int i, const int j, const int k, amrex::Array4< amrex::Real > const &volfrac, amrex::Array4< amrex::Real > const &volfrac_masked)
Definition split_advection.H:187