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