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 : #include <string> 8 : 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/Tensor/TypeAliases.hpp" 11 : 12 : #include "Evolution/Systems/RadiationTransport/Tags.hpp" 13 : 14 : class DataVector; 15 : 16 : /// Namespace for all radiation transport algorithms 17 : namespace RadiationTransport { 18 : /// Namespace for the grey-M1 radiation transport scheme 19 : namespace M1Grey { 20 : /// %Tags for the evolution of neutrinos using a grey M1 scheme. 21 : namespace Tags { 22 : 23 : /// The characteristic speeds 24 1 : struct CharacteristicSpeeds : db::SimpleTag { 25 0 : using type = std::array<DataVector, 4>; 26 : }; 27 : 28 : /// The densitized energy density of neutrinos of a given species 29 : /// \f${\tilde E}\f$ 30 : template <typename Fr, class Species> 31 1 : struct TildeE : db::SimpleTag { 32 0 : using type = Scalar<DataVector>; 33 0 : static std::string name() { 34 : return Frame::prefix<Fr>() + "TildeE_" + neutrinos::get_name(Species{}); 35 : } 36 : }; 37 : 38 : /// The densitized momentum density of neutrinos of a given species 39 : /// \f${\tilde S_i}\f$ 40 : template <typename Fr, class Species> 41 1 : struct TildeS : db::SimpleTag { 42 0 : using type = tnsr::i<DataVector, 3, Fr>; 43 0 : static std::string name() { 44 : return Frame::prefix<Fr>() + "TildeS_" + neutrinos::get_name(Species{}); 45 : } 46 : }; 47 : 48 : /// The densitized pressure tensor of neutrinos of a given species 49 : /// \f${\tilde P^{ij}}\f$ 50 : /// computed from \f${\tilde E}\f$, \f${\tilde S_i}\f$ using the M1 closure 51 : template <typename Fr, class Species> 52 1 : struct TildeP : db::SimpleTag { 53 0 : using type = tnsr::II<DataVector, 3, Fr>; 54 0 : static std::string name() { 55 : return Frame::prefix<Fr>() + "TildeP_" + neutrinos::get_name(Species{}); 56 : } 57 : }; 58 : 59 : /// The upper index momentum density of a neutrino species. 60 : /// 61 : /// This tag does not know the species of neutrinos being used. 62 : /// \f${\tilde S^i}\f$ 63 : template <typename Fr> 64 1 : struct TildeSVector : db::SimpleTag { 65 0 : using type = tnsr::I<DataVector, 3, Fr>; 66 0 : static std::string name() { return Frame::prefix<Fr>() + "TildeSVector"; } 67 : }; 68 : 69 : /// The M1 closure factor of neutrinos of 70 : /// a given species \f${\xi}\f$ 71 : template <class Species> 72 1 : struct ClosureFactor : db::SimpleTag { 73 0 : using type = Scalar<DataVector>; 74 0 : static std::string name() { 75 : return "ClosureFactor_" + neutrinos::get_name(Species{}); 76 : } 77 : }; 78 : 79 : /// The fluid-frame densitized energy density of neutrinos of 80 : /// a given species \f${\tilde J}\f$ 81 : template <class Species> 82 1 : struct TildeJ : db::SimpleTag { 83 0 : using type = Scalar<DataVector>; 84 0 : static std::string name() { 85 : return "TildeJ_" + neutrinos::get_name(Species{}); 86 : } 87 : }; 88 : 89 : /// The normal component of the fluid-frame momentum density of neutrinos of 90 : /// a given species \f${\tilde H}^a t_a\f$ 91 : template <class Species> 92 1 : struct TildeHNormal : db::SimpleTag { 93 0 : using type = Scalar<DataVector>; 94 0 : static std::string name() { 95 : return "TildeHNormal_" + neutrinos::get_name(Species{}); 96 : } 97 : }; 98 : 99 : /// The spatial components of the fluid-frame momentum density of neutrinos of 100 : /// a given species \f${\tilde H}^a {\gamma}_{ia}\f$ 101 : template <typename Fr, class Species> 102 1 : struct TildeHSpatial : db::SimpleTag { 103 0 : using type = tnsr::i<DataVector, 3, Fr>; 104 0 : static std::string name() { 105 : return Frame::prefix<Fr>() + "TildeHSpatial_" + 106 : neutrinos::get_name(Species{}); 107 : } 108 : }; 109 : 110 : /// The emissivity of the fluid for neutrinos of a given species. 111 : /// 112 : /// By convention, this is the emitted energy per unit volume. 113 : template <class Species> 114 1 : struct GreyEmissivity : db::SimpleTag { 115 0 : using type = Scalar<DataVector>; 116 0 : static std::string name() { 117 : return "GreyEmissivity_" + neutrinos::get_name(Species{}); 118 : } 119 : }; 120 : 121 : /// The absorption opacity of the fluid for neutrinos of a 122 : /// given species. 123 : /// 124 : /// As c=1, this is both the absorption per unit length 125 : /// and per unit time. 126 : template <class Species> 127 1 : struct GreyAbsorptionOpacity : db::SimpleTag { 128 0 : using type = Scalar<DataVector>; 129 0 : static std::string name() { 130 : return "GreyAbsorptionOpacity_" + neutrinos::get_name(Species{}); 131 : } 132 : }; 133 : 134 : /// The scattering opacity of the fluid for neutrinos of a 135 : /// given species. 136 : /// 137 : /// As c=1, this is both the absorption per unit length and per unit time. 138 : template <class Species> 139 1 : struct GreyScatteringOpacity : db::SimpleTag { 140 0 : using type = Scalar<DataVector>; 141 0 : static std::string name() { 142 : return "GreyScatteringOpacity_" + neutrinos::get_name(Species{}); 143 : } 144 : }; 145 : 146 : /// The normal component of the source term coupling the M1 and hydro equations. 147 : /// 148 : /// This is the source term for the evolution of \f${\tilde E}\f$ (by 149 : /// convention, added with a positive sign to \f${\tilde E}\f$ and a negative 150 : /// sign to the hydro variable \f${\tilde \tau}\f$) 151 : template <class Species> 152 1 : struct M1HydroCouplingNormal : db::SimpleTag { 153 0 : using type = Scalar<DataVector>; 154 0 : static std::string name() { 155 : return "M1HydroCouplingNormal_" + neutrinos::get_name(Species{}); 156 : } 157 : }; 158 : 159 : /// The spatial components of source term coupling the M1 and hydro equations. 160 : /// 161 : /// i.e. \f${\tilde G}^a \gamma_{ia}\f$. 162 : /// This is the source term for the evolution of \f${\tilde S}_i\f$ (by 163 : /// convention, added with a positive sign to the neutrino \f${\tilde S}_i\f$ 164 : /// and a negative sign to the hydro variable \f${\tilde S}_i\f$) 165 : template <typename Fr, class Species> 166 1 : struct M1HydroCouplingSpatial : db::SimpleTag { 167 0 : using type = tnsr::i<DataVector, 3, Fr>; 168 0 : static std::string name() { 169 : return Frame::prefix<Fr>() + "M1HydroCouplingSpatial_" + 170 : neutrinos::get_name(Species{}); 171 : } 172 : }; 173 : 174 : } // namespace Tags 175 : } // namespace M1Grey 176 : } // namespace RadiationTransport