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/VariablesTag.hpp"
9 : #include "Evolution/Systems/Cce/Tags.hpp"
10 : #include "Utilities/TMPL.hpp"
11 :
12 : namespace Cce {
13 :
14 : /*!
15 : * \brief Performing Cauchy characteristic evolution and Cauchy characteristic
16 : * matching for Einstein-Klein-Gordon system.
17 : *
18 : * \details The code adopts the characteristic formulation to solve the field
19 : * equations for scalar-tensor theory as considered in \cite Ma2023sok. Working
20 : * in the Einstein frame, a real-valued scalar field \f$\psi\f$ is minimally
21 : * coupled with the spacetime metric \f$g_{\mu\nu}\f$. The corresponding action
22 : * is expressed as follows:
23 : *
24 : * \f[
25 : * S = \int d^4x \sqrt{-g} \left(\frac{R}{16 \pi} - \frac{1}{2} \nabla_\mu \psi
26 : * \nabla^\mu \psi\right).
27 : * \f]
28 : *
29 : * The system consists of two sectors: scalar and tensor (metric). The scalar
30 : * field follows the Klein-Gordon (KG) equation
31 : *
32 : * \f[
33 : * \Box \psi = 0.
34 : * \f]
35 : *
36 : * Its characteristic expression is given in \cite Barreto2004fn, yielding
37 : * the hypersurface equation for \f$\partial_u\psi=\Pi\f$, where
38 : * \f$\partial_u\f$ represents differentiation with respect to retarded time $u$
39 : * at fixed numerical radius \f$y\f$. The code first integrates the KG equation
40 : * radially to determine \f$\Pi\f$. Subsequently, the time integration is
41 : * performed to evolve the scalar field \f$\psi\f$ forward in time.
42 : *
43 : * The tensor (metric) sector closely aligns with the current GR CCE system,
44 : * incorporating additional source terms that depend only on the scalar field
45 : * \f$\psi\f$ and its spatial derivatives, rather than its time derivative
46 : * \f$(\Pi)\f$. This feature preserves the hierarchical structure of the
47 : * equations. As a result, the Einstein-Klein-Gordon system can be divided into
48 : * three major sequential steps:
49 : * - Integrate the metric hypersurface equations with the existing
50 : * infrastructure
51 : * - Integrate the KG equation for \f$\Pi\f$
52 : * - Evolve two variables, \f$\psi\f$ (scalar) and \f$J\f$ (tensor) to the next
53 : * time step
54 : *
55 : */
56 : template <bool EvolveCcm>
57 1 : struct KleinGordonSystem {
58 0 : static constexpr bool evolve_ccm = EvolveCcm;
59 0 : static constexpr size_t volume_dim = 3;
60 :
61 0 : using evolved_swsh_tag =
62 : ::Tags::Variables<tmpl::list<Tags::BondiJ, Tags::KleinGordonPsi>>;
63 0 : using evolved_coordinates_variables_tag = ::Tags::Variables<
64 : tmpl::conditional_t<EvolveCcm,
65 : tmpl::list<Cce::Tags::CauchyCartesianCoords,
66 : Cce::Tags::PartiallyFlatCartesianCoords,
67 : Cce::Tags::InertialRetardedTime>,
68 : tmpl::list<Cce::Tags::CauchyCartesianCoords,
69 : Cce::Tags::InertialRetardedTime>>>;
70 :
71 0 : using variables_tag =
72 : tmpl::list<evolved_swsh_tag, evolved_coordinates_variables_tag>;
73 :
74 0 : static constexpr bool has_primitive_and_conservative_vars = false;
75 : };
76 : } // namespace Cce
|