2 #ifndef DUNE_PDELAB_CONSTRAINTS_INTERIORNODE_HH 3 #define DUNE_PDELAB_CONSTRAINTS_INTERIORNODE_HH 7 #include <dune/grid/common/gridenums.hh> 8 #include <dune/geometry/referenceelements.hh> 9 #include <dune/localfunctions/common/interfaceswitch.hh> 10 #include <dune/localfunctions/common/localkey.hh> 23 std::vector<bool> interior;
37 template<
typename P,
typename EG,
typename LFS,
typename T>
38 void volume (
const P& param,
const EG& eg,
const LFS& lfs, T& trafo)
const 40 typedef typename EG::Entity Entity;
41 enum {
dim = Entity::dimension, dimw = Entity::dimensionworld };
44 typename T::RowType empty;
45 typedef typename LFS::Traits::SizeType size_type;
46 typedef FiniteElementInterfaceSwitch<
47 typename LFS::Traits::FiniteElementType
49 for (size_type i=0; i<lfs.size(); i++){
50 const LocalKey& key = FESwitch::coefficients(lfs.finiteElement()).localKey(i);
51 assert(key.codim() ==
dim &&
"InteriorNodeConstraints only work for vertex DOFs");
52 assert(key.index() == 0 &&
"InteriorNodeConstraints only work for P1 shape functions");
55 unsigned int local_idx = key.subEntity();
58 unsigned int idx = lfs.gridFunctionSpace().gridView().indexSet().subIndex(eg.entity(), local_idx,
dim);
75 const int dim = GV::dimension;
76 typedef typename GV::Grid::ctype ctype;
78 interior.resize(gv.indexSet().size(dim));
79 for(
int i=0; i< interior.size(); i++)
83 for(
const auto& entity : cells(gv))
86 for (
const auto& intersection : intersection(gv,entity))
88 if (intersection.boundary())
91 unsigned int f = intersection.indexInInside();
93 auto refelem = Dune::ReferenceElements<ctype,dim>::simplex();
94 assert(entity.geometry().type().isSimplex() &&
"InteriorNodeConstraints only work for simplicial meshes");
95 unsigned int sz = refelem.size(f,1, dim);
97 for (
unsigned int v = 0; v < sz; ++v)
99 unsigned int local_idx = refelem.subEntity (f,1, v,dim);
100 unsigned int idx = gv.indexSet().subIndex(entity, local_idx, dim);
101 interior[idx] =
false;
113 #endif // DUNE_PDELAB_CONSTRAINTS_INTERIORNODE_HH static const int dim
Definition: adaptivity.hh:84
constraints all DOFs associated with interior vertices This allows to implement surface FEM using sta...
Definition: interiornode.hh:21
Definition: interiornode.hh:25
void updateInteriorNodes(const GV &gv)
Definition: interiornode.hh:72
Definition: interiornode.hh:27
void volume(const P ¶m, const EG &eg, const LFS &lfs, T &trafo) const
volume constraints
Definition: interiornode.hh:38
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
const std::vector< bool > & interiorNodes() const
Definition: interiornode.hh:66
Definition: interiornode.hh:28
Definition: interiornode.hh:26