SpECTRE Documentation Coverage Report
Current view: top level - Domain/Creators - DomainCreator.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 52.9 % 17 9
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            1 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : /// \file
       5              : /// Defines class DomainCreator.
       6              : 
       7              : #pragma once
       8              : 
       9              : #include <array>
      10              : #include <cstddef>
      11              : #include <memory>
      12              : #include <string>
      13              : #include <unordered_map>
      14              : #include <unordered_set>
      15              : #include <vector>
      16              : 
      17              : #include "DataStructures/Tensor/Tensor.hpp"
      18              : #include "Domain/FunctionsOfTime/FunctionOfTime.hpp"
      19              : #include "Domain/Structure/DirectionMap.hpp"
      20              : 
      21              : /// \cond
      22              : namespace Frame {
      23              : struct Grid;
      24              : }  // namespace Frame
      25              : template <size_t>
      26              : class Domain;
      27              : namespace domain::BoundaryConditions {
      28              : class BoundaryCondition;
      29              : }
      30              : /// \endcond
      31              : 
      32              : namespace domain {
      33              : /// \ingroup ComputationalDomainGroup
      34              : /// \brief Defines classes that create Domains.
      35              : namespace creators {}
      36              : }  // namespace domain
      37              : 
      38              : /// \ingroup ComputationalDomainGroup
      39              : /// \brief Base class for creating Domains from an option string.
      40              : template <size_t VolumeDim>
      41            1 : class DomainCreator {
      42              :  public:
      43            0 :   static constexpr size_t volume_dim = VolumeDim;
      44              : 
      45            0 :   DomainCreator() = default;
      46            0 :   DomainCreator(const DomainCreator<VolumeDim>&) = delete;
      47            0 :   DomainCreator(DomainCreator<VolumeDim>&&) = default;
      48            0 :   DomainCreator<VolumeDim>& operator=(const DomainCreator<VolumeDim>&) = delete;
      49            0 :   DomainCreator<VolumeDim>& operator=(DomainCreator<VolumeDim>&&) = default;
      50            0 :   virtual ~DomainCreator() = default;
      51              : 
      52            0 :   virtual Domain<VolumeDim> create_domain() const = 0;
      53              : 
      54              :   /// A set of named coordinates in the grid frame, like the center of the
      55              :   /// domain or the positions of specific objects in a domain
      56              :   virtual std::unordered_map<std::string,
      57              :                              tnsr::I<double, VolumeDim, Frame::Grid>>
      58            1 :   grid_anchors() const {
      59              :     return {};
      60              :   }
      61              : 
      62              :   /// The set of external boundary condition for every block in the domain
      63              :   virtual std::vector<DirectionMap<
      64              :       VolumeDim,
      65              :       std::unique_ptr<domain::BoundaryConditions::BoundaryCondition>>>
      66            1 :   external_boundary_conditions() const = 0;
      67              : 
      68              :   /// A human-readable name for every block, or empty if the domain creator
      69              :   /// doesn't support block names (yet).
      70            1 :   virtual std::vector<std::string> block_names() const { return {}; }
      71              : 
      72              :   /// Labels to refer to groups of blocks. The groups can overlap, and they
      73              :   /// don't have to cover all blocks in the domain. The groups can be used to
      74              :   /// refer to multiple blocks at once when specifying input-file options.
      75              :   virtual std::unordered_map<std::string, std::unordered_set<std::string>>
      76            1 :   block_groups() const {
      77              :     return {};
      78              :   }
      79              : 
      80              :   /// Obtain the initial grid extents of the Element%s in each block.
      81            1 :   virtual std::vector<std::array<size_t, VolumeDim>> initial_extents()
      82              :       const = 0;
      83              : 
      84              :   /// Obtain the initial refinement levels of the blocks.
      85            1 :   virtual std::vector<std::array<size_t, VolumeDim>> initial_refinement_levels()
      86              :       const = 0;
      87              : 
      88              :   /// Retrieve the functions of time used for moving meshes.
      89              :   // LCOV_EXCL_START
      90            1 :   virtual auto functions_of_time(const std::unordered_map<std::string, double>&
      91              :                                      initial_expiration_times = {}) const
      92              :       -> std::unordered_map<
      93              :           std::string,
      94              :           std::unique_ptr<domain::FunctionsOfTime::FunctionOfTime>> {
      95              :     (void)(initial_expiration_times);
      96              :     return {};
      97              :   }
      98              :   // LCOV_EXCL_STOP
      99              : };
        

Generated by: LCOV version 2.0-1