SpECTRE Documentation Coverage Report
 Current view: top level - Evolution/Systems/GeneralizedHarmonic/BoundaryConditions - BjorhusImpl.hpp Hit Total Coverage Commit: 817e13c5144619b701c7cd870655d8dbf94ab8ce Lines: 5 6 83.3 % Date: 2024-07-19 22:17:05 Legend: Lines: hit not hit
  Line data Source code  1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include 7 : #include 8 : 9 : #include "DataStructures/Tensor/TypeAliases.hpp" 10 : #include "Utilities/ContainerHelpers.hpp" 11 : 12 : /// \cond 13 : class DataVector; 14 : namespace gsl { 15 : template 16 : class not_null; 17 : } // namespace gsl 18 : /// \endcond 19 : 20 : namespace gh::BoundaryConditions { 21 : /// \brief Detailed implementation of Bjorhus-type boundary corrections 22 1 : namespace Bjorhus { 23 : /*! 24 : * \brief Computes the expression needed to set boundary conditions on the time 25 : * derivative of the characteristic field \f$v^{\psi}_{ab}\f$ 26 : * 27 : * \details In the Bjorhus scheme, the time derivatives of evolved variables are 28 : * characteristic projected. A constraint-preserving correction term is added 29 : * here to the resulting characteristic (time-derivative) field: 30 : * 31 : * \f{align} 32 : * \Delta \partial_t v^{\psi}_{ab} = \lambda_{\psi} n^i C_{iab} 33 : * \f} 34 : * 35 : * where \f$n^i\f$ is the local unit normal to the external boundary, 36 : * \f$C_{iab} = \partial_i \psi_{ab} - \Phi_{iab}\f$ is the three-index 37 : * constraint, and \f$\lambda_{\psi}\f$ is the characteristic speed of the field 38 : * \f$v^{\psi}_{ab}\f$. 39 : */ 40 : template 41 1 : void constraint_preserving_bjorhus_corrections_dt_v_psi( 42 : gsl::not_null*> bc_dt_v_psi, 43 : const tnsr::I& 44 : unit_interface_normal_vector, 45 : const tnsr::iaa& 46 : three_index_constraint, 47 : const std::array& char_speeds); 48 : 49 : /*! 50 : * \brief Computes the expression needed to set boundary conditions on the time 51 : * derivative of the characteristic field \f$v^{0}_{iab}\f$ 52 : * 53 : * \details In the Bjorhus scheme, the time derivatives of evolved variables are 54 : * characteristic projected. A constraint-preserving correction term is added 55 : * here to the resulting characteristic (time-derivative) field \f$v^0_{iab}\f$: 56 : * 57 : * \f{align} 58 : * \Delta \partial_t v^{0}_{iab} = \lambda_{0} n^j C_{jiab} 59 : * \f} 60 : * 61 : * where \f$n^i\f$ is the local unit normal to the external boundary, 62 : * \f$C_{ijab} = \partial_i\Phi_{jab} - \partial_j\Phi_{iab}\f$ is the 63 : * four-index constraint, and \f$\lambda_{0}\f$ is the characteristic speed of 64 : * the field \f$v^0_{iab}\f$. 65 : * 66 : * \note In 3D, only the non-zero and unique components of the four-index 67 : * constraint are stored, as \f$\hat{C}_{iab} = \epsilon_i^{jk} C_{jkab}\f$. In 68 : * 2D the input expected here is \f$\hat{C}_{0ab} = C_{01ab}, \hat{C}_{1ab} = 69 : * C_{10ab}\f$, and in 1D \f$\hat{C}_{0ab} = 0\f$. 70 : */ 71 : template 72 1 : void constraint_preserving_bjorhus_corrections_dt_v_zero( 73 : gsl::not_null*> 74 : bc_dt_v_zero, 75 : const tnsr::I& 76 : unit_interface_normal_vector, 77 : const tnsr::iaa& 78 : four_index_constraint, 79 : const std::array& char_speeds); 80 : 81 : /// @{ 82 : /*! 83 : * \brief Computes the expression needed to set boundary conditions on the time 84 : * derivative of the characteristic field \f$v^{-}_{ab}\f$ 85 : * 86 : * \details In the Bjorhus scheme, the time derivatives of evolved variables are 87 : * characteristic projected. Constraint-preserving correction terms 88 : * \f$T^{\mathrm C}_{ab}\f$, Sommerfeld condition terms for gauge degrees of 89 : * freedom \f$T^{\mathrm G}_{ab}\f$, and terms constraining physical degrees of 90 : * freedom \f$T^{\mathrm P}_{ab}\f$ are added here to the resulting 91 : * characteristic (time-derivative) field: 92 : * 93 : * \f{align} 94 : * \Delta \partial_t v^{-}_{ab} = T^{\mathrm C}_{ab} + T^{\mathrm G}_{ab} 95 : * + T^{\mathrm P}_{ab}. 96 : * \f} 97 : * 98 : * These terms are given by Eq. (64) of \cite Lindblom2005qh : 99 : * 100 : * \f{eqnarray} 101 : * T^{\mathrm C}_{ab} &=& \frac{1}{2} 102 : * \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 103 : * - k^d l_a P^c_b + P^{cd} P_{ab}\right) \partial_t v^{-}_{cd}\\ 104 : * &&+ \frac{1}{\sqrt{2}} \lambda_{-}c^{\hat{0}-}_c \left(l_a l_b k^c + 105 : * P_{ab} l^c - P^c_b l_a - P^c_a l_b \right) \nonumber 106 : * \f} 107 : * 108 : * where \f$l^a (l_a)\f$ is the outgoing null vector (one-form), \f$k^a (k_a)\f$ 109 : * is the incoming null vector (one-form), \f$P_{ab}, P^{ab}, P^a_b\f$ are 110 : * spacetime projection operators defined in transverse_projection_operator(), 111 : * \f$\partial_t v^{-}_{ab}\f$ is the characteristic projected time derivative 112 : * of evolved variables (corresponding to the \f$v^{-}\f$ field), and 113 : * \f$c^{\hat{0}\pm}_a\f$ are characteristic modes of the constraint evolution 114 : * system: 115 : * 116 : * \f{align}\nonumber 117 : * c^{\hat{0}\pm}_a = F_a \mp n^k C_{ka}, 118 : * \f} 119 : * 120 : * where \f$F_a\f$ is the generalized-harmonic (GH) F constraint [Eq. (43) of 121 : * \cite Lindblom2005qh], \f$C_{ka}\f$ is the GH 2-index constraint [Eq. (44) 122 : * of \cite Lindblom2005qh], and \f$n^k\f$ is the unit spatial normal to the 123 : * outer boundary. Boundary correction terms that prevent strong reflections of 124 : * gauge perturbations are given by Eq. (25) of \cite Rinne2007ui : 125 : * 126 : * \f{align} 127 : * T^{\mathrm G}_{ab} = 128 : * \left(k_a P^c_b l^d + k_b P^c_a l^d - 129 : * \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 130 : * \right) \right) \left(\gamma_2 - \frac{1}{r} 131 : * \right) \partial_t v^{\psi}_{cd} 132 : * \f} 133 : * 134 : * where \f$r\f$ is the radial coordinate at the outer boundary, which is 135 : * assumed to be spherical, \f$\gamma_2\f$ is a GH constraint damping parameter, 136 : * and \f$\partial_t v^{\psi}_{ab}\f$ is the characteristic projected time 137 : * derivative of evolved variables (corresponding to the \f$v^{\psi}\f$ field). 138 : * Finally, we constrain physical degrees of freedom using corrections from 139 : * Eq. (68) of \cite Lindblom2005qh : 140 : * 141 : * \f{align} 142 : * T^{\mathrm P}_{ab} = \left( P^c_a P^d_b - \frac{1}{2} P_{ab} P^{cd} \right) 143 : * \left(\partial_t v^{-}_{cd} + \lambda_{-} 144 : * \left(U^{3-}_{cd} - \gamma_2 n^i C_{icd}\right)\right), 145 : * \f} 146 : * 147 : * where \f$C_{icd}\f$ is the GH 3-index constraint [c.f. Eq. (26) of 148 : * \cite Lindblom2005qh, see also three_index_constraint()], and 149 : * 150 : * \f{align}\nonumber 151 : * U^{3-}_{ab} = 2 P^i_a P^j_b U^{8-}_{ij} 152 : * \f} 153 : * 154 : * is the inward propagating characteristic mode of the Weyl tensor evolution 155 : * \f$U^{8-}_{ab}\f$ [c.f. Eq. 75 of \cite Kidder2004rw ] projected onto the 156 : * outer boundary using the spatial-spacetime projection operators \f$P^i_a\f$. 157 : * Note that (A) the covariant derivative of extrinsic curvature needed to 158 : * get the Weyl propagating modes is calculated substituting the evolved 159 : * variable \f$\Phi_{iab}\f$ for spatial derivatives of the spacetime metric; 160 : * and (B) the spatial Ricci tensor used in the same calculation is also 161 : * calculated using the same substituion, and also includes corrections 162 : * proportional to the GH 4-index constraint \f$C_{ijab}\f$ [c.f. Eq. (45) of 163 : * \cite Lindblom2005qh , see also four_index_constraint()]: 164 : * 165 : * \f{align}\nonumber 166 : * R_{ij} \rightarrow R_{ij} + C_{(iklj)} + \frac{1}{2} n^k q^a C_{(ikj)a}, 167 : * \f} 168 : * 169 : * where \f$q^a\f$ is the future-directed spacetime normal vector. 170 : */ 171 : template 172 1 : void constraint_preserving_bjorhus_corrections_dt_v_minus( 173 : gsl::not_null*> 174 : bc_dt_v_minus, 175 : const Scalar& gamma2, 176 : const tnsr::I& inertial_coords, 177 : const tnsr::a& incoming_null_one_form, 178 : const tnsr::a& outgoing_null_one_form, 179 : const tnsr::A& incoming_null_vector, 180 : const tnsr::A& outgoing_null_vector, 181 : const tnsr::aa& projection_ab, 182 : const tnsr::Ab& projection_Ab, 183 : const tnsr::AA& projection_AB, 184 : const tnsr::aa& 185 : char_projected_rhs_dt_v_psi, 186 : const tnsr::aa& 187 : char_projected_rhs_dt_v_minus, 188 : const tnsr::a& 189 : constraint_char_zero_plus, 190 : const tnsr::a& 191 : constraint_char_zero_minus, 192 : const std::array& char_speeds); 193 : 194 : template 195 1 : void constraint_preserving_physical_bjorhus_corrections_dt_v_minus( 196 : gsl::not_null*> 197 : bc_dt_v_minus, 198 : const Scalar& gamma2, 199 : const tnsr::I& inertial_coords, 200 : const tnsr::i& 201 : unit_interface_normal_one_form, 202 : const tnsr::I& 203 : unit_interface_normal_vector, 204 : const tnsr::A& 205 : spacetime_unit_normal_vector, 206 : const tnsr::a& incoming_null_one_form, 207 : const tnsr::a& outgoing_null_one_form, 208 : const tnsr::A& incoming_null_vector, 209 : const tnsr::A& outgoing_null_vector, 210 : const tnsr::aa& projection_ab, 211 : const tnsr::Ab& projection_Ab, 212 : const tnsr::AA& projection_AB, 213 : const tnsr::II& 214 : inverse_spatial_metric, 215 : const tnsr::ii& extrinsic_curvature, 216 : const tnsr::aa& spacetime_metric, 217 : const tnsr::AA& 218 : inverse_spacetime_metric, 219 : const tnsr::iaa& 220 : three_index_constraint, 221 : const tnsr::aa& 222 : char_projected_rhs_dt_v_psi, 223 : const tnsr::aa& 224 : char_projected_rhs_dt_v_minus, 225 : const tnsr::a& 226 : constraint_char_zero_plus, 227 : const tnsr::a& 228 : constraint_char_zero_minus, 229 : const tnsr::iaa& phi, 230 : const tnsr::ijaa& d_phi, 231 : const tnsr::iaa& d_pi, 232 : const std::array& char_speeds); 233 : /// @} 234 : 235 : namespace detail { 236 : template 237 : void add_gauge_sommerfeld_terms_to_dt_v_minus( 238 : const gsl::not_null*> 239 : bc_dt_v_minus, 240 : const Scalar& gamma2, 241 : const tnsr::I& inertial_coords, 242 : const tnsr::a& incoming_null_one_form, 243 : const tnsr::a& outgoing_null_one_form, 244 : const tnsr::A& incoming_null_vector, 245 : const tnsr::A& outgoing_null_vector, 246 : const tnsr::Ab& projection_Ab, 247 : const tnsr::aa& 248 : char_projected_rhs_dt_v_psi); 249 : 250 : template 251 : void add_constraint_dependent_terms_to_dt_v_minus( 252 : const gsl::not_null*> 253 : bc_dt_v_minus, 254 : const tnsr::a& outgoing_null_one_form, 255 : const tnsr::A& incoming_null_vector, 256 : const tnsr::A& outgoing_null_vector, 257 : const tnsr::aa& projection_ab, 258 : const tnsr::Ab& projection_Ab, 259 : const tnsr::AA& projection_AB, 260 : const tnsr::a& 261 : constraint_char_zero_plus, 262 : const tnsr::a& 263 : constraint_char_zero_minus, 264 : const tnsr::aa& 265 : char_projected_rhs_dt_v_minus, 266 : const std::array& char_speeds); 267 : 268 : template 269 : void add_physical_terms_to_dt_v_minus( 270 : const gsl::not_null*> 271 : bc_dt_v_minus, 272 : const Scalar& gamma2, 273 : const tnsr::i& 274 : unit_interface_normal_one_form, 275 : const tnsr::I& 276 : unit_interface_normal_vector, 277 : const tnsr::A& 278 : spacetime_unit_normal_vector, 279 : const tnsr::aa& projection_ab, 280 : const tnsr::Ab& projection_Ab, 281 : const tnsr::AA& projection_AB, 282 : const tnsr::II& 283 : inverse_spatial_metric, 284 : const tnsr::ii& extrinsic_curvature, 285 : const tnsr::aa& spacetime_metric, 286 : const tnsr::AA& 287 : inverse_spacetime_metric, 288 : const tnsr::iaa& 289 : three_index_constraint, 290 : const tnsr::aa& 291 : char_projected_rhs_dt_v_minus, 292 : const tnsr::iaa& phi, 293 : const tnsr::ijaa& d_phi, 294 : const tnsr::iaa& d_pi, 295 : const std::array& char_speeds); 296 : } // namespace detail 297 : } // namespace Bjorhus 298 : } // namespace gh::BoundaryConditions 

 Generated by: LCOV version 1.14