17 : comm(comm), isPetscComm(petsc) {
41constexpr const int CoreTmp<-1>::value;
47 if (type_index == boost::typeindex::type_id<CoreInterface>()) {
50 }
else if (type_index ==
51 boost::typeindex::type_id<DeprecatedCoreInterface>()) {
57 auto it = iFaces.find(type_index);
58 if (it != iFaces.end()) {
75 MPI_Initialized(&mpiInitialised);
79 PetscInitialized(&isInitialized);
80 if (isInitialized == PETSC_FALSE) {
81 PetscInitialize(argc, args, file,
help);
88 isGloballyInitialised =
true;
91 char petsc_version[255];
92 CHKERR PetscGetVersion(petsc_version, 255);
93 MOFEM_LOG_C(
"WORLD", Sev::inform,
"MoFEM version %d.%d.%d (%s %s)",
94 MoFEM_VERSION_MAJOR, MoFEM_VERSION_MINOR, MoFEM_VERSION_BUILD,
95 MOAB_VERSION_STRING, petsc_version);
96 MOFEM_LOG_C(
"WORLD", Sev::inform,
"git commit id %s", GIT_SHA1_NAME);
98 auto log_time = [&](
const auto perefix,
auto time) {
100 << perefix << time.date().year() <<
"-" << time.date().month() <<
"-"
101 << time.date().day() <<
" " << time.time_of_day().hours() <<
":"
102 << time.time_of_day().minutes() <<
":" << time.time_of_day().seconds();
106 log_time(
"Local time: ", boost::posix_time::second_clock::local_time());
107 log_time(
"UTC time: ", boost::posix_time::second_clock::universal_time());
113 if (isGloballyInitialised) {
114 PetscPopErrorHandler();
115 isGloballyInitialised =
false;
117 if (isInitialized == PETSC_FALSE) {
118 PetscBool is_finalized;
119 PetscFinalized(&is_finalized);
124 if (!mpiInitialised) {
126 MPI_Finalized(&mpi_finalized);
139 ->
decltype(ptr->getSubInterfaceOptions()) {
140 return ptr->getSubInterfaceOptions();
152 ->
decltype(ptr->getEventOptions()) {
153 return ptr->getEventptions();
168 CHKERR registerInterface<IFACE>(
true);
169 IFACE *ptr =
new IFACE(*
this);
174 auto get_sub_iface_options = [](
auto *
const ptr) {
177 CHKERR get_sub_iface_options(ptr);
179 auto type_idx = boost::typeindex::type_id<IFACE>();
180 iFaces.insert(type_idx, ptr);
186 auto ptr = boost::make_shared<IFACE>();
190 auto get_event_options = [](
auto *
const ptr) {
193 CHKERR get_event_options(ptr.get());
198 MPI_Comm comm,
const int verbose) {
202 if (!isGloballyInitialised)
204 "MoFEM globally is not initialised, call MoFEM::Core::Initialize");
207 wrapMPIMOABComm = boost::make_shared<WrapMPIComm>(comm,
false);
209 MPI_Comm_size(mofemComm, &sIze);
210 MPI_Comm_rank(mofemComm, &rAnk);
213 ParallelComm *pComm = ParallelComm::get_pcomm(&moab,
MYPCOMM_INDEX);
215 pComm =
new ParallelComm(&moab, wrapMPIMOABComm->get_comm());
218 CHKERR registerInterface<UnknownInterface>();
219 CHKERR registerInterface<CoreInterface>();
220 CHKERR registerInterface<DeprecatedCoreInterface>();
223 PetscLogEventRegister(
"FE_preProcess", 0, &MOFEM_EVENT_preProcess);
224 PetscLogEventRegister(
"FE_operator", 0, &MOFEM_EVENT_operator);
225 PetscLogEventRegister(
"FE_postProcess", 0, &MOFEM_EVENT_postProcess);
226 PetscLogEventRegister(
"MoFEMCreateMat", 0, &MOFEM_EVENT_createMat);
243 ierr = this->registerSubInterfaces();
244 CHKERRABORT(comm,
ierr);
245 ierr = this->clearMap();
246 CHKERRABORT(comm,
ierr);
247 ierr = this->getTags();
248 CHKERRABORT(comm,
ierr);
249 ierr = this->getOptions(verbose);
250 CHKERRABORT(comm,
ierr);
252 this->basicEntityDataPtr = boost::make_shared<BasicEntityData>(moab);
253 setRefEntBasicDataPtr(*
this, this->basicEntityDataPtr);
255 ierr = this->initialiseDatabaseFromMesh(verbose);
256 CHKERRABORT(comm,
ierr);
267 ierr = this->registerSubInterfaces();
268 CHKERRABORT(comm,
ierr);
269 ierr = this->clearMap();
270 CHKERRABORT(comm,
ierr);
271 ierr = this->getTags();
272 CHKERRABORT(comm,
ierr);
273 ierr = this->getOptions(verbose);
274 CHKERRABORT(comm,
ierr);
276 this->basicEntityDataPtr = boost::make_shared<BasicEntityData>(moab);
277 setRefEntBasicDataPtr(*
this, this->basicEntityDataPtr);
279 ierr = this->initialiseDatabaseFromMesh(verbose);
280 CHKERRABORT(comm,
ierr);
284 PetscBool is_finalized;
285 PetscFinalized(&is_finalized);
289 if (isGloballyInitialised && is_finalized) {
290 isGloballyInitialised =
false;
295 BOOST_LOG_SCOPED_THREAD_ATTR(
"Timeline", attrs::timer());
302 Range ref_elems_to_add;
304 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Get MoFEM meshsets";
307 CHKERR get_moab().get_entities_by_type(0, MBENTITYSET, meshsets,
false);
308 Range special_meshsets;
309 for (
auto mit : meshsets) {
312 CHKERR get_moab().tag_get_data(th_FieldId, &mit, 1, &field_id);
316 const void *tag_name;
318 CHKERR get_moab().tag_get_by_ptr(
319 th_FieldName, &mit, 1, (
const void **)&tag_name, &tag_name_size);
324 << boost::string_ref((
char *)tag_name, tag_name_size);
326 auto p = fIelds.insert(boost::make_shared<Field>(moab, mit));
332 CHKERR get_moab().get_entities_by_handle(mit, ents,
true);
333 CHKERR get_moab().add_entities((*p.first)->getMeshset(), ents);
334 CHKERR get_moab().delete_entities(&mit, 1);
336 special_meshsets.insert(mit);
342 CHKERR get_moab().tag_get_data(th_FEId, &mit, 1, &fe_id);
345 std::pair<FiniteElement_multiIndex::iterator, bool> p =
346 finiteElements.insert(
347 boost::shared_ptr<FiniteElement>(
new FiniteElement(moab, mit)));
349 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Read finite element " << **p.first;
352 CHKERR get_moab().get_entities_by_type(mit, MBENTITYSET, ents,
false);
353 CHKERR get_moab().get_entities_by_handle(mit, ents,
true);
354 ref_elems_to_add.merge(ents);
358 CHKERR get_moab().add_entities((*p.first)->getMeshset(), ents);
359 CHKERR get_moab().delete_entities(&mit, 1);
361 special_meshsets.insert(mit);
366 CHKERR get_moab().tag_get_data(th_ProblemId, &mit, 1, &problem_id);
368 if (problem_id != 0) {
369 std::pair<Problem_multiIndex::iterator, bool> p =
370 pRoblems.insert(
Problem(moab, mit));
372 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Read problem " << *p.first;
374 <<
"\tBitRef " << p.first->getBitRefLevel() <<
" BitMask "
375 << p.first->getBitRefLevelMask();
382 CHKERR get_moab().get_entities_by_handle(mit, ents,
true);
383 CHKERR get_moab().get_entities_by_type(mit, MBENTITYSET, ents,
true);
384 CHKERR get_moab().add_entities(p.first->meshset, ents);
385 CHKERR get_moab().delete_entities(&mit, 1);
387 special_meshsets.insert(mit);
391 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Get MoFEM meshsets <- done";
394 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Add entities to database";
396 CHKERR get_moab().get_entities_by_handle(0, bit_ref_ents,
false);
397 bit_ref_ents = subtract(bit_ref_ents, special_meshsets);
398 CHKERR getInterface<BitRefManager>()->filterEntitiesByRefLevel(
400 CHKERR getInterface<BitRefManager>()->setEntitiesBitRefLevel(bit_ref_ents);
401 CHKERR getInterface<BitRefManager>()->setElementsBitRefLevel(
403 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Add entities to database <- done";
406 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Add field to database";
407 for (
auto field : fIelds) {
408 if (field->getSpace() !=
NOSPACE) {
409 Range ents_of_id_meshset;
410 CHKERR get_moab().get_entities_by_handle(field->getMeshset(),
411 ents_of_id_meshset,
false);
412 CHKERR set_field_order(ents_of_id_meshset, field->getId(), -1, verb);
415 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Add field to database <- done";
417 if (initaliseAndBuildField || initaliseAndBuildFiniteElements) {
418 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Build fields elements";
419 CHKERR build_fields(verb);
420 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Build fields elements <- done";
421 if (initaliseAndBuildFiniteElements) {
422 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Build finite elements";
423 CHKERR build_finite_elements(verb);
424 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Build finite elements <- done";
430 list_finite_elements();
435 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise interfaces from mesh";
437 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise MeshsetManager";
438 CHKERR getInterface<MeshsetsManager>() -> initialiseDatabaseFromMesh(verb);
439 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise MeshsetManager <- done";
440 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise SeriesRecorder";
441 CHKERR getInterface<SeriesRecorder>() -> initialiseDatabaseFromMesh(verb);
442 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise SeriesRecorder <- done";
444 MOFEM_LOG(
"WORLD", Sev::verbose) <<
"Initialise interfaces from mesh <- done";
458 moab = std::ref(new_moab);
461 ParallelComm *pComm = ParallelComm::get_pcomm(&new_moab,
MYPCOMM_INDEX);
463 pComm =
new ParallelComm(&new_moab, wrapMPIMOABComm->get_comm());
470 basicEntityDataPtr = boost::make_shared<BasicEntityData>(moab);
471 setRefEntBasicDataPtr(*
this, this->basicEntityDataPtr);
474 CHKERR this->initialiseDatabaseFromMesh(verb);
485 CHKERR regSubInterface<LogManager>();
486 CHKERR regSubInterface<Simple>();
487 CHKERR regSubInterface<OperatorsTester>();
488 CHKERR regSubInterface<PipelineManager>();
489 CHKERR regSubInterface<ProblemsManager>();
490 CHKERR regSubInterface<MatrixManager>();
491 CHKERR regSubInterface<ISManager>();
492 CHKERR regSubInterface<VecManager>();
493 CHKERR regSubInterface<FieldBlas>();
494 CHKERR regSubInterface<BitRefManager>();
495 CHKERR regSubInterface<Tools>();
496 CHKERR regSubInterface<CommInterface>();
497 CHKERR regSubInterface<MeshsetsManager>();
498 CHKERR regSubInterface<NodeMergerInterface>();
499 CHKERR regSubInterface<PrismsFromSurfaceInterface>();
500 CHKERR regSubInterface<MeshRefinement>();
501 CHKERR regSubInterface<PrismInterface>();
502 CHKERR regSubInterface<CutMeshInterface>();
503 CHKERR regSubInterface<SeriesRecorder>();
505 CHKERR regSubInterface<TetGenInterface>();
508 CHKERR regSubInterface<MedInterface>();
510 CHKERR regSubInterface<FieldEvaluatorInterface>();
511 CHKERR regSubInterface<BcManager>();
514 CHKERR regEvents<SchurEvents>();
522 CHKERR getInterface<SeriesRecorder>()->clearMap();
523 CHKERR getInterface<MeshsetsManager>()->clearMap();
524 CHKERR getInterface<CutMeshInterface>()->clearMap();
526 refinedEntities.clear();
527 refinedFiniteElements.clear();
531 finiteElements.clear();
532 entsFiniteElements.clear();
533 entFEAdjacencies.clear();
542 std::pair<RefEntity_multiIndex::iterator, bool> p_ent;
543 p_ent = refinedEntities.insert(
544 boost::make_shared<RefEntity>(basicEntityDataPtr, prism));
546 std::pair<RefElement_multiIndex::iterator, bool> p;
547 p = refinedFiniteElements.insert(
551 CHKERR get_moab().get_connectivity(prism, conn, num_nodes,
true);
552 Range face_side3, face_side4;
553 CHKERR get_moab().get_adjacencies(conn, 3, 2,
false, face_side3);
554 CHKERR get_moab().get_adjacencies(&conn[3], 3, 2,
false, face_side4);
555 if (face_side3.size() != 1)
557 "prism don't have side face 3");
558 if (face_side4.size() != 1)
560 "prims don't have side face 4");
561 p.first->get()->getSideNumberPtr(*face_side3.begin());
562 p.first->get()->getSideNumberPtr(*face_side4.begin());
570 const EntityHandle root_meshset = get_moab().get_root_set();
573 "Root meshset should be 0");
579 CHKERR getFileVersion(moab, version);
585 auto check_tag_allocated = [](
auto &
rval) {
587 if (
rval == MB_ALREADY_ALLOCATED)
596 rval = get_moab().tag_get_handle(
"_MoFEMBuild", 1, MB_TYPE_INTEGER,
597 th_MoFEMBuild, MB_TAG_CREAT | MB_TAG_MESH,
601 CHKERR get_moab().tag_get_by_ptr(th_MoFEMBuild, &root_meshset, 1,
602 (
const void **)&buildMoFEM);
607 const int def_part = -1;
608 CHKERR get_moab().tag_get_handle(
"PARTITION", 1, MB_TYPE_INTEGER, th_Part,
609 MB_TAG_CREAT | MB_TAG_SPARSE, &def_part);
618 const int def_part = -1;
619 CHKERR get_moab().tag_get_handle(
"_MeshsetPartition", 1, MB_TYPE_INTEGER,
620 th_Part, MB_TAG_CREAT | MB_TAG_SPARSE,
623 CHKERR get_moab().tag_get_handle(
"_RefParentHandle", 1, MB_TYPE_HANDLE,
625 MB_TAG_CREAT | MB_TAG_SPARSE, &def_handle);
627 CHKERR get_moab().tag_get_handle(
628 "_RefBitLevel",
sizeof(
BitRefLevel), MB_TYPE_OPAQUE, th_RefBitLevel,
629 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_bit_level);
631 CHKERR get_moab().tag_get_handle(
632 "_RefBitLevelMask",
sizeof(
BitRefLevel), MB_TYPE_OPAQUE,
633 th_RefBitLevel_Mask, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
634 &def_bit_level_mask);
636 CHKERR get_moab().tag_get_handle(
637 "_RefBitEdge",
sizeof(
BitRefEdges), MB_TYPE_OPAQUE, th_RefBitEdge,
638 MB_TAG_CREAT | MB_TAG_SPARSE | MB_TAG_BYTES, &def_bit_edge);
643 const unsigned long int def_id = 0;
644 CHKERR get_moab().tag_get_handle(
645 "_FieldId",
sizeof(
BitFieldId), MB_TYPE_OPAQUE, th_FieldId,
646 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
648 CHKERR get_moab().tag_get_handle(
649 "_FieldSpace",
sizeof(
FieldSpace), MB_TYPE_OPAQUE, th_FieldSpace,
650 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_space);
652 CHKERR get_moab().tag_get_handle(
654 th_FieldContinuity, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
657 CHKERR get_moab().tag_get_handle(
659 th_FieldBase, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_base);
660 const int def_val_len = 0;
661 CHKERR get_moab().tag_get_handle(
662 "_FieldName", def_val_len, MB_TYPE_OPAQUE, th_FieldName,
663 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
664 CHKERR get_moab().tag_get_handle(
665 "_FieldName_DataNamePrefix", def_val_len, MB_TYPE_OPAQUE,
666 th_FieldName_DataNamePrefix,
667 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
672 const unsigned long int def_id = 0;
673 const int def_val_len = 0;
674 CHKERR get_moab().tag_get_handle(
675 "_FEId",
sizeof(
BitFEId), MB_TYPE_OPAQUE, th_FEId,
676 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
677 CHKERR get_moab().tag_get_handle(
678 "_FEName", def_val_len, MB_TYPE_OPAQUE, th_FEName,
679 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
680 CHKERR get_moab().tag_get_handle(
681 "_FEIdCol",
sizeof(
BitFieldId), MB_TYPE_OPAQUE, th_FEIdCol,
682 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
683 CHKERR get_moab().tag_get_handle(
684 "_FEIdRow",
sizeof(
BitFieldId), MB_TYPE_OPAQUE, th_FEIdRow,
685 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
686 CHKERR get_moab().tag_get_handle(
687 "_FEIdData",
sizeof(
BitFieldId), MB_TYPE_OPAQUE, th_FEIdData,
688 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
693 const unsigned long int def_id = 0;
694 const int def_val_len = 0;
695 CHKERR get_moab().tag_get_handle(
696 "_ProblemId",
sizeof(
BitProblemId), MB_TYPE_OPAQUE, th_ProblemId,
697 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
698 CHKERR get_moab().tag_get_handle(
699 "_ProblemFEId",
sizeof(
BitFEId), MB_TYPE_OPAQUE, th_ProblemFEId,
700 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE, &def_id);
701 CHKERR get_moab().tag_get_handle(
702 "_ProblemName", def_val_len, MB_TYPE_OPAQUE, th_ProblemName,
703 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
705 CHKERR get_moab().tag_get_handle(
706 "_ProblemNbDofsRow",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
707 th_ProblemNbDofsRow, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
709 CHKERR get_moab().tag_get_handle(
710 "_ProblemNbDofsCol",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
711 th_ProblemNbDofsCol, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
713 CHKERR get_moab().tag_get_handle(
714 "_ProblemLocalNbDofsRow",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
715 th_ProblemLocalNbDofRow, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
717 CHKERR get_moab().tag_get_handle(
718 "_ProblemGhostNbDofsRow",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
719 th_ProblemGhostNbDofRow, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
721 CHKERR get_moab().tag_get_handle(
722 "_ProblemLocalNbDofsCol",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
723 th_ProblemLocalNbDofCol, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
725 CHKERR get_moab().tag_get_handle(
726 "_ProblemGhostNbDofsCol",
sizeof(
DofIdx), MB_TYPE_OPAQUE,
727 th_ProblemGhostNbDofCol, MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_SPARSE,
733 CHKERR getInterface(meshsets_manager_ptr);
738 CHKERR getInterface(series_recorder_ptr);
757 CHKERR this->getTags(verb);
758 CHKERR this->initialiseDatabaseFromMesh(verb);
763 return this->setMoabInterface(new_moab, verb);
768 return this->setMoabInterface(new_moab, verb);
776 PetscOptionsBegin(mofemComm, optionsPrefix.c_str(),
"Mesh cut options",
777 "See MoFEM documentation");
780 "-mofem_init_fields",
"Initialise fields on construction",
"",
781 initaliseAndBuildField, &initaliseAndBuildField, NULL);
784 "-mofem_init_fields",
"Initialise fields on construction",
"",
785 initaliseAndBuildFiniteElements, &initaliseAndBuildFiniteElements, NULL);
799 *fields_ptr = &fIelds;
806 *refined_entities_ptr = &refinedEntities;
812 *refined_finite_elements_ptr = &refinedFiniteElements;
817 const Problem **problem_ptr)
const {
819 typedef Problem_multiIndex::index<Problem_mi_tag>::type ProblemsByName;
821 ProblemsByName::iterator p_miit = problems.find(problem_name);
822 if (p_miit == problems.end()) {
824 "problem < %s > not found, (top tip: check spelling)",
825 problem_name.c_str());
827 *problem_ptr = &*p_miit;
834 *problems_ptr = &pRoblems;
841 *field_ents = &entsFields;
846 *dofs_ptr = &dofsField;
853 *fe_ptr = &finiteElements;
860 *fe_ent_ptr = &entsFiniteElements;
866 getInterface(meshsets_manager_ptr);
867 return meshsets_manager_ptr;
872 getInterface(meshsets_manager_ptr);
873 return meshsets_manager_ptr;
878 *dofs_elements_adjacency)
const {
880 *dofs_elements_adjacency = &entFEAdjacencies;
886 return &entFEAdjacencies;
891 return &refinedEntities;
894 return &refinedFiniteElements;
897 return &finiteElements;
900 return &entsFiniteElements;
909 "Problem of given name not found");
914template <
int V,
typename std::enable_if<(V >= 0),
int>::type * =
nullptr>
919template <
int V,
typename std::enable_if<(V < 0),
int>::type * =
nullptr>
920void set_ref_ent_basic_data_ptr_impl(boost::shared_ptr<BasicEntityData> &ptr) {
924void Core::setRefEntBasicDataPtr(MoFEM::Interface &m_field,
925 boost::shared_ptr<BasicEntityData> &ptr) {
927 switch (m_field.getValue()) {
929 set_ref_ent_basic_data_ptr_impl<-1>(ptr);
932 set_ref_ent_basic_data_ptr_impl<0>(ptr);
935 set_ref_ent_basic_data_ptr_impl<1>(ptr);
938 THROW_MESSAGE("Core index can vary from -1 to MAX_CORE_TMP");
942boost::shared_ptr<RefEntityTmp<0>>
943Core::makeSharedRefEntity(MoFEM::Interface &m_field, const EntityHandle ent) {
945 boost::shared_ptr<RefEntityTmp<0>> ref_ent_ptr;
947 switch (m_field.getValue()) {
949 ref_ent_ptr = boost::shared_ptr<RefEntityTmp<0>>(
951 new RefEntityTmp<-1>(m_field.get_basic_entity_data_ptr(), ent)
956 ref_ent_ptr = boost::shared_ptr<RefEntityTmp<0>>(
958 new RefEntityTmp<0>(m_field.get_basic_entity_data_ptr(), ent)
963 ref_ent_ptr = boost::shared_ptr<RefEntityTmp<0>>(
965 new RefEntityTmp<1>(m_field.get_basic_entity_data_ptr(), ent)
970 THROW_MESSAGE("Core index can vary from -1 to MAX_CORE_TMP");
976boost::shared_ptr<RefEntityTmp<0>>
977Core::make_shared_ref_entity(const EntityHandle ent) {
978 return this->makeSharedRefEntity(*
this, ent);
981boost::shared_ptr<RefEntityTmp<0>>
983 return this->makeSharedRefEntity(*
this, ent);
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.
void macro_is_deprecated_using_deprecated_function()
Is used to indicate that macro is deprecated Do nothing just triggers error at the compilation.
static PetscErrorCode mofem_error_handler(MPI_Comm comm, int line, const char *fun, const char *file, PetscErrorCode n, PetscErrorType p, const char *mess, void *ctx)
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.
#define MOFEM_LOG_C(channel, severity, format,...)
FieldApproximationBase
approximation base
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FieldSpace
approximation spaces
@ LASTSPACE
FieldSpace in [ 0, LASTSPACE )
#define MYPCOMM_INDEX
default communicator number PCOMM
FieldContinuity
Field continuity.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
@ MOFEM_OPERATION_UNSUCCESSFUL
@ MOFEM_DATA_INCONSISTENCY
#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 ...
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
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.
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.
#define MOFEM_LOG(channel, severity)
Log.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
std::bitset< BITFEID_SIZE > BitFEId
Finite element Id.
std::bitset< BITPROBLEMID_SIZE > BitProblemId
Problem Id.
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
std::bitset< BITREFEDGES_SIZE > BitRefEdges
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
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
static auto get_sub_iface_options_imp(T *const ptr, int) -> decltype(ptr->getSubInterfaceOptions())
void set_ref_ent_basic_data_ptr_impl(boost::shared_ptr< BasicEntityData > &ptr)
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
static auto get_event_options_imp(T *const ptr, int) -> decltype(ptr->getEventOptions())
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
static MoFEMErrorCode fixTagSize(moab::Interface &moab, bool *changed=nullptr)
Fix tag size when BITREFLEVEL_SIZE of core library is different than file BITREFLEVEL_SIZE.
MoFEMErrorCode clearMap()
Cleaning database.
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
Getting interface of core database.
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
MoFEMErrorCode regSubInterface()
Register sub-interfaces in core interface.
static bool isGloballyInitialised
Core base globally initialized.
const RefElement_multiIndex * get_ref_finite_elements() const
Get the ref finite elements object.
const FieldEntity_multiIndex * get_field_ents() const
Get the field ents object.
MoFEMErrorCode initialiseDatabaseFromMesh(int verb=DEFAULT_VERBOSITY)
Initialize database getting information on mesh.
MoFEMErrorCode registerSubInterfaces()
Register insterfaces.
const Field_multiIndex * get_fields() const
Get the fields object.
const Problem_multiIndex * get_problems() const
Get the problems object.
MoFEMErrorCode coreGenericConstructor(moab::Interface &moab, MPI_Comm comm, const int verbose)
const DofEntity_multiIndex * get_dofs() const
Get the dofs object.
MoFEMErrorCode getOptions(int verb=DEFAULT_VERBOSITY)
Get core options from command line.
static PetscBool isInitialized
petsc was initialised by other agent
const RefEntity_multiIndex * get_ref_ents() const
Get the ref ents object.
const FieldEntityEntFiniteElementAdjacencyMap_multiIndex * get_ents_elements_adjacency() const
Get the dofs elements adjacency object.
const EntFiniteElement_multiIndex * get_ents_finite_elements() const
Get the ents finite elements object.
const FiniteElement_multiIndex * get_finite_elements() const
Get the finite elements object.
MoFEMErrorCode addPrismToDatabase(const EntityHandle prism, int verb=DEFAULT_VERBOSITY)
add prim element
MoFEMErrorCode regEvents()
Register petsc events.
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.
MoFEMErrorCode set_moab_interface(moab::Interface &new_moab, int verb=VERBOSE)
Set the moab interface object.
MoFEMErrorCode setMoabInterface(moab::Interface &new_moab, int verb=VERBOSE)
MoFEMErrorCode get_problem(const std::string &problem_name, const Problem **problem_ptr) const
Get problem database (data structure)
MoFEMErrorCode getTags(int verb=DEFAULT_VERBOSITY)
Get tag handles.
CoreTmp(moab::Interface &moab, MPI_Comm comm=PETSC_COMM_WORLD, const int verbose=VERBOSE)
static int mpiInitialised
mpi was initialised by other agent
MeshsetsManager * get_meshsets_manager_ptr()
get MeshsetsManager pointer
MoFEMErrorCode rebuild_database(int verb=DEFAULT_VERBOSITY)
Clear database and initialize it once again.
MoFEMErrorCode clear_database(int verb=DEFAULT_VERBOSITY)
Clear database.
MoFEMErrorCode set_moab_interface(moab::Interface &new_moab, int verb)
CoreTmp(moab::Interface &moab, MPI_Comm comm=PETSC_COMM_WORLD, const int verbose=VERBOSE)
Deprecated interface functions.
Finite element definition.
static MoFEMErrorCode getOptions()
Get logger option.
static void createDefaultSinks(MPI_Comm comm)
Create default sinks.
static PetscErrorCode logPetscFPrintf(FILE *fd, const char format[], va_list Argp)
Use to handle PETSc output.
Interface for managing meshsets containing materials and boundary conditions.
MoFEMErrorCode getTags(int verb=-1)
get tags handlers used on meshsets
keeps basic data about problem
keeps data about abstract PRISM finite element
MoFEMErrorCode getTags(int verb=-1)
get tags handlers used on meshsets
base class for all interface classes
WrapMPIComm(MPI_Comm comm, bool petsc)