12 #include "Elliptic/BoundaryConditions/BoundaryCondition.hpp"
22 namespace Xcts::BoundaryConditions {
26 using options = tmpl::list<>;
28 "Impose flat spacetime at this boundary.";
30 using argument_tags = tmpl::list<>;
31 using volume_tags = tmpl::list<>;
35 n_dot_conformal_factor_gradient) noexcept;
42 n_dot_lapse_times_conformal_factor_gradient) noexcept;
50 n_dot_lapse_times_conformal_factor_gradient,
52 n_dot_longitudinal_shift_excess) noexcept;
54 using argument_tags_linearized = tmpl::list<>;
55 using volume_tags_linearized = tmpl::list<>;
57 static void apply_linearized(
60 n_dot_conformal_factor_gradient_correction) noexcept;
62 static void apply_linearized(
65 lapse_times_conformal_factor_correction,
67 n_dot_conformal_factor_gradient_correction,
69 n_dot_lapse_times_conformal_factor_gradient_correction) noexcept;
71 static void apply_linearized(
74 lapse_times_conformal_factor_correction,
75 gsl::not_null<tnsr::I<DataVector, 3>*> shift_excess_correction,
77 n_dot_conformal_factor_gradient_correction,
79 n_dot_lapse_times_conformal_factor_gradient_correction,
81 n_dot_longitudinal_shift_excess_correction) noexcept;
84 bool operator==(
const FlatnessImpl& lhs,
const FlatnessImpl& rhs) noexcept;
86 bool operator!=(
const FlatnessImpl& lhs,
const FlatnessImpl& rhs) noexcept;
93 template <
typename Registrars>
96 namespace Registrars {
98 template <
typename Registrars>
114 template <
typename Registrars = tmpl::list<Registrars::Flatness>>
117 public detail::FlatnessImpl {
130 explicit Flatness(CkMigrateMessage* m) noexcept :
Base(m) {}
131 using PUP::able::register_constructor;
136 const noexcept
override {
137 return std::make_unique<Flatness>(*
this);
142 template <
typename Registrars>