30 rval = moab.tag_get_handle(
"_ProblemId", th_ProblemId);
32 rval = moab.tag_get_by_ptr(th_ProblemId, &
meshset, 1, (
const void **)&
tagId);
35 rval = moab.tag_get_handle(
"_ProblemName", th_ProblemName);
37 rval = moab.tag_get_by_ptr(th_ProblemName, &
meshset, 1,
41 rval = moab.tag_get_handle(
"_ProblemFEId", th_ProblemFEId);
43 rval = moab.tag_get_by_ptr(th_ProblemFEId, &
meshset, 1,
47 rval = moab.tag_get_handle(
"_RefBitLevel", th_RefBitLevel);
49 rval = moab.tag_get_by_ptr(th_RefBitLevel, &
meshset, 1,
52 Tag th_RefBitLevel_Mask;
53 rval = moab.tag_get_handle(
"_RefBitLevelMask", th_RefBitLevel_Mask);
55 rval = moab.tag_get_by_ptr(th_RefBitLevel_Mask, &
meshset, 1,
61 os <<
"problem id " << e.
getId() <<
" FiniteElement id " << e.
getBitFEId()
68 boost::weak_ptr<NumeredDofEntity>
71 boost::weak_ptr<NumeredDofEntity> dof_weak_ptr;
72 NumeredDofEntity_multiIndex::index<PetscGlobalIdx_mi_tag>::type::iterator dit;
79 boost::weak_ptr<NumeredDofEntity>
82 boost::weak_ptr<NumeredDofEntity> dof_weak_ptr;
83 NumeredDofEntity_multiIndex::index<PetscGlobalIdx_mi_tag>::type::iterator dit;
94 if (
auto shared_dof_ptr = weak_dof_ptr.lock()) {
95 *dof_ptr = shared_dof_ptr.get();
98 SETERRQ1(PETSC_COMM_SELF,
MOFEM_NOT_FOUND,
"row dof <%d> not found", idx);
108 if (
auto shared_dof_ptr = weak_dof_ptr.lock()) {
109 *dof_ptr = shared_dof_ptr.get();
112 SETERRQ1(PETSC_COMM_SELF,
MOFEM_NOT_FOUND,
"row dof <%d> not found", idx);
120 PetscLayout *layout)
const {
123 MPI_Comm_size(comm, &size);
124 MPI_Comm_rank(comm, &rank);
125 CHKERR PetscLayoutCreate(comm, layout);
126 CHKERR PetscLayoutSetBlockSize(*layout, 1);
130 nb_elems = fe_by_name_and_part.count(boost::make_tuple(name, rank));
131 CHKERR PetscLayoutSetLocalSize(*layout, nb_elems);
132 CHKERR PetscLayoutSetUp(*layout);
137 PetscLayout *layout)
const {
140 MPI_Comm_size(comm, &size);
141 MPI_Comm_rank(comm, &rank);
142 CHKERR PetscLayoutCreate(comm, layout);
143 CHKERR PetscLayoutSetBlockSize(*layout, 1);
147 nb_elems = fe_by_part.count(rank);
148 CHKERR PetscLayoutSetLocalSize(*layout, nb_elems);
149 CHKERR PetscLayoutSetUp(*layout);
154 const int field_bit_number,
const EntityHandle ent,
const int ent_dof_idx,
156 boost::shared_ptr<NumeredDofEntity> &dof_ptr)
const {
159 switch (row_or_col) {
163 "Row numbered index in problem not allocated");
170 "Col numbered index in problem not allocated");
176 "Only ROW and COL is possible for 3rd argument");
186 dof_ptr = boost::shared_ptr<NumeredDofEntity>();
192 *(
p.tagBitFEId) |=
f_id;
195 *(
p.tagBitFEId) &= ~
f_id;
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MOAB_THROW(a)
Check error code of MoAB function and throw MoFEM exception.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
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< NumeredEntFiniteElement >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_EntFiniteElement, UId, &NumeredEntFiniteElement::getLocalUniqueId > >, ordered_non_unique< tag< Part_mi_tag >, member< NumeredEntFiniteElement, unsigned int, &NumeredEntFiniteElement::part > >, ordered_non_unique< tag< FiniteElement_name_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_RefEntity, EntityHandle, &NumeredEntFiniteElement::getEnt > >, ordered_non_unique< tag< Composite_Name_And_Ent_mi_tag >, composite_key< NumeredEntFiniteElement, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef >, const_mem_fun< NumeredEntFiniteElement::interface_type_RefEntity, EntityHandle, &NumeredEntFiniteElement::getEnt > > >, ordered_non_unique< tag< Composite_Name_And_Part_mi_tag >, composite_key< NumeredEntFiniteElement, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef >, member< NumeredEntFiniteElement, unsigned int, &NumeredEntFiniteElement::part > > > > > NumeredEntFiniteElement_multiIndex
MultiIndex for entities for NumeredEntFiniteElement.
NumeredEntFiniteElement_multiIndex::index< Composite_Name_And_Part_mi_tag >::type NumeredEntFiniteElementbyNameAndPart
Entity finite element multi-index by finite element name and partition.
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
std::bitset< BITFEID_SIZE > BitFEId
Finite element Id.
implementation of Data Operators for Forces and Sources
DeprecatedCoreInterface Interface
std::ostream & operator<<(std::ostream &os, const DataForcesAndSourcesCore::EntData &e)
static UId getUniqueIdCalculate(const DofIdx dof, UId ent_uid)
UId getLocalUniqueIdCalculate()
Get the Local Unique Id Calculate object.
keeps information about indexed dofs for the problem
void operator()(Problem &e)
void operator()(Problem &p)
void operator()(Problem &p)
keeps basic data about problem
MoFEMErrorCode getNumberOfElementsByPart(MPI_Comm comm, PetscLayout *layout) const
Get number of finite elements on processors.
std::string getName() const
MoFEMErrorCode getNumberOfElementsByNameAndPart(MPI_Comm comm, const std::string name, PetscLayout *layout) const
Get number of finite elements by name on processors.
const char * tagName
Problem name.
BitProblemId * tagId
Unique problem ID.
MoFEMErrorCode getDofByNameEntAndEntDofIdx(const int field_bit_number, const EntityHandle ent, const int ent_dof_idx, const RowColData row_or_col, boost::shared_ptr< NumeredDofEntity > &dof_ptr) const
get DOFs from problem
BitRefLevel * tagMaskBitRefLevel
BItRefMask of elements in problem.
DofIdx nbGhostDofsCol
Number of ghost DOFs in col.
boost::shared_ptr< NumeredDofEntity_multiIndex > numeredRowDofsPtr
store DOFs on rows for this problem
boost::shared_ptr< NumeredEntFiniteElement_multiIndex > numeredFiniteElementsPtr
store finite elements
Problem(Interface &moab, const EntityHandle meshset)
MoFEMErrorCode getRowDofsByPetscGlobalDofIdx(DofIdx idx, const NumeredDofEntity **dof_ptr, MoFEMTypes bh=MF_EXIST) const
Get the Row Dofs By Petsc Global Dof Idx object.
DofIdx nbLocDofsRow
Local number of DOFs in row.
BitFEId getBitFEId() const
BitProblemId getId() const
DofIdx nbDofsCol
Global number of DOFs in col.
DofIdx nbGhostDofsRow
Number of ghost DOFs in row.
DofIdx nbLocDofsCol
Local number of DOFs in colIs.
int tagNameSize
Size of problem name.
MoFEMErrorCode getColDofsByPetscGlobalDofIdx(DofIdx idx, const NumeredDofEntity **dof_ptr, MoFEMTypes bh=MF_EXIST) const
Get the Col Dofs By Petsc Global Dof Idx object.
BitFEId * tagBitFEId
IDs of finite elements in problem.
DofIdx nbDofsRow
Global number of DOFs in row.
multi_index_container< boost::weak_ptr< std::vector< NumeredDofEntity > >, indexed_by< sequenced<> > > SequenceDofContainer
boost::shared_ptr< NumeredDofEntity_multiIndex > numeredColDofsPtr
store DOFs on columns for this problem
BitRefLevel * tagBitRefLevel
BitRef level of finite elements in problem.
void operator()(Problem &e)
void operator()(Problem &e)