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
|