v0.11.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 
24 namespace MoFEM {
25 
26 /**
27  * \brief keeps information about DOF on the entity
28  * \ingroup dof_multi_indices
29  */
30 struct 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 
83  static inline UId getLoFieldEntityUId(const FieldBitNumber bit,
84  const EntityHandle ent) {
87  }
88 
89  static inline UId getHiFieldEntityUId(const FieldBitNumber bit,
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 
154 private:
156 
157  friend struct DofEntity_active_change;
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  */
168 template <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  */
240 struct 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
258  inline DofIdx getPetscGlobalDofIdx() const { return petscGloablDofIdx; }
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  */
281 struct FEDofEntity : public DofEntity {
282 
283  FEDofEntity() = delete;
284 
285 private:
286  using DofEntity::DofEntity;
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 
299  FENumeredDofEntity() = delete;
300 
301 private:
303 
304  // DO NOT MAKE ANY MAMBER DATA HARE !!!
305 
306  friend std::ostream &operator<<(std::ostream &os,
307  const FENumeredDofEntity &e);
308 };
309 
310 std::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  */
317 typedef 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 */
356 using 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 */
368 typedef std::vector<boost::weak_ptr<DofEntity>> DofEntity_vector_view;
369 
370 /** \brief multi-index view on DofEntity activity
371  \ingroup dof_multi_indices
372 */
373 typedef 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  */
392 typedef 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  */
419 typedef 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  */
452 typedef 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 
519 using NumeredDofEntity_multiIndex_idx_view_hashed = multi_index_container<
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.
const double T
int DofIdx
Index of DOF.
Definition: Types.hpp:29
double FieldData
Field data type.
Definition: Types.hpp:36
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
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
std::ostream & operator<<(std::ostream &os, const DataForcesAndSourcesCore::EntData &e)
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)
friend std::ostream & operator<<(std::ostream &os, const DofEntity &e)
const UId & getEntLocalUniqueId() const
UId getGlobalUniqueId() const
char getActive() const
static UId getHiFieldEntityUId(const FieldBitNumber bit, const EntityHandle ent)
ApproximationOrder getDofOrder() const
ShortId getNonNonuniqueShortId() const
get short uid it is unique in combination with entity handle
FieldData & getFieldData() const
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
friend std::ostream & operator<<(std::ostream &os, const FEDofEntity &e)
DofEntity(const boost::shared_ptr< FieldEntity > &entity_ptr, const ApproximationOrder dof_order, const FieldCoefficientsNumber dof_rank, const DofIdx dof)
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
friend std::ostream & operator<<(std::ostream &os, const NumeredDofEntity &e)
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
unsigned int getPart() const
interface_DofEntity< DofEntity > interface_type_DofEntity
Interface to DofEntity.
ShortId getNonNonuniqueShortId() const
boost::shared_ptr< DofEntity > & getDofEntityPtr() const
FieldCoefficientsNumber getDofCoeffIdx() const
const UId & getEntLocalUniqueId() const
interface_DofEntity(const boost::shared_ptr< T > &sptr)
virtual ~interface_DofEntity()=default
boost::shared_ptr< FieldEntity > & getFieldEntityPtr() const
EntityHandle getEnt() const
ApproximationOrder getDofOrder() const
const UId & getEntGlobalUniqueId() const
FieldData & getFieldData() 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
FieldCoefficientsNumber getNbOfCoeffs() const
Pointer interface for MoFEM::Field.