Convert velocity to momentum by multiplying by density averaged onto faces.
45 const BCRec* bc_ptr_h = domain_bcs_type_h.data();
49 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
51 for ( MFIter mfi(density,TilingIfNotGPU()); mfi.isValid(); ++mfi)
54 const Box& bx = mfi.tilebox();
57 tbx = mfi.tilebox(IntVect(1,0,0),xvel_ngrow);
58 tby = mfi.tilebox(IntVect(0,1,0),yvel_ngrow);
59 tbz = mfi.tilebox(IntVect(0,0,1),zvel_ngrow);
62 if (tbz.smallEnd(2) < domain.smallEnd(2)) tbz.setSmall(2,domain.smallEnd(2));
63 if (tbz.bigEnd(2) > domain.bigEnd(2)+1) tbz.setBig(2,domain.bigEnd(2)+1);
66 const Array4<const Real>& dens_arr = density.array(mfi);
69 Array4<Real>
const& momx =
xmom.array(mfi);
70 Array4<Real>
const& momy =
ymom.array(mfi);
71 Array4<Real>
const& momz =
zmom.array(mfi);
74 const Array4<Real const>& velx = xvel_in.const_array(mfi);
75 const Array4<Real const>& vely = yvel_in.const_array(mfi);
76 const Array4<Real const>& velz = zvel_in.const_array(mfi);
80 if (c_vfrac==
nullptr) {
82 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
83 momx(i,j,k) = velx(i,j,k) *
myhalf * (dens_arr(i,j,k,
Rho_comp) + dens_arr(i-1,j,k,
Rho_comp));
85 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
86 momy(i,j,k) = vely(i,j,k) *
myhalf * (dens_arr(i,j,k,
Rho_comp) + dens_arr(i,j-1,k,
Rho_comp));
88 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
89 momz(i,j,k) = velz(i,j,k) *
myhalf * (dens_arr(i,j,k,
Rho_comp) + dens_arr(i,j,k-1,
Rho_comp));
93 const Array4<const Real>& c_vfrac_arr = c_vfrac->const_array(mfi);
96 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
97 Real vfrac_i = c_vfrac_arr(i,j,k);
98 Real vfrac_im1 = c_vfrac_arr(i-1,j,k);
99 Real vfrac_sum = vfrac_i + vfrac_im1;
100 if (vfrac_sum >
zero) {
104 momx(i,j,k) = velx(i,j,k) *
rho;
109 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
110 Real vfrac_j = c_vfrac_arr(i,j,k);
111 Real vfrac_jm1 = c_vfrac_arr(i,j-1,k);
112 Real vfrac_sum = vfrac_j + vfrac_jm1;
113 if (vfrac_sum >
zero) {
117 momy(i,j,k) = vely(i,j,k) *
rho;
122 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
123 Real vfrac_k = c_vfrac_arr(i,j,k);
124 Real vfrac_km1 = c_vfrac_arr(i,j,k-1);
125 Real vfrac_sum = vfrac_k + vfrac_km1;
126 if (vfrac_sum >
zero) {
130 momz(i,j,k) = velz(i,j,k) *
rho;
138 if (bx.smallEnd(0) == domain.smallEnd(0)) {
141 ParallelFor(makeSlab(tbx,0,domain.smallEnd(0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
142 momx(i,j,k) = velx(i,j,k) * dens_arr(i-1,j,k,
Rho_comp);
147 ParallelFor(makeSlab(tbx,0,domain.smallEnd(0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
148 if (velx(i,j,k) >=
zero) {
149 momx(i,j,k) = velx(i,j,k) * dens_arr(i-1,j,k,
Rho_comp);
155 if (bx.bigEnd(0) == domain.bigEnd(0)) {
158 ParallelFor(makeSlab(tbx,0,domain.bigEnd(0)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
159 momx(i,j,k) = velx(i,j,k) * dens_arr(i,j,k,
Rho_comp);
164 ParallelFor(makeSlab(tbx,0,domain.bigEnd(0)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
165 if (velx(i,j,k) <=
zero) {
166 momx(i,j,k) = velx(i,j,k) * dens_arr(i,j,k,
Rho_comp);
172 if (bx.smallEnd(1) == domain.smallEnd(1)) {
175 ParallelFor(makeSlab(tby,1,domain.smallEnd(1)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
176 momy(i,j,k) = vely(i,j,k) * dens_arr(i,j-1,k,
Rho_comp);
181 ParallelFor(makeSlab(tby,1,domain.smallEnd(1)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
182 if (vely(i,j,k) >=
zero) {
183 momy(i,j,k) = vely(i,j,k) * dens_arr(i,j-1,k,
Rho_comp);
189 if (bx.bigEnd(1) == domain.bigEnd(1)) {
192 ParallelFor(makeSlab(tby,1,domain.bigEnd(1)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
193 momy(i,j,k) = vely(i,j,k) * dens_arr(i,j,k,
Rho_comp);
198 ParallelFor(makeSlab(tby,1,domain.bigEnd(1)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
199 if (vely(i,j,k) <=
zero) {
200 momy(i,j,k) = vely(i,j,k) * dens_arr(i,j,k,
Rho_comp);
207 if (bx.bigEnd(2) == domain.bigEnd(2))
210 ParallelFor(makeSlab(tbx,2,domain.bigEnd(2)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
211 momx(i,j,k) = momx(i,j,k-1);
216 ParallelFor(makeSlab(tby,2,domain.bigEnd(2)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
217 momy(i,j,k) = momy(i,j,k-1);
#define Rho_comp
Definition: ERF_IndexDefines.H:39
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:34
amrex::Real Real
Definition: ERF_ShocInterface.H:19
void VelocityToMomentum(const MultiFab &xvel_in, const IntVect &xvel_ngrow, const MultiFab &yvel_in, const IntVect &yvel_ngrow, const MultiFab &zvel_in, const IntVect &zvel_ngrow, const MultiFab &density, MultiFab &xmom, MultiFab &ymom, MultiFab &zmom, const Box &domain, const Vector< BCRec > &domain_bcs_type_h, const MultiFab *c_vfrac)
Definition: ERF_VelocityToMomentum.cpp:31
@ yvel_bc
Definition: ERF_IndexDefines.H:106
@ cons_bc
Definition: ERF_IndexDefines.H:89
@ xvel_bc
Definition: ERF_IndexDefines.H:105
@ ext_dir
Definition: ERF_IndexDefines.H:297
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:305
@ ymom
Definition: ERF_IndexDefines.H:234
@ zmom
Definition: ERF_IndexDefines.H:235
@ xmom
Definition: ERF_IndexDefines.H:233
@ rho
Definition: ERF_Kessler.H:25