SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/CurvedScalarWave/BoundaryConditions - AnalyticConstant.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 8.7 % 23 2
Test Date: 2026-10-22 17:29:42
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 <memory>
       7              : #include <optional>
       8              : #include <pup.h>
       9              : #include <string>
      10              : #include <type_traits>
      11              : 
      12              : #include "DataStructures/DataVector.hpp"
      13              : #include "DataStructures/Tensor/Tensor.hpp"
      14              : #include "Domain/FaceNormal.hpp"
      15              : #include "Evolution/BoundaryConditions/Type.hpp"
      16              : #include "Evolution/Systems/CurvedScalarWave/BoundaryConditions/BoundaryCondition.hpp"
      17              : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp"
      18              : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      19              : #include "Utilities/Serialization/CharmPupable.hpp"
      20              : #include "Utilities/TMPL.hpp"
      21              : 
      22              : /// \cond
      23              : namespace domain::Tags {
      24              : template <size_t Dim, typename Frame>
      25              : struct Coordinates;
      26              : }  // namespace domain::Tags
      27              : /// \endcond
      28              : 
      29            1 : namespace CurvedScalarWave::BoundaryConditions {
      30              : /// A `BoundaryCondition` that imposes the scalar to be constant at the
      31              : /// outer boundary.
      32              : template <size_t Dim>
      33            1 : class AnalyticConstant final : public BoundaryCondition<Dim> {
      34              :  public:
      35            0 :   struct Amplitude {
      36            0 :     using type = double;
      37            0 :     static constexpr Options::String help = {
      38              :         "Amplitude of the scalar at the boundary"};
      39              :   };
      40            0 :   using options = tmpl::list<Amplitude>;
      41            0 :   static constexpr Options::String help{
      42              :       "Boundary conditions which impose a constant scalar at the boundary."};
      43              : 
      44            0 :   AnalyticConstant(double amplitude);
      45            0 :   AnalyticConstant() = default;
      46              :   /// \cond
      47              :   AnalyticConstant(AnalyticConstant&&) = default;
      48              :   AnalyticConstant& operator=(AnalyticConstant&&) = default;
      49              :   AnalyticConstant(const AnalyticConstant&) = default;
      50              :   AnalyticConstant& operator=(const AnalyticConstant&) = default;
      51              :   /// \endcond
      52            0 :   ~AnalyticConstant() override = default;
      53              : 
      54            0 :   explicit AnalyticConstant(CkMigrateMessage* msg);
      55              : 
      56            0 :   WRAPPED_PUPable_decl_base_template(
      57              :       domain::BoundaryConditions::BoundaryCondition, AnalyticConstant);
      58              : 
      59            0 :   auto get_clone() const -> std::unique_ptr<
      60              :       domain::BoundaryConditions::BoundaryCondition> override;
      61              : 
      62            0 :   static constexpr evolution::BoundaryConditions::Type bc_type =
      63              :       evolution::BoundaryConditions::Type::Ghost;
      64              : 
      65            0 :   void pup(PUP::er& p) override;
      66              : 
      67            0 :   using dg_interior_evolved_variables_tags = tmpl::list<>;
      68            0 :   using dg_interior_temporary_tags = tmpl::list<
      69              :       gr::Tags::InverseSpatialMetric<DataVector, Dim, Frame::Inertial>,
      70              :       Tags::ConstraintGamma1, Tags::ConstraintGamma2,
      71              :       gr::Tags::Lapse<DataVector>,
      72              :       gr::Tags::Shift<DataVector, Dim, Frame::Inertial>>;
      73            0 :   using dg_interior_dt_vars_tags = tmpl::list<>;
      74            0 :   using dg_interior_deriv_vars_tags = tmpl::list<>;
      75            0 :   using dg_gridless_tags = tmpl::list<>;
      76              : 
      77            0 :   std::optional<std::string> dg_ghost(
      78              :       const gsl::not_null<Scalar<DataVector>*> psi,
      79              :       const gsl::not_null<Scalar<DataVector>*> pi,
      80              :       const gsl::not_null<tnsr::i<DataVector, Dim, Frame::Inertial>*> phi,
      81              :       const gsl::not_null<Scalar<DataVector>*> lapse,
      82              :       const gsl::not_null<tnsr::I<DataVector, Dim>*> shift,
      83              :       const gsl::not_null<Scalar<DataVector>*> gamma1,
      84              :       const gsl::not_null<Scalar<DataVector>*> gamma2,
      85              :       const gsl::not_null<tnsr::II<DataVector, Dim, Frame::Inertial>*>
      86              :           inverse_spatial_metric,
      87              :       const std::optional<tnsr::I<DataVector, Dim, Frame::Inertial>>&
      88              :       /*face_mesh_velocity*/,
      89              :       const tnsr::i<DataVector, Dim>& /*normal_covector*/,
      90              :       const tnsr::I<DataVector, Dim>& /*normal_vector*/,
      91              :       const tnsr::II<DataVector, Dim, Frame::Inertial>&
      92              :           inverse_spatial_metric_interior,
      93              :       const Scalar<DataVector>& gamma1_interior,
      94              :       const Scalar<DataVector>& gamma2_interior,
      95              :       const Scalar<DataVector>& lapse_interior,
      96              :       const tnsr::I<DataVector, Dim>& shift_interior) const;
      97              : 
      98              :  private:
      99            0 :   double amplitude_ = std::numeric_limits<double>::signaling_NaN();
     100              : };
     101              : }  // namespace CurvedScalarWave::BoundaryConditions
        

Generated by: LCOV version 2.0-1