v0.14.0
Loading...
Searching...
No Matches
MeshsetsManager

Interface for meshsets with entities with data and boundary conditions. More...

Collaboration diagram for MeshsetsManager:

Files

file  MeshsetsManager.hpp
 MeshsetsManager interface.
 

Classes

struct  MoFEM::MeshsetsManager
 Interface for managing meshsets containing materials and boundary conditions. More...
 

Macros

#define _IT_CUBITMESHSETS_FOR_LOOP_(MESHSET_MANAGER, IT)
 Iterator that loops over all the Cubit MeshSets in a moFEM field.
 
#define _IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
 Iterator that loops over a specific Cubit MeshSet in a moFEM field.
 
#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
 Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.
 
#define _IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_(MESHSET_MANAGER, NAME, IT)
 Iterator that loops over Cubit BlockSet having a particular name.
 

Functions

CubitMeshSet_multiIndex::iterator MoFEM::MeshsetsManager::getBegin () const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshSet_multiIndex::iterator MoFEM::MeshsetsManager::getEnd () const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByType::iterator MoFEM::MeshsetsManager::getBegin (const unsigned int cubit_bc_type) const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByType::iterator MoFEM::MeshsetsManager::getEnd (const unsigned int cubit_bc_type) const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByMask::iterator MoFEM::MeshsetsManager::getBySetTypeBegin (const unsigned int cubit_bc_type) const
 get end iterator of cubit meshset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByMask::iterator MoFEM::MeshsetsManager::getBySetTypeEnd (const unsigned int cubit_bc_type) const
 get end iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByName::iterator MoFEM::MeshsetsManager::getBegin (const std::string &name) const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
CubitMeshsetByName::iterator MoFEM::MeshsetsManager::getEnd (const std::string &name) const
 get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)
 
bool MoFEM::MeshsetsManager::checkMeshset (const int ms_id, const CubitBCType cubit_bc_type) const
 check for CUBIT Id and CUBIT type
 
MoFEMErrorCode MoFEM::MeshsetsManager::addMeshset (const CubitBCType cubit_bc_type, const int ms_id, const std::string name="")
 add cubit meshset
 
MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr (const int ms_id, const CubitBCType cubit_bc_type, const CubitMeshSets **cubit_meshset_ptr) const
 get cubit meshset
 
const CubitMeshSetsMoFEM::MeshsetsManager::getCubitMeshsetPtr (const int ms_id, const CubitBCType cubit_bc_type) const
 get cubit meshset
 
MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr (const CubitBCType cubit_bc_type, std::vector< const CubitMeshSets * > &vec_ptr) const
 Get vector of pointer by bc type.
 
std::vector< const CubitMeshSets * > MoFEM::MeshsetsManager::getCubitMeshsetPtr (const CubitBCType cubit_bc_type) const
 Get vector of pointer by bc type.
 
MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr (const string name, const CubitMeshSets **cubit_meshset_ptr) const
 get cubit meshset
 
MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr (const std::regex reg_exp_name, std::vector< const CubitMeshSets * > &vec_ptr) const
 Get vector of pointer to blocksets with name satisfying regular expression.
 
std::vector< const CubitMeshSets * > MoFEM::MeshsetsManager::getCubitMeshsetPtr (const std::regex reg_exp_name) const
 Get vector of pointer to blocksets with name satisfying regular expression.
 
MoFEMErrorCode MoFEM::MeshsetsManager::getEntitiesByDimension (const int ms_id, const unsigned int cubit_bc_type, const int dimension, Range &entities, const bool recursive=true) const
 get entities from CUBIT/meshset of a particular entity dimension
 
MoFEMErrorCode MoFEM::MeshsetsManager::getEntitiesByDimension (const int ms_id, const unsigned int cubit_bc_type, Range &entities, const bool recursive=true) const
 get entities related to CUBIT/meshset,
 
MoFEMErrorCode MoFEM::MeshsetsManager::getMeshset (const int ms_id, const unsigned int cubit_bc_type, EntityHandle &meshset) const
 get meshset from CUBIT Id and CUBIT type
 
MoFEMErrorCode MoFEM::MeshsetsManager::getMeshsetsByType (const unsigned int cubit_bc_type, Range &meshsets) const
 get all CUBIT meshsets by CUBIT type
 

Detailed Description

Interface for meshsets with entities with data and boundary conditions.

Macro Definition Documentation

