Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 :
8 : #include "DataStructures/Tensor/Tensor.hpp"
9 : #include "Utilities/Gsl.hpp"
10 :
11 : namespace CurvedScalarWave::Worldtube {
12 :
13 : /// @{
14 : /*!
15 : * \brief Computes the coordinate acceleration due to the scalar self-force onto
16 : * the charge.
17 : *
18 : * \details It is given by
19 : *
20 : * \begin{equation}
21 : * (u^0)^2 \ddot{x}^i_p = \frac{q}{\mu}(g^{i
22 : * \alpha} - \dot{x}^i_p g^{0 \alpha} ) \partial_\alpha \Psi^R
23 : * \end{equation}
24 : *
25 : * where $\dot{x}^i_p$ is the position of the scalar charge, $\Psi^R$ is the
26 : * regular field, $q$ is the particle's charge, $\mu$ is the particle's mass,
27 : * $u^\alpha$ is the four-velocity and $g^{\alpha \beta}$ is the inverse
28 : * spacetime metric in the inertial frame, evaluated at the position of the
29 : * particle. An overdot denotes a derivative with respect to coordinate time.
30 : * Greek indices are spacetime indices and Latin indices are purely spatial.
31 : * Note that the coordinate geodesic acceleration is NOT included.
32 : */
33 : template <size_t Dim>
34 1 : void self_force_acceleration(
35 : gsl::not_null<tnsr::I<double, Dim>*> self_force_acc,
36 : const Scalar<double>& dt_psi_monopole,
37 : const tnsr::i<double, Dim>& psi_dipole,
38 : const tnsr::I<double, Dim>& particle_velocity, double particle_charge,
39 : double particle_mass, const tnsr::AA<double, Dim>& inverse_metric,
40 : const Scalar<double>& dilation_factor);
41 :
42 : template <size_t Dim>
43 1 : tnsr::I<double, Dim> self_force_acceleration(
44 : const Scalar<double>& dt_psi_monopole,
45 : const tnsr::i<double, Dim>& psi_dipole,
46 : const tnsr::I<double, Dim>& particle_velocity, double particle_charge,
47 : double particle_mass, const tnsr::AA<double, Dim>& inverse_metric,
48 : const Scalar<double>& dilation_factor);
49 :
50 : /// @}
51 : /*!
52 : * \brief Computes the scalar self-force per unit mass
53 : *
54 : * \details It is given by
55 : * \begin{equation}
56 : * f^\alpha = \frac{q}{\mu} (g^{\alpha \beta} + u^\alpha u^\beta) \partial_\beta
57 : * \Psi^R
58 : * \end{equation}
59 : * where $\Psi^R$ is the regular field at the position of the particle, $q$ is
60 : * the particle's charge, $\mu$ is the particle's mass, $u^\alpha$ is the
61 : * four-velocity and $g^{\alpha \beta}$ is the inverse spacetime metric in the
62 : * inertial frame, evaluated at the position of the particle.
63 : */
64 : template <size_t Dim>
65 1 : tnsr::A<double, Dim> self_force_per_mass(
66 : const tnsr::a<double, Dim>& d_psi,
67 : const tnsr::A<double, Dim>& four_velocity, double particle_charge,
68 : double particle_mass, const tnsr::AA<double, Dim>& inverse_metric);
69 :
70 : /*!
71 : * \brief Computes the first time derivative of scalar self-force per unit mass,
72 : * see `self_force_per_mass`, by applying the chain rule.
73 : */
74 : template <size_t Dim>
75 1 : tnsr::A<double, Dim> dt_self_force_per_mass(
76 : const tnsr::a<double, Dim>& d_psi, const tnsr::a<double, Dim>& dt_d_psi,
77 : const tnsr::A<double, Dim>& four_velocity,
78 : const tnsr::A<double, Dim>& dt_four_velocity, double particle_charge,
79 : double particle_mass, const tnsr::AA<double, Dim>& inverse_metric,
80 : const tnsr::AA<double, Dim>& dt_inverse_metric);
81 :
82 : /*!
83 : * \brief Computes the second time derivative of scalar self-force per unit
84 : * mass, see `self_force_per_mass`, by applying the chain rule.
85 : */
86 : template <size_t Dim>
87 1 : tnsr::A<double, Dim> dt2_self_force_per_mass(
88 : const tnsr::a<double, Dim>& d_psi, const tnsr::a<double, Dim>& dt_d_psi,
89 : const tnsr::a<double, Dim>& dt2_d_psi,
90 : const tnsr::A<double, Dim>& four_velocity,
91 : const tnsr::A<double, Dim>& dt_four_velocity,
92 : const tnsr::A<double, Dim>& dt2_four_velocity, double particle_charge,
93 : double particle_mass, const tnsr::AA<double, Dim>& inverse_metric,
94 : const tnsr::AA<double, Dim>& dt_inverse_metric,
95 : const tnsr::AA<double, Dim>& dt2_inverse_metric);
96 :
97 : /*!
98 : * \brief Computes the covariant derivative of the scalar self-force per unit
99 : * mass $f^\alpha$, see `self_force_per_mass`, along the four velocity
100 : * $u^\beta$, i.e. $u^\beta \nabla_\beta f^\alpha$.
101 : */
102 : template <size_t Dim>
103 1 : tnsr::A<double, Dim> Du_self_force_per_mass(
104 : const tnsr::A<double, Dim>& self_force,
105 : const tnsr::A<double, Dim>& dt_self_force,
106 : const tnsr::A<double, Dim>& four_velocity,
107 : const tnsr::Abb<double, Dim>& christoffel);
108 : /*!
109 : * \brief Computes the time derivative of the covariant derivative of the scalar
110 : * self-force per unit mass $f^\alpha$, see `Du_self_force_per_mass`, along the
111 : * four velocity $u^\beta$, i.e.
112 : * $\frac{d}{dt}u^\beta \nabla_\beta f^\alpha$.
113 : */
114 : template <size_t Dim>
115 1 : tnsr::A<double, Dim> dt_Du_self_force_per_mass(
116 : const tnsr::A<double, Dim>& self_force,
117 : const tnsr::A<double, Dim>& dt_self_force,
118 : const tnsr::A<double, Dim>& dt2_self_force,
119 : const tnsr::A<double, Dim>& four_velocity,
120 : const tnsr::A<double, Dim>& dt_four_velocity,
121 : const tnsr::Abb<double, Dim>& christoffel,
122 : const tnsr::Abb<double, Dim>& dt_christoffel);
123 : } // namespace CurvedScalarWave::Worldtube
|