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 4 : Hydro() {};
25 : Hydro(IO::ParmParse& pp);
26 : static void Parse(Hydro& value, IO::ParmParse& pp);
27 8 : virtual ~Hydro()
28 4 : {
29 4 : delete density_bc;
30 4 : delete momentum_bc;
31 4 : delete energy_bc;
32 4 : delete eta_bc;
33 :
34 4 : delete density_ic;
35 4 : delete velocity_ic;
36 4 : delete pressure_ic;
37 :
38 4 : delete ic_m0;
39 4 : delete ic_u0;
40 4 : delete ic_q;
41 :
42 4 : delete eta_ic;
43 4 : delete etadot_ic;
44 :
45 4 : delete solid.momentum_ic;
46 4 : delete solid.density_ic;
47 4 : delete solid.energy_ic;
48 :
49 4 : delete roesolver;
50 8 : }
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 : Set::Field<Set::Scalar> density_mf;
65 : Set::Field<Set::Scalar> density_old_mf;
66 :
67 : Set::Field<Set::Scalar> energy_mf;
68 : Set::Field<Set::Scalar> energy_old_mf;
69 :
70 : Set::Field<Set::Scalar> momentum_mf;
71 : Set::Field<Set::Scalar> momentum_old_mf;
72 :
73 : Set::Field<Set::Scalar> velocity_mf;
74 : Set::Field<Set::Scalar> pressure_mf;
75 :
76 : struct {
77 : Set::Field<Set::Scalar> density_mf;
78 : Set::Field<Set::Scalar> momentum_mf;
79 : Set::Field<Set::Scalar> energy_mf;
80 : IC::IC<Set::Scalar>* density_ic = nullptr;
81 : IC::IC<Set::Scalar>* momentum_ic = nullptr;
82 : IC::IC<Set::Scalar>* energy_ic = nullptr;
83 : } solid;
84 :
85 : protected:
86 : Set::Field<Set::Scalar> eta_mf;
87 : Set::Field<Set::Scalar> eta_old_mf;
88 : private:
89 : Set::Field<Set::Scalar> etadot_mf;
90 :
91 : Set::Field<Set::Scalar> vorticity_mf;
92 :
93 : Set::Field<Set::Scalar> m0_mf;
94 : Set::Field<Set::Scalar> u0_mf;
95 : Set::Field<Set::Scalar> q_mf;
96 : Set::Field<Set::Scalar> Source_mf;
97 : Set::Field<Set::Scalar> flux_mf;
98 :
99 : BC::BC<Set::Scalar>* density_bc = nullptr;
100 : BC::BC<Set::Scalar>* momentum_bc = nullptr;
101 : BC::BC<Set::Scalar>* energy_bc = nullptr;
102 : BC::BC<Set::Scalar>* eta_bc = nullptr;
103 :
104 : IC::IC<Set::Scalar>* velocity_ic = nullptr;
105 : IC::IC<Set::Scalar>* pressure_ic = nullptr;
106 : IC::IC<Set::Scalar>* density_ic = nullptr;
107 :
108 : IC::IC<Set::Scalar>* ic_m0 = nullptr;
109 : IC::IC<Set::Scalar>* ic_u0 = nullptr;
110 : IC::IC<Set::Scalar>* ic_q = nullptr;
111 :
112 : IC::IC<Set::Scalar>* eta_ic = nullptr;
113 : IC::IC<Set::Scalar>* etadot_ic = nullptr;
114 :
115 : BC::Nothing bc_nothing;
116 :
117 : BC::Constant neumann_bc_1 = BC::Constant::ZeroNeumann(1);
118 : BC::Constant neumann_bc_D = BC::Constant::ZeroNeumann(AMREX_SPACEDIM);
119 :
120 : Set::Scalar c_max = 0.0;
121 : Set::Scalar vx_max = 0.0;
122 : Set::Scalar vy_max = 0.0;
123 :
124 : Set::Scalar eta_refinement_criterion=NAN, omega_refinement_criterion=NAN, gradu_refinement_criterion=NAN, p_refinement_criterion=NAN, rho_refinement_criterion;
125 : Set::Scalar gamma=NAN, cfl=NAN, cfl_v=NAN, mu=NAN, pref=NAN;
126 :
127 : Set::Scalar small=NAN;
128 : Set::Scalar cutoff=NAN;
129 : Set::Scalar lagrange=NAN;
130 :
131 : Solver::Local::Riemann::Roe *roesolver = nullptr;
132 :
133 : };
134 : }
135 :
136 : #endif
137 : #endif
|