SpECTRE Documentation Coverage Report
Current view: top level - PointwiseFunctions/AnalyticData/GrMhd - CcsnCollapse.hpp Hit Total Coverage
Commit: 35a1e98cd3e4fdea528eb8100f99c2f707894fda Lines: 8 110 7.3 %
Date: 2024-04-19 00:10:48
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <array>
       7             : #include <cstddef>
       8             : #include <optional>
       9             : #include <string>
      10             : 
      11             : #include "DataStructures/Tensor/TypeAliases.hpp"
      12             : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
      13             : #include "Options/String.hpp"
      14             : #include "PointwiseFunctions/AnalyticData/AnalyticData.hpp"
      15             : #include "PointwiseFunctions/AnalyticData/GrMhd/AnalyticData.hpp"
      16             : #include "PointwiseFunctions/Hydro/EquationsOfState/PolytropicFluid.hpp"
      17             : #include "PointwiseFunctions/Hydro/Temperature.hpp"
      18             : #include "PointwiseFunctions/Hydro/Units.hpp"
      19             : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp"
      20             : #include "Utilities/TMPL.hpp"
      21             : #include "Utilities/TaggedTuple.hpp"
      22             : 
      23             : namespace grmhd::AnalyticData {
      24             : namespace detail {
      25             : /*!
      26             :  * \brief Read a massive star supernova progenitor from file.
      27             :  */
      28             : class ProgenitorProfile {
      29             :  public:
      30             :   ProgenitorProfile() = default;
      31             : 
      32             :   ProgenitorProfile(const std::string& filename);
      33             :   // interpolate function
      34             :   std::array<double, 6> interpolate(double target_radius,
      35             :                                     double target_cos_theta,
      36             :                                     bool interpolate_hydro_vars) const;
      37             : 
      38             :   double polytropic_index() const { return polytropic_index_; }
      39             : 
      40             :   double max_radius() const { return maximum_radius_; }
      41             : 
      42             :   // Change private density ratio based on user-defined value,
      43             :   // accessed in CCSNCollapse() call
      44             :   void set_dens_ratio(double max_dens_ratio) {
      45             :     max_density_ratio_for_linear_interpolation_ = max_dens_ratio;
      46             :   }
      47             : 
      48             :   void pup(PUP::er& p);
      49             : 
      50             :  private:
      51             :   double maximum_radius_{std::numeric_limits<double>::signaling_NaN()};
      52             :   double max_density_ratio_for_linear_interpolation_{
      53             :       std::numeric_limits<double>::signaling_NaN()};
      54             :   double polytropic_index_{std::numeric_limits<double>::signaling_NaN()};
      55             :   size_t num_radial_points_{std::numeric_limits<size_t>::max()};
      56             :   size_t num_angular_points_{std::numeric_limits<size_t>::max()};
      57             :   size_t num_grid_points_{std::numeric_limits<size_t>::max()};
      58             : 
      59             :   // Begin constants to translate units from cgs to c=G=M_Sun=(k_Boltzmann=1)=1
      60             :   // Divide cm/s by speed_of_light_cgs_ to get into c=G=M_Sun=1 units
      61             :   static constexpr double speed_of_light_cgs_ =
      62             :       hydro::units::cgs::speed_of_light;
      63             : 
      64             :   // Multiply cm by c2g_length_ to get into c=G=M_Sun=1 units
      65             :   // (speed of light)^2 / (Newton's constant * Msun)
      66             :   // c2g_length_ = c^2 / (G*M_Sun)
      67             :   // c2g_length_~6.7706e-6 [1/cm]
      68             :   static constexpr double g_times_m_sun_ =
      69             :       hydro::units::cgs::G_Newton_times_m_sun;
      70             :   static constexpr double c2g_length_ = 1.0 / hydro::units::cgs::length_unit;
      71             : 
      72             :   // Multiply g/cm^3 by c2g_dens_ to get into c=G=M_Sun=1 units
      73             :   // c2g_dens_ = (G*M_Sun)^2*G/c^6.
      74             :   // Note G = 6.67430x10^-8.
      75             :   // While G is not known to as many significant figures as G*M_Sun,
      76             :   // it's uncertainty is still less than that of the maximum mass of
      77             :   // a neutron star (~1%~10%), a quantity assumed to be 2.2 M_Sun when
      78             :   // converting to c=G=M_Sun=1 units; see
      79             :   // https://iopscience.iop.org/article/10.3847/2041-8213/aaa401.
      80             :   // c2g_dens_~1.61887e-18 [cm^3/g]
      81             :   static constexpr double newtons_grav_constant_ = hydro::units::cgs::G_Newton;
      82             :   static constexpr double c2g_dens_ =
      83             :       1.0 / hydro::units::cgs::rest_mass_density_unit;
      84             : 
      85             :   // Multiply Kelvin by c2g_temp_ to get into c=G=M_Sun=k_Boltzmann=1 units.
      86             :   // c2g_temp_ = (k_B/(M_Sun*c^2))
      87             :   // c2g_temp_=7.72567e-71
      88             :   static constexpr double boltzmann_constant_ = hydro::units::cgs::k_Boltzmann;
      89             :   // Note setting MSun=1.0 is a choice made independent of EoS,
      90             :   // so that there are no unit ambiguities between 2 simulations
      91             :   // ran with different EoSs (e.g., polytropic vs. tabulated)
      92             :   static constexpr double m_sun_ = hydro::units::cgs::mass_unit;
      93             :   static constexpr double c2g_temp_ =
      94             :       boltzmann_constant_ / (m_sun_ * square(speed_of_light_cgs_));
      95             : 
      96             :   // readin data
      97             :   DataVector radius_;
      98             :   DataVector rest_mass_density_;
      99             :   DataVector fluid_velocity_;
     100             :   DataVector electron_fraction_;
     101             :   DataVector chi_;
     102             :   DataVector metric_potential_;
     103             :   DataVector temperature_;
     104             : };
     105             : }  // namespace detail
     106             : 
     107             : /*!
     108             :  * \brief Evolve a stellar collapse (progenitor) profile through collapse.
     109             :  *
     110             :  * Read the 1D core-collapse supernova (CCSN) profile from file, assuming
     111             :  * the following format of the data:
     112             :  * * 1st row - number of radial points in data set, followed by 6 columns of 0s
     113             :  * * Subsequent rows contain these column headers:
     114             :  *   * radius, rest mass density, specific internal energy, radial velocity,
     115             :  *     electron fraction, \f$X\f$, \f$\Phi\f$.
     116             :  *
     117             :  * These columns assume a metric of the form \f$ds^2 = -e^{2\Phi} dt^2 +
     118             :  * X^2 dr^2 + r^2 d\theta^2 + r^2 \sin^2\theta d\phi^2\f$, following
     119             :  * \cite Oconnor2015.
     120             :  *
     121             :  * Units:
     122             :  * The input file is assumed to be in cgs units and
     123             :  * will be converted to dimensionless units upon
     124             :  * readin, setting \f$c = G = M_\odot = 1\f$.
     125             :  *
     126             :  * Rotation:
     127             :  * Once the stationary progenitor is constructed, an artificial
     128             :  * rotation profile can be assigned to the matter.  It takes the form
     129             :  * \f$\Omega(r) = \Omega_0/(1 + (r_\perp/A)^2)\f$, where \f$\Omega_0\f$ is
     130             :  * the central rotation rate, \f$r_\perp\f$ is the distance from the rotation
     131             :  * axis, and \f$A\f$ is the differential rotation parameter.  Large values
     132             :  * of \f$A\f$ correspond to more solid-body rotation.  Small values correspond
     133             :  * to stronger differential rotation.  The axis of rotation is assumed to
     134             :  * be the z axis.
     135             :  *
     136             :  */
     137           1 : class CcsnCollapse : public virtual evolution::initial_data::InitialData,
     138             :                      public MarkAsAnalyticData,
     139             :                      public AnalyticDataBase,
     140             :                      public hydro::TemperatureInitialization<CcsnCollapse> {
     141             :   template <typename DataType>
     142           0 :   struct IntermediateVariables {
     143           0 :     IntermediateVariables(
     144             :         const tnsr::I<DataType, 3, Frame::Inertial>& in_coords,
     145             :         double in_delta_r);
     146             : 
     147           0 :     struct MetricData {
     148           0 :       MetricData() = default;
     149           0 :       MetricData(size_t num_points);
     150           0 :       DataType chi;
     151           0 :       DataType metric_potential;
     152             :     };
     153             : 
     154           0 :     const tnsr::I<DataType, 3, Frame::Inertial>& coords;
     155           0 :     DataType radius;
     156           0 :     DataType phi;
     157           0 :     DataType cos_theta;
     158           0 :     DataType sin_theta;
     159           0 :     double delta_r;
     160             : 
     161           0 :     std::optional<DataType> rest_mass_density;
     162           0 :     std::optional<DataType> fluid_velocity;
     163           0 :     std::optional<DataType> electron_fraction;
     164           0 :     std::optional<DataType> temperature;
     165           0 :     std::optional<MetricData> metric_data;
     166             :     // Data for 2nd-order FD derivatives.
     167             :     // metric info at different indices for finite differences
     168           0 :     std::optional<std::array<MetricData, 3>> metric_data_upper{};
     169           0 :     std::optional<std::array<MetricData, 3>> metric_data_lower{};
     170             : 
     171           0 :     std::array<DataType, 3> radius_upper{};
     172           0 :     std::array<DataType, 3> radius_lower{};
     173           0 :     std::array<DataType, 3> cos_theta_upper{};
     174           0 :     std::array<DataType, 3> cos_theta_lower{};
     175           0 :     std::array<DataType, 3> sin_theta_upper{};
     176           0 :     std::array<DataType, 3> sin_theta_lower{};
     177           0 :     std::array<DataType, 3> phi_upper{};
     178           0 :     std::array<DataType, 3> phi_lower{};
     179             :   };
     180             : 
     181             :  public:
     182           0 :   using equation_of_state_type = EquationsOfState::PolytropicFluid<true>;
     183             : 
     184             :   /// The massive star progenitor data file.
     185           1 :   struct ProgenitorFilename {
     186           0 :     using type = std::string;
     187           0 :     static constexpr Options::String help = {
     188             :         "The supernova progenitor data file."};
     189             :   };
     190             : 
     191             :   /// The polytropic constant of the fluid.
     192             :   ///
     193             :   /// The remaining hydrodynamic primitive variables (e.g., pressure)
     194             :   /// will be calculated based on this \f$K\f$ for \f$P=K\rho^{\Gamma}\f$.
     195           1 :   struct PolytropicConstant {
     196           0 :     using type = double;
     197           0 :     static constexpr Options::String help = {
     198             :         "The polytropic constant of the fluid."};
     199           0 :     static type lower_bound() { return 0.; }
     200             :   };
     201             : 
     202             :   /// Adiabatic index of the system at readin.
     203             :   ///
     204             :   /// Note the density profile used is from the initial profile calculated from
     205             :   /// the TOV equations, specified by ProgenitorFilename.  A lower, user
     206             :   /// defined, \f$\Gamma\f$ will cause a lower pressure for an equation of state
     207             :   /// of the form \f$P=K\rho^{\Gamma}\f$.  This effect triggers collapse for
     208             :   /// simplified CCSN models.
     209           1 :   struct AdiabaticIndex {
     210           0 :     using type = double;
     211           0 :     static constexpr Options::String help = {
     212             :         "The adiabatic index that will trigger collapse."};
     213           0 :     static type lower_bound() { return 1.0; }
     214             :   };
     215             : 
     216             :   /// Central angular velocity artificially assigned at readin.
     217             :   ///
     218             :   /// Currently limited by the angular velocity of an object rotating in a
     219             :   /// circle, with radius = 1 cm (well below grid resolution) and
     220             :   /// transverse velocity = the speed of light.
     221             :   ///
     222             :   /// Due to effects from magnetic breaking, more realistic central angular
     223             :   /// velocities for massive stars are of order 0.1 [radians/sec] ~ 4.93e-7
     224             :   /// [code units] (see Figure 1 of \cite Pajkos2019 based on results from
     225             :   /// \cite Heger2005, or see \cite Richers2017 for an exploration of
     226             :   /// different values).
     227           1 :   struct CentralAngularVelocity {
     228           0 :     using type = double;
     229           0 :     static constexpr Options::String help = {
     230             :         "Central angular velocity of progenitor"};
     231             : 
     232           0 :     static type upper_bound() { return 147670.0; }
     233           0 :     static type lower_bound() { return -147670.0; }
     234             :   };
     235             : 
     236             :   /// Differential rotation parameter for artificially assigned
     237             :   /// rotation profile.
     238           1 :   struct DifferentialRotationParameter {
     239           0 :     using type = double;
     240           0 :     static constexpr Options::String help = {
     241             :         "Differential rotation parameter (large"
     242             :         " indicates solid body, small very differential)"};
     243             :     // This is ~1 cm, well below simulation resolution.
     244             :     // The lower bound is used to ensure a nonzero divisor.
     245           0 :     static type lower_bound() { return 6.7706e-6; }
     246             :   };
     247             : 
     248             :   /// Maximum density ratio for linear interpolation.
     249             :   ///
     250             :   /// If the ratio of two neighboring densities are greater than this value,
     251             :   /// then interpolation onto the SpECTRE grid reverts to linear, to avoid
     252             :   /// oscillations.  A ratio of 100 is used for the rotating TOV star test
     253             :   /// and a safe value to use if unsure.
     254           1 :   struct MaxDensityRatioForLinearInterpolation {
     255           0 :     using type = double;
     256           0 :     static constexpr Options::String help = {
     257             :         "If the ratio between neighboring density points is greater"
     258             :         " than this parameter, fall back to linear interpolation"
     259             :         " onto the SpECTRE grid."};
     260           0 :     static type lower_bound() { return 0.0; }
     261             :   };
     262             : 
     263           0 :   using options =
     264             :       tmpl::list<ProgenitorFilename, PolytropicConstant, AdiabaticIndex,
     265             :                  CentralAngularVelocity, DifferentialRotationParameter,
     266             :                  MaxDensityRatioForLinearInterpolation>;
     267           0 :   static constexpr Options::String help = {
     268             :       "Core collapse supernova initial data, read in from a profile containing"
     269             :       " hydrodynamic primitives and metric variables.  The data "
     270             :       "are read in from disk."};
     271             : 
     272           0 :   CcsnCollapse() = default;
     273           0 :   CcsnCollapse(const CcsnCollapse& /*rhs*/) = default;
     274           0 :   CcsnCollapse& operator=(const CcsnCollapse& /*rhs*/) = default;
     275           0 :   CcsnCollapse(CcsnCollapse&& /*rhs*/) = default;
     276           0 :   CcsnCollapse& operator=(CcsnCollapse&& /*rhs*/) = default;
     277           0 :   ~CcsnCollapse() override = default;
     278             : 
     279           0 :   CcsnCollapse(std::string progenitor_filename, double polytropic_constant,
     280             :                double adiabatic_index, double central_angular_velocity,
     281             :                double diff_rot_parameter, double max_dens_ratio_interp);
     282             : 
     283           0 :   auto get_clone() const
     284             :       -> std::unique_ptr<evolution::initial_data::InitialData> override;
     285             : 
     286             :   /// \cond
     287             :   explicit CcsnCollapse(CkMigrateMessage* msg);
     288             :   using PUP::able::register_constructor;
     289             :   WRAPPED_PUPable_decl_template(CcsnCollapse);
     290             :   /// \endcond
     291             : 
     292             :   /// Retrieve a collection of variables at `(x)`
     293             :   template <typename DataType, typename... Tags>
     294           1 :   tuples::TaggedTuple<Tags...> variables(const tnsr::I<DataType, 3>& x,
     295             :                                          tmpl::list<Tags...> /*meta*/) const {
     296             :     IntermediateVariables<DataType> intermediate_vars{
     297             :         x, 1.0e-4 * prog_data_.max_radius()};
     298             :     return {get<Tags>(variables(make_not_null(&intermediate_vars), x,
     299             :                                 tmpl::list<Tags>{}))...};
     300             :   }
     301             : 
     302             :   // NOLINTNEXTLINE(google-runtime-references)
     303           0 :   void pup(PUP::er& p) override;
     304             : 
     305           0 :   const EquationsOfState::PolytropicFluid<true>& equation_of_state() const {
     306             :     return equation_of_state_;
     307             :   }
     308             : 
     309             :  protected:
     310             :   template <typename DataType>
     311           0 :   using DerivLapse = ::Tags::deriv<gr::Tags::Lapse<DataType>, tmpl::size_t<3>,
     312             :                                    Frame::Inertial>;
     313             : 
     314             :   template <typename DataType>
     315           0 :   using DerivShift = ::Tags::deriv<gr::Tags::Shift<DataType, 3>,
     316             :                                    tmpl::size_t<3>, Frame::Inertial>;
     317             : 
     318             :   template <typename DataType>
     319           0 :   using DerivSpatialMetric = ::Tags::deriv<gr::Tags::SpatialMetric<DataType, 3>,
     320             :                                            tmpl::size_t<3>, Frame::Inertial>;
     321             : 
     322             :   template <typename DataType>
     323           0 :   void interpolate_vars_if_necessary(
     324             :       gsl::not_null<IntermediateVariables<DataType>*> vars) const;
     325             : 
     326             :   template <typename DataType>
     327           0 :   void interpolate_deriv_vars_if_necessary(
     328             :       gsl::not_null<IntermediateVariables<DataType>*> vars) const;
     329             : 
     330             :   template <typename DataType>
     331           0 :   Scalar<DataType> lapse(const DataType& metric_potential) const;
     332             : 
     333             :   template <typename DataType>
     334           0 :   tnsr::I<DataType, 3, Frame::Inertial> shift(const DataType& radius) const;
     335             : 
     336             :   template <typename DataType>
     337           0 :   tnsr::ii<DataType, 3, Frame::Inertial> spatial_metric(
     338             :       const DataType& chi, const DataType& cos_theta, const DataType& sin_theta,
     339             :       const DataType& phi) const;
     340             : 
     341             :   template <typename DataType>
     342           0 :   tnsr::II<DataType, 3, Frame::Inertial> inverse_spatial_metric(
     343             :       const DataType& chi, const DataType& cos_theta, const DataType& sin_theta,
     344             :       const DataType& phi) const;
     345             : 
     346             :   template <typename DataType>
     347           0 :   Scalar<DataType> sqrt_det_spatial_metric(const DataType& chi) const;
     348             : 
     349             :   template <typename DataType>
     350           0 :   auto make_metric_data(size_t num_points) const ->
     351             :       typename IntermediateVariables<DataType>::MetricData;
     352             : 
     353             :  public:
     354             :   template <typename DataType>
     355           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     356             :                  const tnsr::I<DataType, 3>& x,
     357             :                  tmpl::list<hydro::Tags::RestMassDensity<DataType>> /*meta*/)
     358             :       const -> tuples::TaggedTuple<hydro::Tags::RestMassDensity<DataType>>;
     359             : 
     360             :   template <typename DataType>
     361           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     362             :                  const tnsr::I<DataType, 3>& x,
     363             :                  tmpl::list<hydro::Tags::ElectronFraction<DataType>> /*meta*/)
     364             :       const -> tuples::TaggedTuple<hydro::Tags::ElectronFraction<DataType>>;
     365             : 
     366             :   template <typename DataType>
     367           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     368             :                  const tnsr::I<DataType, 3>& x,
     369             :                  tmpl::list<hydro::Tags::SpecificEnthalpy<DataType>> /*meta*/)
     370             :       const -> tuples::TaggedTuple<hydro::Tags::SpecificEnthalpy<DataType>>;
     371             : 
     372             :   template <typename DataType>
     373           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     374             :                  const tnsr::I<DataType, 3>& x,
     375             :                  tmpl::list<hydro::Tags::Pressure<DataType>> /*meta*/) const
     376             :       -> tuples::TaggedTuple<hydro::Tags::Pressure<DataType>>;
     377             : 
     378             :   template <typename DataType>
     379           0 :   auto variables(
     380             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     381             :       const tnsr::I<DataType, 3>& x,
     382             :       tmpl::list<hydro::Tags::SpecificInternalEnergy<DataType>> /*meta*/) const
     383             :       -> tuples::TaggedTuple<hydro::Tags::SpecificInternalEnergy<DataType>>;
     384             : 
     385             :   template <typename DataType>
     386           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     387             :                  const tnsr::I<DataType, 3>& x,
     388             :                  tmpl::list<hydro::Tags::Temperature<DataType>> /*meta*/) const
     389             :       -> tuples::TaggedTuple<hydro::Tags::Temperature<DataType>> {
     390             :     return TemperatureInitialization::variables(
     391             :         vars, x, tmpl::list<hydro::Tags::Temperature<DataType>>{});
     392             :   }
     393             : 
     394             :   template <typename DataType>
     395           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     396             :                  const tnsr::I<DataType, 3>& x,
     397             :                  tmpl::list<hydro::Tags::SpatialVelocity<DataType, 3>> /*meta*/)
     398             :       const -> tuples::TaggedTuple<hydro::Tags::SpatialVelocity<DataType, 3>>;
     399             : 
     400             :   template <typename DataType>
     401           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     402             :                  const tnsr::I<DataType, 3>& x,
     403             :                  tmpl::list<hydro::Tags::LorentzFactor<DataType>> /*meta*/)
     404             :       const -> tuples::TaggedTuple<hydro::Tags::LorentzFactor<DataType>>;
     405             : 
     406             :   template <typename DataType>
     407           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     408             :                  const tnsr::I<DataType, 3>& x,
     409             :                  tmpl::list<hydro::Tags::MagneticField<DataType, 3>> /*meta*/)
     410             :       const -> tuples::TaggedTuple<hydro::Tags::MagneticField<DataType, 3>>;
     411             : 
     412             :   template <typename DataType>
     413           0 :   auto variables(
     414             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     415             :       const tnsr::I<DataType, 3>& x,
     416             :       tmpl::list<hydro::Tags::DivergenceCleaningField<DataType>> /*meta*/) const
     417             :       -> tuples::TaggedTuple<hydro::Tags::DivergenceCleaningField<DataType>>;
     418             : 
     419             :   template <typename DataType>
     420           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     421             :                  const tnsr::I<DataType, 3>& x,
     422             :                  tmpl::list<gr::Tags::Lapse<DataType>> /*meta*/) const
     423             :       -> tuples::TaggedTuple<gr::Tags::Lapse<DataType>>;
     424             : 
     425             :   template <typename DataType>
     426           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     427             :                  const tnsr::I<DataType, 3>& x,
     428             :                  tmpl::list<gr::Tags::Shift<DataType, 3>> /*meta*/) const
     429             :       -> tuples::TaggedTuple<gr::Tags::Shift<DataType, 3>>;
     430             : 
     431             :   template <typename DataType>
     432           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     433             :                  const tnsr::I<DataType, 3>& x,
     434             :                  tmpl::list<gr::Tags::SpatialMetric<DataType, 3>> /*meta*/)
     435             :       const -> tuples::TaggedTuple<gr::Tags::SpatialMetric<DataType, 3>>;
     436             : 
     437             :   template <typename DataType>
     438           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     439             :                  const tnsr::I<DataType, 3>& x,
     440             :                  tmpl::list<gr::Tags::SqrtDetSpatialMetric<DataType>> /*meta*/)
     441             :       const -> tuples::TaggedTuple<gr::Tags::SqrtDetSpatialMetric<DataType>>;
     442             : 
     443             :   template <typename DataType>
     444           0 :   auto variables(
     445             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     446             :       const tnsr::I<DataType, 3>& x,
     447             :       tmpl::list<gr::Tags::InverseSpatialMetric<DataType, 3>> /*meta*/) const
     448             :       -> tuples::TaggedTuple<gr::Tags::InverseSpatialMetric<DataType, 3>>;
     449             : 
     450             :   template <typename DataType>
     451           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     452             :                  const tnsr::I<DataType, 3>& x,
     453             :                  tmpl::list<DerivLapse<DataType>> /*meta*/) const
     454             :       -> tuples::TaggedTuple<DerivLapse<DataType>>;
     455             : 
     456             :   template <typename DataType>
     457           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     458             :                  const tnsr::I<DataType, 3>& x,
     459             :                  tmpl::list<DerivShift<DataType>> /*meta*/) const
     460             :       -> tuples::TaggedTuple<DerivShift<DataType>>;
     461             : 
     462             :   template <typename DataType>
     463           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     464             :                  const tnsr::I<DataType, 3>& x,
     465             :                  tmpl::list<DerivSpatialMetric<DataType>> /*meta*/) const
     466             :       -> tuples::TaggedTuple<DerivSpatialMetric<DataType>>;
     467             : 
     468             :   template <typename DataType>
     469           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     470             :                  const tnsr::I<DataType, 3>& x,
     471             :                  tmpl::list<gr::Tags::ExtrinsicCurvature<DataType, 3>> /*meta*/)
     472             :       const -> tuples::TaggedTuple<gr::Tags::ExtrinsicCurvature<DataType, 3>>;
     473             : 
     474             :   template <typename DataType>
     475           0 :   auto variables(const gsl::not_null<IntermediateVariables<DataType>*> vars,
     476             :                  const tnsr::I<DataType, 3>& x,
     477             :                  tmpl::list<::Tags::dt<gr::Tags::Lapse<DataType>>> /*meta*/)
     478             :       const -> tuples::TaggedTuple<::Tags::dt<gr::Tags::Lapse<DataType>>>;
     479             : 
     480             :   template <typename DataType>
     481           0 :   auto variables(
     482             :       const gsl::not_null<IntermediateVariables<DataType>*> vars,
     483             :       const tnsr::I<DataType, 3>& x,
     484             :       tmpl::list<::Tags::dt<gr::Tags::SpatialMetric<DataType, 3>>> /*meta*/)
     485             :       const
     486             :       -> tuples::TaggedTuple<::Tags::dt<gr::Tags::SpatialMetric<DataType, 3>>>;
     487             : 
     488             :   template <typename DataType>
     489           0 :   auto variables(const gsl::not_null<IntermediateVariables<DataType>*> vars,
     490             :                  const tnsr::I<DataType, 3>& x,
     491             :                  tmpl::list<::Tags::dt<gr::Tags::Shift<DataType, 3>>> /*meta*/)
     492             :       const -> tuples::TaggedTuple<::Tags::dt<gr::Tags::Shift<DataType, 3>>>;
     493             : 
     494           0 :   friend bool operator==(const CcsnCollapse& lhs, const CcsnCollapse& rhs);
     495             : 
     496             :  protected:
     497           0 :   std::string progenitor_filename_{};
     498           0 :   detail::ProgenitorProfile prog_data_{};
     499           0 :   double polytropic_constant_ = std::numeric_limits<double>::signaling_NaN();
     500           0 :   double polytropic_exponent_ = std::numeric_limits<double>::signaling_NaN();
     501           0 :   EquationsOfState::PolytropicFluid<true> equation_of_state_{};
     502           0 :   double central_angular_velocity_ =
     503             :       std::numeric_limits<double>::signaling_NaN();
     504           0 :   double inv_diff_rot_parameter_ = std::numeric_limits<double>::signaling_NaN();
     505             : };
     506           0 : bool operator!=(const CcsnCollapse& lhs, const CcsnCollapse& rhs);
     507             : 
     508             : }  // namespace grmhd::AnalyticData

Generated by: LCOV version 1.14