SpECTRE  v2024.03.19
gh::BoundaryConditions::Bjorhus Namespace Reference

Detailed implementation of Bjorhus-type boundary corrections. More...

Functions

template<size_t VolumeDim, typename DataType >
void constraint_preserving_bjorhus_corrections_dt_v_psi (gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * > bc_dt_v_psi, const tnsr::I< DataType, VolumeDim, Frame::Inertial > &unit_interface_normal_vector, const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &three_index_constraint, const std::array< DataType, 4 > &char_speeds)
 Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{\psi}_{ab}\). More...
 
template<size_t VolumeDim, typename DataType >
void constraint_preserving_bjorhus_corrections_dt_v_zero (gsl::not_null< tnsr::iaa< DataType, VolumeDim, Frame::Inertial > * > bc_dt_v_zero, const tnsr::I< DataType, VolumeDim, Frame::Inertial > &unit_interface_normal_vector, const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &four_index_constraint, const std::array< DataType, 4 > &char_speeds)
 Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{0}_{iab}\). More...
 
template<size_t VolumeDim, typename DataType >
void constraint_preserving_bjorhus_corrections_dt_v_minus (gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * > bc_dt_v_minus, const Scalar< DataType > &gamma2, const tnsr::I< DataType, VolumeDim, Frame::Inertial > &inertial_coords, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &incoming_null_one_form, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &outgoing_null_one_form, const tnsr::A< DataType, VolumeDim, Frame::Inertial > &incoming_null_vector, const tnsr::A< DataType, VolumeDim, Frame::Inertial > &outgoing_null_vector, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &projection_ab, const tnsr::Ab< DataType, VolumeDim, Frame::Inertial > &projection_Ab, const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &projection_AB, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &char_projected_rhs_dt_v_psi, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &char_projected_rhs_dt_v_minus, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &constraint_char_zero_plus, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &constraint_char_zero_minus, const std::array< DataType, 4 > &char_speeds)
 Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{-}_{ab}\). More...
 
template<size_t VolumeDim, typename DataType >
void constraint_preserving_physical_bjorhus_corrections_dt_v_minus (gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * > bc_dt_v_minus, const Scalar< DataType > &gamma2, const tnsr::I< DataType, VolumeDim, Frame::Inertial > &inertial_coords, const tnsr::i< DataType, VolumeDim, Frame::Inertial > &unit_interface_normal_one_form, const tnsr::I< DataType, VolumeDim, Frame::Inertial > &unit_interface_normal_vector, const tnsr::A< DataType, VolumeDim, Frame::Inertial > &spacetime_unit_normal_vector, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &incoming_null_one_form, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &outgoing_null_one_form, const tnsr::A< DataType, VolumeDim, Frame::Inertial > &incoming_null_vector, const tnsr::A< DataType, VolumeDim, Frame::Inertial > &outgoing_null_vector, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &projection_ab, const tnsr::Ab< DataType, VolumeDim, Frame::Inertial > &projection_Ab, const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &projection_AB, const tnsr::II< DataType, VolumeDim, Frame::Inertial > &inverse_spatial_metric, const tnsr::ii< DataType, VolumeDim, Frame::Inertial > &extrinsic_curvature, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &spacetime_metric, const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &inverse_spacetime_metric, const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &three_index_constraint, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &char_projected_rhs_dt_v_psi, const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &char_projected_rhs_dt_v_minus, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &constraint_char_zero_plus, const tnsr::a< DataType, VolumeDim, Frame::Inertial > &constraint_char_zero_minus, const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &phi, const tnsr::ijaa< DataType, VolumeDim, Frame::Inertial > &d_phi, const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &d_pi, const std::array< DataType, 4 > &char_speeds)
 Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{-}_{ab}\). More...
 

Detailed Description

Detailed implementation of Bjorhus-type boundary corrections.

Function Documentation

◆ constraint_preserving_bjorhus_corrections_dt_v_minus()

template<size_t VolumeDim, typename DataType >
void gh::BoundaryConditions::Bjorhus::constraint_preserving_bjorhus_corrections_dt_v_minus ( gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * >  bc_dt_v_minus,
const Scalar< DataType > &  gamma2,
const tnsr::I< DataType, VolumeDim, Frame::Inertial > &  inertial_coords,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  incoming_null_one_form,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  outgoing_null_one_form,
const tnsr::A< DataType, VolumeDim, Frame::Inertial > &  incoming_null_vector,
const tnsr::A< DataType, VolumeDim, Frame::Inertial > &  outgoing_null_vector,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  projection_ab,
const tnsr::Ab< DataType, VolumeDim, Frame::Inertial > &  projection_Ab,
const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &  projection_AB,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  char_projected_rhs_dt_v_psi,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  char_projected_rhs_dt_v_minus,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  constraint_char_zero_plus,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  constraint_char_zero_minus,
const std::array< DataType, 4 > &  char_speeds 
)

Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{-}_{ab}\).

