SpECTRE Documentation Coverage Report
Current view: top level - PointwiseFunctions/AnalyticData/GeneralRelativity - SpecInitialData.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 13.0 % 23 3
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 <Exporter.hpp>  // The SpEC Exporter
       7              : #include <memory>
       8              : 
       9              : #include "DataStructures/TaggedTuple.hpp"
      10              : #include "Options/String.hpp"
      11              : #include "PointwiseFunctions/AnalyticData/AnalyticData.hpp"
      12              : #include "PointwiseFunctions/AnalyticData/GeneralRelativity/AnalyticData.hpp"
      13              : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      14              : #include "PointwiseFunctions/InitialDataUtilities/InitialData.hpp"
      15              : #include "Utilities/Serialization/CharmPupable.hpp"
      16              : #include "Utilities/TMPL.hpp"
      17              : 
      18              : /// \cond
      19              : namespace PUP {
      20              : class er;
      21              : }  // namespace PUP
      22              : /// \endcond
      23              : 
      24              : namespace gr::AnalyticData {
      25              : 
      26              : /*!
      27              :  * \brief Vacuum initial data generated by SpEC.
      28              :  *
      29              :  * This class loads numerical data written out by the SpEC initial data solver.
      30              :  * It uses the `spec::Exporter` linked in from SpEC to interpolate to arbitrary
      31              :  * grid points. The coordinates are assumed to be in SpEC's "grid" frame.
      32              :  * We interpolate the following quantities:
      33              :  *
      34              :  * - "Nid_g": spatial metric
      35              :  * - "Nid_K": (lower) extrinsic curvature
      36              :  * - "Nid_N": lapse
      37              :  * - "Nid_Shift": (upper) shift
      38              :  */
      39            1 : class SpecInitialData : public evolution::initial_data::InitialData,
      40              :                         public MarkAsAnalyticData,
      41              :                         public AnalyticDataBase<3> {
      42              :  public:
      43              :   template <typename DataType>
      44            0 :   using tags =
      45              :       tmpl::list<gr::Tags::SpatialMetric<DataType, 3>,
      46              :                  gr::Tags::ExtrinsicCurvature<DataType, 3>,
      47              :                  gr::Tags::Lapse<DataType>,
      48              :                  gr::Tags::Shift<DataType, 3>>;
      49              : 
      50            0 :   struct DataDirectory {
      51            0 :     using type = std::string;
      52            0 :     static constexpr Options::String help = {
      53              :         "Path to a directory of data produced by SpEC. The directory is "
      54              :         "expected to contain 'GrDomain.input' and 'Vars*.h5' files for all the "
      55              :         "subdomains in GrDomain.input."};
      56              :   };
      57              : 
      58            0 :   using options = tmpl::list<DataDirectory>;
      59              : 
      60            0 :   static constexpr Options::String help = {"Initial data generated by SpEC"};
      61              : 
      62            0 :   SpecInitialData() = default;
      63            0 :   SpecInitialData(const SpecInitialData& rhs);
      64            0 :   SpecInitialData& operator=(const SpecInitialData& rhs);
      65            0 :   SpecInitialData(SpecInitialData&& /*rhs*/) = default;
      66            0 :   SpecInitialData& operator=(SpecInitialData&& /*rhs*/) = default;
      67            0 :   ~SpecInitialData() = default;
      68              : 
      69            0 :   SpecInitialData(std::string data_directory);
      70              : 
      71            0 :   auto get_clone() const
      72              :       -> std::unique_ptr<evolution::initial_data::InitialData> override;
      73              : 
      74              :   /// \cond
      75              :   explicit SpecInitialData(CkMigrateMessage* msg);
      76              :   using PUP::able::register_constructor;
      77              :   WRAPPED_PUPable_decl_template(SpecInitialData);
      78              :   /// \endcond
      79              : 
      80              :   template <typename DataType, typename... Tags>
      81            0 :   tuples::TaggedTuple<Tags...> variables(const tnsr::I<DataType, 3>& x,
      82              :                                          tmpl::list<Tags...> /*meta*/) const {
      83              :     auto interpolated_vars = interpolate_from_spec(x);
      84              :     return {std::move(get<Tags>(interpolated_vars))...};
      85              :   }
      86              : 
      87              :   // NOLINTNEXTLINE(google-runtime-references)
      88            0 :   void pup(PUP::er& /*p*/) override;
      89              : 
      90              :  private:
      91              :   /// These quantities are supported for interpolation from SpEC
      92              :   template <typename DataType>
      93            1 :   using interpolated_tags =
      94              :       tmpl::list<gr::Tags::SpatialMetric<DataType, 3>,
      95              :                  gr::Tags::ExtrinsicCurvature<DataType, 3>,
      96              :                  gr::Tags::Lapse<DataType>,
      97              :                  gr::Tags::Shift<DataType, 3>>;
      98              : 
      99              :   /// These are the names in SpEC datasets corresponding to the quantities above
     100            1 :   static const inline std::vector<std::string> vars_to_interpolate_{
     101              :       "Nid_g", "Nid_K", "Nid_N", "Nid_Shift"};
     102              : 
     103              :   template <typename DataType>
     104              :   tuples::tagged_tuple_from_typelist<interpolated_tags<DataType>>
     105            0 :   interpolate_from_spec(const tnsr::I<DataType, 3>& x) const;
     106              : 
     107            0 :   std::string data_directory_{};
     108              : 
     109            0 :   std::unique_ptr<spec::Exporter> spec_exporter_{nullptr};
     110              : };
     111              : 
     112              : }  // namespace gr::AnalyticData
        

Generated by: LCOV version 2.0-1