8#include <kernel/util/math.hpp> 
    9#include <kernel/lafem/dense_vector.hpp> 
   10#include <kernel/lafem/sparse_matrix_banded.hpp> 
   40      template<
typename DataType_, 
typename IndexType_>
 
   42                                                                        const std::vector<IndexType_> & num_of_subintervalls)
 
   44        const IndexType_ * 
const pnos(num_of_subintervalls.data());
 
   47        const Index d(
Index(num_of_subintervalls.size()));
 
   50        XASSERTM(d >= IndexType_(1), 
"You need at least 1 dimension");
 
   52        for (IndexType_ i(0); i < d; ++i)
 
   54          XASSERTM(pnos[i] >= IndexType_(3), 
"You need at least 3 subintervalls per dimension");
 
   60        if (fe_degree > 
Index(0))
 
   62          for (
Index i(0); i < d; ++i)
 
   64            size *= pnos[i] * IndexType_(fe_degree) + 1;
 
   65            noo *=  2 * fe_degree + 1;
 
   70          for (
Index i(0); i < d; ++i)
 
   81        IndexType_ * 
const poffsets(vec_offsets.
elements());
 
   82        const Index h_off((noo - 1) / 2);
 
   85        poffsets[h_off] = size - IndexType_(1);
 
   87        for (
Index i(0), k(1), m(1); i < d; ++i, k *= 2 * fe_degree + 1, m *= pnos[i - 1] * fe_degree + 1)
 
   89          Index k1((k - 1) / 2);
 
   91          for (IndexType_ j(1); j <= fe_degree; ++j)
 
   93            for (IndexType_ l(0); l < k; ++l)
 
   95              poffsets[h_off - k1 + l + k * j] = poffsets[h_off - k1 + l] + IndexType_(j * m);
 
   96              poffsets[h_off - k1 + l - k * j] = poffsets[h_off - k1 + l] - IndexType_(j * m);
 
  124      template<
typename DataType_, 
typename IndexType_>
 
  127        const IndexType_ * 
const pnos(num_of_subintervalls.data());
 
  129        const Index d(
Index(num_of_subintervalls.size()) - 1);
 
  133        for (
Index i(1); i <= d; ++i)
 
  139        const Index num_of_offsets(2 * d + 1);
 
  146        IndexType_ * 
const poffsets(vec_offsets.
elements());
 
  148        poffsets[d] = IndexType_(size - 1);
 
  151        for (
Index i(0); i < d; ++i)
 
  154          poffsets[d - 1 - i] = size - IndexType_(1 + tmp);
 
  155          poffsets[d + 1 + i] = size + IndexType_(tmp - 1);
 
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
Dense data vector class template.
DT_ * elements()
Get a pointer to the data array.
std::uint64_t Index
Index data type.
empty Finite-Differences pointstar matrix creator.
static SparseMatrixBanded< DataType_, IndexType_ > value(const std::vector< IndexType_ > &num_of_subintervalls)
Generates an empty FD-style pointstar banded matrix.
empty Finite-Elements pointstar matrix creator.
static SparseMatrixBanded< DataType_, IndexType_ > value(const Index fe_degree, const std::vector< IndexType_ > &num_of_subintervalls)
Generates an empty FE-style pointstar banded matrix.