34 const BCRec* bc_ptr_h = domain_bcs_type_h.data();
37 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
39 for ( MFIter mfi(density,TilingIfNotGPU()); mfi.isValid(); ++mfi)
42 Box bx = mfi.tilebox();
44 const Box& tbx = surroundingNodes(bx,0);
45 const Box& tby = surroundingNodes(bx,1);
46 const Box& tbz = surroundingNodes(bx,2);
49 const Array4<const Real>& dens_arr = density.array(mfi);
52 Array4<Real const>
const& momx = xmom_in.const_array(mfi);
53 Array4<Real const>
const& momy = ymom_in.const_array(mfi);
54 Array4<Real const>
const& momz = zmom_in.const_array(mfi);
57 const Array4<Real>& velx =
xvel.array(mfi);
58 const Array4<Real>& vely =
yvel.array(mfi);
59 const Array4<Real>& velz =
zvel.array(mfi);
61 if (c_vfrac==
nullptr) {
63 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
64 velx(i,j,k) = momx(i,j,k) *
two / (dens_arr(i,j,k,
Rho_comp) + dens_arr(i-1,j,k,
Rho_comp));
66 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
67 vely(i,j,k) = momy(i,j,k) *
two / (dens_arr(i,j,k,
Rho_comp) + dens_arr(i,j-1,k,
Rho_comp));
69 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
70 velz(i,j,k) = momz(i,j,k) *
two / (dens_arr(i,j,k,
Rho_comp) + dens_arr(i,j,k-1,
Rho_comp));
74 const Array4<const Real>& c_vfrac_arr = c_vfrac->const_array(mfi);
77 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
78 Real vfrac_i = c_vfrac_arr(i,j,k);
79 Real vfrac_im1 = c_vfrac_arr(i-1,j,k);
80 Real vfrac_sum = vfrac_i + vfrac_im1;
81 if (vfrac_sum >
zero) {
85 velx(i,j,k) = momx(i,j,k) /
rho;
88 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
89 Real vfrac_j = c_vfrac_arr(i,j,k);
90 Real vfrac_jm1 = c_vfrac_arr(i,j-1,k);
91 Real vfrac_sum = vfrac_j + vfrac_jm1;
92 if (vfrac_sum >
zero) {
96 vely(i,j,k) = momy(i,j,k) /
rho;
99 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
100 Real vfrac_k = c_vfrac_arr(i,j,k);
101 Real vfrac_km1 = c_vfrac_arr(i,j,k-1);
102 Real vfrac_sum = vfrac_k + vfrac_km1;
103 if (vfrac_sum >
zero) {
107 velz(i,j,k) = momz(i,j,k) /
rho;
112 if (bx.smallEnd(0) == domain.smallEnd(0)) {
115 ParallelFor(makeSlab(tbx,0,domain.smallEnd(0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
116 velx(i,j,k) = momx(i,j,k) / dens_arr(i-1,j,k,
Rho_comp);
121 ParallelFor(makeSlab(tbx,0,domain.smallEnd(0)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
122 if (momx(i,j,k) >=
zero) {
123 velx(i,j,k) = momx(i,j,k) / dens_arr(i-1,j,k,
Rho_comp);
129 if (bx.bigEnd(0) == domain.bigEnd(0)) {
132 ParallelFor(makeSlab(tbx,0,domain.bigEnd(0)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
133 velx(i,j,k) = momx(i,j,k) / dens_arr(i,j,k,
Rho_comp);
138 ParallelFor(makeSlab(tbx,0,domain.bigEnd(0)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
139 if (momx(i,j,k) <=
zero) {
140 velx(i,j,k) = momx(i,j,k) / dens_arr(i,j,k,
Rho_comp);
146 if (bx.smallEnd(1) == domain.smallEnd(1)) {
149 ParallelFor(makeSlab(tby,1,domain.smallEnd(1)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
150 vely(i,j,k) = momy(i,j,k) / dens_arr(i,j-1,k,
Rho_comp);
155 ParallelFor(makeSlab(tby,1,domain.smallEnd(1)), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
156 if (momy(i,j,k) >=
zero) {
157 vely(i,j,k) = momy(i,j,k) / dens_arr(i,j-1,k,
Rho_comp);
163 if (bx.bigEnd(1) == domain.bigEnd(1)) {
166 ParallelFor(makeSlab(tby,1,domain.bigEnd(1)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
167 vely(i,j,k) = momy(i,j,k) / dens_arr(i,j,k,
Rho_comp);
172 ParallelFor(makeSlab(tby,1,domain.bigEnd(1)+1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
173 if (momy(i,j,k) <=
zero) {
174 vely(i,j,k) = momy(i,j,k) / dens_arr(i,j,k,
Rho_comp);
#define Rho_comp
Definition: ERF_IndexDefines.H:39
void MomentumToVelocity(MultiFab &xvel, MultiFab &yvel, MultiFab &zvel, const MultiFab &density, const MultiFab &xmom_in, const MultiFab &ymom_in, const MultiFab &zmom_in, const Box &domain, const Vector< BCRec > &domain_bcs_type_h, const MultiFab *c_vfrac)
Definition: ERF_MomentumToVelocity.cpp:25
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 two
Definition: ERF_NumericalConstants.H:31
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ cons_bc
Definition: ERF_IndexDefines.H:89
@ ext_dir
Definition: ERF_IndexDefines.H:297
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:305
@ rho
Definition: ERF_Kessler.H:25
@ xvel
Definition: ERF_IndexDefines.H:215
@ zvel
Definition: ERF_IndexDefines.H:217
@ yvel
Definition: ERF_IndexDefines.H:216