Line data Source code
1 1 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : /// \file
5 : /// Defines tags related to domain quantities
6 :
7 : #pragma once
8 :
9 : #include "Domain/Tags.hpp"
10 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
11 : #include "PointwiseFunctions/Hydro/Tags.hpp"
12 :
13 : namespace Frame {
14 : struct Fluid;
15 : struct Inertial;
16 : } // namespace Frame
17 :
18 : namespace Particles::MonteCarlo {
19 :
20 : /// Inverse Jacobian of the map from inertial coordinate to an orthonormal frame
21 : /// comoving with the fluid. That frame uses the 4-velocity as its time axis,
22 : /// and constructs the other members of the tetrads using Gram-Schmidt's
23 : /// algorithm.
24 1 : struct InverseJacobianInertialToFluidCompute
25 : : domain::Tags::InverseJacobian<4, Frame::Inertial, Frame::Fluid>,
26 : db::ComputeTag {
27 0 : using base = domain::Tags::InverseJacobian<4, typename Frame::Inertial,
28 : typename Frame::Fluid>;
29 0 : using return_type = typename base::type;
30 0 : using argument_tags =
31 : tmpl::list<hydro::Tags::SpatialVelocity<DataVector, 3, Frame::Inertial>,
32 : hydro::Tags::LorentzFactor<DataVector>,
33 : gr::Tags::Lapse<DataVector>,
34 : gr::Tags::Shift<DataVector, 3, Frame::Inertial>,
35 : gr::Tags::SpatialMetric<DataVector, 3> >;
36 :
37 0 : static void function(gsl::not_null<return_type*> inv_jacobian,
38 : const tnsr::I<DataVector, 3>& spatial_velocity,
39 : const Scalar<DataVector>& lorentz_factor,
40 : const Scalar<DataVector>& lapse,
41 : const tnsr::I<DataVector, 3, Frame::Inertial>& shift,
42 : const tnsr::ii<DataVector, 3>& spatial_metric);
43 : };
44 :
45 : } // namespace Particles::MonteCarlo
|