v0.14.0
FieldMultiIndices.hpp
Go to the documentation of this file.
1 /** \file FieldMultiIndices.hpp
2  * \brief Field data structure storing information about space, approximation
3  * base, coordinate systems, etc.
4  *
5  * Also, it stores data needed for book keeping, like tags to data on the
6  * mesh.
7  *
8  * Each filed has unique ID and name. This data structure is shared between
9  * entities on which is spanning and DOFs on those entities.
10  */
11 
12 
13 
14 #ifndef __FIELDMULTIINDICES_HPP__
15 #define __FIELDMULTIINDICES_HPP__
16 
17 namespace MoFEM {
18 
19 template <typename T> struct interface_RefEntity;
20 struct DofEntity;
21 
22 /** \brief user adjacency function
23  * \ingroup fe_multi_indices
24  */
25 typedef boost::function<int(const int order)> FieldOrderFunct;
26 
27 /** \brief user adjacency function table
28  * \ingroup dof_multi_indices
29  */
30 typedef FieldOrderFunct FieldOrderTable[MBMAXTYPE];
31 
32 /**
33  * \brief Provide data structure for (tensor) field approximation.
34  * \ingroup dof_multi_indices
35  *
36  * The Field is intended to provide support for fields, with a strong bias
37  * towards supporting first and best the capabilities required for scientific
38  * computing applications. Since we work with discrete spaces, data structure
39  * has to carry information about type of approximation space, its regularity.
40  *
41  *
42  * Field data structure storing information about space, approximation base,
43  * coordinate systems, etc. It stores additional data needed for book keeping,
44  * like tags to data on the mesh.
45  *
46  * Each filed has unique ID and name. This
47  * data structure is shared between entities on which is spanning and DOFs on
48  * those entities.
49  *
50  */
51 struct Field {
52 
53  /**
54  * \brief constructor for moab field
55  *
56  * \param meshset which keeps entities for this field
57  */
58  Field(moab::Interface &moab, const EntityHandle meshset);
59 
60  virtual ~Field() = default;
61 
62  using SequenceDofContainer = multi_index_container<
63 
64  boost::weak_ptr<std::vector<DofEntity>>,
65 
66  indexed_by<sequenced<>>>;
67 
68  using DofsOrderMap =
69  std::array<std::array<int, MAX_DOFS_ON_ENTITY>, MBMAXTYPE>;
70 
72 
73  EntityHandle meshSet; ///< keeps entities for this meshset
74 
75  TagType tagFieldDataVertsType; // Tag type for storing data on vertices
76  Tag th_FieldDataVerts; ///< Tag storing field values on vertices in the field
77  Tag th_FieldData; ///< Tag storing field values on entity in the field
78  Tag th_AppOrder; ///< Tag storing approximation order on entity
79  Tag th_FieldRank; /// Tag field rank
80 
81  BitFieldId *tagId; ///< tag keeps field id
82  FieldSpace *tagSpaceData; ///< tag keeps field space
83  FieldContinuity *tagFieldContinuityData; ///< tag keeps field continuity
84  FieldApproximationBase *tagBaseData; ///< tag keeps field base
85 
86  /// tag keeps field rank (dimension, f.e. Temperature field has rank 1,
87  /// displacements field in 3d has rank 3)
89  const void *tagName; ///< tag keeps name of the field
90  int tagNameSize; ///< number of bits necessary to keep field name
91  const void *tagNamePrefixData; ///< tag keeps name prefix of the field
92  int tagNamePrefixSize; ///< number of bits necessary to keep field name
93  ///< prefix
94  FieldOrderTable forderTable; ///< nb. DOFs table for entities
95 
96  /**
97  * @brief Get the Field Order Table
98  *
99  * @return FieldOrderTable&
100  */
102 
103  /**
104  * Field Id is bit set. Each field has only one bit on, bitNumber stores
105  * number of set bit
106  */
107  unsigned int bitNumber;
108 
109  /**
110  * \brief Get field meshset
111  *
112 
113  * To meshsets entity are attached Tags which keeps basic information about
114  * field. Those information is field name, approximation base, approximation
115  * space, id, etc.
116 
117  * In meshset contains entities on which given filed is sparing. Type of
118  entities
119  * depended on approximations space.
120 
121  * @return EntityHandle
122  */
123  inline EntityHandle getMeshset() const { return meshSet; }
124 
125  /**
126  * \brief Get unique field id.
127  * @return Filed ID
128  */
129  inline const BitFieldId &getId() const { return *((BitFieldId *)tagId); }
130 
131  /**
132  * \brief Get string reference to field name
133  * @return Field name
134  */
135  inline boost::string_ref getNameRef() const {
136  return boost::string_ref((char *)tagName, tagNameSize);
137  }
138 
139  /**
140  * \brief Get field name
141  * @return Field name
142  */
143  inline std::string getName() const {
144  return std::string((char *)tagName, tagNameSize);
145  }
146 
147  /**
148  * \brief Get field approximation space
149  * @return approximation space
150  */
151  inline FieldSpace getSpace() const { return *tagSpaceData; }
152 
153  /**
154  * \brief Get field approximation space
155  * @return approximation space name
156  */
157  inline auto getSpaceName() const {
158  return std::string(FieldSpaceNames[getSpace()]);
159  }
160 
161  /** \brief Get field space continuity */
163  return *tagFieldContinuityData;
164  }
165 
166  /**
167  * @brief Get field space continuity name
168  *
169  */
170  inline auto getContinuityName() const {
171  return std::string(FieldContinuityNames[getContinuity()]);
172  }
173 
174  /**
175  * \brief Get approximation base
176  * @return Approximation base
177  */
179 
180  /**
181  * \brief Get approximation base
182  * @return Approximation base name
183  */
184  inline auto getApproxBaseName() const {
185  return std::string(ApproximationBaseNames[getApproxBase()]);
186  }
187 
188  /** \brief Get number of field coefficients
189  *
190 
191  * Scalar field has only one coefficient, vector field in 3D has three. In
192  * general number determine space needed to keep data on entities. What
193  coefficient
194  * means depend on interpretation and associated coordinate system. For
195  example
196  * 3 coefficient means could be covariant or contravariant, or mean three
197  temperatures
198  * for mixture of solid, air and water, etc.
199 
200 
201  */
203  return *tagNbCoeffData;
204  };
205 
206  /**
207  * \brief Get number of set bit in Field ID.
208  * Each field has uid, get getBitNumber get number of bit set for given field.
209  * Field ID has only one bit set for each field.
210  */
211  inline FieldBitNumber getBitNumber() const { return bitNumber; }
212 
213  /**
214  * \brief Calculate number of set bit in Field ID.
215  * Each field has uid, get getBitNumber get number of bit set for given field.
216  * Field ID has only one bit set for each field.
217  */
219  static_assert(BITFIELDID_SIZE >= 32,
220  "Too many fields allowed, can be more but ...");
221  FieldBitNumber b = ffsl(id.to_ulong());
222  if (b != 0)
223  return b;
224  return 0;
225  }
226 
227  /**
228  * \brief Calculate number of set bit in Field ID.
229  * Each field has uid, get getBitNumber get number of bit set for given field.
230  * Field ID has only one bit set for each field.
231  */
233  return getBitNumberCalculate(static_cast<BitFieldId &>(*tagId));
234  }
235 
236  /**
237  * \brief Get reference to sequence data container
238  *
239  * In sequence data container data are physically stored. The purpose of this
240  * is to allocate DofEntity data in bulk, having only one allocation instead
241  * each time entity is inserted. That makes code efficient.
242  *
243  * The vector in sequence is destroyed if last entity inside that vector is
244  * destroyed. All MoFEM::MoFEMEntities have aliased shared_ptr which points to
245  the vector.
246 
247  * Not all DOFs are stored in this way, currently such cases are considered;
248  * - DOFs on vertices. That is exploited that for H1 space, there is some
249  * fixed number of DOFs on each vertex
250 
251  * For other cases, DOFs are stored locally in each MoFEM::MoFEMEntities.
252 
253  * @return MoFEM::Field::SequenceDofContainer
254  */
256  return sequenceDofContainer;
257  }
258 
259  /**
260  * \brief get hash-map relating dof index on entity with its order
261  *
262  * Dofs of given field are indexed on entity
263  * of the same type, same space, approximation base and number of
264  * coefficients, are sorted in the way.
265  *
266  */
267  inline const std::array<ApproximationOrder, MAX_DOFS_ON_ENTITY> &
268  getDofOrderMap(const EntityType type) const {
269  return dofOrderMap[type];
270  }
271 
272  /**
273  * \brief get hash-map relating dof index on entity with its order
274  *
275  * Dofs of given field are indexed on entity
276  * of the same type, same space, approximation base and number of
277  * coefficients, are sorted in the way.
278  *
279  */
280  inline const DofsOrderMap &getDofOrderMap() const { return dofOrderMap; }
281 
282  /**
283  * @brief Get the dofs side map
284  *
285  * This establish connection between dofs in the interior of broken specs and
286  * entity on which trace of the dof is nonzero.
287  *
288  * @return const BaseFunction::DofsSideMap&
289  */
290  inline std::array<BaseFunction::DofsSideMap, MBMAXTYPE> &
291  getDofSideMap() const {
292  return dofSideMap;
293  }
294 
296 
297  friend std::ostream &operator<<(std::ostream &os, const Field &e);
298 
299  inline const Field *getFieldRawPtr() const { return this; };
300 
301 private:
304  mutable std::array<BaseFunction::DofsSideMap, MBMAXTYPE> dofSideMap;
305 };
306 
307 /**
308  * \brief Pointer interface for MoFEM::Field
309  *
310  * MoFEM::Field class is keeps data and methods. This class is interface to
311  * that class, and all other classes, like MoFEMEntities, DofEntity and
312  * derived form them inherits pointer interface, not MoFEM::Field class
313  * directly.
314  *
315  * \ingroup dof_multi_indices
316  */
317 template <typename FIELD, typename REFENT>
318 struct interface_FieldImpl : public interface_RefEntity<REFENT> {
319 
321 
322  interface_FieldImpl(const boost::shared_ptr<FIELD> &field_ptr,
323  const boost::shared_ptr<REFENT> &ref_ents_ptr)
324  : interface_RefEntity<REFENT>(ref_ents_ptr) {}
325  virtual ~interface_FieldImpl() = default;
326 };
327 
328 template <typename FIELD, typename REFENT>
329 struct interface_Field : public interface_FieldImpl<FIELD, REFENT> {
330 
331  interface_Field(const boost::shared_ptr<FIELD> &field_ptr,
332  const boost::shared_ptr<REFENT> &ref_ents_ptr)
333  : interface_FieldImpl<FIELD, REFENT>(field_ptr, ref_ents_ptr),
334  sFieldPtr(field_ptr) {}
335 
336  inline EntityHandle getMeshset() const {
337  return getFieldRawPtr()->getMeshset();
338  }
339 
340  inline int getCoordSysDim(const int d = 0) const {
341  return getFieldRawPtr()->getCoordSysDim(d);
342  }
343 
344  /// @return get field Id
345  inline const BitFieldId &getId() const {
346  return getFieldRawPtr()->getId();
347  }
348 
349  /// @return get field name
350  inline boost::string_ref getNameRef() const {
351  return getFieldRawPtr()->getNameRef();
352  }
353 
354  /// @return get field name
355  inline std::string getName() const {
356  return getFieldRawPtr()->getName();
357  }
358 
359  /// @return get approximation space
360  inline FieldSpace getSpace() const {
361  return getFieldRawPtr()->getSpace();
362  }
363 
364  /// @return get approximation base
366  return getFieldRawPtr()->getApproxBase();
367  }
368 
369  /// @return get space continuity
371  return getFieldRawPtr()->getContinuity();
372  }
373 
374  /// @return get space continuity name
375  inline auto getContinuityName() const {
376  return getFieldRawPtr()->getContinuityName();
377  }
378 
379  /// @return get number of coefficients for DOF
381  return getFieldRawPtr()->getNbOfCoeffs();
382  }
383 
384  /// @return get bit number if filed Id
385  inline FieldBitNumber getBitNumber() const {
386  return getFieldRawPtr()->getBitNumber();
387  }
388 
389  /**
390  * \brief get hash-map relating dof index on entity with its order
391  *
392  * Dofs of given field are indexed on entity
393  * of the same type, same space, approximation base and number of
394  * coefficients, are sorted in the way.
395  *
396  */
397  inline std::array<ApproximationOrder, MAX_DOFS_ON_ENTITY> &
398  getDofOrderMap(const EntityType type) const {
400  }
401 
402  inline const Field *getFieldRawPtr() const {
403  return sFieldPtr->getFieldRawPtr();
404  };
405 
407  return sFieldPtr->getFieldOrderTable();
408  };
409 
410  inline auto &getDofSideMap() { return sFieldPtr->getDofSideMap(); }
411 
412 private:
413  mutable boost::shared_ptr<FIELD> sFieldPtr;
414 };
415 
416 template <typename T>
417 struct interface_Field<T, T> : public interface_FieldImpl<T, T> {
418  interface_Field(const boost::shared_ptr<T> &ptr)
419  : interface_FieldImpl<T, T>(ptr, ptr) {}
420 
422 
423  inline EntityHandle getMeshset() const {
424  return getFieldRawPtr()->getMeshset();
425  }
426 
427  /// @return get field Id
428  inline const BitFieldId &getId() const {
429  return getFieldRawPtr()->getId();
430  }
431 
432  /// @return get field name
433  inline boost::string_ref getNameRef() const {
434  return getFieldRawPtr()->getNameRef();
435  }
436 
437  /// @return get field name
438  inline std::string getName() const {
439  return getFieldRawPtr()->getName();
440  }
441 
442  /// @return get approximation space
443  inline FieldSpace getSpace() const {
444  return getFieldRawPtr()->getSpace();
445  }
446 
447  /// @return get approximation base
448  inline auto getSpaceName() const { return getFieldRawPtr()->getSpaceName(); }
449 
450  /// @return get approximation base
452  return getFieldRawPtr()->getApproxBase();
453  }
454 
455  /// @return get approximation base
456  inline auto getApproxBaseName() const {
457  return getFieldRawPtr()->getApproxBaseName();
458  }
459 
460  /// @return get number of coefficients for DOF
462  return getFieldRawPtr()->getNbOfCoeffs();
463  }
464 
465  /// @return get bit number if filed Id
466  inline FieldBitNumber getBitNumber() const {
467  return getFieldRawPtr()->getBitNumber();
468  }
469 
470  /**
471  * \brief get hash-map relating dof index on entity with its order
472  *
473  * Dofs of given field are indexed on entity
474  * of the same type, same space, approximation base and number of
475  * coefficients, are sorted in the way.
476  *
477  */
478  inline std::array<ApproximationOrder, MAX_DOFS_ON_ENTITY> &
479  getDofOrderMap(const EntityType type) const {
481  }
482 
483  inline const Field *getFieldRawPtr() const {
484  return boost::static_pointer_cast<T>(this->getRefEntityPtr())
485  ->getFieldRawPtr();
486  };
487 };
488 
489 /**
490  * @relates multi_index_container
491  * \brief Field_multiIndex for Field
492  *
493  */
494 typedef multi_index_container<
495  boost::shared_ptr<Field>,
496  indexed_by<
497  hashed_unique<tag<BitFieldId_mi_tag>,
498  const_mem_fun<Field, const BitFieldId &, &Field::getId>,
499  HashBit<BitFieldId>, EqBit<BitFieldId>>,
500  ordered_unique<tag<Meshset_mi_tag>,
501  member<Field, EntityHandle, &Field::meshSet>>,
502  ordered_unique<
503  tag<FieldName_mi_tag>,
504  const_mem_fun<Field, boost::string_ref, &Field::getNameRef>>,
505  ordered_non_unique<tag<BitFieldId_space_mi_tag>,
506  const_mem_fun<Field, FieldSpace, &Field::getSpace>>>>
508 
509 typedef multi_index_container<
510  boost::shared_ptr<Field>,
511  indexed_by<
512  ordered_unique<tag<BitFieldId_mi_tag>,
513  const_mem_fun<Field, const BitFieldId &, &Field::getId>,
514  LtBit<BitFieldId>>>>
516 
517 } // namespace MoFEM
518 
519 #endif // __FIELDMULTIINDICES_HPP__
MoFEM::Field::getSpaceName
auto getSpaceName() const
Get field approximation space.
Definition: FieldMultiIndices.hpp:157
MoFEM::Field::tagFieldDataVertsType
TagType tagFieldDataVertsType
Definition: FieldMultiIndices.hpp:75
MoFEM::interface_Field::getBitNumber
FieldBitNumber getBitNumber() const
Definition: FieldMultiIndices.hpp:385
MoFEM::Field::getNbOfCoeffs
FieldCoefficientsNumber getNbOfCoeffs() const
Get number of field coefficients.
Definition: FieldMultiIndices.hpp:202
MoFEM::interface_FieldImpl::~interface_FieldImpl
virtual ~interface_FieldImpl()=default
EntityHandle
MoFEM::Field::getDofOrderMap
const std::array< ApproximationOrder, MAX_DOFS_ON_ENTITY > & getDofOrderMap(const EntityType type) const
get hash-map relating dof index on entity with its order
Definition: FieldMultiIndices.hpp:268
MoFEM::Field::moab
moab::Interface & moab
Definition: FieldMultiIndices.hpp:71
MoFEM::Field::getContinuity
FieldContinuity getContinuity() const
Get field space continuity.
Definition: FieldMultiIndices.hpp:162
MoFEM::DofEntity
keeps information about DOF on the entity
Definition: DofsMultiIndices.hpp:16
MoFEM::Field::getDofSideMap
std::array< BaseFunction::DofsSideMap, MBMAXTYPE > & getDofSideMap() const
Get the dofs side map.
Definition: FieldMultiIndices.hpp:291
MoFEM::Field::getMeshset
EntityHandle getMeshset() const
Get field meshset.
Definition: FieldMultiIndices.hpp:123
ApproximationBaseNames
const static char *const ApproximationBaseNames[]
Definition: definitions.h:72
MoFEM::Field::tagSpaceData
FieldSpace * tagSpaceData
tag keeps field space
Definition: FieldMultiIndices.hpp:82
MoFEM::Field::rebuildDofsOrderMap
MoFEMErrorCode rebuildDofsOrderMap()
Definition: FieldMultiIndices.cpp:489
MoFEM::Field::tagFieldContinuityData
FieldContinuity * tagFieldContinuityData
tag keeps field continuity
Definition: FieldMultiIndices.hpp:83
MoFEM::Exceptions::MoFEMErrorCode
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
MoFEM::Field::getSpace
FieldSpace getSpace() const
Get field approximation space.
Definition: FieldMultiIndices.hpp:151
MoFEM::interface_RefEntity< REFENT >::getRefEntityPtr
boost::shared_ptr< REFENT > & getRefEntityPtr() const
Definition: RefEntsMultiIndices.hpp:709
MoFEM::interface_Field< T, T >::getDofOrderMap
std::array< ApproximationOrder, MAX_DOFS_ON_ENTITY > & getDofOrderMap(const EntityType type) const
get hash-map relating dof index on entity with its order
Definition: FieldMultiIndices.hpp:479
MoFEM::Types::BitFieldId
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
Definition: Types.hpp:42
MoFEM::Field::DofsOrderMap
std::array< std::array< int, MAX_DOFS_ON_ENTITY >, MBMAXTYPE > DofsOrderMap
Definition: FieldMultiIndices.hpp:69
MoFEM::Field::getFieldOrderTable
FieldOrderTable & getFieldOrderTable()
Get the Field Order Table.
Definition: FieldMultiIndices.hpp:101
MoFEM::Field::th_FieldData
Tag th_FieldData
Tag storing field values on entity in the field.
Definition: FieldMultiIndices.hpp:77
MoFEM::FieldOrderTable
FieldOrderFunct FieldOrderTable[MBMAXTYPE]
user adjacency function table
Definition: FieldMultiIndices.hpp:30
MoFEM::Field::getName
std::string getName() const
Get field name.
Definition: FieldMultiIndices.hpp:143
MoFEM::Field::dofSideMap
std::array< BaseFunction::DofsSideMap, MBMAXTYPE > dofSideMap
Definition: FieldMultiIndices.hpp:304
MoFEM::Field::sequenceDofContainer
SequenceDofContainer sequenceDofContainer
Definition: FieldMultiIndices.hpp:299
MoFEM::interface_RefEntity
interface to RefEntity
Definition: FieldMultiIndices.hpp:19
MoFEM::interface_Field::getFieldOrderTable
FieldOrderTable & getFieldOrderTable()
Definition: FieldMultiIndices.hpp:406
MoFEM::interface_Field< T, T >::interface_Field
interface_Field(const boost::shared_ptr< T > &ptr)
Definition: FieldMultiIndices.hpp:418
MoFEM::interface_Field< T, T >::getNameRef
boost::string_ref getNameRef() const
Definition: FieldMultiIndices.hpp:433
MoFEM::Field::th_FieldRank
Tag th_FieldRank
Definition: FieldMultiIndices.hpp:79
MoFEM::Field::getApproxBaseName
auto getApproxBaseName() const
Get approximation base.
Definition: FieldMultiIndices.hpp:184
MoFEM::Field
Provide data structure for (tensor) field approximation.
Definition: FieldMultiIndices.hpp:51
order
constexpr int order
Definition: dg_projection.cpp:18
MoFEM::interface_Field::getDofSideMap
auto & getDofSideMap()
Definition: FieldMultiIndices.hpp:410
MoFEM::interface_Field< T, T >::getApproxBase
FieldApproximationBase getApproxBase() const
Definition: FieldMultiIndices.hpp:451
MoFEM::Field_multiIndex_view
multi_index_container< boost::shared_ptr< Field >, indexed_by< ordered_unique< tag< BitFieldId_mi_tag >, const_mem_fun< Field, const BitFieldId &, &Field::getId >, LtBit< BitFieldId > > > > Field_multiIndex_view
Definition: FieldMultiIndices.hpp:515
MoFEM::Interface
DeprecatedCoreInterface Interface
Definition: Interface.hpp:2010
MoFEM::Field::tagNamePrefixSize
int tagNamePrefixSize
Definition: FieldMultiIndices.hpp:92
FieldSpace
FieldSpace
approximation spaces
Definition: definitions.h:82
MoFEM::Field::tagNameSize
int tagNameSize
number of bits necessary to keep field name
Definition: FieldMultiIndices.hpp:90
MoFEM::Field::getId
const BitFieldId & getId() const
Get unique field id.
Definition: FieldMultiIndices.hpp:129
MoFEM::interface_Field< T, T >::getName
std::string getName() const
Definition: FieldMultiIndices.hpp:438
FieldContinuityNames
const static char *const FieldContinuityNames[]
Definition: definitions.h:105
MoFEM::Field::getDofOrderMap
const DofsOrderMap & getDofOrderMap() const
get hash-map relating dof index on entity with its order
Definition: FieldMultiIndices.hpp:280
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
MoFEM::interface_Field::getContinuity
FieldContinuity getContinuity() const
Definition: FieldMultiIndices.hpp:370
MoFEM::interface_Field< T, T >::getApproxBaseName
auto getApproxBaseName() const
Definition: FieldMultiIndices.hpp:456
BITFIELDID_SIZE
#define BITFIELDID_SIZE
max number of fields
Definition: definitions.h:233
MoFEM::Field::getNameRef
boost::string_ref getNameRef() const
Get string reference to field name.
Definition: FieldMultiIndices.hpp:135
MoFEM::interface_Field::getDofOrderMap
std::array< ApproximationOrder, MAX_DOFS_ON_ENTITY > & getDofOrderMap(const EntityType type) const
get hash-map relating dof index on entity with its order
Definition: FieldMultiIndices.hpp:398
MoFEM::interface_Field< T, T >::getFieldRawPtr
const Field * getFieldRawPtr() const
Definition: FieldMultiIndices.hpp:483
FieldContinuity
FieldContinuity
Field continuity.
Definition: definitions.h:99
MoFEM::Field::th_FieldDataVerts
Tag th_FieldDataVerts
Tag storing field values on vertices in the field.
Definition: FieldMultiIndices.hpp:76
MoFEM::Types::FieldCoefficientsNumber
int FieldCoefficientsNumber
Number of field coefficients.
Definition: Types.hpp:27
MoFEM::interface_FieldImpl
Pointer interface for MoFEM::Field.
Definition: FieldMultiIndices.hpp:318
convert.type
type
Definition: convert.py:64
MoFEM::Field::getFieldRawPtr
const Field * getFieldRawPtr() const
Definition: FieldMultiIndices.hpp:299
MoFEM::interface_Field::getNameRef
boost::string_ref getNameRef() const
Definition: FieldMultiIndices.hpp:350
MoFEM::Field::operator<<
friend std::ostream & operator<<(std::ostream &os, const Field &e)
Definition: FieldMultiIndices.cpp:526
MoFEM::Field::tagBaseData
FieldApproximationBase * tagBaseData
tag keeps field base
Definition: FieldMultiIndices.hpp:84
MoFEM::Field::getApproxBase
FieldApproximationBase getApproxBase() const
Get approximation base.
Definition: FieldMultiIndices.hpp:178
MoFEM::interface_Field< T, T >::getId
const BitFieldId & getId() const
Definition: FieldMultiIndices.hpp:428
MoFEM::Field::getContinuityName
auto getContinuityName() const
Get field space continuity name.
Definition: FieldMultiIndices.hpp:170
MoFEM::interface_Field::sFieldPtr
boost::shared_ptr< FIELD > sFieldPtr
Definition: FieldMultiIndices.hpp:413
MoFEM::Field::tagName
const void * tagName
tag keeps name of the field
Definition: FieldMultiIndices.hpp:89
MoFEM::interface_Field< T, T >::getNbOfCoeffs
FieldCoefficientsNumber getNbOfCoeffs() const
Definition: FieldMultiIndices.hpp:461
MoFEM::Field::SequenceDofContainer
multi_index_container< boost::weak_ptr< std::vector< DofEntity > >, indexed_by< sequenced<> >> SequenceDofContainer
Definition: FieldMultiIndices.hpp:66
MoFEM::Field::tagNbCoeffData
FieldCoefficientsNumber * tagNbCoeffData
Definition: FieldMultiIndices.hpp:88
MoFEM::interface_Field::getNbOfCoeffs
FieldCoefficientsNumber getNbOfCoeffs() const
Definition: FieldMultiIndices.hpp:380
MoFEM::interface_Field< T, T >::getSpace
FieldSpace getSpace() const
Definition: FieldMultiIndices.hpp:443
MoFEM::Field::dofOrderMap
DofsOrderMap dofOrderMap
Definition: FieldMultiIndices.hpp:303
MoFEM::Field::getBitNumberCalculate
static FieldBitNumber getBitNumberCalculate(const BitFieldId &id)
Calculate number of set bit in Field ID. Each field has uid, get getBitNumber get number of bit set f...
Definition: FieldMultiIndices.hpp:218
MoFEM::FieldOrderFunct
boost::function< int(const int order)> FieldOrderFunct
user adjacency function
Definition: FieldMultiIndices.hpp:20
MoFEM::interface_Field< T, T >::getSpaceName
auto getSpaceName() const
Definition: FieldMultiIndices.hpp:448
FieldSpaceNames
const static char *const FieldSpaceNames[]
Definition: definitions.h:92
MoFEM::Field::th_AppOrder
Tag th_AppOrder
Tag storing approximation order on entity.
Definition: FieldMultiIndices.hpp:78
MoFEM::Field::Field
Field(moab::Interface &moab, const EntityHandle meshset)
constructor for moab field
Definition: FieldMultiIndices.cpp:15
MoFEM::Field::getBitNumber
FieldBitNumber getBitNumber() const
Get number of set bit in Field ID. Each field has uid, get getBitNumber get number of bit set for giv...
Definition: FieldMultiIndices.hpp:211
MoFEM::interface_Field::getMeshset
EntityHandle getMeshset() const
Definition: FieldMultiIndices.hpp:336
MoFEM::Field::bitNumber
unsigned int bitNumber
Definition: FieldMultiIndices.hpp:107
Field_multiIndex
multi_index_container< boost::shared_ptr< Field >, indexed_by< hashed_unique< tag< BitFieldId_mi_tag >, const_mem_fun< Field, const BitFieldId &, &Field::getId >, HashBit< BitFieldId >, EqBit< BitFieldId > >, ordered_unique< tag< Meshset_mi_tag >, member< Field, EntityHandle, &Field::meshSet > >, ordered_unique< tag< FieldName_mi_tag >, const_mem_fun< Field, boost::string_ref, &Field::getNameRef > >, ordered_non_unique< tag< BitFieldId_space_mi_tag >, const_mem_fun< Field, FieldSpace, &Field::getSpace > > > > Field_multiIndex
Field_multiIndex for Field.
Definition: FieldMultiIndices.hpp:507
MoFEM::interface_FieldImpl::interface_FieldImpl
interface_FieldImpl(const boost::shared_ptr< FIELD > &field_ptr, const boost::shared_ptr< REFENT > &ref_ents_ptr)
Definition: FieldMultiIndices.hpp:322
MoFEM::Types::FieldBitNumber
char FieldBitNumber
Field bit number.
Definition: Types.hpp:28
MoFEM::interface_Field< T, T >::getMeshset
EntityHandle getMeshset() const
Definition: FieldMultiIndices.hpp:423
MoFEM::interface_Field::getApproxBase
FieldApproximationBase getApproxBase() const
Definition: FieldMultiIndices.hpp:365
sdf_hertz_2d_axisymm_plane.d
float d
Definition: sdf_hertz_2d_axisymm_plane.py:4
FieldApproximationBase
FieldApproximationBase
approximation base
Definition: definitions.h:58
MoFEM::Field::tagNamePrefixData
const void * tagNamePrefixData
tag keeps name prefix of the field
Definition: FieldMultiIndices.hpp:91
MoFEM::interface_Field::getSpace
FieldSpace getSpace() const
Definition: FieldMultiIndices.hpp:360
MoFEM::Field::getDofSequenceContainer
SequenceDofContainer & getDofSequenceContainer() const
Get reference to sequence data container.
Definition: FieldMultiIndices.hpp:255
MoFEM::interface_Field::getFieldRawPtr
const Field * getFieldRawPtr() const
Definition: FieldMultiIndices.hpp:402
MoFEM::interface_Field::getContinuityName
auto getContinuityName() const
Definition: FieldMultiIndices.hpp:375
MoFEM::Field::getBitNumberCalculate
FieldBitNumber getBitNumberCalculate() const
Calculate number of set bit in Field ID. Each field has uid, get getBitNumber get number of bit set f...
Definition: FieldMultiIndices.hpp:232
MoFEM::interface_Field::getName
std::string getName() const
Definition: FieldMultiIndices.hpp:355
convert.int
int
Definition: convert.py:64
MoFEM::interface_Field< T, T >::getBitNumber
FieldBitNumber getBitNumber() const
Definition: FieldMultiIndices.hpp:466
MoFEM::Field::forderTable
FieldOrderTable forderTable
nb. DOFs table for entities
Definition: FieldMultiIndices.hpp:94
MoFEM::Field::meshSet
EntityHandle meshSet
keeps entities for this meshset
Definition: FieldMultiIndices.hpp:73
MoFEM::interface_Field::interface_Field
interface_Field(const boost::shared_ptr< FIELD > &field_ptr, const boost::shared_ptr< REFENT > &ref_ents_ptr)
Definition: FieldMultiIndices.hpp:331
MoFEM::interface_Field
Definition: FieldMultiIndices.hpp:329
MoFEM::interface_Field::getCoordSysDim
int getCoordSysDim(const int d=0) const
Definition: FieldMultiIndices.hpp:340
MoFEM::Field::~Field
virtual ~Field()=default
MoFEM::interface_Field::getId
const BitFieldId & getId() const
Definition: FieldMultiIndices.hpp:345
MoFEM::Field::tagId
BitFieldId * tagId
Tag field rank.
Definition: FieldMultiIndices.hpp:81