◆ _IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP_

#define _IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP_ ( MESHSET_MANAGER,
CUBITBCTYPE,
IT )
Value:
CubitMeshsetByType::iterator IT = \
MESHSET_MANAGER.get_meshsets_manager_ptr()->getBegin(CUBITBCTYPE); \
IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getEnd(CUBITBCTYPE); \
IT++
constexpr IntegrationType IT

Iterator that loops over a specific Cubit MeshSet in a moFEM field.

Parameters
mFieldmoFEM Field
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
iterator
Examples
ElasticityMixedFormulation.hpp, HookeElement.cpp, add_cubit_meshsets.cpp, bone_adaptation.cpp, elasticity.cpp, field_blas.cpp, nonlinear_dynamics.cpp, and simple_elasticity.cpp.

Definition at line 49 of file MeshsetsManager.hpp.

◆ _IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_

#define _IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_ ( MESHSET_MANAGER,
NAME,
IT )
Value:
CubitMeshsetByName::iterator IT = \
MESHSET_MANAGER.get_meshsets_manager_ptr()->getBegin(NAME); \
IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getEnd(NAME); \
IT++

Iterator that loops over Cubit BlockSet having a particular name.

Parameters
MESHSET_MANAGERmeshset manager (works as well with Interface)
NAMEname
ITiterator

Example:

for(_IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(mField,"SOME_BLOCK_NAME",it) {
...
}
#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.

Definition at line 94 of file MeshsetsManager.hpp.

94#define _IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_(MESHSET_MANAGER, NAME, IT) \
95 CubitMeshsetByName::iterator IT = \
96 MESHSET_MANAGER.get_meshsets_manager_ptr()->getBegin(NAME); \
97 IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getEnd(NAME); \
98 IT++

◆ _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_

#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_ ( MESHSET_MANAGER,
CUBITBCTYPE,
IT )
Value:
CubitMeshsetByMask::iterator IT = \
MESHSET_MANAGER.get_meshsets_manager_ptr()->getBySetTypeBegin( \
CUBITBCTYPE); \
IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getBySetTypeEnd( \
CUBITBCTYPE); \
IT++

Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.

Parameters
MESHSET_MANAGERmeshset manager (works as well with Interface)
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
iterator

Example:

Examples
Electrostatics.cpp, MagneticElement.hpp, Remodeling.cpp, UnsaturatedFlow.hpp, add_cubit_meshsets.cpp, cell_forces.cpp, continuity_check_on_contact_prism_side_ele.cpp, cubit_bc_test.cpp, elasticity.cpp, forces_and_sources_testing_flat_prism_element.cpp, helmholtz.cpp, hertz_surface.cpp, mesh_cut.cpp, mesh_insert_interface_atom.cpp, mortar_contact_thermal.cpp, navier_stokes.cpp, photon_diffusion.cpp, simple_contact.cpp, simple_contact_thermal.cpp, test_jacobian_of_simple_contact_element.cpp, unsaturated_transport.cpp, and wavy_surface.cpp.

Definition at line 71 of file MeshsetsManager.hpp.

◆ _IT_CUBITMESHSETS_FOR_LOOP_

#define _IT_CUBITMESHSETS_FOR_LOOP_ ( MESHSET_MANAGER,
IT )
Value:
CubitMeshSet_multiIndex::iterator IT = \
MESHSET_MANAGER.get_meshsets_manager_ptr()->getBegin(); \
IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getEnd(); \
IT++

Iterator that loops over all the Cubit MeshSets in a moFEM field.

Parameters
MESHSET_MANAGERmeshset manager (works as well with Interface)
iterator
Examples
add_cubit_meshsets.cpp, bone_adaptation.cpp, continuity_check_on_contact_prism_side_ele.cpp, forces_and_sources_testing_flat_prism_element.cpp, mesh_insert_interface_atom.cpp, mortar_contact_thermal.cpp, simple_contact.cpp, simple_contact_thermal.cpp, split_sideset.cpp, and unsaturated_transport.cpp.

Definition at line 34 of file MeshsetsManager.hpp.

34#define _IT_CUBITMESHSETS_FOR_LOOP_(MESHSET_MANAGER, IT) \
35 CubitMeshSet_multiIndex::iterator IT = \
36 MESHSET_MANAGER.get_meshsets_manager_ptr()->getBegin(); \
37 IT != MESHSET_MANAGER.get_meshsets_manager_ptr()->getEnd(); \
38 IT++

