/usr/include/dune/functions/functionspacebases/subspacebasis.hh is in libdune-functions-dev 2.5.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
#include <dune/common/reservedvector.hh>
#include <dune/common/typeutilities.hh>
#include <dune/common/concept.hh>
#include <dune/functions/common/type_traits.hh>
#include <dune/functions/functionspacebases/subspacelocalview.hh>
#include <dune/functions/functionspacebases/concepts.hh>
namespace Dune {
namespace Functions {
template<class RB, class TP>
class SubspaceBasis
{
public:
using RootBasis = RB;
using RootLocalView = typename RootBasis::LocalView;
using PrefixPath = TP;
//! The grid view that the FE space is defined on
using GridView = typename RootBasis::GridView;
//! Type used for global numbering of the basis vectors
using MultiIndex = typename RootBasis::MultiIndex;
using size_type = std::size_t;
//! Type of the local view on the restriction of the basis to a single element
using LocalView = SubspaceLocalView<RootLocalView, PrefixPath>;
using SizePrefix = typename RootBasis::SizePrefix;
using LocalIndexSet = typename RootBasis::LocalIndexSet;
/** \brief Constructor for a given grid view object */
SubspaceBasis(const RootBasis& rootBasis, const PrefixPath& prefixPath) :
rootBasis_(&rootBasis),
prefixPath_(prefixPath)
{
// static_assert(models<Concept::NodeFactory<GridView>, NodeFactory>(), "Type passed to DefaultGlobalBasis does not model the NodeFactory concept.");
}
/** \brief Obtain the grid view that the basis is defined on
*/
const GridView& gridView() const
{
return rootBasis_->gridView();
}
/**
* \todo This method has been added to the interface without prior discussion.
*/
size_type dimension() const
{
return rootBasis_->dimension();
}
//! Return number of possible values for next position in empty multi index
size_type size() const
{
return rootBasis_->size();
}
//! Return number possible values for next position in multi index
size_type size(const SizePrefix& prefix) const
{
return rootBasis_->size(prefix);
}
/** \brief Return local view for basis
*
*/
LocalView localView() const
{
return LocalView(*this, prefixPath_);
}
LocalIndexSet localIndexSet() const
{
return rootBasis_->localIndexSet();
}
const RootBasis& rootBasis() const
{
return *rootBasis_;
}
const PrefixPath& prefixPath() const
{
return prefixPath_;
}
protected:
const RootBasis* rootBasis_;
PrefixPath prefixPath_;
};
template<class RootBasis, class... PrefixTreeIndices>
auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
{
using PrefixPath = TypeTree::HybridTreePath<PrefixTreeIndices...>;
return SubspaceBasis<RootBasis, PrefixPath>{rootBasis, prefixPath};
}
template<class RootBasis, class... PrefixTreeIndices>
auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&... prefixTreeIndices)
{
return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
}
} // end namespace Functions
} // end namespace Dune
#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
|