38 static constexpr const int value =
N;
50 MPI_Comm comm = PETSC_COMM_WORLD,
90 virtual boost::shared_ptr<RefEntityTmp<0>>
97 MPI_Comm comm = PETSC_COMM_WORLD,
148 static MoFEMErrorCode Initialize(
int *argc,
char ***args,
const char file[],
171 boost::shared_ptr<BasicEntityData> &ptr);
173 static boost::shared_ptr<RefEntityTmp<0>>
188 MoFEMErrorCode query_interface(boost::typeindex::type_index type_index,
212 BUILD_FIELD = 1 << 0,
215 BUILD_PROBLEM = 1 << 3,
216 PARTITION_PROBLEM = 1 << 4,
217 PARTITION_FE = 1 << 5,
218 PARTITION_GHOST_DOFS = 1 << 6,
219 PARTITION_MESH = 1 << 7
250 MoFEMErrorCode coreGenericConstructor(moab::Interface &moab, MPI_Comm comm,
260 Tag
th_FieldId, th_FieldName, th_FieldName_DataNamePrefix, th_FieldSpace,
291 return basicEntityDataPtr;
321 std::reference_wrapper<moab::Interface>
moab;
322 inline moab::Interface &
get_moab() {
return moab; }
323 inline const moab::Interface &
get_moab()
const {
return moab; }
338 check_number_of_ents_in_ents_field(
const std::string &name)
const;
341 check_number_of_ents_in_ents_finite_element(
const std::string &name)
const;
342 MoFEMErrorCode check_number_of_ents_in_ents_finite_element()
const;
362 return *get_meshsets_manager_ptr();
365 return *get_meshsets_manager_ptr();
391 const bool remove_parent =
false,
425 add_field(
const std::string &name,
const FieldSpace space,
428 const TagType tag_type = MB_TAG_SPARSE,
457 const TagType tag_type,
const enum MoFEMTypes bh,
461 const std::string &name,
464 const std::string &name,
468 const std::string &name,
472 const std::string &name,
473 const bool recursive =
true,
477 const std::string &name,
478 const bool recursive =
true,
481 MoFEMErrorCode create_vertices_and_add_to_field(
const std::string name,
482 const double coords[],
491 MoFEMErrorCode setFieldOrderImpl(boost::shared_ptr<Field> field_ptr,
507 const EntityType type,
const std::string &name,
522 buildFieldForNoFieldImpl(boost::shared_ptr<Field> field_ptr,
523 std::map<EntityType, int> &dof_counter,
int verb);
526 std::map<EntityType, int> &dof_counter,
530 buildFieldForL2H1HcurlHdiv(
const BitFieldId id,
531 std::map<EntityType, int> &dof_counter,
532 std::map<EntityType, int> &inactive_dof_counter,
580 MoFEMErrorCode list_dofs_by_field_name(
const std::string &name)
const;
582 BitFieldId get_field_id(
const std::string &name)
const;
583 FieldBitNumber get_field_bit_number(
const std::string name)
const;
584 std::string get_field_name(
const BitFieldId id)
const;
586 EntityHandle get_field_meshset(
const std::string name)
const;
587 MoFEMErrorCode get_field_entities_by_dimension(
const std::string name,
591 MoFEMErrorCode get_field_entities_by_handle(
const std::string name,
593 bool check_field(
const std::string &name)
const;
595 const Field *get_field_structure(
const std::string &name,
605 get_finite_element_structure(
const std::string &name,
608 bool check_finite_element(
const std::string &name)
const;
614 modify_finite_element_adjacency_table(
const std::string &fe_name,
618 modify_finite_element_add_field_data(
const std::string &fe_name,
619 const std::string name_filed);
621 modify_finite_element_add_field_row(
const std::string &fe_name,
622 const std::string name_row);
624 modify_finite_element_add_field_col(
const std::string &fe_name,
625 const std::string name_col);
627 modify_finite_element_off_field_data(
const std::string &fe_name,
628 const std::string name_filed);
630 modify_finite_element_off_field_row(
const std::string &fe_name,
631 const std::string name_row);
633 modify_finite_element_off_field_col(
const std::string &fe_name,
634 const std::string name_col);
637 const std::string &name,
const bool recursive =
true);
640 const std::string &name,
641 const bool recursive =
true);
644 const std::string &name);
647 const std::string &name);
652 add_ents_to_finite_element_by_MESHSET(
const EntityHandle meshset,
653 const std::string &name,
654 const bool recursive =
false);
666 MoFEMErrorCode remove_ents_from_finite_element(
const std::string name,
670 MoFEMErrorCode remove_ents_from_finite_element(
const std::string name,
685 BitFEId getBitFEId(
const std::string &fe_name)
const;
692 std::string getBitFEIdName(
const BitFEId id)
const;
695 EntityHandle get_finite_element_meshset(
const std::string name)
const;
697 get_finite_element_entities_by_dimension(
const std::string name,
int dim,
699 MoFEMErrorCode get_finite_element_entities_by_type(
const std::string name,
702 MoFEMErrorCode get_finite_element_entities_by_handle(
const std::string name,
718 modify_problem_add_finite_element(
const std::string name_problem,
719 const std::string &fe_name);
721 modify_problem_unset_finite_element(
const std::string name_problem,
722 const std::string &fe_name);
724 modify_problem_ref_level_add_bit(
const std::string &name_problem,
727 modify_problem_ref_level_set_bit(
const std::string &name_problem,
730 modify_problem_mask_ref_level_add_bit(
const std::string &name_problem,
733 modify_problem_mask_ref_level_set_bit(
const std::string &name_problem,
735 BitProblemId getBitProblemId(
const std::string &name)
const;
744 const Range *
const ents_ptr =
nullptr,
746 MoFEMErrorCode buildFiniteElements(
const boost::shared_ptr<FiniteElement> &fe,
747 const Range *ents_ptr = NULL,
759 get_problem_finite_elements_entities(
const std::string name,
760 const std::string &fe_name,
795 clear_adjacencies_finite_elements(
const Range ents,
798 clear_adjacencies_finite_elements(
const std::string name,
const Range ents,
811 problem_basic_method_preProcess(
const std::string &problem_name,
818 problem_basic_method_postProcess(
const std::string &problem_name,
829 const Problem *problem_ptr,
const std::string &fe_name,
FEMethod &method,
830 int lower_rank,
int upper_rank,
831 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
837 const std::string problem_name,
const std::string &fe_name,
838 FEMethod &method,
int lower_rank,
int upper_rank,
839 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
845 const std::string problem_name,
const std::string &fe_name,
847 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
854 DofMethod &method,
int lower_rank,
int upper_rank,
858 DofMethod &method,
int lower_rank,
int upper_rank,
879 Range const *
const ents =
nullptr,
901 const Problem **problem_ptr)
const;
905 *dofs_elements_adjacency)
const;
914 const Problem *get_problem(
const std::string problem_name)
const;
917 get_ents_elements_adjacency()
const;
919 FieldEntityByUId::iterator
920 get_ent_field_by_name_begin(
const std::string &
field_name)
const;
921 FieldEntityByUId::iterator
922 get_ent_field_by_name_end(
const std::string &
field_name)
const;
923 DofEntityByUId::iterator
924 get_dofs_by_name_begin(
const std::string &
field_name)
const;
925 DofEntityByUId::iterator
926 get_dofs_by_name_end(
const std::string &
field_name)
const;
927 DofEntityByUId::iterator
928 get_dofs_by_name_and_ent_begin(
const std::string &
field_name,
930 DofEntityByUId::iterator
931 get_dofs_by_name_and_ent_end(
const std::string &
field_name,
933 DofEntityByUId::iterator
934 get_dofs_by_name_and_type_begin(
const std::string &
field_name,
936 DofEntityByUId::iterator
937 get_dofs_by_name_and_type_end(
const std::string &
field_name,
940 EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
941 get_fe_by_name_begin(
const std::string &fe_name)
const;
942 EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
943 get_fe_by_name_end(
const std::string &fe_name)
const;
975 inline MPI_Comm &
get_comm()
const {
return mofemComm; }
990 boost::shared_ptr<WrapMPIComm>
998 mutable boost::ptr_map<boost::typeindex::type_index, UnknownInterface>
iFaces;
1078 virtual boost::shared_ptr<RefEntityTmp<0>>
1084 CoreTmp(moab::Interface &moab,
1085 MPI_Comm comm = PETSC_COMM_WORLD,
multi_index_container< FieldEntityEntFiniteElementAdjacencyMap, indexed_by< ordered_unique< tag< Composite_Unique_mi_tag >, composite_key< FieldEntityEntFiniteElementAdjacencyMap, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getEntUniqueId >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getFeUniqueId > > >, ordered_non_unique< tag< Unique_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getEntUniqueId > >, ordered_non_unique< tag< FE_Unique_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getFeUniqueId > >, ordered_non_unique< tag< FEEnt_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, EntityHandle, &FieldEntityEntFiniteElementAdjacencyMap::getFeHandle > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, EntityHandle, &FieldEntityEntFiniteElementAdjacencyMap::getEntHandle > > > > FieldEntityEntFiniteElementAdjacencyMap_multiIndex
MultiIndex container keeps Adjacencies Element and dof entities adjacencies and vice versa.
Core interface class for user interface.
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.
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
FieldApproximationBase
approximation base
FieldSpace
approximation spaces
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.
multi_index_container< boost::shared_ptr< RefEntity >, indexed_by< ordered_unique< tag< Ent_mi_tag >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getEnt > >, ordered_non_unique< tag< Ent_Ent_mi_tag >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > >, ordered_non_unique< tag< Composite_EntType_and_ParentEntType_mi_tag >, composite_key< RefEntity, const_mem_fun< RefEntity, EntityType, &RefEntity::getEntType >, const_mem_fun< RefEntity, EntityType, &RefEntity::getParentEntType > > >, ordered_non_unique< tag< Composite_ParentEnt_And_EntType_mi_tag >, composite_key< RefEntity, const_mem_fun< RefEntity, EntityType, &RefEntity::getEntType >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > > > > > RefEntity_multiIndex
multi_index_container< boost::shared_ptr< RefElement >, indexed_by< ordered_unique< tag< Ent_mi_tag >, const_mem_fun< RefElement::interface_type_RefEntity, EntityHandle, &RefElement::getEnt > > > > RefElement_multiIndex
multi_index_container< boost::shared_ptr< EntFiniteElement >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< EntFiniteElement, UId, &EntFiniteElement::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< EntFiniteElement::interface_type_RefEntity, EntityHandle, &EntFiniteElement::getEnt > > > > EntFiniteElement_multiIndex
MultiIndex container for EntFiniteElement.
multi_index_container< Problem, indexed_by< ordered_unique< tag< Meshset_mi_tag >, member< Problem, EntityHandle, &Problem::meshset > >, hashed_unique< tag< BitProblemId_mi_tag >, const_mem_fun< Problem, BitProblemId, &Problem::getId >, HashBit< BitProblemId >, EqBit< BitProblemId > >, hashed_unique< tag< Problem_mi_tag >, const_mem_fun< Problem, std::string, &Problem::getName > > > > Problem_multiIndex
MultiIndex for entities for Problem.
boost::function< MoFEMErrorCode(Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)> ElementAdjacencyFunct
user adjacency function
multi_index_container< boost::shared_ptr< FiniteElement >, indexed_by< hashed_unique< tag< FiniteElement_Meshset_mi_tag >, member< FiniteElement, EntityHandle, &FiniteElement::meshset > >, hashed_unique< tag< BitFEId_mi_tag >, const_mem_fun< FiniteElement, BitFEId, &FiniteElement::getId >, HashBit< BitFEId >, EqBit< BitFEId > >, ordered_unique< tag< FiniteElement_name_mi_tag >, const_mem_fun< FiniteElement, boost::string_ref, &FiniteElement::getNameRef > > > > FiniteElement_multiIndex
MultiIndex for entities for FiniteElement.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
std::bitset< BITFEID_SIZE > BitFEId
Finite element Id.
std::bitset< BITPROBLEMID_SIZE > BitProblemId
Problem Id.
int ApproximationOrder
Approximation on the entity.
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
int FieldCoefficientsNumber
Number of field coefficients.
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
char FieldBitNumber
Field bit number.
implementation of Data Operators for Forces and Sources
boost::shared_ptr< CacheTuple > CacheTupleSharedPtr
multi_index_container< boost::shared_ptr< FieldEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, member< FieldEntity, UId, &FieldEntity::localUId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FieldEntity::interface_type_RefEntity, EntityHandle, &FieldEntity::getEnt > > > > FieldEntity_multiIndex
boost::weak_ptr< CacheTuple > CacheTupleWeakPtr
constexpr auto field_name
Data structure to exchange data between mofem and User Loop Methods.
const int getValue() const
Get the core.
boost::shared_ptr< BasicEntityData > & get_basic_entity_data_ptr()
Get pointer to basic entity data.
const MeshsetsManager & get_meshsets_manager() const
get MeshsetsManager pointer
MPI_Comm & get_comm() const
PetscLogEvent MOFEM_EVENT_createMat
static bool isGloballyInitialised
Core base globally initialized.
PetscBool initaliseAndBuildFiniteElements
int get_comm_rank() const
FiniteElement_multiIndex finiteElements
finite elements
const moab::Interface & get_moab() const
FieldEntity_multiIndex entsFields
entities on fields
Field_multiIndex fIelds
fields
EntFiniteElement_multiIndex entsFiniteElements
finite element entities
int & getBuildMoFEM() const
Get flags/semaphores for different stages.
PetscLogEvent MOFEM_EVENT_preProcess
Event for preProcess finite element.
int get_comm_size() const
DofEntity_multiIndex dofsField
dofs on fields
Tag th_Part
Tag for partition number.
static PetscBool isInitialized
petsc was initialised by other agent
int verbose
Verbosity level.
PetscBool initaliseAndBuildField
int sIze
MoFEM communicator size.
RefElement_multiIndex refinedFiniteElements
refined elements
int rAnk
MOFEM communicator rank.
Tag th_ElemType
Needed for VTK files.
RefEntity_multiIndex refinedEntities
refined entities
MeshsetsManager & get_meshsets_manager()
get MeshsetsManager pointer
ParallelComm * pComm
MOAB communicator structure.
PetscLogEvent MOFEM_EVENT_operator
Event for evaluating operator of finite element.
Tag get_th_RefBitLevel() const
BitProblemId getProblemShift()
Return unique problem Id.
moab::Interface & get_moab()
MPI_Comm mofemComm
MoFEM communicator.
std::string optionsPrefix
Prefix for options on command line.
int * buildMoFEM
keeps flags/semaphores for different stages
Tag get_th_RefParentHandle() const
const int getValue() const
Get the core.
bool check_problem(const std::string name)
check if problem exist
static int mpiInitialised
mpi was initialised by other agent
Tag th_ProblemGhostNbDofRow
PetscLogEvent MOFEM_EVENT_postProcess
Event for postProcess finite element.
boost::shared_ptr< BasicEntityData > basicEntityDataPtr
std::reference_wrapper< moab::Interface > moab
moab database
FieldEntityEntFiniteElementAdjacencyMap_multiIndex entFEAdjacencies
adjacencies of elements to dofs
Problem_multiIndex pRoblems
problems multi-index
Tag th_ProblemGhostNbDofCol
Tag get_th_RefBitEdge() const
MoFEMErrorCode setFieldOrder(const Range &ents, const BitFieldId id, const ApproximationOrder order, int ver)
boost::ptr_map< boost::typeindex::type_index, UnknownInterface > iFaces
Hash map of pointers to interfaces.
boost::shared_ptr< WrapMPIComm > wrapMPIMOABComm
manage creation and destruction of MOAB communicator
RefEntityTmp< 0 > getRefEntity(const EntityHandle ent)
MoFEMErrorCode set_moab_interface(moab::Interface &new_moab, int verb)
static constexpr const int value
const int getValue() const
virtual boost::shared_ptr< RefEntityTmp< 0 > > make_shared_ref_entity(const EntityHandle ent)
Deprecated interface functions.
Data structure to exchange data between mofem and User Loop Methods on entities.
Data structure to exchange data between mofem and User Loop Methods on entities.
structure for User Loop Methods on finite elements
Provide data structure for (tensor) field approximation.
Finite element definition.
Interface for managing meshsets containing materials and boundary conditions.
keeps basic data about problem
base class for all interface classes
Wrap MPI comminitactor such that is destroyed when is out of scope.