Line data Source code
1 : #ifndef INTEGRATOR_HYDRO_H
2 : #define INTEGRATOR_HYDRO_H
3 :
4 : #include "Integrator/Integrator.H"
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"
13 : #include "Solver/Local/Riemann/Roe.H"
14 :
15 : #if AMREX_SPACEDIM==2
16 :
17 : namespace Integrator
18 : {
19 : class Hydro : virtual public Integrator
20 : {
21 : public:
22 : static constexpr const char* name = "hydro";
23 :
24 6 : Hydro() {};
25 : Hydro(IO::ParmParse& pp);
26 : static void Parse(Hydro& value, IO::ParmParse& pp);
27 12 : virtual ~Hydro()
28 6 : {
29 6 : delete density_bc;
30 6 : delete momentum_bc;
31 6 : delete energy_bc;
32 6 : delete eta_bc;
33 :
34 6 : delete density_ic;
35 6 : delete velocity_ic;
36 6 : delete pressure_ic;
37 :
38 6 : delete ic_m0;
39 6 : delete ic_u0;
40 6 : delete ic_q;
41 :
42 6 : delete eta_ic;
43 6 : delete etadot_ic;
44 :
45 6 : delete solid.momentum_ic;
46 6 : delete solid.density_ic;
47 6 : delete solid.energy_ic;
48 :
49 6 : delete riemannsolver;
50 12 : }
51 :
52 : protected:
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);
62 : private:
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 :
75 : Set::Field<Set::Scalar> energy_mf;
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;
87 : Set::Field<Set::Scalar> energy_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 :
93 : protected:
94 : Set::Field<Set::Scalar> eta_mf;
95 : Set::Field<Set::Scalar> eta_old_mf;
96 : private:
97 : Set::Field<Set::Scalar> etadot_mf;
98 :
99 : Set::Field<Set::Scalar> vorticity_mf;
100 :
101 : Set::Field<Set::Scalar> m0_mf;
102 : Set::Field<Set::Scalar> u0_mf;
103 : Set::Field<Set::Scalar> q_mf;
104 : Set::Field<Set::Scalar> Source_mf;
105 : Set::Field<Set::Scalar> flux_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
|