Function Documentation

◆ addMeshset()

MoFEMErrorCode MoFEM::MeshsetsManager::addMeshset ( const CubitBCType cubit_bc_type,
const int ms_id,
const std::string name = "" )

add cubit meshset

Parameters
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
ms_idid of the BLOCKSET/SIDESET/BLOCKSET
nameof set
Examples
add_cubit_meshsets.cpp, and mesh_cut.cpp.

Definition at line 385 of file MeshsetsManager.cpp.

387 {
388 Interface &m_field = cOre;
389 moab::Interface &moab = m_field.get_moab();
391 if (checkMeshset(ms_id, cubit_bc_type)) {
392 SETERRQ1(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
393 "such cubit meshset is already there", ms_id);
394 }
395
396 CubitMeshSets cmeshset(moab, cubit_bc_type, ms_id);
397 if ((cmeshset.cubitBcType & CubitBCType(NODESET | SIDESET | BLOCKSET))
398 .any()) {
399 auto p = cubitMeshsets.insert(cmeshset);
400 if (!p.second) {
401 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
402 "meshset not inserted");
403 }
404 if (name.size() > 0) {
405 bool success =
406 cubitMeshsets.modify(p.first, CubitMeshSets_change_name(moab, name));
407 if (!success) {
408 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
409 "name to cubit meshset can not be set");
410 }
411 }
412 }
413
415}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ SIDESET
@ BLOCKSET
@ MOFEM_OPERATION_UNSUCCESSFUL
Definition definitions.h:34
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
bool checkMeshset(const int ms_id, const CubitBCType cubit_bc_type) const
check for CUBIT Id and CUBIT type
std::bitset< 32 > CubitBCType
Definition Types.hpp:52
DeprecatedCoreInterface Interface
moab::Interface & get_moab()
Definition Core.hpp:322
CubitMeshSet_multiIndex cubitMeshsets
cubit meshsets

◆ checkMeshset()

bool MoFEM::MeshsetsManager::checkMeshset ( const int ms_id,
const CubitBCType cubit_bc_type ) const

check for CUBIT Id and CUBIT type

Todo
All cubit interface functions should be outsourced to dedicated interface
Parameters
ms_idid of the BLOCKSET/SIDESET/BLOCKSET: from CUBIT
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
Examples
cell_forces.cpp, heat_equation.cpp, mesh_cut.cpp, mesh_smoothing.cpp, and reaction_diffusion.cpp.

Definition at line 360 of file MeshsetsManager.cpp.

361 {
362 auto miit =
363 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().find(
364 boost::make_tuple(ms_id, cubit_bc_type.to_ulong()));
365 if (miit !=
366 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().end()) {
367 return true;
368 }
369 return false;
370}

◆ getBegin() [1/3]

CubitMeshSet_multiIndex::iterator MoFEM::MeshsetsManager::getBegin ( ) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_FOR_LOOP(mField,it) { ... }

Definition at line 243 of file MeshsetsManager.hpp.

243 {
244 return cubitMeshsets.begin();
245 }

◆ getBegin() [2/3]

