Alamo
Hydro.H
Go to the documentation of this file.
1#ifndef INTEGRATOR_HYDRO_H
2#define INTEGRATOR_HYDRO_H
3
5#include "IO/ParmParse.H"
6
7#include "BC/BC.H"
8#include "BC/Constant.H"
9#include "BC/Nothing.H"
10#include "IC/IC.H"
11
12#include "Set/Base.H"
14
15#if AMREX_SPACEDIM==2
16
17namespace Integrator
18{
19class Hydro : virtual public Integrator
20{
21public:
22 static constexpr const char* name = "hydro";
23
24 Hydro() {};
25 Hydro(IO::ParmParse& pp);
26 static void Parse(Hydro& value, IO::ParmParse& pp);
27 virtual ~Hydro()
28 {
29 delete density_bc;
30 delete momentum_bc;
31 delete energy_bc;
32 delete eta_bc;
33
34 delete density_ic;
35 delete velocity_ic;
36 delete pressure_ic;
37
38 delete ic_m0;
39 delete ic_u0;
40 delete ic_q;
41
42 delete eta_ic;
43 delete etadot_ic;
44
45 delete solid.momentum_ic;
46 delete solid.density_ic;
47 delete solid.energy_ic;
48
49 delete riemannsolver;
50 }
51
52protected:
53 void Initialize(int lev) override;
54 void Mix(int lev);
55 void TimeStepBegin(Set::Scalar a_time, int a_iter) override;
56 void TimeStepComplete(Set::Scalar time, int lev) override;
57 void Advance(int lev, Set::Scalar time, Set::Scalar dt) override;
58 void TagCellsForRefinement(int lev, amrex::TagBoxArray& tags, amrex::Real /*time*/, int /*ngrow*/) override;
59 void Regrid(int lev, Set::Scalar time) override;
60
61 virtual void UpdateEta(int lev, Set::Scalar time);
62private:
63
64 void RHS( int lev, Set::Scalar time,
65 amrex::MultiFab &rho_rhs_mf,
66 amrex::MultiFab &M_rhs_mf,
67 amrex::MultiFab &E_rhs_mf,
68 const amrex::MultiFab &rho_mf,
69 const amrex::MultiFab &M_mf,
70 const amrex::MultiFab &E_mf);
71
72 Set::Field<Set::Scalar> density_mf;
73 Set::Field<Set::Scalar> density_old_mf;
74
76 Set::Field<Set::Scalar> energy_old_mf;
77
78 Set::Field<Set::Scalar> momentum_mf;
79 Set::Field<Set::Scalar> momentum_old_mf;
80
81 Set::Field<Set::Scalar> velocity_mf;
82 Set::Field<Set::Scalar> pressure_mf;
83
84 struct {
85 Set::Field<Set::Scalar> density_mf;
86 Set::Field<Set::Scalar> momentum_mf;
88 IC::IC<Set::Scalar>* density_ic = nullptr;
89 IC::IC<Set::Scalar>* momentum_ic = nullptr;
90 IC::IC<Set::Scalar>* energy_ic = nullptr;
91 } solid;
92
93protected:
95 Set::Field<Set::Scalar> eta_old_mf;
96private:
98
99 Set::Field<Set::Scalar> vorticity_mf;
100
104 Set::Field<Set::Scalar> Source_mf;
106
107 BC::BC<Set::Scalar>* density_bc = nullptr;
108 BC::BC<Set::Scalar>* momentum_bc = nullptr;
109 BC::BC<Set::Scalar>* energy_bc = nullptr;
110 BC::BC<Set::Scalar>* eta_bc = nullptr;
111
112 IC::IC<Set::Scalar>* velocity_ic = nullptr;
113 IC::IC<Set::Scalar>* pressure_ic = nullptr;
114 IC::IC<Set::Scalar>* density_ic = nullptr;
115
116 IC::IC<Set::Scalar>* ic_m0 = nullptr;
117 IC::IC<Set::Scalar>* ic_u0 = nullptr;
118 IC::IC<Set::Scalar>* ic_q = nullptr;
119
120 IC::IC<Set::Scalar>* eta_ic = nullptr;
121 IC::IC<Set::Scalar>* etadot_ic = nullptr;
122
123 BC::Nothing bc_nothing;
124
125 BC::Constant neumann_bc_1 = BC::Constant::ZeroNeumann(1);
126 BC::Constant neumann_bc_D = BC::Constant::ZeroNeumann(AMREX_SPACEDIM);
127
128 Set::Scalar c_max = 0.0;
129 Set::Scalar vx_max = 0.0;
130 Set::Scalar vy_max = 0.0;
131
132 Set::Scalar eta_refinement_criterion=NAN, omega_refinement_criterion=NAN, gradu_refinement_criterion=NAN, p_refinement_criterion=NAN, rho_refinement_criterion;
133 Set::Scalar gamma=NAN, cfl=NAN, cfl_v=NAN, mu=NAN, pref=NAN;
134
135 Set::Scalar small=NAN;
136 Set::Scalar cutoff=NAN;
137 Set::Scalar lagrange=NAN;
138
139 Solver::Local::Riemann::Riemann *riemannsolver = nullptr;
140
141 enum IntegrationScheme {
142 ForwardEuler, SSPRK3, RK4
143 };
144 IntegrationScheme scheme;
145
146};
147}
148
149#endif
150#endif
Definition BC.H:42
static Constant ZeroNeumann(int ncomp=1)
Definition Constant.H:77
Pure abstract IC object from which all other IC objects inherit.
Definition IC.H:23
Collection of numerical integrator objects.
Definition AllenCahn.H:41
amrex::Real Scalar
Definition Base.H:19
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:20
std::complex< int > Parse(std::string input)
Definition Util.cpp:313
void Initialize()
Definition Util.cpp:128