|
SpECTRE
2021.08.02
|
Computes the generalized harmonic upwind multipenalty boundary correction. More...
#include <UpwindPenaltyCorrection.hpp>
Classes | |
| struct | CharSpeedGamma2VSpacetimeMetric |
| struct | CharSpeedNormalTimesVMinus |
| struct | CharSpeedNormalTimesVPlus |
| struct | TensorCharSpeeds |
Public Types | |
| using | options = tmpl::list<> |
| using | variables_tags = tmpl::list< gr::Tags::SpacetimeMetric< Dim, Frame::Inertial, DataVector >, Tags::Pi< Dim, Frame::Inertial >, Tags::Phi< Dim, Frame::Inertial > > |
| using | package_field_tags = tmpl::list< Tags::VSpacetimeMetric< Dim, Frame::Inertial >, Tags::VZero< Dim, Frame::Inertial >, Tags::VPlus< Dim, Frame::Inertial >, Tags::VMinus< Dim, Frame::Inertial >, CharSpeedNormalTimesVPlus, CharSpeedNormalTimesVMinus, CharSpeedGamma2VSpacetimeMetric, TensorCharSpeeds > |
| using | package_extra_tags = tmpl::list<> |
| using | argument_tags = tmpl::list< Tags::VSpacetimeMetric< Dim, Frame::Inertial >, Tags::VZero< Dim, Frame::Inertial >, Tags::VPlus< Dim, Frame::Inertial >, Tags::VMinus< Dim, Frame::Inertial >, Tags::CharacteristicSpeeds< Dim, Frame::Inertial >, ::GeneralizedHarmonic::ConstraintDamping::Tags::ConstraintGamma2, ::Tags::Normalized< domain::Tags::UnnormalizedFaceNormal< Dim > > > |
Public Member Functions | |
| void | pup (PUP::er &) noexcept |
| void | package_data (gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_v_spacetime_metric, gsl::not_null< tnsr::iaa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_v_zero, gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_v_plus, gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_v_minus, gsl::not_null< tnsr::iaa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_n_times_v_plus, gsl::not_null< tnsr::iaa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_n_times_v_minus, gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > packaged_char_speed_gamma2_v_spacetime_metric, gsl::not_null< tnsr::a< DataVector, 3, Frame::Inertial > * > packaged_char_speeds, const tnsr::aa< DataVector, Dim, Frame::Inertial > &v_spacetime_metric, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &v_zero, const tnsr::aa< DataVector, Dim, Frame::Inertial > &v_plus, const tnsr::aa< DataVector, Dim, Frame::Inertial > &v_minus, const std::array< DataVector, 4 > &char_speeds, const Scalar< DataVector > &constraint_gamma2, const tnsr::i< DataVector, Dim, Frame::Inertial > &interface_unit_normal) const noexcept |
| void | operator() (gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > spacetime_metric_boundary_correction, gsl::not_null< tnsr::aa< DataVector, Dim, Frame::Inertial > * > pi_boundary_correction, gsl::not_null< tnsr::iaa< DataVector, Dim, Frame::Inertial > * > phi_boundary_correction, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_spacetime_metric_int, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_v_zero_int, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_plus_int, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_minus_int, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_normal_times_v_plus_int, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_normal_times_v_minus_int, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_constraint_gamma2_v_spacetime_metric_int, const tnsr::a< DataVector, 3, Frame::Inertial > &char_speeds_int, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_spacetime_metric_ext, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_v_zero_ext, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_plus_ext, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_v_minus_ext, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_minus_normal_times_v_plus_ext, const tnsr::iaa< DataVector, Dim, Frame::Inertial > &char_speed_minus_normal_times_v_minus_ext, const tnsr::aa< DataVector, Dim, Frame::Inertial > &char_speed_constraint_gamma2_v_spacetime_metric_ext, const tnsr::a< DataVector, 3, Frame::Inertial > &char_speeds_ext) const noexcept |
Static Public Member Functions | |
| static std::string | name () noexcept |
Static Public Attributes | |
| static constexpr Options::String | help |
Computes the generalized harmonic upwind multipenalty boundary correction.
This implements the upwind multipenalty boundary correction term \(D_\beta\). We index the evolved variables using unhatted Greek letters, and the characteristic variables using hatted Greek letters. The general form of \(D_\beta\) is given by:
\begin{align*} \label{eq:pnpm upwind boundary term characteristics} D_\beta = T_{\beta\hat{\beta}}^{\mathrm{ext}} \Lambda^{\mathrm{ext},-}_{\hat{\beta}\hat{\alpha}} v^{\mathrm{ext}}_{\hat{\alpha}} -T_{\beta\hat{\beta}}^{\mathrm{int}} \Lambda^{\mathrm{int},-}_{\hat{\beta}\hat{\alpha}} v^{\mathrm{int}}_{\hat{\alpha}}. \end{align*}
Note that Eq. (6.3) of [105] is not exactly what's implemented since the boundary term given by Eq. (6.3) does not consistently treat both sides of the interface on the same footing.
For the first-order generalized harmonic system the correction is:
\begin{align} \label{eq:pnpm upwind gh metric} D_{g_{ab}} &= \tilde{\lambda}_{v^{g}}^{\mathrm{ext}} v^{\mathrm{ext},g}_{ab} - \tilde{\lambda}_{v^{g}}^{\mathrm{int}} v^{\mathrm{int},g}_{ab}, \\ \label{eq:pnpm upwind gh pi} D_{\Pi_{ab}} &= \frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{ext}} v^{\mathrm{ext},+}_{ab} + \tilde{\lambda}_{v^-}^{\mathrm{ext}} v^{\mathrm{ext},-}_{ab}\right) + \tilde{\lambda}_{v^g}^\mathrm{ext}\gamma_2 v^{\mathrm{ext},g}_{ab} \notag \\ &-\frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{int}} v^{\mathrm{int},+}_{ab} + \tilde{\lambda}_{v^-}^{\mathrm{int}} v^{\mathrm{int},-}_{ab}\right) - \tilde{\lambda}_{v^g}^\mathrm{int}\gamma_2 v^{\mathrm{int},g}_{ab} , \\ \label{eq:pnpm upwind gh phi} D_{\Phi_{iab}} &= \frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{ext}} v^{\mathrm{ext},+}_{ab} - \tilde{\lambda}_{v^-}^{\mathrm{ext}} v^{\mathrm{ext},-}_{ab}\right)n_i^{\mathrm{ext}} + \tilde{\lambda}_{v^0}^{\mathrm{ext}} v^{\mathrm{ext},0}_{iab} \notag \\ &- \frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{int}} v^{\mathrm{int},+}_{ab} - \tilde{\lambda}_{v^-}^{\mathrm{int}} v^{\mathrm{int},-}_{ab}\right)n_i^{\mathrm{int}} - \tilde{\lambda}_{v^0}^{\mathrm{int}} v^{\mathrm{int},0}_{iab}, \end{align}
with characteristic fields
\begin{align} \label{eq:pnpm gh v g} v^{g}_{ab} &= g_{ab}, \\ \label{eq:pnpm gh v 0} v^{0}_{iab} &= (\delta^k_i-n^k n_i)\Phi_{kab}, \\ \label{eq:pnpm gh v pm} v^{\pm}_{ab} &= \Pi_{ab}\pm n^i\Phi_{iab} -\gamma_2 g_{ab}, \end{align}
and characteristic speeds
\begin{align} \lambda_{v^g} =& -(1+\gamma_1)\beta^i n_i -v^i_g n_i, \\ \lambda_{v^0} =& -\beta^i n_i -v^i_g n_i, \\ \lambda_{v^\pm} =& \pm \alpha - \beta^i n_i - v^i_g n_i, \end{align}
where \(v_g^i\) is the mesh velocity. We have also defined
\begin{align} \tilde{\lambda}_{\hat{\alpha}} = \left\{ \begin{array}{ll} \lambda_{\hat{\alpha}} & \mathrm{if}\;\lambda_{\hat{\alpha}}\le 0.0 \\ 0 & \mathrm{otherwise} \end{array}\right. \end{align}
Note that we have assumed \(n_i^{\mathrm{ext}}\) points in the same direction as \(n_i^{\mathrm{int}}\), but in the code we have them point in opposite directions. If \(n_i^{\mathrm{ext}}\) points in the opposite direction the external speeds have their sign flipped and the \(\pm\) fields and speeds reverse roles. Specifically, in the code we have:
\begin{align} \label{eq:pnpm upwind gh metric code} D_{g_{ab}} &= \bar{\lambda}_{v^{g}}^{\mathrm{ext}} v^{\mathrm{ext},g}_{ab} - \tilde{\lambda}_{v^{g}}^{\mathrm{int}} v^{\mathrm{int},g}_{ab}, \\ \label{eq:pnpm upwind gh pi code} D_{\Pi_{ab}} &= \frac{1}{2}\left(\bar{\lambda}_{v^+}^{\mathrm{ext}} v^{\mathrm{ext},+}_{ab} + \bar{\lambda}_{v^-}^{\mathrm{ext}} v^{\mathrm{ext},-}_{ab}\right) + \bar{\lambda}_{v^g}^\mathrm{ext}\gamma_2 v^{\mathrm{ext},g}_{ab} \notag \\ &-\frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{int}} v^{\mathrm{int},+}_{ab} + \tilde{\lambda}_{v^-}^{\mathrm{int}} v^{\mathrm{int},-}_{ab}\right) - \tilde{\lambda}_{v^g}^\mathrm{int}\gamma_2 v^{\mathrm{int},g}_{ab} , \\ \label{eq:pnpm upwind gh phi code} D_{\Phi_{iab}} &= \frac{1}{2}\left(\bar{\lambda}_{v^+}^{\mathrm{ext}} v^{\mathrm{ext},+}_{ab} - \bar{\lambda}_{v^-}^{\mathrm{ext}} v^{\mathrm{ext},-}_{ab}\right)n_i^{\mathrm{ext}} + \bar{\lambda}_{v^0}^{\mathrm{ext}} v^{\mathrm{ext},0}_{iab} \notag \\ &- \frac{1}{2}\left(\tilde{\lambda}_{v^+}^{\mathrm{int}} v^{\mathrm{int},+}_{ab} - \tilde{\lambda}_{v^-}^{\mathrm{int}} v^{\mathrm{int},-}_{ab}\right)n_i^{\mathrm{int}} - \tilde{\lambda}_{v^0}^{\mathrm{int}} v^{\mathrm{int},0}_{iab}, \end{align}
where
\begin{align} \bar{\lambda}_{\hat{\alpha}} = \left\{ \begin{array}{ll} -\lambda_{\hat{\alpha}} & \mathrm{if}\;-\lambda_{\hat{\alpha}}\le 0.0 \\ 0 & \mathrm{otherwise} \end{array}\right. \end{align}
|
staticconstexpr |