SpECTRE  v2024.02.05
CurvedScalarWave Namespace Reference

Items related to evolving a scalar wave on a curved background. More...

Namespaces

namespace  AnalyticData
 Holds classes implementing analytic data for the CurvedScalarWave system.
 
namespace  BoundaryConditions
 Boundary conditions for the curved scalar wave system.
 
namespace  BoundaryCorrections
 Boundary corrections/numerical fluxes.
 
namespace  Tags
 Tags for the curved scalar wave system.
 
namespace  Worldtube
 The set of utilities for performing CurvedScalarWave evolution with a worldtube excision scheme.
 

Classes

struct  CharacteristicFieldsCompute
 
struct  CharacteristicSpeedsCompute
 
struct  EvolvedFieldsFromCharacteristicFieldsCompute
 
struct  System
 
struct  TimeDerivative
 Compute the time derivative of the evolved variables of the first-order scalar wave system on a curved background. More...
 

Functions

template<size_t SpatialDim>
std::array< DataVector, 4 > characteristic_speeds (const Scalar< DataVector > &gamma_1, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &shift, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 Compute the characteristic speeds for the scalar wave system in curved spacetime. More...
 
template<size_t SpatialDim>
void characteristic_speeds (gsl::not_null< std::array< DataVector, 4 > * > char_speeds, const Scalar< DataVector > &gamma_1, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &shift, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 Compute the characteristic speeds for the scalar wave system in curved spacetime. More...
 
template<size_t SpatialDim>
void characteristic_speeds (gsl::not_null< tnsr::a< DataVector, 3, Frame::Inertial > * > char_speeds, const Scalar< DataVector > &gamma_1, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &shift, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 Compute the characteristic speeds for the scalar wave system in curved spacetime. More...
 
template<size_t SpatialDim>
Variables< tmpl::list< Tags::VPsi, Tags::VZero< SpatialDim >, Tags::VPlus, Tags::VMinus > > characteristic_fields (const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &psi, const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &unit_normal_vector)
 Computes characteristic fields from evolved fields. More...
 
template<size_t SpatialDim>
void characteristic_fields (gsl::not_null< Variables< tmpl::list< Tags::VPsi, Tags::VZero< SpatialDim >, Tags::VPlus, Tags::VMinus > > * > char_fields, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &psi, const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &unit_normal_vector)
 Computes characteristic fields from evolved fields. More...
 
template<size_t SpatialDim>
void characteristic_fields (const gsl::not_null< Scalar< DataVector > * > &v_psi, const gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * > &v_zero, const gsl::not_null< Scalar< DataVector > * > &v_plus, const gsl::not_null< Scalar< DataVector > * > &v_minus, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &psi, const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form, const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &unit_normal_vector)
 Computes characteristic fields from evolved fields. More...
 
template<size_t SpatialDim>
Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< SpatialDim > > > evolved_fields_from_characteristic_fields (const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &v_psi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &v_zero, const Scalar< DataVector > &v_plus, const Scalar< DataVector > &v_minus, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 For expressions used here to compute evolved fields from characteristic ones, see CharacteristicFieldsCompute.
 
template<size_t SpatialDim>
void evolved_fields_from_characteristic_fields (gsl::not_null< Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< SpatialDim > > > * > evolved_fields, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &v_psi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &v_zero, const Scalar< DataVector > &v_plus, const Scalar< DataVector > &v_minus, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 For expressions used here to compute evolved fields from characteristic ones, see CharacteristicFieldsCompute.
 
template<size_t SpatialDim>
void evolved_fields_from_characteristic_fields (gsl::not_null< Scalar< DataVector > * > psi, gsl::not_null< Scalar< DataVector > * > pi, gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * > phi, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &v_psi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &v_zero, const Scalar< DataVector > &v_plus, const Scalar< DataVector > &v_minus, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &unit_normal_one_form)
 For expressions used here to compute evolved fields from characteristic ones, see CharacteristicFieldsCompute.
 
template<size_t SpatialDim>
tnsr::i< DataVector, SpatialDim, Frame::Inertialone_index_constraint (const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &d_psi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the scalar-wave one-index constraint. More...
 
template<size_t SpatialDim>
void one_index_constraint (gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * > constraint, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &d_psi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the scalar-wave one-index constraint. More...
 
template<size_t SpatialDim>
tnsr::ij< DataVector, SpatialDim, Frame::Inertialtwo_index_constraint (const tnsr::ij< DataVector, SpatialDim, Frame::Inertial > &d_phi)
 Computes the scalar-wave 2-index constraint. More...
 
template<size_t SpatialDim>
void two_index_constraint (gsl::not_null< tnsr::ij< DataVector, SpatialDim, Frame::Inertial > * > constraint, const tnsr::ij< DataVector, SpatialDim, Frame::Inertial > &d_phi)
 Computes the scalar-wave 2-index constraint. More...
 

Detailed Description

Items related to evolving a scalar wave on a curved background.

Function Documentation

◆ characteristic_fields() [1/3]

template<size_t SpatialDim>
void CurvedScalarWave::characteristic_fields ( const gsl::not_null< Scalar< DataVector > * > &  v_psi,
const gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * > &  v_zero,
const gsl::not_null< Scalar< DataVector > * > &  v_plus,
const gsl::not_null< Scalar< DataVector > * > &  v_minus,
const Scalar< DataVector > &  gamma_2,
const Scalar< DataVector > &  psi,
const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_vector 
)

Computes characteristic fields from evolved fields.

CharacteristicFieldsCompute and EvolvedFieldsFromCharacteristicFieldsCompute convert between characteristic and evolved fields for the scalar-wave system in curved spacetime.

CharacteristicFieldsCompute computes characteristic fields as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] . Their names used here differ from this paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The characteristic fields \(u\) are given in terms of the evolved fields by Eq. (33) - (35) of [86], respectively:

\begin{align*} v^{\hat \psi} =& \psi \\ v^{\hat 0}_{i} =& (\delta^k_i - n_i n^k) \Phi_{k} := P^k_i \Phi_{k} \\ v^{\hat \pm} =& \Pi \pm n^i \Phi_{i} - \gamma_2\psi \end{align*}

where \(\psi\) is the scalar field, \(\Pi\) and \(\Phi_{i}\) are evolved fields introduced by first derivatives of \(\psi\), \(\gamma_2\) is a constraint damping parameter, and \(n_k\) is the unit normal to the surface.

EvolvedFieldsFromCharacteristicFieldsCompute computes evolved fields \(w\) in terms of the characteristic fields. This uses the inverse of above relations (c.f. Eq. (36) - (38) of [86] ):

\begin{align*} \psi =& v^{\hat \psi}, \\ \Pi =& \frac{1}{2}(v^{\hat +} + v^{\hat -}) + \gamma_2 v^{\hat \psi}, \\ \Phi_{i} =& \frac{1}{2}(v^{\hat +} - v^{\hat -}) n_i + v^{\hat 0}_{i}. \end{align*}

The corresponding characteristic speeds \(\lambda\) are computed by CharacteristicSpeedsCompute .

◆ characteristic_fields() [2/3]

template<size_t SpatialDim>
Variables< tmpl::list< Tags::VPsi, Tags::VZero< SpatialDim >, Tags::VPlus, Tags::VMinus > > CurvedScalarWave::characteristic_fields ( const Scalar< DataVector > &  gamma_2,
const Scalar< DataVector > &  psi,
const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_vector 
)

Computes characteristic fields from evolved fields.

CharacteristicFieldsCompute and EvolvedFieldsFromCharacteristicFieldsCompute convert between characteristic and evolved fields for the scalar-wave system in curved spacetime.

CharacteristicFieldsCompute computes characteristic fields as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] . Their names used here differ from this paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The characteristic fields \(u\) are given in terms of the evolved fields by Eq. (33) - (35) of [86], respectively:

\begin{align*} v^{\hat \psi} =& \psi \\ v^{\hat 0}_{i} =& (\delta^k_i - n_i n^k) \Phi_{k} := P^k_i \Phi_{k} \\ v^{\hat \pm} =& \Pi \pm n^i \Phi_{i} - \gamma_2\psi \end{align*}

where \(\psi\) is the scalar field, \(\Pi\) and \(\Phi_{i}\) are evolved fields introduced by first derivatives of \(\psi\), \(\gamma_2\) is a constraint damping parameter, and \(n_k\) is the unit normal to the surface.

EvolvedFieldsFromCharacteristicFieldsCompute computes evolved fields \(w\) in terms of the characteristic fields. This uses the inverse of above relations (c.f. Eq. (36) - (38) of [86] ):

\begin{align*} \psi =& v^{\hat \psi}, \\ \Pi =& \frac{1}{2}(v^{\hat +} + v^{\hat -}) + \gamma_2 v^{\hat \psi}, \\ \Phi_{i} =& \frac{1}{2}(v^{\hat +} - v^{\hat -}) n_i + v^{\hat 0}_{i}. \end{align*}

The corresponding characteristic speeds \(\lambda\) are computed by CharacteristicSpeedsCompute .

◆ characteristic_fields() [3/3]

template<size_t SpatialDim>
void CurvedScalarWave::characteristic_fields ( gsl::not_null< Variables< tmpl::list< Tags::VPsi, Tags::VZero< SpatialDim >, Tags::VPlus, Tags::VMinus > > * >  char_fields,
const Scalar< DataVector > &  gamma_2,
const Scalar< DataVector > &  psi,
const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_vector 
)

Computes characteristic fields from evolved fields.

CharacteristicFieldsCompute and EvolvedFieldsFromCharacteristicFieldsCompute convert between characteristic and evolved fields for the scalar-wave system in curved spacetime.

CharacteristicFieldsCompute computes characteristic fields as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] . Their names used here differ from this paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The characteristic fields \(u\) are given in terms of the evolved fields by Eq. (33) - (35) of [86], respectively:

\begin{align*} v^{\hat \psi} =& \psi \\ v^{\hat 0}_{i} =& (\delta^k_i - n_i n^k) \Phi_{k} := P^k_i \Phi_{k} \\ v^{\hat \pm} =& \Pi \pm n^i \Phi_{i} - \gamma_2\psi \end{align*}

where \(\psi\) is the scalar field, \(\Pi\) and \(\Phi_{i}\) are evolved fields introduced by first derivatives of \(\psi\), \(\gamma_2\) is a constraint damping parameter, and \(n_k\) is the unit normal to the surface.

EvolvedFieldsFromCharacteristicFieldsCompute computes evolved fields \(w\) in terms of the characteristic fields. This uses the inverse of above relations (c.f. Eq. (36) - (38) of [86] ):

\begin{align*} \psi =& v^{\hat \psi}, \\ \Pi =& \frac{1}{2}(v^{\hat +} + v^{\hat -}) + \gamma_2 v^{\hat \psi}, \\ \Phi_{i} =& \frac{1}{2}(v^{\hat +} - v^{\hat -}) n_i + v^{\hat 0}_{i}. \end{align*}

The corresponding characteristic speeds \(\lambda\) are computed by CharacteristicSpeedsCompute .

◆ characteristic_speeds() [1/3]

template<size_t SpatialDim>
std::array< DataVector, 4 > CurvedScalarWave::characteristic_speeds ( const Scalar< DataVector > &  gamma_1,
const Scalar< DataVector > &  lapse,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  shift,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form 
)

Compute the characteristic speeds for the scalar wave system in curved spacetime.

Computes the speeds as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] [see text following Eq. (32)]. The characteristic fields' names used here are similar to the paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The corresponding characteristic speeds \(\lambda\) are given in the text following Eq. (38) of [86] :

\begin{align*} \lambda_{\hat \psi} =& -(1 + \gamma_1) n_k N^k \\ \lambda_{\hat 0} =& -n_k N^k \\ \lambda_{\hat \pm} =& -n_k N^k \pm N \end{align*}

where \(n_k\) is the unit normal to the surface.

◆ characteristic_speeds() [2/3]

template<size_t SpatialDim>
void CurvedScalarWave::characteristic_speeds ( gsl::not_null< std::array< DataVector, 4 > * >  char_speeds,
const Scalar< DataVector > &  gamma_1,
const Scalar< DataVector > &  lapse,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  shift,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form 
)

Compute the characteristic speeds for the scalar wave system in curved spacetime.

Computes the speeds as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] [see text following Eq. (32)]. The characteristic fields' names used here are similar to the paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The corresponding characteristic speeds \(\lambda\) are given in the text following Eq. (38) of [86] :

\begin{align*} \lambda_{\hat \psi} =& -(1 + \gamma_1) n_k N^k \\ \lambda_{\hat 0} =& -n_k N^k \\ \lambda_{\hat \pm} =& -n_k N^k \pm N \end{align*}

where \(n_k\) is the unit normal to the surface.

◆ characteristic_speeds() [3/3]

template<size_t SpatialDim>
void CurvedScalarWave::characteristic_speeds ( gsl::not_null< tnsr::a< DataVector, 3, Frame::Inertial > * >  char_speeds,
const Scalar< DataVector > &  gamma_1,
const Scalar< DataVector > &  lapse,
const tnsr::I< DataVector, SpatialDim, Frame::Inertial > &  shift,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  unit_normal_one_form 
)

Compute the characteristic speeds for the scalar wave system in curved spacetime.

Computes the speeds as described in "Optimal constraint projection for hyperbolic evolution systems" by Holst et. al [86] [see text following Eq. (32)]. The characteristic fields' names used here are similar to the paper:

\begin{align*} \mathrm{SpECTRE} && \mathrm{Holst} \\ v^{\hat \psi} && Z^1 \\ v^{\hat 0}_{i} && Z^{2}_{i} \\ v^{\hat \pm} && u^{1\pm} \end{align*}

The corresponding characteristic speeds \(\lambda\) are given in the text following Eq. (38) of [86] :

\begin{align*} \lambda_{\hat \psi} =& -(1 + \gamma_1) n_k N^k \\ \lambda_{\hat 0} =& -n_k N^k \\ \lambda_{\hat \pm} =& -n_k N^k \pm N \end{align*}

where \(n_k\) is the unit normal to the surface.

◆ one_index_constraint() [1/2]

template<size_t SpatialDim>
tnsr::i< DataVector, SpatialDim, Frame::Inertial > CurvedScalarWave::one_index_constraint ( const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  d_psi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the scalar-wave one-index constraint.

Details

Computes the scalar-wave one-index constraint, \(C_{i} = \partial_i\psi - \Phi_{i},\) which is given by Eq. (19) of [86]

◆ one_index_constraint() [2/2]

template<size_t SpatialDim>
void CurvedScalarWave::one_index_constraint ( gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * >  constraint,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  d_psi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the scalar-wave one-index constraint.

Details

Computes the scalar-wave one-index constraint, \(C_{i} = \partial_i\psi - \Phi_{i},\) which is given by Eq. (19) of [86]

◆ two_index_constraint() [1/2]

template<size_t SpatialDim>
tnsr::ij< DataVector, SpatialDim, Frame::Inertial > CurvedScalarWave::two_index_constraint ( const tnsr::ij< DataVector, SpatialDim, Frame::Inertial > &  d_phi)

Computes the scalar-wave 2-index constraint.

Details

Computes the scalar-wave 2-index FOSH constraint [Eq. (20) of [86]],

\begin{eqnarray} C_{ij} &\equiv& \partial_i \Phi_j - \partial_j \Phi_i \end{eqnarray}

where \(\Phi_{i} = \partial_i\psi\); and \(\psi\) is the scalar field.

◆ two_index_constraint() [2/2]

template<size_t SpatialDim>
void CurvedScalarWave::two_index_constraint ( gsl::not_null< tnsr::ij< DataVector, SpatialDim, Frame::Inertial > * >  constraint,
const tnsr::ij< DataVector, SpatialDim, Frame::Inertial > &  d_phi 
)

Computes the scalar-wave 2-index constraint.

Details

Computes the scalar-wave 2-index FOSH constraint [Eq. (20) of [86]],

\begin{eqnarray} C_{ij} &\equiv& \partial_i \Phi_j - \partial_j \Phi_i \end{eqnarray}

where \(\Phi_{i} = \partial_i\psi\); and \(\psi\) is the scalar field.