1 #ifndef ERF_RESOLVED_WALL_FLUX_H_
2 #define ERF_RESOLVED_WALL_FLUX_H_
5 #include <AMReX_GpuContainers.H>
6 #include <AMReX_MultiFab.H>
17 template <
int DIR,
bool HIGH>
20 const amrex::Box& domain,
23 const amrex::Array4<const amrex::Real>& state,
24 const amrex::Array4<const amrex::Real>& prim,
25 const amrex::Array4<const amrex::Real>& base_state,
26 const amrex::Array4<amrex::Real>& rhs,
27 const amrex::Array4<amrex::Real>& xflux,
28 const amrex::Array4<amrex::Real>& yflux,
29 const amrex::Array4<amrex::Real>& zflux,
30 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dx_inv,
39 if (bx.bigEnd(DIR) != domain.bigEnd(DIR)) {
return; }
41 if (bx.smallEnd(DIR) != domain.smallEnd(DIR)) {
return; }
44 const int cell_face = HIGH ? domain.bigEnd(DIR) : domain.smallEnd(DIR);
45 amrex::Box face_cells = bx;
46 face_cells.setSmall(DIR, cell_face);
47 face_cells.setBig(DIR, cell_face);
49 if (face_cells.isEmpty()) {
return; }
52 const auto wall = walls[2*DIR + (HIGH ? 1 : 0)];
62 const auto& flux = (DIR == 0) ? xflux : ((DIR == 1) ? yflux : zflux);
68 const int fi = HIGH && DIR == 0 ? i + 1 : i;
69 const int fj = HIGH && DIR == 1 ? j + 1 : j;
70 const int fk = HIGH && DIR == 2 ? k + 1 : k;
73 const amrex::Real wall_temperature = wall.physical_temperature_K;
78 wall_value = wall_temperature * std::pow(
p_0 /
p0,
rdOcp);
90 amrex::ignore_unused(
alpha, inv_half_cell);
92 new_flux = -
rho *
alpha * (wall_value - cell_value) * inv_half_cell;
94 new_flux = -
rho *
alpha * (cell_value - wall_value) * inv_half_cell;
97 flux(
fi,fj,fk,flux_comp) = new_flux;
102 const amrex::Real correction = (new_flux - old_flux) * dx_inv[DIR];
103 amrex::ignore_unused(rhs);
104 if constexpr (HIGH) {
105 rhs(i,j,k,quantity) -= correction;
107 rhs(i,j,k,quantity) += correction;
112 inline void apply (
const amrex::Box& bx,
113 const amrex::Box& domain,
116 const amrex::Array4<const amrex::Real>& state,
117 const amrex::Array4<const amrex::Real>& prim,
118 const amrex::Array4<const amrex::Real>& base_state,
119 const amrex::Array4<amrex::Real>& rhs,
120 const amrex::Array4<amrex::Real>& xflux,
121 const amrex::Array4<amrex::Real>& yflux,
122 const amrex::Array4<amrex::Real>& zflux,
123 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dx_inv,
129 apply_face<0,false>(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
130 apply_face<0,true >(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
131 apply_face<1,false>(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
132 apply_face<1,true >(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
133 apply_face<2,false>(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
134 apply_face<2,true >(bx,domain,quantity,flux_comp,state,prim,base_state,rhs,xflux,yflux,zflux,dx_inv,walls,alpha_T,alpha_C,
rdOcp);
constexpr amrex::Real p_0
Definition: ERF_Constants.H:61
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:43
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
const Real rdOcp
Definition: ERF_InitCustomPert_Bomex.H:16
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
rho
Definition: ERF_InitCustomPert_Bubble.H:107
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:228
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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ p0_comp
Definition: ERF_IndexDefines.H:74
@ fi
Definition: ERF_AdvanceMorrison.cpp:107
Definition: ERF_ResolvedWallFlux.H:15
AMREX_FORCE_INLINE void apply_face(const amrex::Box &bx, const amrex::Box &domain, const int quantity, const int flux_comp, const amrex::Array4< const amrex::Real > &state, const amrex::Array4< const amrex::Real > &prim, const amrex::Array4< const amrex::Real > &base_state, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx_inv, const erf_wall_thermodynamics::Boundary &walls, const amrex::Real alpha_T, const amrex::Real alpha_C, const amrex::Real rdOcp)
Definition: ERF_ResolvedWallFlux.H:19
void apply(const amrex::Box &bx, const amrex::Box &domain, const int quantity, const int flux_comp, const amrex::Array4< const amrex::Real > &state, const amrex::Array4< const amrex::Real > &prim, const amrex::Array4< const amrex::Real > &base_state, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx_inv, const erf_wall_thermodynamics::Boundary &walls, const amrex::Real alpha_T, const amrex::Real alpha_C, const amrex::Real rdOcp)
Definition: ERF_ResolvedWallFlux.H:112
@ FixedPhysicalTemperature
amrex::GpuArray< Face, 2 *AMREX_SPACEDIM > Boundary
Definition: ERF_WallThermodynamics.H:34
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
real(kind=kind_phys), parameter, public alpha
Definition: ERF_module_mp_wsm6.F90:44