LCOV - code coverage report
Current view: top level - src/Integrator - Hydro.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 100.0 % 23 23
Test Date: 2026-03-09 13:26:47 Functions: 60.0 % 5 3

            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
        

Generated by: LCOV version 2.0-1