Skip to content
Snippets Groups Projects
Commit 21dd5d0c authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

Merge branch 'feature/remove_dune_forward_declarations' into 'master'

removed some forward declarations from GlobalIdSet

See merge request !123
parents bb558927 57d16f50
No related branches found
No related tags found
1 merge request!123removed some forward declarations from GlobalIdSet
......@@ -13,6 +13,7 @@
#include <amdis/Output.hpp>
#include <amdis/common/Apply.hpp>
#include <amdis/common/ConceptsBase.hpp>
#include <amdis/common/ForEach.hpp>
#include <amdis/common/TupleUtility.hpp>
#include <amdis/functions/Nodes.hpp>
......@@ -23,15 +24,6 @@ namespace Dune
namespace Functions
{
// forward declarations...
template <class RB, class TP>
class SubspaceBasis;
template <class MI, class IMS, class... SPB>
class CompositePreBasis;
template <class MI, class IMS, class SPB, std::size_t C>
class PowerPreBasis;
template <class GV, int k, class MI>
class LagrangeDGPreBasis;
......@@ -44,7 +36,7 @@ namespace Dune
namespace AMDiS
{
// forward declaration
template <class PreBasis, class TP>
template <class PreBasis, class TP, class = void>
class NodeIdSet;
/// \brief Provide global ids for all DOFs in a global basis
......@@ -68,7 +60,7 @@ namespace AMDiS
* ```
*
**/
template <class GB>
template <class GB, class = void>
class GlobalBasisIdSet
{
public:
......@@ -180,18 +172,19 @@ namespace AMDiS
};
template <class RB, class TP>
class GlobalBasisIdSet<Dune::Functions::SubspaceBasis<RB,TP>>
: public GlobalBasisIdSet<RB>
// Specialization for SubspaceBasis
template <class Basis>
class GlobalBasisIdSet<Basis, void_t<typename Basis::RootBasis>>
: public GlobalBasisIdSet<typename Basis::RootBasis>
{
public:
GlobalBasisIdSet(Dune::Functions::SubspaceBasis<RB,TP> const& basis)
: GlobalBasisIdSet<RB>(basis.rootBasis())
GlobalBasisIdSet(Basis const& basis)
: GlobalBasisIdSet<typename Basis::RootBasis>(basis.rootBasis())
{}
};
template <class PB, class TP>
template <class PB, class TP, class>
class NodeIdSet
{
public:
......@@ -240,10 +233,10 @@ namespace AMDiS
}
/// \brief Maps from subtree index set [0..size-1] to a globally unique id in global basis
// [[expects: node_ != nullptr]]
template <class Twist, class It>
It fillIn(Twist const& twist, It it, size_type shift = 0) const
{
assert(node_ != nullptr);
const auto& gridIdSet = gridView_.grid().globalIdSet();
for (size_type i = 0; i < size_ ; ++i, ++it) {
......@@ -271,11 +264,11 @@ namespace AMDiS
};
template <class MI, class IMS, class SPB, std::size_t C, class TP>
class NodeIdSet<Dune::Functions::PowerPreBasis<MI,IMS,SPB,C>, TP>
// Specialization for PowerBasis
template <class PreBasis, class TP>
class NodeIdSet<PreBasis, TP, void_t<typename PreBasis::SubPreBasis>>
{
public:
using PreBasis = Dune::Functions::PowerPreBasis<MI,IMS,SPB,C>;
using Node = Node_t<PreBasis,TP>;
using GridView = typename PreBasis::GridView;
using size_type = std::size_t;
......@@ -284,7 +277,7 @@ namespace AMDiS
using SubPreBasis = typename PreBasis::SubPreBasis;
using SubTreePath = decltype(Dune::TypeTree::push_back(std::declval<TP>(), std::size_t(0)));
using SubNodeIdSet = NodeIdSet<SubPreBasis, SubTreePath>;
static const std::size_t children = C;
static const std::size_t children = Node::CHILDREN;
public:
NodeIdSet(GridView const& gridView)
......@@ -312,10 +305,10 @@ namespace AMDiS
}
/// \brief Maps from subtree index set [0..size-1] to a globally unique id in global basis
// [[expects: node_ != nullptr]]
template <class Twist, class It>
It fillIn(Twist const& twist, It it, size_type shift = 0) const
{
assert(node_ != nullptr);
for (std::size_t child = 0; child < children; ++child)
{
size_type subTreeSize = subIds_.size();
......@@ -331,17 +324,17 @@ namespace AMDiS
};
template <class MI, class IMS, class... SPB, class TP>
class NodeIdSet<Dune::Functions::CompositePreBasis<MI,IMS,SPB...>, TP>
// Specialization for CompositePreBasis
template <class PreBasis, class TP>
class NodeIdSet<PreBasis, TP, void_t<typename PreBasis::SubPreBases>>
{
public:
using PreBasis = Dune::Functions::CompositePreBasis<MI,IMS,SPB...>;
using Node = Node_t<PreBasis,TP>;
using GridView = typename PreBasis::GridView;
using size_type = std::size_t;
protected:
static const std::size_t children = sizeof...(SPB);
static const std::size_t children = Node::CHILDREN;
using ChildIndices = std::make_index_sequence<children>;
// The I'th SubPreBasis
......@@ -389,10 +382,10 @@ namespace AMDiS
}
/// \brief Maps from subtree index set [0..size-1] to a globally unique id in global basis
// [[expects: node_ != nullptr]]
template <class Twist, class It>
It fillIn(Twist const& twist, It it, size_type shift = 0) const
{
assert(node_ != nullptr);
Tools::for_each(idsTuple_, [&](auto const& ids)
{
size_type subTreeSize = ids.size();
......@@ -462,10 +455,10 @@ namespace AMDiS
}
/// \brief Maps from subtree index set [0..size-1] to a globally unique id in global basis
// [[expects: node_ != nullptr]]
template <class Twist, class It>
It fillIn(Twist const& twist, It it, size_type shift = 0) const
{
assert(node_ != nullptr);
for (int child = 0; child < dow; ++child) {
size_type subTreeSize = pq2NodeIdSet_.size();
it = pq2NodeIdSet_.fillIn(twist, it, shift);
......@@ -515,10 +508,10 @@ namespace AMDiS
}
/// \brief Maps from subtree index set [0..size-1] to a globally unique id in global basis
// [[expects: node_ != nullptr]]
template <class Twist, class It>
It fillIn(Twist const& /*twist*/, It it, size_type shift = 0) const
{
assert(node_ != nullptr);
const auto& gridIdSet = gridView_.grid().globalIdSet();
auto elementId = gridIdSet.id(node_->element());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment