SpECTRE  v2025.03.17
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
ScalarWave Namespace Reference

Items related to evolving the scalar wave equation. More...

Namespaces

namespace  BoundaryConditions
 Boundary conditions for the scalar wave system.
 
namespace  BoundaryCorrections
 Boundary corrections/numerical fluxes.
 
namespace  Solutions
 Holds classes implementing a solution to the Euclidean wave equation 0=2Ψt22Ψ.
 
namespace  Tags
 Tags for the ScalarWave evolution system.
 

Classes

struct  ComputeNormalDotFluxes
 A relic of an old incorrect way of handling boundaries for non-conservative systems. More...
 
struct  System
 
struct  TimeDerivative
 Compute the time derivatives for scalar wave system. More...
 

Functions

template<size_t Dim>
std::array< DataVector, 4 > characteristic_speeds (const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Compute the characteristic speeds for the scalar wave system. More...
 
template<size_t Dim>
void characteristic_speeds (gsl::not_null< std::array< DataVector, 4 > * > char_speeds, const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Compute the characteristic speeds for the scalar wave system. More...
 
template<size_t Dim>
Variables< tmpl::list< Tags::VPsi, Tags::VZero< Dim >, Tags::VPlus, Tags::VMinus > > characteristic_fields (const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &psi, const Scalar< DataVector > &pi, const tnsr::i< DataVector, Dim, Frame::Inertial > &phi, const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Computes characteristic fields from evolved fields. More...
 
template<size_t Dim>
void characteristic_fields (gsl::not_null< Variables< tmpl::list< Tags::VPsi, Tags::VZero< Dim >, Tags::VPlus, Tags::VMinus > > * > char_fields, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &psi, const Scalar< DataVector > &pi, const tnsr::i< DataVector, Dim, Frame::Inertial > &phi, const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Computes characteristic fields from evolved fields. More...
 
template<size_t Dim>
Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > evolved_fields_from_characteristic_fields (const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &v_psi, const tnsr::i< DataVector, Dim, Frame::Inertial > &v_zero, const Scalar< DataVector > &v_plus, const Scalar< DataVector > &v_minus, const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Compute evolved fields from characteristic fields. More...
 
template<size_t Dim>
void evolved_fields_from_characteristic_fields (gsl::not_null< Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > * > evolved_fields, const Scalar< DataVector > &gamma_2, const Scalar< DataVector > &v_psi, const tnsr::i< DataVector, Dim, Frame::Inertial > &v_zero, const Scalar< DataVector > &v_plus, const Scalar< DataVector > &v_minus, const tnsr::i< DataVector, Dim, Frame::Inertial > &unit_normal_one_form)
 Compute evolved fields from characteristic fields. More...
 
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)
 Compute 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)
 Compute 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)
 Compute 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)
 Compute the scalar-wave 2-index constraint. More...
 
template<size_t SpatialDim>
void energy_density (gsl::not_null< Scalar< DataVector > * > result, const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the energy density of the scalar wave system. More...
 
template<size_t SpatialDim>
Scalar< DataVectorenergy_density (const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the energy density of the scalar wave system. More...
 
template<size_t SpatialDim>
void momentum_density (gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * > result, const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the momentum density of the scalar wave system. More...
 
template<size_t SpatialDim>
tnsr::i< DataVector, SpatialDim, Frame::Inertialmomentum_density (const Scalar< DataVector > &pi, const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &phi)
 Computes the momentum density of the scalar wave system. More...
 

Detailed Description

Items related to evolving the scalar wave equation.

The equations of motion for the system augmented with constraint damping terms are given by Eq. (15), (23) and (24) of [97] (setting background spacetime to Minkowskian):

tψ=ΠtΠ=iΦitΦi=iΠ+γ2(iψΦi)

In our implementation here, to disable the constraint damping terms, set γ2=0.

Function Documentation

◆ characteristic_fields() [1/2]

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

Computes characteristic fields from evolved fields.

Tags::CharacteristicFieldsCompute and Tags::EvolvedFieldsFromCharacteristicFieldsCompute convert between characteristic and evolved fields for the scalar-wave system.

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

SpECTREHolstvψ^Z1vi0^Zi2v±^u1±

The characteristic fields vα^ are given in terms of the evolved fields by Eq.(33) - (35) of [97], respectively:

vψ^=ψvi0^=(δiknink)Φk:=PikΦkv±^=Π±niΦiγ2ψ

where ψ is the scalar field, Φi=iψ is an auxiliary variable, Π is a conjugate momentum, γ2 is a constraint damping parameter, and nk is the unit normal to the surface along which the characteristic fields are defined.

Tags::EvolvedFieldsFromCharacteristicFieldsCompute computes evolved fields uα in terms of the characteristic fields. This uses the inverse of above relations:

ψ=vψ^,Π=12(v+^+v^)+γ2vψ^,Φi=12(v+^v^)ni+vi0^.

The corresponding characteristic speeds λα^ are computed by Tags::CharacteristicSpeedsCompute .

◆ characteristic_fields() [2/2]

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

Computes characteristic fields from evolved fields.

Tags::CharacteristicFieldsCompute and Tags::EvolvedFieldsFromCharacteristicFieldsCompute convert between characteristic and evolved fields for the scalar-wave system.

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

SpECTREHolstvψ^Z1vi0^Zi2v±^u1±

The characteristic fields vα^ are given in terms of the evolved fields by Eq.(33) - (35) of [97], respectively:

vψ^=ψvi0^=(δiknink)Φk:=PikΦkv±^=Π±niΦiγ2ψ

where ψ is the scalar field, Φi=iψ is an auxiliary variable, Π is a conjugate momentum, γ2 is a constraint damping parameter, and nk is the unit normal to the surface along which the characteristic fields are defined.

Tags::EvolvedFieldsFromCharacteristicFieldsCompute computes evolved fields uα in terms of the characteristic fields. This uses the inverse of above relations:

ψ=vψ^,Π=12(v+^+v^)+γ2vψ^,Φi=12(v+^v^)ni+vi0^.

The corresponding characteristic speeds λα^ are computed by Tags::CharacteristicSpeedsCompute .

◆ characteristic_speeds() [1/2]

template<size_t Dim>
std::array< DataVector, 4 > ScalarWave::characteristic_speeds ( const tnsr::i< DataVector, Dim, Frame::Inertial > &  unit_normal_one_form)

Compute the characteristic speeds for the scalar wave system.

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

SpECTREHolstvψ^Z1vi0^Zi2v±^u1±

The corresponding characteristic speeds λα^ are given in the text following Eq.(38) of [97] :

λψ^=0λ0^=0λ±^=±1.

◆ characteristic_speeds() [2/2]

template<size_t Dim>
void ScalarWave::characteristic_speeds ( gsl::not_null< std::array< DataVector, 4 > * >  char_speeds,
const tnsr::i< DataVector, Dim, Frame::Inertial > &  unit_normal_one_form 
)

Compute the characteristic speeds for the scalar wave system.

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

SpECTREHolstvψ^Z1vi0^Zi2v±^u1±

The corresponding characteristic speeds λα^ are given in the text following Eq.(38) of [97] :

λψ^=0λ0^=0λ±^=±1.

◆ energy_density() [1/2]

template<size_t SpatialDim>
Scalar< DataVector > ScalarWave::energy_density ( const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the energy density of the scalar wave system.

Below is the function used to calculate the energy density.

ϵ=12(Π2+|Φ|2)

◆ energy_density() [2/2]

template<size_t SpatialDim>
void ScalarWave::energy_density ( gsl::not_null< Scalar< DataVector > * >  result,
const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the energy density of the scalar wave system.

Below is the function used to calculate the energy density.

ϵ=12(Π2+|Φ|2)

◆ evolved_fields_from_characteristic_fields() [1/2]

template<size_t Dim>
Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > ScalarWave::evolved_fields_from_characteristic_fields ( const Scalar< DataVector > &  gamma_2,
const Scalar< DataVector > &  v_psi,
const tnsr::i< DataVector, Dim, Frame::Inertial > &  v_zero,
const Scalar< DataVector > &  v_plus,
const Scalar< DataVector > &  v_minus,
const tnsr::i< DataVector, Dim, Frame::Inertial > &  unit_normal_one_form 
)

Compute evolved fields from characteristic fields.

For expressions used here to compute evolved fields from characteristic ones, see Tags::CharacteristicFieldsCompute.

◆ evolved_fields_from_characteristic_fields() [2/2]

template<size_t Dim>
void ScalarWave::evolved_fields_from_characteristic_fields ( gsl::not_null< Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > * >  evolved_fields,
const Scalar< DataVector > &  gamma_2,
const Scalar< DataVector > &  v_psi,
const tnsr::i< DataVector, Dim, Frame::Inertial > &  v_zero,
const Scalar< DataVector > &  v_plus,
const Scalar< DataVector > &  v_minus,
const tnsr::i< DataVector, Dim, Frame::Inertial > &  unit_normal_one_form 
)

Compute evolved fields from characteristic fields.

For expressions used here to compute evolved fields from characteristic ones, see Tags::CharacteristicFieldsCompute.

◆ momentum_density() [1/2]

template<size_t SpatialDim>
tnsr::i< DataVector, SpatialDim, Frame::Inertial > ScalarWave::momentum_density ( const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the momentum density of the scalar wave system.

Below is the function used to calculate the momentum density.

Pi=Π×Φi

◆ momentum_density() [2/2]

template<size_t SpatialDim>
void ScalarWave::momentum_density ( gsl::not_null< tnsr::i< DataVector, SpatialDim, Frame::Inertial > * >  result,
const Scalar< DataVector > &  pi,
const tnsr::i< DataVector, SpatialDim, Frame::Inertial > &  phi 
)

Computes the momentum density of the scalar wave system.

Below is the function used to calculate the momentum density.

Pi=Π×Φi

◆ one_index_constraint() [1/2]

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

Compute the scalar-wave one-index constraint.

Details

Computes the scalar-wave one-index constraint, Ci=iψΦi, which is given by Eq. (19) of [97]

◆ one_index_constraint() [2/2]

template<size_t SpatialDim>
void ScalarWave::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 
)

Compute the scalar-wave one-index constraint.

Details

Computes the scalar-wave one-index constraint, Ci=iψΦi, which is given by Eq. (19) of [97]

◆ two_index_constraint() [1/2]

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

Compute the scalar-wave 2-index constraint.

Details

Computes the scalar-wave 2-index constraint Cij=iΦjjΦi, where Φi=iψ, that is given by Eq. (20) of [97]

Note
We do not support custom storage for antisymmetric tensors yet.

◆ two_index_constraint() [2/2]

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

Compute the scalar-wave 2-index constraint.

Details

Computes the scalar-wave 2-index constraint Cij=iΦjjΦi, where Φi=iψ, that is given by Eq. (20) of [97]

Note
We do not support custom storage for antisymmetric tensors yet.