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

Generated by: LCOV version 2.0-1