ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_WSM6.H
Go to the documentation of this file.
1 #ifndef ERF_WSM6_H
2 #define ERF_WSM6_H
3 
4 #include <memory>
5 #include <string>
6 #include <vector>
7 
8 #include <AMReX_FArrayBox.H>
9 #include <AMReX_Geometry.H>
10 #include <AMReX_MultiFabUtil.H>
11 
12 #include "ERF_Constants.H"
13 #include "ERF_DataStruct.H"
14 #include "ERF_IndexDefines.H"
15 #include "ERF_MicrophysicsUtils.H"
16 #include "ERF_NullMoist.H"
17 
18 namespace MicVar_WSM6 {
19  enum {
20  rho = 0,
24  qv,
25  qc,
26  qi,
27  qr,
28  qs,
29  qg,
33  NumVars
34  };
35 }
36 
37 class WSM6 : public NullMoist {
38  using FabPtr = std::shared_ptr<amrex::MultiFab>;
39 
40 public:
41  WSM6() {}
42  virtual ~WSM6() = default;
43 
44  void Define(SolverChoice& sc) override
45  {
46  m_axis = sc.ave_plane;
47  m_do_cond = (!sc.use_shoc);
48  }
49 
50  void Init(const amrex::MultiFab& cons_in,
51  const amrex::BoxArray& grids,
52  const amrex::Geometry& geom,
53  const amrex::Real& dt_advance,
54  std::unique_ptr<amrex::MultiFab>& z_phys_nd,
55  std::unique_ptr<amrex::MultiFab>& detJ_cc) override;
56 
57  void Set_dzmin(const amrex::Real dz_min) override { m_dzmin = dz_min; }
58 
59  void Copy_State_to_Micro(const amrex::MultiFab& cons_in) override;
60  void Copy_Micro_to_State(amrex::MultiFab& cons_in) override;
61 
62  void Update_Micro_Vars(amrex::MultiFab& cons_in) override
63  {
64  Copy_State_to_Micro(cons_in);
65  }
66 
67  void Update_State_Vars(amrex::MultiFab& cons_in) override
68  {
69  Copy_Micro_to_State(cons_in);
70  }
71 
72  void Advance(const amrex::Real& dt_advance,
73  const SolverChoice& solverChoice) override;
74 
75  amrex::MultiFab* Qmoist_Ptr(const int& varIdx) override
76  {
78  return mic_fab_vars[MicVarMap[varIdx]].get();
79  }
80 
81  int Qmoist_Size() override { return m_qmoist_size; }
82  int Qstate_Moist_Size() override { return n_qstate_moist_size; }
83 
84  void Set_RealWidth(const int real_width) override { m_real_width = real_width; }
85 
87  std::vector<int>& a_idx,
88  std::vector<std::string>& a_names) const override
89  {
90  a_idx = {0, 1, 2};
91  a_names = {"RainAccum", "SnowAccum", "GraupAccum"};
92  }
93 
94 private:
95  int m_qmoist_size = 3;
97 
98  amrex::Vector<int> MicVarMap;
99 
100  amrex::Geometry m_geom;
101  int m_real_width{0};
104  int nlev{0}, zlo{0}, zhi{0};
105  int m_axis{2};
106  bool m_do_cond{true};
107 
108  amrex::MultiFab* m_z_phys_nd{nullptr};
109  amrex::MultiFab* m_detJ_cc{nullptr};
110 
111  amrex::Array<FabPtr, MicVar_WSM6::NumVars> mic_fab_vars;
112 };
113 
114 #endif
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullMoist.H:8
Definition: ERF_WSM6.H:37
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_WSM6.H:38
amrex::Real m_dzmin
Definition: ERF_WSM6.H:103
amrex::MultiFab * m_z_phys_nd
Definition: ERF_WSM6.H:108
amrex::MultiFab * m_detJ_cc
Definition: ERF_WSM6.H:109
void Qmoist_Restart_Vars(const SolverChoice &, std::vector< int > &a_idx, std::vector< std::string > &a_names) const override
Definition: ERF_WSM6.H:86
void Set_RealWidth(const int real_width) override
Definition: ERF_WSM6.H:84
int zlo
Definition: ERF_WSM6.H:104
bool m_do_cond
Definition: ERF_WSM6.H:106
int nlev
Definition: ERF_WSM6.H:104
int zhi
Definition: ERF_WSM6.H:104
int m_qmoist_size
Definition: ERF_WSM6.H:95
int m_axis
Definition: ERF_WSM6.H:105
int n_qstate_moist_size
Definition: ERF_WSM6.H:96
void Init(const amrex::MultiFab &cons_in, const amrex::BoxArray &grids, const amrex::Geometry &geom, const amrex::Real &dt_advance, std::unique_ptr< amrex::MultiFab > &z_phys_nd, std::unique_ptr< amrex::MultiFab > &detJ_cc) override
Definition: ERF_InitWSM6.cpp:9
void Update_Micro_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_WSM6.H:62
void Define(SolverChoice &sc) override
Definition: ERF_WSM6.H:44
amrex::MultiFab * Qmoist_Ptr(const int &varIdx) override
Definition: ERF_WSM6.H:75
void Advance(const amrex::Real &dt_advance, const SolverChoice &solverChoice) override
Definition: ERF_AdvanceWSM6.cpp:8
void Copy_Micro_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_UpdateWSM6.cpp:6
void Update_State_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_WSM6.H:67
amrex::Geometry m_geom
Definition: ERF_WSM6.H:100
amrex::Real dt
Definition: ERF_WSM6.H:102
int Qstate_Moist_Size() override
Definition: ERF_WSM6.H:82
void Copy_State_to_Micro(const amrex::MultiFab &cons_in) override
Definition: ERF_InitWSM6.cpp:37
virtual ~WSM6()=default
amrex::Vector< int > MicVarMap
Definition: ERF_WSM6.H:98
amrex::Array< FabPtr, MicVar_WSM6::NumVars > mic_fab_vars
Definition: ERF_WSM6.H:111
WSM6()
Definition: ERF_WSM6.H:41
int m_real_width
Definition: ERF_WSM6.H:101
void Set_dzmin(const amrex::Real dz_min) override
Definition: ERF_WSM6.H:57
int Qmoist_Size() override
Definition: ERF_WSM6.H:81
Definition: ERF_WSM6.H:18
@ qr
Definition: ERF_WSM6.H:27
@ qi
Definition: ERF_WSM6.H:26
@ theta
Definition: ERF_WSM6.H:21
@ qs
Definition: ERF_WSM6.H:28
@ qv
Definition: ERF_WSM6.H:24
@ qc
Definition: ERF_WSM6.H:25
@ rain_accum
Definition: ERF_WSM6.H:30
@ snow_accum
Definition: ERF_WSM6.H:31
@ rho
Definition: ERF_WSM6.H:20
@ graup_accum
Definition: ERF_WSM6.H:32
@ qg
Definition: ERF_WSM6.H:29
@ pres
Definition: ERF_WSM6.H:23
@ NumVars
Definition: ERF_WSM6.H:33
@ tabs
Definition: ERF_WSM6.H:22
Definition: ERF_DataStruct.H:130
bool use_shoc
Definition: ERF_DataStruct.H:1187
int ave_plane
Definition: ERF_DataStruct.H:1220