v0.13.1
DofsMultiIndices.hpp
Go to the documentation of this file.
1/** \file DofsMultiIndices.hpp
2 * \ingroup dof_multi_indices
3 * \brief Multi-Index contains, data structures for mofem dofs and other
4 * low-level functions
5 */
6
7/* MoFEM is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU Lesser General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11
12 * MoFEM is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 * License for more details.
16
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with MoFEM. If not, see <http://www.gnu.org/licenses/>
19*/
20
21#ifndef __DOFSMULTIINDICES_HPP__
22#define __DOFSMULTIINDICES_HPP__
23
24namespace MoFEM {
25
26/**
27 * \brief keeps information about DOF on the entity
28 * \ingroup dof_multi_indices
29 */
30struct DofEntity : public interface_FieldEntity<FieldEntity> {
31
32 virtual ~DofEntity() = default;
33
37
38 static inline ShortId
40 const boost::shared_ptr<FieldEntity> &ent_ptr) {
41 return static_cast<ShortId>(dof) |
42 (static_cast<ShortId>(ent_ptr->getBitNumber()) << 9);
43 }
44
45 DofEntity(const boost::shared_ptr<FieldEntity> &entity_ptr,
46 const ApproximationOrder dof_order,
47 const FieldCoefficientsNumber dof_rank, const DofIdx dof);
48
49 /// @return get dof index on entity
50 inline DofIdx getEntDofIdx() const { return std::abs(dof); }
51
52 /// @return get field data on dof
53 inline FieldData &getFieldData() const {
54 return const_cast<FieldData &>(
55 (*this->sPtr->getEntFieldDataPtr())[getEntDofIdx()]);
56 }
57
58 /// @return get entity unique dof id
59 inline const UId &getEntLocalUniqueId() const {
60 return this->sPtr->getLocalUniqueId();
61 }
62
63 /// @return get entity unique dof id
64 inline const UId getEntGlobalUniqueId() const {
65 return this->sPtr->getGlobalUniqueId();
66 }
67
68 static inline UId getUniqueIdCalculate(const DofIdx dof, UId ent_uid) {
69 return ent_uid | dof;
70 }
71
72 static inline UId
74 const boost::shared_ptr<FieldEntity> &ent_ptr) {
75 return getUniqueIdCalculate(dof, ent_ptr->getLocalUniqueId());
76 }
77
78 /// @return get unique dof id
79 inline UId getLocalUniqueId() const {
80 return getUniqueIdCalculate(std::abs(dof), this->sPtr->getLocalUniqueId());
81 }
82
84 const EntityHandle ent) {
87 }
88
90 const EntityHandle ent) {
93 }
94
95 /**
96 * \brief Calculate UId for DOF
97 *
98 * UId is constructed such that all DOFs are ordered by processor, entity,
99 * field and dof index on entity, On entity dofs index is constructed such
100 * that coefficient number and dofs increase with dofs index on entity.
101 *
102 * @param dof dof index on entity
103 * @param ent_ptr pointer to field entity
104 * @return UId
105 */
106 static inline UId
108 const boost::shared_ptr<FieldEntity> &ent_ptr) {
109 return getUniqueIdCalculate(dof, ent_ptr->getGlobalUniqueId());
110 }
111
112 /// @return get unique dof id
113 inline UId getGlobalUniqueId() const {
114 return getUniqueIdCalculate(std::abs(dof), this->sPtr->getGlobalUniqueId());
115 }
116
117 /** \brief get short uid it is unique in combination with entity handle
118 *
119 * EntityHandle are controlled by MOAB, which is unique in
120 * MOAB instance. However two MOAB instances, can have attached different
121 * EntityHandles to the same entity.
122 *
123 * Relation between MoAB EntityHandle can be handled by saving entity handle
124 * data into tag, see MB_TYPE_HANDLE. MOAB at time of file reading or
125 * creating new MOAB instance, substitute tag value by approbate entity
126 * handle.
127 *
128 * ShortId is created to handle problems related to saving data series, and
129 * reading those data using different MoAB instances.
130 *
131 */
134 }
135
136 /// @return get dof entity handle
137 inline EntityHandle getEnt() const { return this->sPtr->getEnt(); }
138
139 /// @return get dof approximation order
141 return getDofOrderMap()[getEntDofIdx()];
142 }
143
144 /// @return get dof coefficient index
146 return getEntDofIdx() % getNbOfCoeffs();
147 }
148
149 /// @return return true if dof us active
150 inline char getActive() const { return dof < 0 ? 0 : 1; }
151
152 friend std::ostream &operator<<(std::ostream &os, const DofEntity &e);
153
154private:
156
158};
159
160/**
161 * \brief Interface to DofEntity
162 *
163 * In MoFEM DOFs classes (and Ent and Finite Element classes) are derived by
164 * interface, i.e. not class is derived but interface to it.
165 *
166 * \ingroup dof_multi_indices
167 */
168template <typename T>
170
171 virtual ~interface_DofEntity() = default;
172
173 interface_DofEntity(const boost::shared_ptr<T> &sptr)
174 : interface_FieldEntity<T>(sptr) {}
175
176 /// @return return dof unique id
177 inline UId getGlobalUniqueId() const {
178 return this->sPtr->getGlobalUniqueId();
179 }
180
181 /// @return return entity unique id
182 inline const UId &getEntGlobalUniqueId() const {
183 return this->sPtr->getEntGlobalUniqueId();
184 }
185
186 /// @return return dof unique id
187 inline UId getLocalUniqueId() const { return this->sPtr->getLocalUniqueId(); }
188
189 /// @return return entity unique id
190 inline const UId &getEntLocalUniqueId() const {
191 return this->sPtr->getEntLocalUniqueId();
192 }
193
194 /// @return return short id (used by data recorder)
196 return this->sPtr->getNonNonuniqueShortId();
197 }
198
199 /// @return return index of dof on the entity
200 inline DofIdx getEntDofIdx() const { return this->sPtr->getEntDofIdx(); }
201
202 /// @return return data on dof
203 inline FieldData &getFieldData() const { return this->sPtr->getFieldData(); }
204
205 /// @return return entity handle
206 inline EntityHandle getEnt() const { return this->sPtr->getEnt(); }
207
208 /// @return get dof approximation order
210 return this->sPtr->getDofOrder();
211 }
212
213 /// @return get dof coefficient index
215 return this->sPtr->getDofCoeffIdx();
216 }
217
218 /// @return return true if dof is active
219 inline char getActive() const { return this->sPtr->getActive(); }
220
221 /// @return get pointer to dof data structure
222 inline boost::shared_ptr<DofEntity> &getDofEntityPtr() const {
223 return this->sPtr;
224 }
225
226 /// @return get pioneer do dof's entity data structure
227 inline boost::shared_ptr<FieldEntity> &getFieldEntityPtr() const {
228 return this->sPtr->getFieldEntityPtr();
229 }
230};
231
232/**
233 * \brief keeps information about indexed dofs for the problem
234 * \ingroup dof_multi_indices
235 *
236 * FIXME: Is too many iterator, this has to be manage more efficiently, some
237 * iterators could be moved to multi_indices views.
238 *
239 */
240struct NumeredDofEntity : public interface_DofEntity<DofEntity> {
241
242 virtual ~NumeredDofEntity() = default;
243
248
252 unsigned int pArt;
253
254 /// @return MoFEM DoF index
255 inline DofIdx getDofIdx() const { return dofIdx; }
256
257 /// @return PETSc global DoF index
259
260 /// @return PETSc local DoF index
261 inline DofIdx getPetscLocalDofIdx() const { return petscLocalDofIdx; }
262
263 /// @return Owning partition (i.e. process/processor)
264 inline unsigned int getPart() const { return pArt; }
265
266 /// @return True if local index is set
267 inline bool getHasLocalIndex() const {
268 return !std::signbit(petscLocalDofIdx);
269 }
270
271 NumeredDofEntity(const boost::shared_ptr<DofEntity> &dof_entity_ptr,
272 const int dof_idx = -1, const int petsc_gloabl_dof_idx = -1,
273 const int petsc_local_dof_idx = -1, const int part = -1);
274 friend std::ostream &operator<<(std::ostream &os, const NumeredDofEntity &e);
275};
276
277/**
278 * \brief keeps information about indexed dofs for the finite element
279 * \ingroup dof_multi_indices
280 */
281struct FEDofEntity : public DofEntity {
282
283 FEDofEntity() = delete;
284
285private:
287
288 // DO NOT MAKE ANY MAMBER DATA HARE !!!
289
290 friend std::ostream &operator<<(std::ostream &os, const FEDofEntity &e);
291};
292
293/**
294 * \brief keeps information about indexed dofs for the finite element
295 * \ingroup dof_multi_indices
296 */
298
300
301private:
303
304 // DO NOT MAKE ANY MAMBER DATA HARE !!!
305
306 friend std::ostream &operator<<(std::ostream &os,
307 const FENumeredDofEntity &e);
308};
309
310std::ostream &operator<<(std::ostream &os, const FENumeredDofEntity &e);
311
312/**
313 * @relates multi_index_container
314 * \brief MultiIndex container keeps DofEntity
315 * \ingroup dof_multi_indices
316 */
317typedef multi_index_container<
318 boost::shared_ptr<DofEntity>,
319 indexed_by<
320 // unique
321 ordered_unique<
322 tag<Unique_mi_tag>,
323 const_mem_fun<DofEntity, UId, &DofEntity::getLocalUniqueId>>,
324
325 // non_unique
326 ordered_non_unique<
327 tag<Ent_mi_tag>,
328 const_mem_fun<DofEntity, EntityHandle, &DofEntity::getEnt>>
329
330 >>
332
334
335/** \brief Dof multi-index by entity
336 *
337 * \ingroup dof_multi_indices
338 */
340
341/** \brief multi-index view on DofEntity by uid
342 \ingroup dof_multi_indices
343*/
345 multi_index_container<boost::shared_ptr<DofEntity>,
346 indexed_by<
347
348 ordered_unique<const_mem_fun<
350
351 >>;
352
353/** \brief multi-index view on DofEntity by uid
354 \ingroup dof_multi_indices
355*/
356using DofEntity_multiIndex_global_uid_view = multi_index_container<
357 boost::shared_ptr<DofEntity>,
358 indexed_by<
359
360 ordered_unique<
361 const_mem_fun<DofEntity, UId, &DofEntity::getGlobalUniqueId>>
362
363 >>;
364
365/** \brief vector view on DofEntity by uid
366 \ingroup dof_multi_indices
367*/
368typedef std::vector<boost::weak_ptr<DofEntity>> DofEntity_vector_view;
369
370/** \brief multi-index view on DofEntity activity
371 \ingroup dof_multi_indices
372*/
373typedef multi_index_container<
374 boost::shared_ptr<DofEntity>,
375 indexed_by<
376
377 ordered_unique<
378 const_mem_fun<DofEntity, UId, &DofEntity::getLocalUniqueId>>,
379
380 ordered_non_unique<
381 const_mem_fun<DofEntity, char, &DofEntity::getActive>>
382
383 >>
385
386/**
387 * @relates multi_index_container
388 * \brief MultiIndex container keeps FEDofEntity
389 * \ingroup dof_multi_indices
390
391 */
392typedef multi_index_container<
393 boost::shared_ptr<FEDofEntity>,
394 indexed_by<
395
396 ordered_unique<tag<Unique_mi_tag>,
397 const_mem_fun<FEDofEntity::DofEntity, UId,
399
400 ordered_non_unique<tag<Ent_mi_tag>,
401 const_mem_fun<FEDofEntity::DofEntity, EntityHandle,
403
404 >>
406
407/** \brief Dof entity multi-index by UId and entity
408 *
409 * \ingroup dof_multi_indices
410 */
412
413/**
414 * @relates multi_index_container
415 * \brief MultiIndex container keeps FENumeredDofEntity
416
417 * \ingroup dof_multi_indices
418 */
419typedef multi_index_container<
420 boost::shared_ptr<FENumeredDofEntity>,
421 indexed_by<ordered_unique<
422 tag<Unique_mi_tag>,
425 ordered_non_unique<
426 tag<Ent_mi_tag>,
428 EntityHandle, &FENumeredDofEntity::getEnt>>
429
430 >>
432
433/** \brief Dof entity multi-index by UId
434 *
435 * \ingroup dof_multi_indices
436 */
439
440/** \brief Numbered DoF multi-index by entity
441 *
442 * \ingroup dof_multi_indices
443 */
446
447/**
448 * @relates multi_index_container
449 * \brief MultiIndex container keeps NumeredDofEntity
450 * \ingroup dof_multi_indices
451 */
452typedef multi_index_container<
453 boost::shared_ptr<NumeredDofEntity>,
454
455 // unique
456 indexed_by<
457 ordered_unique<tag<Unique_mi_tag>,
460
461 // non unique
462 ordered_non_unique<
463 tag<Part_mi_tag>,
464 member<NumeredDofEntity, unsigned int, &NumeredDofEntity::pArt>>,
465
466 ordered_non_unique<tag<Idx_mi_tag>, member<NumeredDofEntity, DofIdx,
468
469 ordered_non_unique<tag<PetscGlobalIdx_mi_tag>,
470 member<NumeredDofEntity, DofIdx,
472
473 ordered_non_unique<tag<PetscLocalIdx_mi_tag>,
474 member<NumeredDofEntity, DofIdx,
476
477 ordered_non_unique<
478 tag<Ent_mi_tag>,
480 EntityHandle, &NumeredDofEntity::getEnt>>
481
482 >>
484
485/** \brief Numbered DoF multi-index by UId
486 *
487 * \ingroup dof_multi_indices
488 */
491
492/** \brief Numbered DoF multi-index by local index
493 *
494 * \ingroup dof_multi_indices
495 */
498
499/** \brief Numbered DoF multi-index by entity
500 *
501 * \ingroup dof_multi_indices
502 */
505
507 multi_index_container<boost::shared_ptr<NumeredDofEntity>,
508 indexed_by<
509
510 ordered_unique<const_mem_fun<
511
514
515 >>
516
517 >>;
518
520 boost::shared_ptr<NumeredDofEntity>,
521 indexed_by<hashed_unique<const_mem_fun<NumeredDofEntity, DofIdx,
523
525 multi_index_container<boost::shared_ptr<NumeredDofEntity>,
526 indexed_by<ordered_non_unique<const_mem_fun<
529
531 multi_index_container<
532 boost::shared_ptr<NumeredDofEntity>,
533 indexed_by<ordered_non_unique<const_mem_fun<
536
537/**
538 * Activate or deactivate dofs (multi-index modifier)
539 * \ingroup dof_multi_indices
540 */
542 bool aCtive;
543 DofEntity_active_change(bool active);
544 void operator()(boost::shared_ptr<DofEntity> &dof);
545};
546
547/**
548 * Change part and global pestc index (multi-index modifier)
549 * \ingroup dof_multi_indices
550 */
552 const unsigned int pArt;
555 const DofIdx petsc_gloabl_dof_idx)
556 : pArt(part), petscGloablDofIdx(petsc_gloabl_dof_idx){};
557 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
558 dof->pArt = pArt;
559 dof->petscGloablDofIdx = petscGloablDofIdx;
560 }
561};
562
564 const unsigned int pArt;
568 const unsigned int part, const DofIdx mofem_dof_idx,
569 const DofIdx petsc_gloabl_dof_idx)
570 : pArt(part), mofemDofIdx(mofem_dof_idx),
571 petscGloablDofIdx(petsc_gloabl_dof_idx){};
572 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
573 dof->pArt = pArt;
574 dof->petscGloablDofIdx = petscGloablDofIdx;
575 }
576};
577
579 const unsigned int pArt;
583 const DofIdx petsc_gloabl_dof_idx,
584 const DofIdx petsc_local_dof_idx)
585 : pArt(part), petscGloablDofIdx(petsc_gloabl_dof_idx),
586 petscLocalDofIdx(petsc_local_dof_idx){};
587 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
588 dof->pArt = pArt;
589 dof->petscGloablDofIdx = petscGloablDofIdx;
590 dof->petscLocalDofIdx = petscLocalDofIdx;
591 }
592};
593
594/**
595 * Change part and local pestc index (multi-index modifier)
596 * \ingroup dof_multi_indices
597 */
600 NumeredDofEntity_local_idx_change(const DofIdx petsc_local_dof_idx)
601 : petscLocalDofIdx(petsc_local_dof_idx){};
602 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
603 dof->petscLocalDofIdx = petscLocalDofIdx;
604 }
605};
606
607/**
608 * Change part and mofem index (multi-index modifier)
609 * \ingroup dof_multi_indices
610 */
614 : mofemIdx(mofem_idx){};
615 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
616 dof->dofIdx = mofemIdx;
617 }
618};
619
620/**
621 * Change part and mofem/pestc global and local index (multi-index modifier)
622 * \ingroup dof_multi_indices
623 */
625 const unsigned int pArt;
630 const unsigned int part, const DofIdx mofem_idx,
631 const DofIdx petsc_gloabl_dof_idx, const DofIdx petsc_local_dof_idx)
632 : pArt(part), mofemIdx(mofem_idx),
633 petscGloablDofIdx(petsc_gloabl_dof_idx),
634 petscLocalDofIdx(petsc_local_dof_idx){};
635 inline void operator()(boost::shared_ptr<NumeredDofEntity> &dof) const {
636 dof->pArt = pArt;
637 dof->dofIdx = mofemIdx;
638 dof->petscGloablDofIdx = petscGloablDofIdx;
639 dof->petscLocalDofIdx = petscLocalDofIdx;
640 }
641};
642
643} // namespace MoFEM
644#endif // __DOFSMULTIINDICES_HPP__
645
646/**
647 * \defgroup dof_multi_indices Dofs structures and multi-indices
648 * \ingroup mofem
649 **/
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< const_mem_fun< DofEntity, UId, &DofEntity::getLocalUniqueId > >, ordered_non_unique< const_mem_fun< DofEntity, char, &DofEntity::getActive > > > > DofEntity_multiIndex_active_view
multi-index view on DofEntity activity
FENumeredDofEntity_multiIndex::index< Ent_mi_tag >::type FENumeredDofEntityByEnt
Numbered DoF multi-index by entity.
multi_index_container< boost::shared_ptr< FENumeredDofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< FENumeredDofEntity::interface_type_DofEntity, UId, &FENumeredDofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FENumeredDofEntity::interface_type_DofEntity, EntityHandle, &FENumeredDofEntity::getEnt > > > > FENumeredDofEntity_multiIndex
MultiIndex container keeps FENumeredDofEntity.
FEDofEntity_multiIndex::index< Unique_mi_tag >::type FEDofEntityByUId
Dof entity multi-index by UId and entity.
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< const_mem_fun< DofEntity, UId, &DofEntity::getLocalUniqueId > > > > DofEntity_multiIndex_uid_view
multi-index view on DofEntity by uid
NumeredDofEntity_multiIndex::index< Unique_mi_tag >::type NumeredDofEntityByUId
Numbered DoF multi-index by UId.
DofEntity_multiIndex::index< Ent_mi_tag >::type DofEntityByEnt
Dof multi-index by entity.
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< NumeredDofEntity::interface_type_DofEntity, UId, &NumeredDofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Part_mi_tag >, member< NumeredDofEntity, unsigned int, &NumeredDofEntity::pArt > >, ordered_non_unique< tag< Idx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::dofIdx > >, ordered_non_unique< tag< PetscGlobalIdx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::petscGloablDofIdx > >, ordered_non_unique< tag< PetscLocalIdx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::petscLocalDofIdx > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< NumeredDofEntity::interface_type_DofEntity, EntityHandle, &NumeredDofEntity::getEnt > > > > NumeredDofEntity_multiIndex
MultiIndex container keeps NumeredDofEntity.
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< const_mem_fun< DofEntity, UId, &DofEntity::getGlobalUniqueId > > > > DofEntity_multiIndex_global_uid_view
multi-index view on DofEntity by uid
std::vector< boost::weak_ptr< DofEntity > > DofEntity_vector_view
vector view on DofEntity by uid
multi_index_container< boost::shared_ptr< FEDofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< FEDofEntity::DofEntity, UId, &FEDofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FEDofEntity::DofEntity, EntityHandle, &FEDofEntity::getEnt > > > > FEDofEntity_multiIndex
MultiIndex container keeps FEDofEntity.
FENumeredDofEntity_multiIndex::index< Unique_mi_tag >::type FENumeredDofEntityByUId
Dof entity multi-index by UId.
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< DofEntity, UId, &DofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< DofEntity, EntityHandle, &DofEntity::getEnt > > > > DofEntity_multiIndex
MultiIndex container keeps DofEntity.
NumeredDofEntity_multiIndex::index< Ent_mi_tag >::type NumeredDofEntityByEnt
Numbered DoF multi-index by entity.
NumeredDofEntity_multiIndex::index< PetscLocalIdx_mi_tag >::type NumeredDofEntityByLocalIdx
Numbered DoF multi-index by local index.
auto bit
set bit
const double T
int DofIdx
Index of DOF.
Definition: Types.hpp:29
int ApproximationOrder
Approximation on the entity.
Definition: Types.hpp:37
uint128_t UId
Unique Id.
Definition: Types.hpp:42
int FieldCoefficientsNumber
Number of field coefficients.
Definition: Types.hpp:38
char FieldBitNumber
Field bit number.
Definition: Types.hpp:39
int ShortId
Unique Id in the field.
Definition: Types.hpp:43
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:21
std::ostream & operator<<(std::ostream &os, const EntitiesFieldData::EntData &e)
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< hashed_unique< const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getDofIdx > > > > NumeredDofEntity_multiIndex_idx_view_hashed
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_non_unique< const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getPetscLocalDofIdx > > > > NumeredDofEntity_multiIndex_petsc_local_dof_view_ordered_non_unique
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_non_unique< const_mem_fun< NumeredDofEntity::interface_type_DofEntity, FieldCoefficientsNumber, &NumeredDofEntity::getDofCoeffIdx > > > > NumeredDofEntity_multiIndex_coeff_idx_ordered_non_unique
DofEntity_multiIndex::index< Unique_mi_tag >::type DofEntityByUId
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_unique< const_mem_fun< NumeredDofEntity::interface_type_DofEntity, UId, &NumeredDofEntity::getLocalUniqueId > > > > NumeredDofEntity_multiIndex_uid_view_ordered
void operator()(boost::shared_ptr< DofEntity > &dof)
keeps information about DOF on the entity
UId getLocalUniqueId() const
const UId getEntGlobalUniqueId() const
EntityHandle getEnt() const
DofIdx getEntDofIdx() const
static UId getLoFieldEntityUId(const FieldBitNumber bit, const EntityHandle ent)
UId getGlobalUniqueId() const
char getActive() const
static UId getHiFieldEntityUId(const FieldBitNumber bit, const EntityHandle ent)
const UId & getEntLocalUniqueId() const
ApproximationOrder getDofOrder() const
FieldData & getFieldData() const
friend std::ostream & operator<<(std::ostream &os, const DofEntity &e)
ShortId getNonNonuniqueShortId() const
get short uid it is unique in combination with entity handle
static ShortId getNonNonuniqueShortId(const DofIdx dof, const boost::shared_ptr< FieldEntity > &ent_ptr)
DofEntity(const boost::shared_ptr< FieldEntity > &entity_ptr, const ApproximationOrder dof_order, const FieldCoefficientsNumber dof_rank, const DofIdx dof)
virtual ~DofEntity()=default
FieldCoefficientsNumber getDofCoeffIdx() const
static UId getUniqueIdCalculate(const DofIdx dof, UId ent_uid)
static UId getGlobalUniqueIdCalculate(const DofIdx dof, const boost::shared_ptr< FieldEntity > &ent_ptr)
Calculate UId for DOF.
static UId getLocalUniqueIdCalculate(const DofIdx dof, const boost::shared_ptr< FieldEntity > &ent_ptr)
keeps information about indexed dofs for the finite element
DofEntity(const boost::shared_ptr< FieldEntity > &entity_ptr, const ApproximationOrder dof_order, const FieldCoefficientsNumber dof_rank, const DofIdx dof)
friend std::ostream & operator<<(std::ostream &os, const FEDofEntity &e)
keeps information about indexed dofs for the finite element
friend std::ostream & operator<<(std::ostream &os, const FENumeredDofEntity &e)
UId getLocalUniqueIdCalculate()
Get the Local Unique Id Calculate object.
static UId getHiFieldEntityUId(const UId &uid)
static UId getLoFieldEntityUId(const UId &uid)
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
NumeredDofEntity_local_idx_change(const DofIdx petsc_local_dof_idx)
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
NumeredDofEntity_mofem_index_change(const DofIdx mofem_idx)
NumeredDofEntity_part_and_all_indices_change(const unsigned int part, const DofIdx mofem_idx, const DofIdx petsc_gloabl_dof_idx, const DofIdx petsc_local_dof_idx)
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
NumeredDofEntity_part_and_glob_idx_change(const unsigned int part, const DofIdx petsc_gloabl_dof_idx)
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
NumeredDofEntity_part_and_indices_change(const unsigned int part, const DofIdx petsc_gloabl_dof_idx, const DofIdx petsc_local_dof_idx)
NumeredDofEntity_part_and_mofem_glob_idx_change(const unsigned int part, const DofIdx mofem_dof_idx, const DofIdx petsc_gloabl_dof_idx)
void operator()(boost::shared_ptr< NumeredDofEntity > &dof) const
keeps information about indexed dofs for the problem
virtual ~NumeredDofEntity()=default
DofIdx getPetscLocalDofIdx() const
NumeredDofEntity(const boost::shared_ptr< DofEntity > &dof_entity_ptr, const int dof_idx=-1, const int petsc_gloabl_dof_idx=-1, const int petsc_local_dof_idx=-1, const int part=-1)
DofIdx getPetscGlobalDofIdx() const
friend std::ostream & operator<<(std::ostream &os, const NumeredDofEntity &e)
unsigned int getPart() const
interface_DofEntity< DofEntity > interface_type_DofEntity
Interface to DofEntity.
ShortId getNonNonuniqueShortId() const
const UId & getEntLocalUniqueId() const
FieldCoefficientsNumber getDofCoeffIdx() const
interface_DofEntity(const boost::shared_ptr< T > &sptr)
virtual ~interface_DofEntity()=default
boost::shared_ptr< FieldEntity > & getFieldEntityPtr() const
EntityHandle getEnt() const
const UId & getEntGlobalUniqueId() const
boost::shared_ptr< DofEntity > & getDofEntityPtr() const
FieldData & getFieldData() const
ApproximationOrder getDofOrder() const
const std::array< int, MAX_DOFS_ON_ENTITY > & getDofOrderMap() const
get hash-map relating dof index on entity with its order
boost::shared_ptr< FieldEntity > & getFieldEntityPtr() const