CubitMeshsetByName::iterator MoFEM::MeshsetsManager::getBegin ( const std::string & name) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(mField,NODESET|DISPLACEMENTSET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 351 of file MeshsetsManager.hpp.

351 {
352 return cubitMeshsets.get<CubitMeshsets_name>().lower_bound(name);
353 }

◆ getBegin() [3/3]

CubitMeshsetByType::iterator MoFEM::MeshsetsManager::getBegin ( const unsigned int cubit_bc_type) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(mField,NODESET|DISPLACEMENTSET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 276 of file MeshsetsManager.hpp.

276 {
277 return cubitMeshsets.get<CubitMeshsetType_mi_tag>().lower_bound(
278 cubit_bc_type);
279 }

◆ getBySetTypeBegin()

CubitMeshsetByMask::iterator MoFEM::MeshsetsManager::getBySetTypeBegin ( const unsigned int cubit_bc_type) const
inline

get end iterator of cubit meshset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(mField,NODESET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 314 of file MeshsetsManager.hpp.

314 {
315 return cubitMeshsets.get<CubitMeshsetMaskedType_mi_tag>().lower_bound(
316 cubit_bc_type);
317 }

◆ getBySetTypeEnd()

CubitMeshsetByMask::iterator MoFEM::MeshsetsManager::getBySetTypeEnd ( const unsigned int cubit_bc_type) const
inline

get end iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(mField,NODESET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 332 of file MeshsetsManager.hpp.

332 {
333 return cubitMeshsets.get<CubitMeshsetMaskedType_mi_tag>().upper_bound(
334 cubit_bc_type);
335 }

◆ getCubitMeshsetPtr() [1/7]

std::vector< const CubitMeshSets * > MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const CubitBCType cubit_bc_type) const

Get vector of pointer by bc type.

Returns
MoFEMErrorCode

Definition at line 638 of file MeshsetsManager.cpp.

638 {
639 std::vector<const CubitMeshSets *> vec_ptr;
640 CHK_MOAB_THROW(getCubitMeshsetPtr(cubit_bc_type, vec_ptr),
641 "Error in getting meshsets by name");
642 return vec_ptr;
643}
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
MoFEMErrorCode getCubitMeshsetPtr(const int ms_id, const CubitBCType cubit_bc_type, const CubitMeshSets **cubit_meshset_ptr) const
get cubit meshset

◆ getCubitMeshsetPtr() [2/7]

MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const CubitBCType cubit_bc_type,
std::vector< const CubitMeshSets * > & vec_ptr ) const

Get vector of pointer by bc type.

Parameters
std::vector<constCubitMeshSets *>
Returns
MoFEMErrorCode

Definition at line 624 of file MeshsetsManager.cpp.

626 {
628 auto r = cubitMeshsets.get<CubitMeshsetType_mi_tag>().equal_range(
629 cubit_bc_type.to_ulong());
630 for (auto it = r.first; it != r.second; ++it) {
631 vec_ptr.push_back(&*it);
632 }
633 sortMeshsets(vec_ptr);
635}
int r
Definition sdf.py:8
static void sortMeshsets(std::vector< const CubitMeshSets * > &vec_ptr)

◆ getCubitMeshsetPtr() [3/7]

const CubitMeshSets * MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const int ms_id,
const CubitBCType cubit_bc_type ) const

get cubit meshset

Definition at line 597 of file MeshsetsManager.cpp.

598 {
599 const CubitMeshSets *cubit_meshset_ptr;
601 getCubitMeshsetPtr(ms_id, cubit_bc_type, &cubit_meshset_ptr),
602 "Get not get meshset");
603 return cubit_meshset_ptr;
604}
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.

◆ getCubitMeshsetPtr() [4/7]

MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const int ms_id,
const CubitBCType cubit_bc_type,
const CubitMeshSets ** cubit_meshset_ptr ) const

get cubit meshset

Examples
EshelbianPlasticity.cpp, adolc_plasticity.cpp, dynamic_first_order_con_law.cpp, plastic.cpp, seepage.cpp, and thermo_elastic.cpp.

Definition at line 578 of file MeshsetsManager.cpp.

580 {
581 Interface &m_field = cOre;
583 auto miit =
584 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().find(
585 boost::make_tuple(ms_id, cubit_bc_type.to_ulong()));
586 if (miit !=
587 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().end()) {
588 *cubit_meshset_ptr = &*miit;
589 } else {
590 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
591 "msId = %d is not there", ms_id);
592 }
594}

◆ getCubitMeshsetPtr() [5/7]

std::vector< const CubitMeshSets * > MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const std::regex reg_exp_name) const

Get vector of pointer to blocksets with name satisfying regular expression.

for (auto m :
m_field.getInterface<MeshsetsManager>()->getCubitMeshsetPtr(std::regex(
(boost::format("%s(.*)") % block_name).str()
))
) {
MOFEM_LOG("WORLD", Sev::inform) << m->getName();
Rants ents;
m_field.get_moab().get_entities_by_dimension(
m->getMeshset(), 0, ents, false);
auto print_vets = [](boost::shared_ptr<FieldEntity> ent_ptr) {
if(!(ent_ptr->getPStatus() & PSTATUS_NOT_OWNED)) {
MOFEM_LOG("SYNC", Sev::inform) << ents_ptr->getName() << ": " <<
ent_ptr->getEntFieldData();
}
};
CHKERR m_field.getInterface<FieldBlas>()->fieldLambdaOnEntities(
print_vets, "VELOCITIES", &ents);
CHKERR m_field.getInterface<FieldBlas>()->fieldLambdaOnEntities(
print_vets, "DISPLACEMENTS", &ents);
MOFEM_LOG_SEVERITY_SYNC(m_field.get_comm(), Sev::ifrom);
}
#define MOFEM_LOG_SEVERITY_SYNC(comm, severity)
Synchronise "SYNC" on curtain severity level.
#define CHKERR
Inline error check.
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'm', 3 > m
Interface for managing meshsets containing materials and boundary conditions.
Parameters
reg_exp_name
Returns
std::vector<const CubitMeshSets *>