Details

In the Bjorhus scheme, the time derivatives of evolved variables are characteristic projected. Constraint-preserving correction terms \(T^{\mathrm C}_{ab}\), Sommerfeld condition terms for gauge degrees of freedom \(T^{\mathrm G}_{ab}\), and terms constraining physical degrees of freedom \(T^{\mathrm P}_{ab}\) are added here to the resulting characteristic (time-derivative) field:

\begin{align} \Delta \partial_t v^{-}_{ab} = T^{\mathrm C}_{ab} + T^{\mathrm G}_{ab} + T^{\mathrm P}_{ab}. \end{align}

These terms are given by Eq. (64) of [115] :

\begin{eqnarray} T^{\mathrm C}_{ab} &=& \frac{1}{2} \left(2 k^c k^d l_a l_b - k^c l_b P^d_a - k^c l_a P^d_b - k^d l_b P^c_a - k^d l_a P^c_b + P^{cd} P_{ab}\right) \partial_t v^{-}_{cd}\\ &&+ \frac{1}{\sqrt{2}} \lambda_{-}c^{\hat{0}-}_c \left(l_a l_b k^c + P_{ab} l^c - P^c_b l_a - P^c_a l_b \right) \nonumber \end{eqnarray}

where \(l^a (l_a)\) is the outgoing null vector (one-form), \(k^a (k_a)\) is the incoming null vector (one-form), \(P_{ab}, P^{ab}, P^a_b\) are spacetime projection operators defined in transverse_projection_operator(), \(\partial_t v^{-}_{ab}\) is the characteristic projected time derivative of evolved variables (corresponding to the \(v^{-}\) field), and \(c^{\hat{0}\pm}_a\) are characteristic modes of the constraint evolution system:

\begin{align}\nonumber c^{\hat{0}\pm}_a = F_a \mp n^k C_{ka}, \end{align}

where \(F_a\) is the generalized-harmonic (GH) F constraint [Eq. (43) of [115]], \(C_{ka}\) is the GH 2-index constraint [Eq. (44) of [115]], and \(n^k\) is the unit spatial normal to the outer boundary. Boundary correction terms that prevent strong reflections of gauge perturbations are given by Eq. (25) of [156] :

\begin{align} T^{\mathrm G}_{ab} = \left(k_a P^c_b l^d + k_b P^c_a l^d - \left(k_a l_b k^c l^d + k_b l_a k_c l^d + k_a k_b l^c l^d \right) \right) \left(\gamma_2 - \frac{1}{r} \right) \partial_t v^{\psi}_{cd} \end{align}

where \(r\) is the radial coordinate at the outer boundary, which is assumed to be spherical, \(\gamma_2\) is a GH constraint damping parameter, and \(\partial_t v^{\psi}_{ab}\) is the characteristic projected time derivative of evolved variables (corresponding to the \(v^{\psi}\) field). Finally, we constrain physical degrees of freedom using corrections from Eq. (68) of [115] :

\begin{align} T^{\mathrm P}_{ab} = \left( P^c_a P^d_b - \frac{1}{2} P_{ab} P^{cd} \right) \left(\partial_t v^{-}_{cd} + \lambda_{-} \left(U^{3-}_{cd} - \gamma_2 n^i C_{icd}\right)\right), \end{align}

where \(C_{icd}\) is the GH 3-index constraint [c.f. Eq. (26) of [115], see also three_index_constraint()], and

\begin{align}\nonumber U^{3-}_{ab} = 2 P^i_a P^j_b U^{8-}_{ij} \end{align}

is the inward propagating characteristic mode of the Weyl tensor evolution \(U^{8-}_{ab}\) [c.f. Eq. 75 of [99] ] projected onto the outer boundary using the spatial-spacetime projection operators \(P^i_a\). Note that (A) the covariant derivative of extrinsic curvature needed to get the Weyl propagating modes is calculated substituting the evolved variable \(\Phi_{iab}\) for spatial derivatives of the spacetime metric; and (B) the spatial Ricci tensor used in the same calculation is also calculated using the same substituion, and also includes corrections proportional to the GH 4-index constraint \(C_{ijab}\) [c.f. Eq. (45) of [115] , see also four_index_constraint()]:

\begin{align}\nonumber R_{ij} \rightarrow R_{ij} + C_{(iklj)} + \frac{1}{2} n^k q^a C_{(ikj)a}, \end{align}

where \(q^a\) is the future-directed spacetime normal vector.

◆ constraint_preserving_bjorhus_corrections_dt_v_psi()

