3#ifndef DUNE_PDELAB_GRIDFUNCTIONSPACE_DUNEFUNCTIONSLFSINDEXCACHE_HH
4#define DUNE_PDELAB_GRIDFUNCTIONSPACE_DUNEFUNCTIONSLFSINDEXCACHE_HH
12 template<
typename LFS,
typename C>
18 DOF_NONCONSTRAINED = 0,
19 DOF_CONSTRAINED = 1<<0,
26 using GFS =
typename LFS::Traits::GridFunctionSpace;
28 using DOFIndex =
typename Ordering::Traits::DOFIndex;
35 typedef std::unordered_map<DI,CI>
CIMap;
37 typedef std::unordered_map<const CI*,std::pair<size_type,bool> >
InverseMap;
39 struct ConstraintsEntry
40 :
public std::pair<const CI*,typename C::mapped_type::mapped_type>
43 typedef typename C::mapped_type::mapped_type
Weight;
47 return *(this->first);
63 , _enable_constraints_caching(enable_constraints_caching)
64 , _container_indices(lfs.maxSize())
65 , _dof_flags(lfs.maxSize(),0)
66 , _constraints_iterators(lfs.maxSize())
67 , _inverse_cache_built(false)
77 return _lfs.dofIndex(i);
82 return _lfs.containerIndex(i);
92 return _dof_flags[i] & DOF_CONSTRAINED;
97 return _dof_flags[i] & DOF_DIRICHLET;
103 return _constraints_iterators[i].first;
109 return _constraints_iterators[i].second;
124 return _enable_constraints_caching;
130 const bool _enable_constraints_caching;
132 std::vector<unsigned char> _dof_flags;
133 std::vector<std::pair<ConstraintsIterator,ConstraintsIterator> > _constraints_iterators;
134 mutable CIMap _container_index_map;
136 mutable bool _inverse_cache_built;
139 const C& _gfs_constraints;
144 template<
typename LFS>
151 using GFS =
typename LFS::Traits::GridFunctionSpace;
153 using DOFIndex =
typename Ordering::Traits::DOFIndex;
159 struct ConstraintsEntry
160 :
public std::pair<const CI*,double>
167 return *(this->first);
180 typedef std::unordered_map<DI,CI>
CIMap;
193 return _lfs.dofIndex(i);
198 return _lfs.containerIndex(i);
203 return _lfs.containerIndex(i);
218 return _constraints.begin();
223 return _constraints.end();
248 mutable CIMap _container_index_map;
void constraints(const GFS &gfs, CG &cg, const bool verbose=false)
construct constraints
Definition constraints.hh:749
For backward compatibility – Do not use this!
Definition adaptivity.hh:28
Definition constraintstransformation.hh:112
typename GFS::Ordering Ordering
Definition dunefunctionslfsindexcache.hh:27
std::vector< CI > CIVector
Definition dunefunctionslfsindexcache.hh:34
bool constraintsCachingEnabled() const
Definition dunefunctionslfsindexcache.hh:122
std::unordered_map< const CI *, std::pair< size_type, bool > > InverseMap
Definition dunefunctionslfsindexcache.hh:37
typename LFS::Traits::GridFunctionSpace GFS
Definition dunefunctionslfsindexcache.hh:26
typename Ordering::Traits::ContainerIndex ContainerIndex
Definition dunefunctionslfsindexcache.hh:30
void update()
Definition dunefunctionslfsindexcache.hh:72
const LocalFunctionSpace & localFunctionSpace() const
Definition dunefunctionslfsindexcache.hh:112
DOFIndex DI
Definition dunefunctionslfsindexcache.hh:29
CI containerIndex(const DI &i) const
Definition dunefunctionslfsindexcache.hh:85
CI containerIndex(size_type i) const
Definition dunefunctionslfsindexcache.hh:80
std::size_t size_type
Definition dunefunctionslfsindexcache.hh:32
ConstraintsVector::const_iterator ConstraintsIterator
Definition dunefunctionslfsindexcache.hh:59
size_type size() const
Definition dunefunctionslfsindexcache.hh:117
ConstraintsIterator constraintsBegin(size_type i) const
Definition dunefunctionslfsindexcache.hh:100
std::unordered_map< DI, CI > CIMap
Definition dunefunctionslfsindexcache.hh:35
ContainerIndex CI
Definition dunefunctionslfsindexcache.hh:31
LFS LocalFunctionSpace
Definition dunefunctionslfsindexcache.hh:25
DI dofIndex(size_type i) const
Definition dunefunctionslfsindexcache.hh:75
ConstraintsIterator constraintsEnd(size_type i) const
Definition dunefunctionslfsindexcache.hh:106
bool isConstrained(size_type i) const
Definition dunefunctionslfsindexcache.hh:90
std::vector< ConstraintsEntry > ConstraintsVector
Definition dunefunctionslfsindexcache.hh:58
bool isDirichletConstraint(size_type i) const
Definition dunefunctionslfsindexcache.hh:95
typename Ordering::Traits::DOFIndex DOFIndex
Definition dunefunctionslfsindexcache.hh:28
LFSIndexCacheBase(const LFS &lfs, const C &constraints, bool enable_constraints_caching)
Definition dunefunctionslfsindexcache.hh:61
C::mapped_type::mapped_type Weight
Definition dunefunctionslfsindexcache.hh:43
const ContainerIndex & containerIndex() const
Definition dunefunctionslfsindexcache.hh:45
const Weight & weight() const
Definition dunefunctionslfsindexcache.hh:50
CI ContainerIndex
Definition dunefunctionslfsindexcache.hh:42
std::vector< CI > CIVector
Definition dunefunctionslfsindexcache.hh:179
ContainerIndex CI
Definition dunefunctionslfsindexcache.hh:156
LFS LocalFunctionSpace
Definition dunefunctionslfsindexcache.hh:150
std::unordered_map< DI, CI > CIMap
Definition dunefunctionslfsindexcache.hh:180
LFSIndexCacheBase(const LFS &lfs, const C &c, bool enable_constraints_caching)
Definition dunefunctionslfsindexcache.hh:187
std::size_t size_type
Definition dunefunctionslfsindexcache.hh:157
void update()
Definition dunefunctionslfsindexcache.hh:241
typename GFS::Ordering Ordering
Definition dunefunctionslfsindexcache.hh:152
typename Ordering::Traits::ContainerIndex ContainerIndex
Definition dunefunctionslfsindexcache.hh:155
LFSIndexCacheBase(const LFS &lfs)
Definition dunefunctionslfsindexcache.hh:182
const LocalFunctionSpace & localFunctionSpace() const
Definition dunefunctionslfsindexcache.hh:226
typename LFS::Traits::GridFunctionSpace GFS
Definition dunefunctionslfsindexcache.hh:151
DI dofIndex(size_type i) const
Definition dunefunctionslfsindexcache.hh:191
ConstraintsVector::const_iterator ConstraintsIterator
Definition dunefunctionslfsindexcache.hh:177
bool isConstrained(size_type i) const
Definition dunefunctionslfsindexcache.hh:206
CI containerIndex(const DI &i) const
Definition dunefunctionslfsindexcache.hh:201
typename Ordering::Traits::DOFIndex DOFIndex
Definition dunefunctionslfsindexcache.hh:153
std::vector< ConstraintsEntry > ConstraintsVector
Definition dunefunctionslfsindexcache.hh:176
bool isDirichletConstraint(size_type i) const
Definition dunefunctionslfsindexcache.hh:211
DOFIndex DI
Definition dunefunctionslfsindexcache.hh:154
bool constraintsCachingEnabled() const
Definition dunefunctionslfsindexcache.hh:236
CI containerIndex(size_type i) const
Definition dunefunctionslfsindexcache.hh:196
ConstraintsIterator constraintsEnd(size_type i) const
Definition dunefunctionslfsindexcache.hh:221
ConstraintsIterator constraintsBegin(size_type i) const
Definition dunefunctionslfsindexcache.hh:216
size_type size() const
Definition dunefunctionslfsindexcache.hh:231
CI ContainerIndex
Definition dunefunctionslfsindexcache.hh:162
const ContainerIndex & containerIndex() const
Definition dunefunctionslfsindexcache.hh:165
double Weight
Definition dunefunctionslfsindexcache.hh:163
const Weight & weight() const
Definition dunefunctionslfsindexcache.hh:170
Definition lfsindexcache.hh:245
std::unordered_map< const CI *, std::pair< size_type, bool > > InverseMap
Definition lfsindexcache.hh:269
Ordering::Traits::DOFIndex DOFIndex
Definition lfsindexcache.hh:262
Ordering::Traits::ContainerIndex ContainerIndex
Definition lfsindexcache.hh:260
std::vector< CI > CIVector
Definition lfsindexcache.hh:266
std::unordered_map< DI, CI > CIMap
Definition lfsindexcache.hh:267
std::vector< ConstraintsEntry > ConstraintsVector
Definition lfsindexcache.hh:290
bool isConstrained(size_type i) const
Definition lfsindexcache.hh:410