Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <vector> 7 : 8 : #include "DataStructures/Tensor/TypeAliases.hpp" 9 : #include "Domain/Tags.hpp" 10 : #include "Evolution/DgSubcell/Tags/Jacobians.hpp" 11 : #include "Evolution/DgSubcell/Tags/Mesh.hpp" 12 : #include "Evolution/Particles/MonteCarlo/Packet.hpp" 13 : #include "Evolution/Particles/MonteCarlo/Tags.hpp" 14 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 15 : #include "Utilities/Gsl.hpp" 16 : 17 : /// \cond 18 : namespace gsl { 19 : template <typename T> 20 : class not_null; 21 : } // namespace gsl 22 : 23 : class DataVector; 24 : 25 : template <size_t Dim> 26 : class Mesh; 27 : /// \endcond 28 : 29 : namespace Particles::MonteCarlo { 30 : 31 0 : void inertial_frame_energy_density( 32 : gsl::not_null<Scalar<DataVector>*> fluid_frame_energy_density, 33 : const std::vector<Packet>& packets, const Scalar<DataVector>& lapse, 34 : const Scalar<DataVector>& sqrt_determinant_spatial_metric, 35 : const Mesh<3>& mesh, 36 : const Scalar<DataVector>& det_jacobian_logical_to_inertial); 37 : 38 : namespace Tags { 39 : /// Simple tag containing the inertial frame energy 40 : /// density on the grid for Monte Carlo packets 41 1 : struct InertialFrameEnergyDensity : db::SimpleTag { 42 0 : using type = Scalar<DataVector>; 43 : }; 44 : } // namespace Tags 45 : 46 0 : struct InertialFrameEnergyDensityCompute : Tags::InertialFrameEnergyDensity, 47 : db::ComputeTag { 48 0 : using base = Tags::InertialFrameEnergyDensity; 49 0 : using return_type = typename base::type; 50 0 : using argument_tags = tmpl::list< 51 : Particles::MonteCarlo::Tags::PacketsOnElement, 52 : gr::Tags::Lapse<DataVector>, gr::Tags::SqrtDetSpatialMetric<DataVector>, 53 : evolution::dg::subcell::Tags::Mesh<3>, 54 : evolution::dg::subcell::fd::Tags::DetInverseJacobianLogicalToInertial>; 55 : 56 0 : static void function( 57 : gsl::not_null<return_type*> inertial_frame_density, 58 : const std::vector<Packet>& packets, const Scalar<DataVector>& lapse, 59 : const Scalar<DataVector>& sqrt_determinant_spatial_metric, 60 : const Mesh<3>& mesh, 61 : const Scalar<DataVector>& det_inv_jacobian_logical_to_inertial); 62 : }; 63 : 64 : } // namespace Particles::MonteCarlo