template<size_t VolumeDim, typename DataType >
void gh::BoundaryConditions::Bjorhus::constraint_preserving_bjorhus_corrections_dt_v_psi ( gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * >  bc_dt_v_psi,
const tnsr::I< DataType, VolumeDim, Frame::Inertial > &  unit_interface_normal_vector,
const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &  three_index_constraint,
const std::array< DataType, 4 > &  char_speeds 
)

Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{\psi}_{ab}\).

Details

In the Bjorhus scheme, the time derivatives of evolved variables are characteristic projected. A constraint-preserving correction term is added here to the resulting characteristic (time-derivative) field:

\begin{align} \Delta \partial_t v^{\psi}_{ab} = \lambda_{\psi} n^i C_{iab} \end{align}

where \(n^i\) is the local unit normal to the external boundary, \(C_{iab} = \partial_i \psi_{ab} - \Phi_{iab}\) is the three-index constraint, and \(\lambda_{\psi}\) is the characteristic speed of the field \(v^{\psi}_{ab}\).

◆ constraint_preserving_bjorhus_corrections_dt_v_zero()

template<size_t VolumeDim, typename DataType >
void gh::BoundaryConditions::Bjorhus::constraint_preserving_bjorhus_corrections_dt_v_zero ( gsl::not_null< tnsr::iaa< DataType, VolumeDim, Frame::Inertial > * >  bc_dt_v_zero,
const tnsr::I< DataType, VolumeDim, Frame::Inertial > &  unit_interface_normal_vector,
const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &  four_index_constraint,
const std::array< DataType, 4 > &  char_speeds 
)

Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{0}_{iab}\).

Details

In the Bjorhus scheme, the time derivatives of evolved variables are characteristic projected. A constraint-preserving correction term is added here to the resulting characteristic (time-derivative) field \(v^0_{iab}\):

\begin{align} \Delta \partial_t v^{0}_{iab} = \lambda_{0} n^j C_{jiab} \end{align}

where \(n^i\) is the local unit normal to the external boundary, \(C_{ijab} = \partial_i\Phi_{jab} - \partial_j\Phi_{iab}\) is the four-index constraint, and \(\lambda_{0}\) is the characteristic speed of the field \(v^0_{iab}\).

Note
In 3D, only the non-zero and unique components of the four-index constraint are stored, as \(\hat{C}_{iab} = \epsilon_i^{jk} C_{jkab}\). In 2D the input expected here is \(\hat{C}_{0ab} = C_{01ab}, \hat{C}_{1ab} = C_{10ab}\), and in 1D \(\hat{C}_{0ab} = 0\).

◆ constraint_preserving_physical_bjorhus_corrections_dt_v_minus()

template<size_t VolumeDim, typename DataType >
void gh::BoundaryConditions::Bjorhus::constraint_preserving_physical_bjorhus_corrections_dt_v_minus ( gsl::not_null< tnsr::aa< DataType, VolumeDim, Frame::Inertial > * >  bc_dt_v_minus,
const Scalar< DataType > &  gamma2,
const tnsr::I< DataType, VolumeDim, Frame::Inertial > &  inertial_coords,
const tnsr::i< DataType, VolumeDim, Frame::Inertial > &  unit_interface_normal_one_form,
const tnsr::I< DataType, VolumeDim, Frame::Inertial > &  unit_interface_normal_vector,
const tnsr::A< DataType, VolumeDim, Frame::Inertial > &  spacetime_unit_normal_vector,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  incoming_null_one_form,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  outgoing_null_one_form,
const tnsr::A< DataType, VolumeDim, Frame::Inertial > &  incoming_null_vector,
const tnsr::A< DataType, VolumeDim, Frame::Inertial > &  outgoing_null_vector,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  projection_ab,
const tnsr::Ab< DataType, VolumeDim, Frame::Inertial > &  projection_Ab,
const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &  projection_AB,
const tnsr::II< DataType, VolumeDim, Frame::Inertial > &  inverse_spatial_metric,
const tnsr::ii< DataType, VolumeDim, Frame::Inertial > &  extrinsic_curvature,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  spacetime_metric,
const tnsr::AA< DataType, VolumeDim, Frame::Inertial > &  inverse_spacetime_metric,
const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &  three_index_constraint,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  char_projected_rhs_dt_v_psi,
const tnsr::aa< DataType, VolumeDim, Frame::Inertial > &  char_projected_rhs_dt_v_minus,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  constraint_char_zero_plus,
const tnsr::a< DataType, VolumeDim, Frame::Inertial > &  constraint_char_zero_minus,
const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &  phi,
const tnsr::ijaa< DataType, VolumeDim, Frame::Inertial > &  d_phi,
const tnsr::iaa< DataType, VolumeDim, Frame::Inertial > &  d_pi,
const std::array< DataType, 4 > &  char_speeds 
)

