SpECTRE Documentation Coverage Report
Current view: top level - PointwiseFunctions/AnalyticData/GrMhd - CcsnCollapse.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 5.7 % 106 6
Test Date: 2026-10-22 17:29:42
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/TaggedTuple.hpp"
      12              : #include "DataStructures/Tensor/TypeAliases.hpp"
      13              : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
      14              : #include "Options/String.hpp"
      15              : #include "PointwiseFunctions/AnalyticData/AnalyticData.hpp"
      16              : #include "PointwiseFunctions/AnalyticData/GrMhd/AnalyticData.hpp"
      17              : #include "PointwiseFunctions/Hydro/EquationsOfState/EquationOfState.hpp"
      18              : #include "PointwiseFunctions/Hydro/EquationsOfState/Factory.hpp"
      19              : #include "PointwiseFunctions/Hydro/EquationsOfState/Tabulated3d.hpp"
      20              : #include "PointwiseFunctions/Hydro/Temperature.hpp"
      21              : #include "PointwiseFunctions/Hydro/Units.hpp"
      22              : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp"
      23              : #include "Utilities/Serialization/RegisterDerivedClassesWithCharm.hpp"
      24              : #include "Utilities/TMPL.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 2.0-1