1 #ifndef ERF_OCEANSURF_H
2 #define ERF_OCEANSURF_H
6 #include <AMReX_Geometry.H>
7 #include <AMReX_MultiFabUtil.H>
8 #include <AMReX_ParmParse.H>
27 amrex::ParmParse
pp(
"erf");
34 const amrex::MultiFab& cons_in,
35 const amrex::Geometry& geom,
41 amrex::Box domain = geom.Domain();
50 amrex::IntVect
ng(1,1,0);
51 amrex::BoxArray ba = cons_in.boxArray();
52 amrex::DistributionMapping dm = cons_in.DistributionMap();
53 amrex::BoxList bl_lsm = ba.boxList();
54 for (
auto& b : bl_lsm) {
57 amrex::BoxArray ba_lsm(std::move(bl_lsm));
59 const amrex::RealBox& dom_rb = geom.ProbDomain();
60 amrex::RealBox lsm_rb = dom_rb;
61 lsm_rb.setHi(2, dom_rb.hi(2));
62 lsm_rb.setLo(2, dom_rb.lo(2));
63 m_lsm_geom.define(ba_lsm.minimalBox(), lsm_rb, geom.Coord(), geom.isPeriodic());
66 lsm_fab_data[0] = std::make_shared<amrex::MultiFab>(ba_lsm, dm, 1,
ng);
118 std::string lc_varname = amrex::toLower(varname);
119 if (lc_varname ==
"t_surf" || lc_varname ==
"theta") {
145 using FabPtr = std::shared_ptr<amrex::MultiFab>;
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullSurf.H:8
Definition: ERF_OceanSurf.H:19
const amrex::Vector< amrex::MultiFab * > * m_ocean_state
Definition: ERF_OceanSurf.H:155
std::string Lsm_FluxName(const int &) override
Definition: ERF_OceanSurf.H:110
int Lsm_Data_Size() override
Definition: ERF_OceanSurf.H:96
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_OceanSurf.H:79
amrex::Real m_default_tsurf
Definition: ERF_OceanSurf.H:154
void Advance(const amrex::Real &dt) override
Definition: ERF_OceanSurf.H:71
void SetOceanState(const amrex::Vector< amrex::MultiFab * > *ocean_state)
Definition: ERF_OceanSurf.H:132
void Init(const int &, const amrex::MultiFab &cons_in, const amrex::Geometry &geom, const amrex::Real &dt) override
Definition: ERF_OceanSurf.H:33
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_OceanSurf.H:102
amrex::Vector< FabPtr > lsm_fab_data
Definition: ERF_OceanSurf.H:150
const amrex::Vector< amrex::MultiFab * > * OceanState() const
Definition: ERF_OceanSurf.H:139
amrex::MultiFab * Lsm_Flux_Ptr(const int &) override
Definition: ERF_OceanSurf.H:87
int Lsm_Flux_Size() override
Definition: ERF_OceanSurf.H:99
amrex::Vector< std::string > LsmVarName
Definition: ERF_OceanSurf.H:149
int Lsm_DataIndex(std::string varname) override
Definition: ERF_OceanSurf.H:116
~OceanSurf() override=default
int m_lsm_size
Definition: ERF_OceanSurf.H:147
void Define(SolverChoice &) override
Definition: ERF_OceanSurf.H:25
amrex::Geometry m_lsm_geom
Definition: ERF_OceanSurf.H:151
int khi_lsm
Definition: ERF_OceanSurf.H:153
amrex::Real m_dt
Definition: ERF_OceanSurf.H:152
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_OceanSurf.H:145
int Lsm_FluxIndex(std::string) override
Definition: ERF_OceanSurf.H:126
amrex::Geometry Lsm_Geom() override
Definition: ERF_OceanSurf.H:93
amrex::Vector< int > LsmVarMap
Definition: ERF_OceanSurf.H:148
Definition: ERF_OceanSurf.H:12
@ NumVars
Definition: ERF_OceanSurf.H:15
@ t_surf
Definition: ERF_OceanSurf.H:14
@ ng
Definition: ERF_Morrison.H:48
Definition: ERF_DataStruct.H:141