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 : #include "Solver/Local/Riemann/Riemann.H"
15 :
16 : #include "Model/Gas/Gas.H"
17 :
18 : namespace Integrator
19 : {
20 : class Hydro : virtual public Integrator
21 : {
22 : public:
23 : static constexpr const char* name = "hydro";
24 :
25 8 : Hydro() {};
26 :
27 : Hydro( Set::Field<Set::Scalar> &a_eta,
28 : Set::Field<Set::Scalar> &a_etaold,
29 : bool a_invert) :
30 : eta_mf(&a_eta), eta_old_mf(&a_etaold), invert(a_invert)
31 : {
32 : this->managed = true;
33 : }
34 :
35 : Hydro(IO::ParmParse& pp);
36 : static void Parse(Hydro& value, IO::ParmParse& pp);
37 16 : virtual ~Hydro()
38 8 : {
39 8 : if (!managed)
40 : {
41 8 : delete eta_mf;
42 8 : delete eta_old_mf;
43 : }
44 :
45 8 : delete density_bc;
46 8 : delete momentum_bc;
47 8 : delete energy_bc;
48 8 : delete eta_bc;
49 :
50 8 : delete density_ic;
51 8 : delete velocity_ic;
52 8 : delete pressure_ic;
53 :
54 8 : delete ic_m0;
55 8 : delete ic_u0;
56 8 : delete ic_q;
57 :
58 8 : delete eta_ic;
59 8 : delete etadot_ic;
60 :
61 8 : delete solid.momentum_ic;
62 8 : delete solid.density_ic;
63 8 : delete solid.energy_ic;
64 :
65 8 : delete riemannsolver;
66 16 : }
67 :
68 : protected:
69 : void Initialize(int lev) override;
70 : void Mix(int lev);
71 : void TimeStepBegin(Set::Scalar a_time, int a_iter) override;
72 : void TimeStepComplete(Set::Scalar time, int lev) override;
73 : void Advance(int lev, Set::Scalar time, Set::Scalar dt) override;
74 : void TagCellsForRefinement(int lev, amrex::TagBoxArray& tags, amrex::Real /*time*/, int /*ngrow*/) override;
75 : void Regrid(int lev, Set::Scalar time) override;
76 :
77 : virtual void UpdateEta(int lev, Set::Scalar time);
78 : virtual void UpdateFluxes(int lev, Set::Scalar time, Set::Scalar dt);
79 : protected:
80 :
81 : void RHS( int lev, Set::Scalar time,
82 : amrex::MultiFab &rho_rhs_mf,
83 : amrex::MultiFab &M_rhs_mf,
84 : amrex::MultiFab &E_rhs_mf,
85 : const amrex::MultiFab &rho_mf,
86 : const amrex::MultiFab &M_mf,
87 : const amrex::MultiFab &E_mf);
88 :
89 : Set::Field<Set::Scalar> density_mf;
90 : Set::Field<Set::Scalar> density_old_mf;
91 :
92 : Set::Field<Set::Scalar> energy_mf;
93 : Set::Field<Set::Scalar> energy_old_mf;
94 :
95 : Set::Field<Set::Scalar> momentum_mf;
96 : Set::Field<Set::Scalar> momentum_old_mf;
97 :
98 : Set::Field<Set::Scalar> velocity_mf;
99 : Set::Field<Set::Scalar> pressure_mf;
100 : Set::Field<Set::Scalar> temperature_mf;
101 :
102 : Set::Field<Set::Scalar> mass_fraction_mf;
103 : Set::Field<Set::Scalar> mole_fraction_mf;
104 : Set::Field<Set::Scalar> scratch_mf;
105 :
106 : struct {
107 : Set::Field<Set::Scalar> density_mf;
108 : Set::Field<Set::Scalar> momentum_mf;
109 : Set::Field<Set::Scalar> energy_mf;
110 : IC::IC<Set::Scalar>* density_ic = nullptr;
111 : IC::IC<Set::Scalar>* momentum_ic = nullptr;
112 : IC::IC<Set::Scalar>* energy_ic = nullptr;
113 : } solid;
114 :
115 : Set::Field<Set::Scalar>* eta_mf;
116 : Set::Field<Set::Scalar>* eta_old_mf;
117 : Set::Field<Set::Scalar> etadot_mf;
118 :
119 : Set::Field<Set::Scalar> vorticity_mf;
120 :
121 : Set::Field<Set::Scalar> m0_mf;
122 : Set::Field<Set::Scalar> u0_mf;
123 : Set::Field<Set::Scalar> q_mf;
124 : Set::Field<Set::Scalar> Source_mf;
125 : Set::Field<Set::Scalar> flux_mf;
126 :
127 : BC::BC<Set::Scalar>* density_bc = nullptr;
128 : BC::BC<Set::Scalar>* momentum_bc = nullptr;
129 : BC::BC<Set::Scalar>* energy_bc = nullptr;
130 : BC::BC<Set::Scalar>* eta_bc = nullptr;
131 : BC::BC<Set::Scalar>* tracer_bc = nullptr;
132 :
133 : IC::IC<Set::Scalar>* velocity_ic = nullptr;
134 : IC::IC<Set::Scalar>* pressure_ic = nullptr;
135 : IC::IC<Set::Scalar>* density_ic = nullptr;
136 : IC::IC<Set::Scalar>* tracer_ic = nullptr;
137 :
138 : IC::IC<Set::Scalar>* ic_m0 = nullptr;
139 : IC::IC<Set::Scalar>* ic_u0 = nullptr;
140 : IC::IC<Set::Scalar>* ic_q = nullptr;
141 :
142 : IC::IC<Set::Scalar>* eta_ic = nullptr;
143 : IC::IC<Set::Scalar>* etadot_ic = nullptr;
144 :
145 : BC::Nothing bc_nothing;
146 :
147 : BC::Constant neumann_bc_1 = BC::Constant::ZeroNeumann(1);
148 : BC::Constant neumann_bc_D = BC::Constant::ZeroNeumann(AMREX_SPACEDIM);
149 :
150 : Set::Scalar c_max = 0.0;
151 : Set::Scalar vx_max = 0.0;
152 : Set::Scalar vy_max = 0.0;
153 :
154 : Set::Scalar eta_refinement_criterion=NAN, omega_refinement_criterion=NAN, gradu_refinement_criterion=NAN, p_refinement_criterion=NAN, rho_refinement_criterion;
155 : Set::Scalar cfl=NAN, cfl_v=NAN;
156 :
157 : Set::Scalar small=NAN;
158 : Set::Scalar cutoff=NAN;
159 : Set::Scalar lagrange=NAN;
160 : Set::Scalar lagrange_m0=NAN;
161 :
162 : Solver::Local::Riemann::Riemann *riemannsolver = nullptr;
163 :
164 : //std::vector<std::string> species;
165 : //std::vector<double> mw_array, cp_array, h0_array, s0_array, Tref_array, mu_array, k_array;
166 : int nspecies;
167 : Model::Gas::Gas gas;
168 :
169 :
170 : enum IntegrationScheme {
171 : ForwardEuler, SSPRK3, RK4
172 : };
173 : IntegrationScheme scheme;
174 :
175 : enum PrescribedFlowMode {
176 : Absolute, Relative
177 : };
178 : PrescribedFlowMode prescribedflowmode;
179 :
180 :
181 : Set::Vector g;
182 :
183 : bool managed = false;
184 : bool invert = false;
185 :
186 : std::vector<bool> mixed;
187 :
188 : };
189 : }
190 :
191 : #endif
|