SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/RadiationTransport/M1Grey - System.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 0.0 % 14 0
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 <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              : struct System<tmpl::list<NeutrinoSpecies...>>
      37              :     : tt::ConformsTo<imex::protocols::ImexSystem> {
      38              :   static std::string name() { return "M1Grey"; }
      39              : 
      40              :   static constexpr bool is_in_flux_conservative_form = true;
      41              :   static constexpr bool has_primitive_and_conservative_vars = false;
      42              :   static constexpr size_t volume_dim = 3;
      43              :   // If coupling to hydro, we'll want 3D equations of state
      44              :   // i.e. P(rho,T,Ye)... but this is not implemented yet.
      45              :   // For early tests of M1, we'll ignore coupling to the fluid
      46              :   // and provide analytical expressions for its 4-velocity / LorentzFactor
      47              : 
      48              :   using boundary_conditions_base =
      49              :       BoundaryConditions::BoundaryCondition<tmpl::list<NeutrinoSpecies...>>;
      50              : 
      51              :   using variables_tag = ::Tags::Variables<
      52              :       tmpl::list<Tags::TildeE<Frame::Inertial, NeutrinoSpecies>...,
      53              :                  Tags::TildeS<Frame::Inertial, NeutrinoSpecies>...>>;
      54              :   using flux_variables =
      55              :       tmpl::list<Tags::TildeE<Frame::Inertial, NeutrinoSpecies>...,
      56              :                  Tags::TildeS<Frame::Inertial, NeutrinoSpecies>...>;
      57              :   using gradient_variables = tmpl::list<>;
      58              :   using primitive_variables_tag = ::Tags::Variables<tmpl::list<
      59              :       Tags::ClosureFactor<NeutrinoSpecies>...,
      60              :       Tags::TildeP<Frame::Inertial, NeutrinoSpecies>...,
      61              :       Tags::TildeJ<NeutrinoSpecies>..., Tags::TildeHNormal<NeutrinoSpecies>...,
      62              :       Tags::TildeHSpatial<Frame::Inertial, NeutrinoSpecies>...,
      63              :       Tags::M1HydroCouplingNormal<NeutrinoSpecies>...,
      64              :       Tags::M1HydroCouplingSpatial<Frame::Inertial, NeutrinoSpecies>...>>;
      65              :   // gr::tags_for_hydro contains all these tags plus SqrtDetSpatialMetric,
      66              :   // so it can be used when adding M1 coupling to hydro
      67              :   using spacetime_variables_tag = ::Tags::Variables<
      68              :       tmpl::list<gr::Tags::Lapse<DataVector>, gr::Tags::Shift<DataVector, 3>,
      69              :                  gr::Tags::SpatialMetric<DataVector, 3>,
      70              :                  gr::Tags::InverseSpatialMetric<DataVector, 3>,
      71              :                  gr::Tags::SqrtDetSpatialMetric<DataVector>,
      72              :                  ::Tags::deriv<gr::Tags::Lapse<DataVector>, tmpl::size_t<3>,
      73              :                                Frame::Inertial>,
      74              :                  ::Tags::deriv<gr::Tags::Shift<DataVector, 3>, tmpl::size_t<3>,
      75              :                                Frame::Inertial>,
      76              :                  ::Tags::deriv<gr::Tags::SpatialMetric<DataVector, 3>,
      77              :                                tmpl::size_t<3>, Frame::Inertial>,
      78              :                  gr::Tags::ExtrinsicCurvature<DataVector, 3>>>;
      79              :   using hydro_variables_tag = ::Tags::Variables<
      80              :       tmpl::list<hydro::Tags::LorentzFactor<DataVector>,
      81              :                  hydro::Tags::SpatialVelocity<DataVector, 3>,
      82              :                  Tags::GreyEmissivity<NeutrinoSpecies>...,
      83              :                  Tags::GreyAbsorptionOpacity<NeutrinoSpecies>...,
      84              :                  Tags::GreyScatteringOpacity<NeutrinoSpecies>...>>;
      85              : 
      86              :   using compute_volume_time_derivative_terms =
      87              :       TimeDerivativeTerms<NeutrinoSpecies...>;
      88              : 
      89              :   using inverse_spatial_metric_tag =
      90              :       gr::Tags::InverseSpatialMetric<DataVector, 3>;
      91              : 
      92              :   template <typename Species>
      93            0 :   struct ImplicitSector : tt::ConformsTo<imex::protocols::ImplicitSector> {
      94            0 :     using tensors = tmpl::list<Tags::TildeE<Frame::Inertial, Species>,
      95              :                                Tags::TildeS<Frame::Inertial, Species>>;
      96              :     // Need initial_guess
      97            0 :     using initial_guess = imex::GuessExplicitResult;
      98              : 
      99            0 :     struct M1Solve {
     100              :       // tags in addition to sector tensors to be made available in databox
     101            0 :       using tags_from_evolution = tmpl::list<
     102              :           // spacetime
     103              :           gr::Tags::Lapse<DataVector>, gr::Tags::SpatialMetric<DataVector, 3>,
     104              :           gr::Tags::SqrtDetSpatialMetric<DataVector>,
     105              :           gr::Tags::InverseSpatialMetric<DataVector, 3>,
     106              :           // neutrino
     107              :           Tags::GreyEmissivity<NeutrinoSpecies>...,
     108              :           Tags::GreyAbsorptionOpacity<NeutrinoSpecies>...,
     109              :           Tags::GreyScatteringOpacity<NeutrinoSpecies>...,
     110              :           // hydro
     111              :           hydro::Tags::LorentzFactor<DataVector>,
     112              :           hydro::Tags::SpatialVelocity<DataVector, 3>>;
     113              : 
     114            0 :       using simple_tags = tmpl::list<::Tags::Variables<tmpl::list<
     115              :           Tags::ClosureFactor<NeutrinoSpecies>...,
     116              :           Tags::TildeP<Frame::Inertial, NeutrinoSpecies>...,
     117              :           Tags::TildeJ<NeutrinoSpecies>...,
     118              :           Tags::TildeHNormal<NeutrinoSpecies>...,
     119              :           Tags::TildeHSpatial<Frame::Inertial, NeutrinoSpecies>...>>>;
     120            0 :       using compute_tags = tmpl::list<>;
     121              : 
     122            0 :       using source_prep = tmpl::list<ComputeM1Closure<tmpl::list<Species>>>;
     123            0 :       using jacobian_prep = tmpl::list<ComputeM1Closure<tmpl::list<Species>>>;
     124              : 
     125            0 :       using source = ComputeM1HydroCoupling<tmpl::list<Species>>;
     126            0 :       using jacobian = ComputeM1HydroCouplingJacobian<Species>;
     127              :     };
     128              : 
     129            0 :     using solve_attempts = tmpl::list<M1Solve>;
     130              :   };
     131              : 
     132              :   using implicit_sectors = tmpl::list<ImplicitSector<NeutrinoSpecies>...>;
     133              : };
     134              : }  // namespace M1Grey
     135              : }  // namespace RadiationTransport
        

Generated by: LCOV version 2.0-1