SpECTRE Documentation Coverage Report
Current view: top level - PointwiseFunctions/AnalyticData/GrMhd - CcsnCollapse.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 6 106 5.7 %
Date: 2025-12-05 05:03:31
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/EquationOfState.hpp"
      17             : #include "PointwiseFunctions/Hydro/EquationsOfState/Factory.hpp"
      18             : #include "PointwiseFunctions/Hydro/EquationsOfState/Tabulated3d.hpp"
      19             : #include "PointwiseFunctions/Hydro/Temperature.hpp"
      20             : #include "PointwiseFunctions/Hydro/Units.hpp"
      21             : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp"
      22             : #include "Utilities/Serialization/RegisterDerivedClassesWithCharm.hpp"
      23             : #include "Utilities/TMPL.hpp"
      24             : #include "Utilities/TaggedTuple.hpp"
      25             : 
      26             : namespace grmhd::AnalyticData {
      27             : namespace detail {
      28             : /*!
      29             :  * \brief Read a massive star supernova progenitor from file.
      30             :  */
      31             : class ProgenitorProfile {
      32             :  public:
      33             :   ProgenitorProfile() = default;
      34             : 
      35             :   ProgenitorProfile(const std::string& filename);
      36             :   // interpolate function
      37             :   std::array<double, 6> interpolate(double target_radius,
      38             :                                     double target_cos_theta,
      39             :                                     bool interpolate_hydro_vars) const;
      40             : 
      41             :   double max_radius() const { return maximum_radius_; }
      42             : 
      43             :   // Change private density ratio based on user-defined value,
      44             :   // accessed in CCSNCollapse() call
      45             :   void set_dens_ratio(double max_dens_ratio) {
      46             :     max_density_ratio_for_linear_interpolation_ = max_dens_ratio;
      47             :   }
      48             : 
      49             :   void pup(PUP::er& p);
      50             : 
      51             :  private:
      52             :   double maximum_radius_{std::numeric_limits<double>::signaling_NaN()};
      53             :   double max_density_ratio_for_linear_interpolation_{
      54             :       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::Tabulated3D<true>;
     183             : 
     184             :   /// The massive star progenitor data file.
     185             :   ///
     186             :   /// Available in the
     187             :   /// [SXS
     188             :   /// Repo](https://github.com/sxs-collaboration/core_collapse_supernova_files_for_spectre/tree/main/progenitor_files)
     189           1 :   struct ProgenitorFilename {
     190           0 :     using type = std::string;
     191           0 :     static constexpr Options::String help = {
     192             :         "The supernova progenitor data file."};
     193             :   };
     194             : 
     195             :   /// Central angular velocity artificially assigned at readin.
     196             :   ///
     197             :   /// Currently limited by the angular velocity of an object rotating in a
     198             :   /// circle, with radius = 1 cm (well below grid resolution) and
     199             :   /// transverse velocity = the speed of light.
     200             :   ///
     201             :   /// Due to effects from magnetic breaking, more realistic central angular
     202             :   /// velocities for massive stars are of order 0.1 [radians/sec] ~ 4.93e-7
     203             :   /// [code units] (see Figure 1 of \cite Pajkos2019 based on results from
     204             :   /// \cite Heger2005, or see \cite Richers2017 for an exploration of
     205             :   /// different values).
     206           1 :   struct CentralAngularVelocity {
     207           0 :     using type = double;
     208           0 :     static constexpr Options::String help = {
     209             :         "Central angular velocity of progenitor"};
     210             : 
     211           0 :     static type upper_bound() { return 147670.0; }
     212           0 :     static type lower_bound() { return -147670.0; }
     213             :   };
     214             : 
     215             :   /// Differential rotation parameter for artificially assigned
     216             :   /// rotation profile.
     217           1 :   struct DifferentialRotationParameter {
     218           0 :     using type = double;
     219           0 :     static constexpr Options::String help = {
     220             :         "Differential rotation parameter (large"
     221             :         " indicates solid body, small very differential)"};
     222             :     // This is ~1 cm, well below simulation resolution.
     223             :     // The lower bound is used to ensure a nonzero divisor.
     224           0 :     static type lower_bound() { return 6.7706e-6; }
     225             :   };
     226             : 
     227             :   /// Maximum density ratio for linear interpolation.
     228             :   ///
     229             :   /// If the ratio of two neighboring densities are greater than this value,
     230             :   /// then interpolation onto the SpECTRE grid reverts to linear, to avoid
     231             :   /// oscillations.  A ratio of 100 is used for the rotating TOV star test
     232             :   /// and a safe value to use if unsure.
     233           1 :   struct MaxDensityRatioForLinearInterpolation {
     234           0 :     using type = double;
     235           0 :     static constexpr Options::String help = {
     236             :         "If the ratio between neighboring density points is greater"
     237             :         " than this parameter, fall back to linear interpolation"
     238             :         " onto the SpECTRE grid."};
     239           0 :     static type lower_bound() { return 0.0; }
     240             :   };
     241             : 
     242           0 :   struct TableFilename {
     243           0 :     using type = std::string;
     244           0 :     static constexpr Options::String help{"File name of the EOS table"};
     245             :   };
     246             : 
     247           0 :   struct TableSubFilename {
     248           0 :     using type = std::string;
     249           0 :     static constexpr Options::String help{
     250             :         "Subfile name of the EOS table, e.g., 'dd2'."};
     251             :   };
     252             : 
     253           0 :   using options = tmpl::list<
     254             :       ProgenitorFilename, CentralAngularVelocity, DifferentialRotationParameter,
     255             :       MaxDensityRatioForLinearInterpolation, TableFilename, TableSubFilename>;
     256           0 :   static constexpr Options::String help = {
     257             :       "Core collapse supernova initial data, read in from a profile containing"
     258             :       " hydrodynamic primitives and metric variables.  The data "
     259             :       "are read in from disk."};
     260             : 
     261           0 :   CcsnCollapse() = default;
     262           0 :   CcsnCollapse(const CcsnCollapse& /*rhs*/) = default;
     263           0 :   CcsnCollapse& operator=(const CcsnCollapse& /*rhs*/) = default;
     264           0 :   CcsnCollapse(CcsnCollapse&& /*rhs*/) = default;
     265           0 :   CcsnCollapse& operator=(CcsnCollapse&& /*rhs*/) = default;
     266           0 :   ~CcsnCollapse() override = default;
     267             : 
     268           0 :   CcsnCollapse(std::string progenitor_filename,
     269             :                double central_angular_velocity,
     270             :                double diff_rot_parameter,
     271             :                double max_dens_ratio_interp,
     272             :                const std::string& eos_filename,
     273             :                const std::string& eos_subfilename);
     274             : 
     275           0 :   auto get_clone() const
     276             :       -> std::unique_ptr<evolution::initial_data::InitialData> override;
     277             : 
     278             :   /// \cond
     279             :   explicit CcsnCollapse(CkMigrateMessage* msg);
     280             :   using PUP::able::register_constructor;
     281             :   WRAPPED_PUPable_decl_template(CcsnCollapse);
     282             :   /// \endcond
     283             : 
     284             :   /// Retrieve a collection of variables at `(x)`
     285             :   template <typename DataType, typename... Tags>
     286           1 :   tuples::TaggedTuple<Tags...> variables(const tnsr::I<DataType, 3>& x,
     287             :                                          tmpl::list<Tags...> /*meta*/) const {
     288             :     IntermediateVariables<DataType> intermediate_vars{
     289             :         x, 1.0e-4 * prog_data_.max_radius()};
     290             :     return {get<Tags>(variables(make_not_null(&intermediate_vars), x,
     291             :                                 tmpl::list<Tags>{}))...};
     292             :   }
     293             : 
     294             :   // NOLINTNEXTLINE(google-runtime-references)
     295           0 :   void pup(PUP::er& p) override;
     296             : 
     297           0 :   const EquationsOfState::Tabulated3D<true>& equation_of_state() const {
     298             :     return equation_of_state_;
     299             :   }
     300             : 
     301             :  protected:
     302             :   template <typename DataType>
     303           0 :   using DerivLapse = ::Tags::deriv<gr::Tags::Lapse<DataType>, tmpl::size_t<3>,
     304             :                                    Frame::Inertial>;
     305             : 
     306             :   template <typename DataType>
     307           0 :   using DerivShift = ::Tags::deriv<gr::Tags::Shift<DataType, 3>,
     308             :                                    tmpl::size_t<3>, Frame::Inertial>;
     309             : 
     310             :   template <typename DataType>
     311           0 :   using DerivSpatialMetric = ::Tags::deriv<gr::Tags::SpatialMetric<DataType, 3>,
     312             :                                            tmpl::size_t<3>, Frame::Inertial>;
     313             : 
     314             :   template <typename DataType>
     315           0 :   void interpolate_vars_if_necessary(
     316             :       gsl::not_null<IntermediateVariables<DataType>*> vars) const;
     317             : 
     318             :   template <typename DataType>
     319           0 :   void interpolate_deriv_vars_if_necessary(
     320             :       gsl::not_null<IntermediateVariables<DataType>*> vars) const;
     321             : 
     322             :   template <typename DataType>
     323           0 :   Scalar<DataType> lapse(const DataType& metric_potential) const;
     324             : 
     325             :   template <typename DataType>
     326           0 :   tnsr::I<DataType, 3, Frame::Inertial> shift(const DataType& radius) const;
     327             : 
     328             :   template <typename DataType>
     329           0 :   tnsr::ii<DataType, 3, Frame::Inertial> spatial_metric(
     330             :       const DataType& chi, const DataType& cos_theta, const DataType& sin_theta,
     331             :       const DataType& phi) const;
     332             : 
     333             :   template <typename DataType>
     334           0 :   tnsr::II<DataType, 3, Frame::Inertial> inverse_spatial_metric(
     335             :       const DataType& chi, const DataType& cos_theta, const DataType& sin_theta,
     336             :       const DataType& phi) const;
     337             : 
     338             :   template <typename DataType>
     339           0 :   Scalar<DataType> sqrt_det_spatial_metric(const DataType& chi) const;
     340             : 
     341             :   template <typename DataType>
     342           0 :   auto make_metric_data(size_t num_points) const ->
     343             :       typename IntermediateVariables<DataType>::MetricData;
     344             : 
     345             :  public:
     346             :   template <typename DataType>
     347           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     348             :                  const tnsr::I<DataType, 3>& x,
     349             :                  tmpl::list<hydro::Tags::RestMassDensity<DataType>> /*meta*/)
     350             :       const -> tuples::TaggedTuple<hydro::Tags::RestMassDensity<DataType>>;
     351             : 
     352             :   template <typename DataType>
     353           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     354             :                  const tnsr::I<DataType, 3>& x,
     355             :                  tmpl::list<hydro::Tags::ElectronFraction<DataType>> /*meta*/)
     356             :       const -> tuples::TaggedTuple<hydro::Tags::ElectronFraction<DataType>>;
     357             : 
     358             :   template <typename DataType>
     359           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     360             :                  const tnsr::I<DataType, 3>& x,
     361             :                  tmpl::list<hydro::Tags::SpecificEnthalpy<DataType>> /*meta*/)
     362             :       const -> tuples::TaggedTuple<hydro::Tags::SpecificEnthalpy<DataType>>;
     363             : 
     364             :   template <typename DataType>
     365           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     366             :                  const tnsr::I<DataType, 3>& x,
     367             :                  tmpl::list<hydro::Tags::Pressure<DataType>> /*meta*/) const
     368             :       -> tuples::TaggedTuple<hydro::Tags::Pressure<DataType>>;
     369             : 
     370             :   template <typename DataType>
     371           0 :   auto variables(
     372             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     373             :       const tnsr::I<DataType, 3>& x,
     374             :       tmpl::list<hydro::Tags::SpecificInternalEnergy<DataType>> /*meta*/) const
     375             :       -> tuples::TaggedTuple<hydro::Tags::SpecificInternalEnergy<DataType>>;
     376             : 
     377             :   template <typename DataType>
     378           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     379             :                  const tnsr::I<DataType, 3>& x,
     380             :                  tmpl::list<hydro::Tags::Temperature<DataType>> /*meta*/) const
     381             :       -> tuples::TaggedTuple<hydro::Tags::Temperature<DataType>>;
     382             : 
     383             :   template <typename DataType>
     384           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     385             :                  const tnsr::I<DataType, 3>& x,
     386             :                  tmpl::list<hydro::Tags::SpatialVelocity<DataType, 3>> /*meta*/)
     387             :       const -> tuples::TaggedTuple<hydro::Tags::SpatialVelocity<DataType, 3>>;
     388             : 
     389             :   template <typename DataType>
     390           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     391             :                  const tnsr::I<DataType, 3>& x,
     392             :                  tmpl::list<hydro::Tags::LorentzFactor<DataType>> /*meta*/)
     393             :       const -> tuples::TaggedTuple<hydro::Tags::LorentzFactor<DataType>>;
     394             : 
     395             :   template <typename DataType>
     396           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     397             :                  const tnsr::I<DataType, 3>& x,
     398             :                  tmpl::list<hydro::Tags::MagneticField<DataType, 3>> /*meta*/)
     399             :       const -> tuples::TaggedTuple<hydro::Tags::MagneticField<DataType, 3>>;
     400             : 
     401             :   template <typename DataType>
     402           0 :   auto variables(
     403             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     404             :       const tnsr::I<DataType, 3>& x,
     405             :       tmpl::list<hydro::Tags::DivergenceCleaningField<DataType>> /*meta*/) const
     406             :       -> tuples::TaggedTuple<hydro::Tags::DivergenceCleaningField<DataType>>;
     407             : 
     408             :   template <typename DataType>
     409           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     410             :                  const tnsr::I<DataType, 3>& x,
     411             :                  tmpl::list<gr::Tags::Lapse<DataType>> /*meta*/) const
     412             :       -> tuples::TaggedTuple<gr::Tags::Lapse<DataType>>;
     413             : 
     414             :   template <typename DataType>
     415           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     416             :                  const tnsr::I<DataType, 3>& x,
     417             :                  tmpl::list<gr::Tags::Shift<DataType, 3>> /*meta*/) const
     418             :       -> tuples::TaggedTuple<gr::Tags::Shift<DataType, 3>>;
     419             : 
     420             :   template <typename DataType>
     421           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     422             :                  const tnsr::I<DataType, 3>& x,
     423             :                  tmpl::list<gr::Tags::SpatialMetric<DataType, 3>> /*meta*/)
     424             :       const -> tuples::TaggedTuple<gr::Tags::SpatialMetric<DataType, 3>>;
     425             : 
     426             :   template <typename DataType>
     427           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     428             :                  const tnsr::I<DataType, 3>& x,
     429             :                  tmpl::list<gr::Tags::SqrtDetSpatialMetric<DataType>> /*meta*/)
     430             :       const -> tuples::TaggedTuple<gr::Tags::SqrtDetSpatialMetric<DataType>>;
     431             : 
     432             :   template <typename DataType>
     433           0 :   auto variables(
     434             :       gsl::not_null<IntermediateVariables<DataType>*> vars,
     435             :       const tnsr::I<DataType, 3>& x,
     436             :       tmpl::list<gr::Tags::InverseSpatialMetric<DataType, 3>> /*meta*/) const
     437             :       -> tuples::TaggedTuple<gr::Tags::InverseSpatialMetric<DataType, 3>>;
     438             : 
     439             :   template <typename DataType>
     440           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     441             :                  const tnsr::I<DataType, 3>& x,
     442             :                  tmpl::list<DerivLapse<DataType>> /*meta*/) const
     443             :       -> tuples::TaggedTuple<DerivLapse<DataType>>;
     444             : 
     445             :   template <typename DataType>
     446           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     447             :                  const tnsr::I<DataType, 3>& x,
     448             :                  tmpl::list<DerivShift<DataType>> /*meta*/) const
     449             :       -> tuples::TaggedTuple<DerivShift<DataType>>;
     450             : 
     451             :   template <typename DataType>
     452           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     453             :                  const tnsr::I<DataType, 3>& x,
     454             :                  tmpl::list<DerivSpatialMetric<DataType>> /*meta*/) const
     455             :       -> tuples::TaggedTuple<DerivSpatialMetric<DataType>>;
     456             : 
     457             :   template <typename DataType>
     458           0 :   auto variables(gsl::not_null<IntermediateVariables<DataType>*> vars,
     459             :                  const tnsr::I<DataType, 3>& x,
     460             :                  tmpl::list<gr::Tags::ExtrinsicCurvature<DataType, 3>> /*meta*/)
     461             :       const -> tuples::TaggedTuple<gr::Tags::ExtrinsicCurvature<DataType, 3>>;
     462             : 
     463             :   template <typename DataType>
     464           0 :   auto variables(const gsl::not_null<IntermediateVariables<DataType>*> vars,
     465             :                  const tnsr::I<DataType, 3>& x,
     466             :                  tmpl::list<::Tags::dt<gr::Tags::Lapse<DataType>>> /*meta*/)
     467             :       const -> tuples::TaggedTuple<::Tags::dt<gr::Tags::Lapse<DataType>>>;
     468             : 
     469             :   template <typename DataType>
     470           0 :   auto variables(
     471             :       const gsl::not_null<IntermediateVariables<DataType>*> vars,
     472             :       const tnsr::I<DataType, 3>& x,
     473             :       tmpl::list<::Tags::dt<gr::Tags::SpatialMetric<DataType, 3>>> /*meta*/)
     474             :       const
     475             :       -> tuples::TaggedTuple<::Tags::dt<gr::Tags::SpatialMetric<DataType, 3>>>;
     476             : 
     477             :   template <typename DataType>
     478           0 :   auto variables(const gsl::not_null<IntermediateVariables<DataType>*> vars,
     479             :                  const tnsr::I<DataType, 3>& x,
     480             :                  tmpl::list<::Tags::dt<gr::Tags::Shift<DataType, 3>>> /*meta*/)
     481             :       const -> tuples::TaggedTuple<::Tags::dt<gr::Tags::Shift<DataType, 3>>>;
     482             : 
     483           0 :   friend bool operator==(const CcsnCollapse& lhs, const CcsnCollapse& rhs);
     484             : 
     485             :  protected:
     486           0 :   std::string progenitor_filename_{};
     487           0 :   detail::ProgenitorProfile prog_data_{};
     488           0 :   EquationsOfState::Tabulated3D<true> equation_of_state_;
     489           0 :   double central_angular_velocity_ =
     490             :       std::numeric_limits<double>::signaling_NaN();
     491           0 :   double inv_diff_rot_parameter_ = std::numeric_limits<double>::signaling_NaN();
     492             : };
     493           0 : bool operator!=(const CcsnCollapse& lhs, const CcsnCollapse& rhs);
     494             : 
     495             : }  // namespace grmhd::AnalyticData

Generated by: LCOV version 1.14