Definition at line 662 of file MeshsetsManager.cpp.

662 {
663 std::vector<const CubitMeshSets *> vec_ptr;
664 CHK_MOAB_THROW(getCubitMeshsetPtr(reg_exp_name, vec_ptr),
665 "Error in getting meshsets by name");
666 return vec_ptr;
667}

◆ getCubitMeshsetPtr() [6/7]

MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const std::regex reg_exp_name,
std::vector< const CubitMeshSets * > & vec_ptr ) const

Get vector of pointer to blocksets with name satisfying regular expression.

Parameters
reg_exp_name
std::vector<constCubitMeshSets *>
Returns
MoFEMErrorCode

Definition at line 645 of file MeshsetsManager.cpp.

647 {
649 auto r =
650 cubitMeshsets.get<CubitMeshsetMaskedType_mi_tag>().equal_range(BLOCKSET);
651 for (; r.first != r.second; ++r.first) {
652 const auto name = r.first->getName();
653 if (std::regex_match(name, reg_exp_name)) {
654 vec_ptr.push_back(&*r.first);
655 }
656 }
657 sortMeshsets(vec_ptr);
659}

◆ getCubitMeshsetPtr() [7/7]

MoFEMErrorCode MoFEM::MeshsetsManager::getCubitMeshsetPtr ( const string name,
const CubitMeshSets ** cubit_meshset_ptr ) const

get cubit meshset

Definition at line 606 of file MeshsetsManager.cpp.

607 {
608 Interface &m_field = cOre;
610 auto miit = cubitMeshsets.get<CubitMeshsets_name>().lower_bound(name);
611 auto hi_miit = cubitMeshsets.get<CubitMeshsets_name>().upper_bound(name);
612 if (std::distance(miit, hi_miit) == 0) {
613 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
614 "meshset name <%s> is not there", name.c_str());
615 }
616 if (std::distance(miit, hi_miit) > 1) {
617 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
618 "more that one meshser of that name <%s>", name.c_str());
619 }
620 *cubit_meshset_ptr = &*miit;
622}

◆ getEnd() [1/3]

CubitMeshSet_multiIndex::iterator MoFEM::MeshsetsManager::getEnd ( ) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_FOR_LOOP(mField,it) { ... }

Definition at line 257 of file MeshsetsManager.hpp.

257 {
258 return cubitMeshsets.end();
259 }

◆ getEnd() [2/3]

