39 static constexpr const int value =
N;
51 MPI_Comm comm = PETSC_COMM_WORLD,
91 virtual boost::shared_ptr<RefEntityTmp<0>>
98 MPI_Comm comm = PETSC_COMM_WORLD,
149 static MoFEMErrorCode Initialize(
int *argc,
char ***args,
const char file[],
154 static const std::string &getPetscOptionsFile();
176 boost::shared_ptr<BasicEntityData> &ptr);
178 static boost::shared_ptr<RefEntityTmp<0>>
193 MoFEMErrorCode query_interface(boost::typeindex::type_index type_index,
217 BUILD_FIELD = 1 << 0,
220 BUILD_PROBLEM = 1 << 3,
221 PARTITION_PROBLEM = 1 << 4,
222 PARTITION_FE = 1 << 5,
223 PARTITION_GHOST_DOFS = 1 << 6,
224 PARTITION_MESH = 1 << 7
255 MoFEMErrorCode coreGenericConstructor(moab::Interface &moab, MPI_Comm comm,
296 return basicEntityDataPtr;
326 std::reference_wrapper<moab::Interface>
moab;
327 inline moab::Interface &
get_moab() {
return moab; }
328 inline const moab::Interface &
get_moab()
const {
return moab; }
343 check_number_of_ents_in_ents_field(
const std::string &name)
const;
346 check_number_of_ents_in_ents_finite_element(
const std::string &name)
const;
347 MoFEMErrorCode check_number_of_ents_in_ents_finite_element()
const;
367 return *get_meshsets_manager_ptr();
370 return *get_meshsets_manager_ptr();
396 const bool remove_parent =
false,
432 const std::string name,
const FieldSpace space,
438 std::pair<EntityType,
444 const TagType tag_type = MB_TAG_SPARSE,
474 add_field(
const std::string name,
const FieldSpace space,
477 const TagType tag_type = MB_TAG_SPARSE,
508 const TagType tag_type,
const enum MoFEMTypes bh,
512 const std::string &name,
515 const std::string &name,
518 const EntityType
type,
519 const std::string &name,
523 const std::string &name,
524 const bool recursive =
true,
527 const EntityType
type,
528 const std::string &name,
529 const bool recursive =
true,
532 MoFEMErrorCode create_vertices_and_add_to_field(
const std::string name,
533 const double coords[],
542 MoFEMErrorCode setFieldOrderImpl(boost::shared_ptr<Field> field_ptr,
558 const EntityType
type,
const std::string &name,
573 buildFieldForNoFieldImpl(boost::shared_ptr<Field> field_ptr,
574 std::map<EntityType, int> &dof_counter,
int verb);
577 std::map<EntityType, int> &dof_counter,
581 buildFieldForL2H1HcurlHdiv(
const BitFieldId id,
582 std::map<EntityType, int> &dof_counter,
583 std::map<EntityType, int> &inactive_dof_counter,
621 const EntityType
type,
631 MoFEMErrorCode list_dofs_by_field_name(
const std::string &name)
const;
633 BitFieldId get_field_id(
const std::string &name)
const;
634 FieldBitNumber get_field_bit_number(
const std::string name)
const;
635 std::string get_field_name(
const BitFieldId id)
const;
637 EntityHandle get_field_meshset(
const std::string name)
const;
638 MoFEMErrorCode get_field_entities_by_dimension(
const std::string name,
639 int dim,
Range &ents)
const;
642 MoFEMErrorCode get_field_entities_by_handle(
const std::string name,
644 bool check_field(
const std::string &name)
const;
646 const Field *get_field_structure(
const std::string &name,
656 get_finite_element_structure(
const std::string &name,
659 bool check_finite_element(
const std::string &name)
const;
665 modify_finite_element_adjacency_table(
const std::string &fe_name,
666 const EntityType
type,
669 modify_finite_element_add_field_data(
const std::string &fe_name,
670 const std::string name_filed);
672 modify_finite_element_add_field_row(
const std::string &fe_name,
673 const std::string name_row);
675 modify_finite_element_add_field_col(
const std::string &fe_name,
676 const std::string name_col);
678 modify_finite_element_off_field_data(
const std::string &fe_name,
679 const std::string name_filed);
681 modify_finite_element_off_field_row(
const std::string &fe_name,
682 const std::string name_row);
684 modify_finite_element_off_field_col(
const std::string &fe_name,
685 const std::string name_col);
688 const std::string name,
const bool recursive =
true);
691 const std::string name,
692 const bool recursive =
true);
694 const EntityType
type,
695 const std::string name);
698 const std::string name);
703 add_ents_to_finite_element_by_MESHSET(
const EntityHandle meshset,
704 const std::string &name,
705 const bool recursive =
false);
717 MoFEMErrorCode remove_ents_from_finite_element(
const std::string name,
719 const EntityType
type,
721 MoFEMErrorCode remove_ents_from_finite_element(
const std::string name,
736 BitFEId getBitFEId(
const std::string &fe_name)
const;
743 std::string getBitFEIdName(
const BitFEId id)
const;
746 EntityHandle get_finite_element_meshset(
const std::string name)
const;
748 get_finite_element_entities_by_dimension(
const std::string name,
int dim,
750 MoFEMErrorCode get_finite_element_entities_by_type(
const std::string name,
753 MoFEMErrorCode get_finite_element_entities_by_handle(
const std::string name,
769 modify_problem_add_finite_element(
const std::string name_problem,
770 const std::string &fe_name);
772 modify_problem_unset_finite_element(
const std::string name_problem,
773 const std::string &fe_name);
775 modify_problem_ref_level_add_bit(
const std::string &name_problem,
778 modify_problem_ref_level_set_bit(
const std::string &name_problem,
781 modify_problem_mask_ref_level_add_bit(
const std::string &name_problem,
784 modify_problem_mask_ref_level_set_bit(
const std::string &name_problem,
786 BitProblemId getBitProblemId(
const std::string &name)
const;
795 const Range *
const ents_ptr =
nullptr,
797 MoFEMErrorCode buildFiniteElements(
const boost::shared_ptr<FiniteElement> &fe,
798 const Range *ents_ptr = NULL,
810 get_problem_finite_elements_entities(
const std::string name,
811 const std::string &fe_name,
846 clear_adjacencies_finite_elements(
const Range ents,
849 clear_adjacencies_finite_elements(
const std::string name,
const Range ents,
862 problem_basic_method_preProcess(
const std::string &problem_name,
869 problem_basic_method_postProcess(
const std::string &problem_name,
880 const Problem *problem_ptr,
const std::string &fe_name,
FEMethod &method,
881 int lower_rank,
int upper_rank,
882 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
888 const std::string problem_name,
const std::string &fe_name,
889 FEMethod &method,
int lower_rank,
int upper_rank,
890 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
896 const std::string problem_name,
const std::string &fe_name,
898 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr =
nullptr,
905 DofMethod &method,
int lower_rank,
int upper_rank,
909 DofMethod &method,
int lower_rank,
int upper_rank,
930 Range const *
const ents =
nullptr,
952 const Problem **problem_ptr)
const;
956 *dofs_elements_adjacency)
const;
965 const Problem *get_problem(
const std::string problem_name)
const;
968 get_ents_elements_adjacency()
const;
970 FieldEntityByUId::iterator
971 get_ent_field_by_name_begin(
const std::string &
field_name)
const;
972 FieldEntityByUId::iterator
973 get_ent_field_by_name_end(
const std::string &
field_name)
const;
974 DofEntityByUId::iterator
975 get_dofs_by_name_begin(
const std::string &
field_name)
const;
976 DofEntityByUId::iterator
977 get_dofs_by_name_end(
const std::string &
field_name)
const;
978 DofEntityByUId::iterator
979 get_dofs_by_name_and_ent_begin(
const std::string &
field_name,
981 DofEntityByUId::iterator
982 get_dofs_by_name_and_ent_end(
const std::string &
field_name,
984 DofEntityByUId::iterator
985 get_dofs_by_name_and_type_begin(
const std::string &
field_name,
986 const EntityType
type)
const;
987 DofEntityByUId::iterator
988 get_dofs_by_name_and_type_end(
const std::string &
field_name,
989 const EntityType ent)
const;
991 EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
992 get_fe_by_name_begin(
const std::string &fe_name)
const;
993 EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
994 get_fe_by_name_end(
const std::string &fe_name)
const;
1026 inline MPI_Comm &
get_comm()
const {
return mofemComm; }
1041 boost::shared_ptr<WrapMPIComm>
1049 mutable boost::ptr_map<boost::typeindex::type_index, UnknownInterface>
iFaces;
1061 inline static bool isGloballyInitialised =
false;
1062 inline static int mpiInitialised = 0;
1063 inline static PetscBool isInitialized = PETSC_FALSE;
1064 inline static std::string petscOptionsFile =
"";
1138 virtual boost::shared_ptr<RefEntityTmp<0>>
1144 CoreTmp(moab::Interface &moab,
1145 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
Multi-index container for field storage and retrieval.
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
FieldApproximationBase
approximation base
FieldSpace
approximation spaces
FieldContinuity
Field continuity.
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< 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
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
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
multi_index_container< DofsSideMapData, indexed_by< ordered_non_unique< tag< TypeSide_mi_tag >, composite_key< DofsSideMapData, member< DofsSideMapData, EntityType, &DofsSideMapData::type >, member< DofsSideMapData, int, &DofsSideMapData::side > > >, ordered_unique< tag< EntDofIdx_mi_tag >, member< DofsSideMapData, int, &DofsSideMapData::dof > > > > DofsSideMap
Map entity stype and side to element/entity dof index.
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 reference
virtual MoFEMErrorCode add_broken_field(const std::string name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_coefficients, std::vector< std::pair< EntityType, std::function< MoFEMErrorCode(BaseFunction::DofsSideMap &)> > > list_dof_side_map, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)
Add field.
MPI_Comm & get_comm() const
PetscLogEvent MOFEM_EVENT_createMat
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.
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 reference
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
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 for user loop methods on degrees of freedom (DOFs)
Data structure for user loop methods on entities.
Structure for user loop methods on finite elements.
Field data structure for finite element 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 communicator such that is destroyed when is out of scope.