Computes the expression needed to set boundary conditions on the time derivative of the characteristic field \(v^{-}_{ab}\).

Details

In the Bjorhus scheme, the time derivatives of evolved variables are characteristic projected. Constraint-preserving correction terms \(T^{\mathrm C}_{ab}\), Sommerfeld condition terms for gauge degrees of freedom \(T^{\mathrm G}_{ab}\), and terms constraining physical degrees of freedom \(T^{\mathrm P}_{ab}\) are added here to the resulting characteristic (time-derivative) field:

\begin{align} \Delta \partial_t v^{-}_{ab} = T^{\mathrm C}_{ab} + T^{\mathrm G}_{ab} + T^{\mathrm P}_{ab}. \end{align}

These terms are given by Eq. (64) of [115] :

\begin{eqnarray} T^{\mathrm C}_{ab} &=& \frac{1}{2} \left(2 k^c k^d l_a l_b - k^c l_b P^d_a - k^c l_a P^d_b - k^d l_b P^c_a - k^d l_a P^c_b + P^{cd} P_{ab}\right) \partial_t v^{-}_{cd}\\ &&+ \frac{1}{\sqrt{2}} \lambda_{-}c^{\hat{0}-}_c \left(l_a l_b k^c + P_{ab} l^c - P^c_b l_a - P^c_a l_b \right) \nonumber \end{eqnarray}

where \(l^a (l_a)\) is the outgoing null vector (one-form), \(k^a (k_a)\) is the incoming null vector (one-form), \(P_{ab}, P^{ab}, P^a_b\) are spacetime projection operators defined in transverse_projection_operator(), \(\partial_t v^{-}_{ab}\) is the characteristic projected time derivative of evolved variables (corresponding to the \(v^{-}\) field), and \(c^{\hat{0}\pm}_a\) are characteristic modes of the constraint evolution system:

\begin{align}\nonumber c^{\hat{0}\pm}_a = F_a \mp n^k C_{ka}, \end{align}

where \(F_a\) is the generalized-harmonic (GH) F constraint [Eq. (43) of [115]], \(C_{ka}\) is the GH 2-index constraint [Eq. (44) of [115]], and \(n^k\) is the unit spatial normal to the outer boundary. Boundary correction terms that prevent strong reflections of gauge perturbations are given by Eq. (25) of [156] :

\begin{align} T^{\mathrm G}_{ab} = \left(k_a P^c_b l^d + k_b P^c_a l^d - \left(k_a l_b k^c l^d + k_b l_a k_c l^d + k_a k_b l^c l^d \right) \right) \left(\gamma_2 - \frac{1}{r} \right) \partial_t v^{\psi}_{cd} \end{align}

where \(r\) is the radial coordinate at the outer boundary, which is assumed to be spherical, \(\gamma_2\) is a GH constraint damping parameter, and \(\partial_t v^{\psi}_{ab}\) is the characteristic projected time derivative of evolved variables (corresponding to the \(v^{\psi}\) field). Finally, we constrain physical degrees of freedom using corrections from Eq. (68) of [115] :

\begin{align} T^{\mathrm P}_{ab} = \left( P^c_a P^d_b - \frac{1}{2} P_{ab} P^{cd} \right) \left(\partial_t v^{-}_{cd} + \lambda_{-} \left(U^{3-}_{cd} - \gamma_2 n^i C_{icd}\right)\right), \end{align}

where \(C_{icd}\) is the GH 3-index constraint [c.f. Eq. (26) of [115], see also three_index_constraint()], and

\begin{align}\nonumber U^{3-}_{ab} = 2 P^i_a P^j_b U^{8-}_{ij} \end{align}

is the inward propagating characteristic mode of the Weyl tensor evolution \(U^{8-}_{ab}\) [c.f. Eq. 75 of [99] ] projected onto the outer boundary using the spatial-spacetime projection operators \(P^i_a\). Note that (A) the covariant derivative of extrinsic curvature needed to get the Weyl propagating modes is calculated substituting the evolved variable \(\Phi_{iab}\) for spatial derivatives of the spacetime metric; and (B) the spatial Ricci tensor used in the same calculation is also calculated using the same substituion, and also includes corrections proportional to the GH 4-index constraint \(C_{ijab}\) [c.f. Eq. (45) of [115] , see also four_index_constraint()]:

\begin{align}\nonumber R_{ij} \rightarrow R_{ij} + C_{(iklj)} + \frac{1}{2} n^k q^a C_{(ikj)a}, \end{align}

where \(q^a\) is the future-directed spacetime normal vector.