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/DataVector.hpp"
9 : #include "DataStructures/Tensor/Tensor.hpp"
10 : #include "NumericalAlgorithms/Spectral/Mesh.hpp"
11 : #include "Utilities/Gsl.hpp"
12 :
13 : namespace Frame {
14 : struct Fluid;
15 : } // namespace Frame
16 :
17 : /// Items related to the evolution of particles
18 : /// Items related to Monte-Carlo radiation transport
19 : namespace Particles::MonteCarlo {
20 :
21 : struct Packet;
22 :
23 : namespace detail {
24 :
25 : // Time derivative of the spatial component of the momentum one-form on a null
26 : // geodesic
27 : void time_derivative_momentum_geodesic(
28 : gsl::not_null<std::array<double, 3>*> dt_momentum, const Packet& packet,
29 : const Scalar<DataVector>& lapse,
30 : const tnsr::i<DataVector, 3, Frame::Inertial>& d_lapse,
31 : const tnsr::iJ<DataVector, 3, Frame::Inertial>& d_shift,
32 : const tnsr::iJJ<DataVector, 3, Frame::Inertial>& d_inv_spatial_metric);
33 :
34 : } // namespace detail
35 :
36 : // Advances a single packet by time time_step along a geodesic
37 0 : void evolve_single_packet_on_geodesic(
38 : gsl::not_null<Packet*> packet, double time_step,
39 : const Scalar<DataVector>& lapse,
40 : const tnsr::I<DataVector, 3, Frame::Inertial>& shift,
41 : const tnsr::i<DataVector, 3, Frame::Inertial>& d_lapse,
42 : const tnsr::iJ<DataVector, 3, Frame::Inertial>& d_shift,
43 : const tnsr::iJJ<DataVector, 3, Frame::Inertial>& d_inv_spatial_metric,
44 : const tnsr::II<DataVector, 3, Frame::Inertial>& inv_spatial_metric,
45 : const std::optional<tnsr::I<DataVector, 3, Frame::Inertial>>& mesh_velocity,
46 : const InverseJacobian<DataVector, 3, Frame::ElementLogical,
47 : Frame::Inertial>&
48 : inverse_jacobian_logical_to_inertial);
49 :
50 : } // namespace Particles::MonteCarlo
|