21 #ifndef fiber_raw_grid_geometry_hpp
22 #define fiber_raw_grid_geometry_hpp
24 #include "../common/common.hpp"
26 #include "../common/armadillo_fwd.hpp"
31 template <
typename CoordinateType>
35 RawGridGeometry(
int gridDim,
int worldDim) :
36 m_gridDim(gridDim), m_worldDim(worldDim) {
37 if (gridDim > worldDim)
38 throw std::invalid_argument(
"RawGridGeometry::RawGridGeometry(): "
39 "grid dimension cannot be larger than "
45 const arma::Mat<CoordinateType>& vertices()
const {
49 const arma::Mat<int>& elementCornerIndices()
const {
50 return m_elementCornerIndices;
53 const arma::Mat<char>& auxData()
const {
57 int elementCount()
const {
58 return m_elementCornerIndices.n_cols;
61 int gridDimension()
const {
65 int worldDimension()
const {
72 return m_elementCornerIndices(arma::span(0, n - 1), arma::span(elementIndex));
77 int n = m_elementCornerIndices.n_rows;
78 while (m_elementCornerIndices(n - 1, elementIndex) < 0)
85 arma::Mat<CoordinateType>& vertices() {
89 arma::Mat<int>& elementCornerIndices() {
90 return m_elementCornerIndices;
93 arma::Mat<char>& auxData() {
99 template <
typename Geometry>
100 void setupGeometry(
int elementIndex, Geometry& geometry)
const
102 const int dimGrid = m_vertices.n_rows;
103 size_t cornerCount = 0;
104 for (; cornerCount < m_elementCornerIndices.n_rows; ++cornerCount)
105 if (m_elementCornerIndices(cornerCount, elementIndex) < 0)
107 arma::Mat<CoordinateType> corners(dimGrid, cornerCount);
108 for (
size_t cornerIndex = 0; cornerIndex < cornerCount; ++cornerIndex)
109 corners.col(cornerIndex) = m_vertices.col(
110 m_elementCornerIndices(cornerIndex, elementIndex));
111 geometry.setup(corners, m_auxData.unsafe_col(elementIndex));
117 arma::Mat<CoordinateType> m_vertices;
118 arma::Mat<int> m_elementCornerIndices;
119 arma::Mat<char> m_auxData;
int elementCornerCount(int elementIndex) const
Number of corners of the given element.
Definition: raw_grid_geometry.hpp:76
arma::Col< int > elementCornerIndices(int elementIndex) const
Indices of the corners of the given element.
Definition: raw_grid_geometry.hpp:70