SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/RadiationTransport/M1Grey - System.hpp Hit Total Coverage
Commit: 923cd4a8ea30f5a5589baa60b0a93e358ca9f8e8 Lines: 0 28 0.0 %
Date: 2025-11-07 19:37:56
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 <cstddef>
       7             : 
       8             : #include "DataStructures/VariablesTag.hpp"
       9             : #include "Evolution/Imex/GuessResult.hpp"
      10             : #include "Evolution/Imex/Protocols/ImexSystem.hpp"
      11             : #include "Evolution/Systems/RadiationTransport/M1Grey/BoundaryConditions/BoundaryCondition.hpp"
      12             : #include "Evolution/Systems/RadiationTransport/M1Grey/Characteristics.hpp"
      13             : #include "Evolution/Systems/RadiationTransport/M1Grey/M1Closure.hpp"
      14             : #include "Evolution/Systems/RadiationTransport/M1Grey/M1HydroCoupling.hpp"
      15             : #include "Evolution/Systems/RadiationTransport/M1Grey/Tags.hpp"
      16             : #include "Evolution/Systems/RadiationTransport/M1Grey/TimeDerivativeTerms.hpp"
      17             : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      18             : #include "PointwiseFunctions/Hydro/Tags.hpp"
      19             : #include "Utilities/ProtocolHelpers.hpp"
      20             : #include "Utilities/TMPL.hpp"
      21             : 
      22             : /// \ingroup EvolutionSystemsGroup
      23             : /// \brief Items related to general relativistic radiation transport
      24             : namespace RadiationTransport {
      25             : /// The M1 scheme for radiation transport
      26             : ///
      27             : /// References:
      28             : /// - Post-merger evolution of a neutron star-black hole binary with
      29             : ///   neutrino transport, \cite Foucart2015vpa
      30             : namespace M1Grey {
      31             : 
      32             : template <typename NeutrinoSpeciesList>
      33           0 : struct System;
      34             : 
      35             : template <typename... NeutrinoSpecies>
      36           0 : struct System<tmpl::list<NeutrinoSpecies...>>
      37             :     : tt::ConformsTo<imex::protocols::ImexSystem> {
      38           0 :   static constexpr bool is_in_flux_conservative_form = true;
      39           0 :   static constexpr bool has_primitive_and_conservative_vars = false;
      40           0 :   static constexpr size_t volume_dim = 3;
      41             :   // If coupling to hydro, we'll want 3D equations of state
      42             :   // i.e. P(rho,T,Ye)... but this is not implemented yet.
      43             :   // For early tests of M1, we'll ignore coupling to the fluid
      44             :   // and provide analytical expressions for its 4-velocity / LorentzFactor
      45             : 
      46           0 :   using boundary_conditions_base =
      47             :       BoundaryConditions::BoundaryCondition<tmpl::list<NeutrinoSpecies...>>;
      48             : 
      49           0 :   using variables_tag = ::Tags::Variables<
      50             :       tmpl::list<Tags::TildeE<Frame::Inertial, NeutrinoSpecies>...,
      51             :                  Tags::TildeS<Frame::Inertial, NeutrinoSpecies>...>>;
      52           0 :   using flux_variables =
      53             :       tmpl::list<Tags::TildeE<Frame::Inertial, NeutrinoSpecies>...,
      54             :                  Tags::TildeS<Frame::Inertial, NeutrinoSpecies>...>;
      55           0 :   using gradient_variables = tmpl::list<>;
      56           0 :   using primitive_variables_tag = ::Tags::Variables<tmpl::list<
      57             :       Tags::ClosureFactor<NeutrinoSpecies>...,
      58             :       Tags::TildeP<Frame::Inertial, NeutrinoSpecies>...,
      59             :       Tags::TildeJ<NeutrinoSpecies>..., Tags::TildeHNormal<NeutrinoSpecies>...,
      60             :       Tags::TildeHSpatial<Frame::Inertial, NeutrinoSpecies>...,
      61             :       Tags::M1HydroCouplingNormal<NeutrinoSpecies>...,
      62             :       Tags::M1HydroCouplingSpatial<Frame::Inertial, NeutrinoSpecies>...>>;
      63             :   // gr::tags_for_hydro contains all these tags plus SqrtDetSpatialMetric,
      64             :   // so it can be used when adding M1 coupling to hydro
      65           0 :   using spacetime_variables_tag = ::Tags::Variables<
      66             :       tmpl::list<gr::Tags::Lapse<DataVector>, gr::Tags::Shift<DataVector, 3>,
      67             :                  gr::Tags::SpatialMetric<DataVector, 3>,
      68             :                  gr::Tags::InverseSpatialMetric<DataVector, 3>,
      69             :                  gr::Tags::SqrtDetSpatialMetric<DataVector>,
      70             :                  ::Tags::deriv<gr::Tags::Lapse<DataVector>, tmpl::size_t<3>,
      71             :                                Frame::Inertial>,
      72             :                  ::Tags::deriv<gr::Tags::Shift<DataVector, 3>, tmpl::size_t<3>,
      73             :                                Frame::Inertial>,
      74             :                  ::Tags::deriv<gr::Tags::SpatialMetric<DataVector, 3>,
      75             :                                tmpl::size_t<3>, Frame::Inertial>,
      76             :                  gr::Tags::ExtrinsicCurvature<DataVector, 3>>>;
      77           0 :   using hydro_variables_tag = ::Tags::Variables<
      78             :       tmpl::list<hydro::Tags::LorentzFactor<DataVector>,
      79             :                  hydro::Tags::SpatialVelocity<DataVector, 3>,
      80             :                  Tags::GreyEmissivity<NeutrinoSpecies>...,
      81             :                  Tags::GreyAbsorptionOpacity<NeutrinoSpecies>...,
      82             :                  Tags::GreyScatteringOpacity<NeutrinoSpecies>...>>;
      83             : 
      84           0 :   using compute_volume_time_derivative_terms =
      85             :       TimeDerivativeTerms<NeutrinoSpecies...>;
      86             : 
      87           0 :   using inverse_spatial_metric_tag =
      88             :       gr::Tags::InverseSpatialMetric<DataVector, 3>;
      89             : 
      90             :   template <typename Species>
      91           0 :   struct ImplicitSector : tt::ConformsTo<imex::protocols::ImplicitSector> {
      92           0 :     using tensors = tmpl::list<Tags::TildeE<Frame::Inertial, Species>,
      93             :                                Tags::TildeS<Frame::Inertial, Species>>;
      94             :     // Need initial_guess
      95           0 :     using initial_guess = imex::GuessExplicitResult;
      96             : 
      97           0 :     struct M1Solve {
      98             :       // tags in addition to sector tensors to be made available in databox
      99           0 :       using tags_from_evolution = tmpl::list<
     100             :           // spacetime
     101             :           gr::Tags::Lapse<DataVector>, gr::Tags::SpatialMetric<DataVector, 3>,
     102             :           gr::Tags::SqrtDetSpatialMetric<DataVector>,
     103             :           gr::Tags::InverseSpatialMetric<DataVector, 3>,
     104             :           // neutrino
     105             :           Tags::GreyEmissivity<NeutrinoSpecies>...,
     106             :           Tags::GreyAbsorptionOpacity<NeutrinoSpecies>...,
     107             :           Tags::GreyScatteringOpacity<NeutrinoSpecies>...,
     108             :           // hydro
     109             :           hydro::Tags::LorentzFactor<DataVector>,
     110             :           hydro::Tags::SpatialVelocity<DataVector, 3>>;
     111             : 
     112           0 :       using simple_tags = tmpl::list<::Tags::Variables<tmpl::list<
     113             :           Tags::ClosureFactor<NeutrinoSpecies>...,
     114             :           Tags::TildeP<Frame::Inertial, NeutrinoSpecies>...,
     115             :           Tags::TildeJ<NeutrinoSpecies>...,
     116             :           Tags::TildeHNormal<NeutrinoSpecies>...,
     117             :           Tags::TildeHSpatial<Frame::Inertial, NeutrinoSpecies>...>>>;
     118           0 :       using compute_tags = tmpl::list<>;
     119             : 
     120           0 :       using source_prep = tmpl::list<ComputeM1Closure<tmpl::list<Species>>>;
     121           0 :       using jacobian_prep = tmpl::list<ComputeM1Closure<tmpl::list<Species>>>;
     122             : 
     123           0 :       using source = ComputeM1HydroCoupling<tmpl::list<Species>>;
     124           0 :       using jacobian = ComputeM1HydroCouplingJacobian<Species>;
     125             :     };
     126             : 
     127           0 :     using solve_attempts = tmpl::list<M1Solve>;
     128             :   };
     129             : 
     130           0 :   using implicit_sectors = tmpl::list<ImplicitSector<NeutrinoSpecies>...>;
     131             : };
     132             : }  // namespace M1Grey
     133             : }  // namespace RadiationTransport

Generated by: LCOV version 1.14