SpECTRE Documentation Coverage Report
Current view: top level - IO - Connectivity.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 100.0 % 2 2
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 functions for computing the connectivity of an element
       6              : 
       7              : #pragma once
       8              : 
       9              : #include <cstddef>
      10              : #include <ostream>
      11              : #include <utility>
      12              : #include <vector>
      13              : 
      14              : template <size_t Dim>
      15              : class Index;
      16              : 
      17              : /// Holds functions needed for visualizing data
      18            1 : namespace vis {
      19              : namespace detail {
      20              : /*!
      21              :  * \brief The set of cell topologies used for visualization
      22              :  *
      23              :  * Tensor-product topologies (Line, Quad, Hexahedron) can be generated by
      24              :  * `compute_cells()`. Non-tensor-product topologies (Triangle, Tetrahedron,
      25              :  * Wedge) are necessary for filled cylinders, shells, and balls.
      26              :  *
      27              :  * The numerical values correspond to the XDMF topology types.
      28              :  */
      29              : enum class Topology : int {
      30              :   Line = 2,
      31              :   Triangle = 4,
      32              :   Quad = 5,
      33              :   Tetrahedron = 6,
      34              :   Wedge = 8,
      35              :   Hexahedron = 9
      36              : };
      37              : 
      38              : std::ostream& operator<<(std::ostream& os, const Topology& topology);
      39              : 
      40              : /*!
      41              :  * \brief Represents the number of cells in a particular topology
      42              :  *
      43              :  * Each `CellInTopology` holds an enum of type `Topology` whose
      44              :  * value denotes the type of the topology, e.g. line, quad or hexahedron, and a
      45              :  * vector of bounding indices which are the indices of the grid coordinates in
      46              :  * the contiguous arrays of x, y, and z coordinates that bound the cell.
      47              :  */
      48              : struct CellInTopology {
      49              :   // cppcheck-suppress passedByValue
      50              :   CellInTopology(const Topology& top, std::vector<size_t> bounding_ind)
      51              :       : topology(top), bounding_indices(std::move(bounding_ind)) {}
      52              :   CellInTopology() = default;
      53              :   CellInTopology(const CellInTopology& /*rhs*/) = default;
      54              :   CellInTopology(CellInTopology&& /*rhs*/) = default;
      55              :   CellInTopology& operator=(const CellInTopology& /*rhs*/) = default;
      56              :   CellInTopology& operator=(CellInTopology&& /*rhs*/) = default;
      57              :   ~CellInTopology() = default;
      58              :   Topology topology{Topology::Line};
      59              :   std::vector<size_t> bounding_indices{};
      60              : };
      61              : 
      62              : /// @{
      63              : /*!
      64              :  * \brief Compute the cells in the element.
      65              :  *
      66              :  * Returns a vector of the cells in the topology I1^Dim, i.e. a line if Dim ==
      67              :  * 1, or a hexahedron if Dim == 3. The cells are bounded by lines connecting
      68              :  * grid points along the axes of the element, so if you have (n_x by n_y by n_z)
      69              :  * grid points, you have ((n_x-1) by (n_y-1) by (n_z-1)) cells.
      70              :  *
      71              :  * \note As more topologies are added, e.g. S2, the interface will need slight
      72              :  * modification, however the return type is likely to be able to remain the
      73              :  * same.
      74              :  */
      75              : template <size_t Dim>
      76              : std::vector<CellInTopology> compute_cells(const Index<Dim>& extents);
      77              : 
      78              : std::vector<CellInTopology> compute_cells(const std::vector<size_t>& extents);
      79              : /// @}
      80              : 
      81              : /*!
      82              :  * \brief Return the XDMF 3.0 integer type tag for a given topology.
      83              :  *
      84              :  * The mapping is: Line=2, Triangle=4, Quad=5, Tetrahedron=6, Wedge=8,
      85              :  * Hexahedron=9.
      86              :  * Used when writing mixed-topology connectivity arrays to HDF5 files.
      87              :  */
      88              : int xdmf_topology_type(Topology topology);
      89              : 
      90              : }  // namespace detail
      91              : }  // namespace vis
        

Generated by: LCOV version 2.0-1