CubitMeshsetByName::iterator MoFEM::MeshsetsManager::getEnd ( const std::string & name) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP(mField,NODESET|DISPLACEMENTSET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 369 of file MeshsetsManager.hpp.

369 {
370 return cubitMeshsets.get<CubitMeshsets_name>().upper_bound(name);
371 }

◆ getEnd() [3/3]

CubitMeshsetByType::iterator MoFEM::MeshsetsManager::getEnd ( const unsigned int cubit_bc_type) const
inline

get begin iterator of cubit mehset of given type (instead you can use IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(MFIELD,CUBITBCTYPE,IT)

for(IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP(mField,NODESET|DISPLACEMENTSET,it) { ... }

Parameters
typeof meshset (NODESET, SIDESET or BLOCKSET and more)

Definition at line 296 of file MeshsetsManager.hpp.

296 {
297 return cubitMeshsets.get<CubitMeshsetType_mi_tag>().upper_bound(
298 cubit_bc_type);
299 }

◆ getEntitiesByDimension() [1/2]

MoFEMErrorCode MoFEM::MeshsetsManager::getEntitiesByDimension ( const int ms_id,
const unsigned int cubit_bc_type,
const int dimension,
Range & entities,
const bool recursive = true ) const

get entities from CUBIT/meshset of a particular entity dimension

Nodeset can contain nodes, edges, triangles and tets. This applies to other meshsets too. The nodeset's meshset contain the nodes in the MIDDLE of the surface or volume which is done by default in Cubit, Hence if all nodes on a particular nodeset are required, one should get all triangles or tetrahedrons for which the nodeset was create in Cubit, and get all the connectivities of tris/tets.

Parameters
ms_idid of the BLOCKSET/SIDESET/BLOCKSET: from CUBIT
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
dimensions(0 - Nodes, 1 - Edges, 2 - Faces, 3 - Volume(tetrahedral))
Rangecontaining the retrieved entities
recursiveIf true, meshsets containing meshsets are queried recursively. Returns the contents of meshsets, but not the meshsets themselves if true.
Examples
cell_forces.cpp, mesh_cut.cpp, and prism_elements_from_surface.cpp.

Definition at line 669 of file MeshsetsManager.cpp.

671 {
672 Interface &m_field = cOre;
673 moab::Interface &moab = m_field.get_moab();
675 auto miit =
676 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().find(
677 boost::make_tuple(msId, cubit_bc_type));
678 if (miit !=
679 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().end()) {
680 CHKERR miit->getMeshsetIdEntitiesByDimension(moab, dimension, entities,
681 recursive);
682 } else {
683 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
684 "msId = %d is not there", msId);
685 }
687}

◆ getEntitiesByDimension() [2/2]

MoFEMErrorCode MoFEM::MeshsetsManager::getEntitiesByDimension ( const int ms_id,
const unsigned int cubit_bc_type,
Range & entities,
const bool recursive = true ) const

get entities related to CUBIT/meshset,

NODESET will get Vertices only, even if the NODESET contains edges, tris and tets SIDESET will get Tris, BLOCKSET will get Tets, DISPLACEMENTSET and FORCESET are stored in NODESET, PRESSURESET is stored in Sideset.

Parameters
ms_idid of the BLOCKSET/SIDESET/BLOCKSET: from CUBIT
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
Rangecontaining the retrieved entities related to the
recursiveIf true, meshsets containing meshsets are queried recursively. Returns the contents of meshsets, but not the meshsets themselves if true.

Definition at line 689 of file MeshsetsManager.cpp.

691 {
692 Interface &m_field = cOre;
693 moab::Interface &moab = m_field.get_moab();
695 auto miit =
696 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().find(
697 boost::make_tuple(ms_id, cubit_bc_type));
698 if (miit !=
699 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().end()) {
700 CHKERR miit->getMeshsetIdEntitiesByDimension(moab, entities, recursive);
701 } else {
702 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
703 "ms_id = %d is not there", ms_id);
704 }
706}

◆ getMeshset()

MoFEMErrorCode MoFEM::MeshsetsManager::getMeshset ( const int ms_id,
const unsigned int cubit_bc_type,
EntityHandle & meshset ) const

get meshset from CUBIT Id and CUBIT type

Parameters
ms_idid of the BLOCKSET/SIDESET/BLOCKSET: from CUBIT
seeCubitBC (NODESET, SIDESET or BLOCKSET and more)
meshsetwhere to store the retrieved entities
Examples
mesh_cut.cpp.

Definition at line 708 of file MeshsetsManager.cpp.

710 {
711 Interface &m_field = cOre;
713 auto miit =
714 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().find(
715 boost::make_tuple(ms_id, cubit_bc_type));
716 if (miit !=
717 cubitMeshsets.get<Composite_Cubit_msId_And_MeshsetType_mi_tag>().end()) {
718 meshset = miit->meshset;
719 } else {
720 SETERRQ1(m_field.get_comm(), MOFEM_DATA_INCONSISTENCY,
721 "ms_id = %d is not there", ms_id);
722 }
724}

◆ getMeshsetsByType()

MoFEMErrorCode MoFEM::MeshsetsManager::getMeshsetsByType ( const unsigned int cubit_bc_type,
Range & meshsets ) const

get all CUBIT meshsets by CUBIT type

Parameters
seeCubitBC (NODESET, SIDESET or BLOCKSET and more).
meshsetsis range of meshsets

Definition at line 742 of file MeshsetsManager.cpp.

743 {
745 auto miit =
746 cubitMeshsets.get<CubitMeshsetType_mi_tag>().lower_bound(cubit_bc_type);
747 auto hi_miit =
748 cubitMeshsets.get<CubitMeshsetType_mi_tag>().upper_bound(cubit_bc_type);
749 for (; miit != hi_miit; miit++) {
750 meshsets.insert(miit->meshset);
751 }
753}