static char help[] =
"...\n\n";
int main(
int argc,
char *argv[]) {
try {
PetscBool flg_file = PETSC_FALSE;
PetscBool squash_bit_levels = PETSC_TRUE;
PetscBool flg_list_of_sidesets = PETSC_FALSE;
int nb_sidesets = 10;
int sidesets[nb_sidesets];
CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"Split sides options",
"none");
CHKERR PetscOptionsString(
"-my_file",
"mesh file name",
"",
"mesh.h5m",
CHKERR PetscOptionsBool(
"-squash_bit_levels",
"squash bit levels",
"",
squash_bit_levels, &squash_bit_levels, NULL);
CHKERR PetscOptionsIntArray(
"-side_sets",
"get list of sidesets",
"",
sidesets, &nb_sidesets, &flg_list_of_sidesets);
CHKERR PetscOptionsBool(
"-output_vtk",
"if true outout vtk file",
"",
ParallelComm *pcomm = ParallelComm::get_pcomm(&moab,
MYPCOMM_INDEX);
if (pcomm == NULL)
pcomm = new ParallelComm(&moab, PETSC_COMM_WORLD);
const char *option;
option = "";
if (flg_file != PETSC_TRUE) {
"*** ERROR -my_file (MESH FILE NEEDED)");
}
if (flg_list_of_sidesets != PETSC_TRUE) {
"List of sidesets not given -my_side_sets ...");
}
MeshsetsManager *m_mng;
PrismInterface *interface_ptr;
BitRefManager *bit_mng;
std::vector<BitRefLevel> bit_levels;
typedef CubitMeshSet_multiIndex::index<
CubitMeshSets_mask_meshset_mi_tag>
::type CMeshsetByType;
typedef CMeshsetByType::iterator CMIteratorByType;
typedef CubitMeshSet_multiIndex::index<
Composite_Cubit_msId_And_MeshSetType_mi_tag>
::type CMeshsetByIdType;
typedef CMeshsetByIdType::iterator CMIteratorByIdType;
CMeshsetByType &m_by_type =
meshsets_index.get<CubitMeshSets_mask_meshset_mi_tag>();
CMeshsetByIdType &m_by_id_and_type =
meshsets_index.get<Composite_Cubit_msId_And_MeshSetType_mi_tag>();
for (CMIteratorByType mit = m_by_type.lower_bound(
SIDESET);
mit != m_by_type.upper_bound(
SIDESET); mit++) {
std::cout << "Sideset on the mesh id = " << mit->getMeshsetId()
<< std::endl;
}
for (int mm = 0; mm != nb_sidesets; mm++) {
CMIteratorByIdType mit;
mit = m_by_id_and_type.find(boost::make_tuple(sidesets[mm],
SIDESET));
if (mit == m_by_id_and_type.end()) {
"No sideset in database id = %d", sidesets[mm]);
}
CHKERR PetscPrintf(PETSC_COMM_WORLD,
"Split sideset %d\n",
mit->getMeshsetId());
EntityHandle cubit_meshset = mit->getMeshset();
{
EntityHandle ref_level_meshset = 0;
CHKERR moab.create_meshset(MESHSET_SET, ref_level_meshset);
CHKERR bit_mng->getEntitiesByTypeAndRefLevel(
bit_levels.back(),
BitRefLevel().set(), MBTET, ref_level_meshset);
CHKERR bit_mng->getEntitiesByTypeAndRefLevel(
bit_levels.back(),
BitRefLevel().set(), MBPRISM, ref_level_meshset);
Range ref_level_tets;
CHKERR moab.get_entities_by_handle(ref_level_meshset, ref_level_tets,
true);
CHKERR interface_ptr->getSides(cubit_meshset, bit_levels.back(),
true,
0);
CHKERR interface_ptr->splitSides(ref_level_meshset, bit_levels.back(),
cubit_meshset, false, true, 0);
CHKERR moab.delete_entities(&ref_level_meshset, 1);
}
EntityHandle cubit_meshset = ciit->meshset;
CHKERR bit_mng->updateMeshsetByEntitiesChildren(
cubit_meshset, bit_levels.back(), cubit_meshset,
MBVERTEX, true);
CHKERR bit_mng->updateMeshsetByEntitiesChildren(
cubit_meshset, bit_levels.back(), cubit_meshset, MBEDGE,
true);
CHKERR bit_mng->updateMeshsetByEntitiesChildren(
cubit_meshset, bit_levels.back(), cubit_meshset, MBTRI,
true);
CHKERR bit_mng->updateMeshsetByEntitiesChildren(
cubit_meshset, bit_levels.back(), cubit_meshset, MBTET,
true);
}
}
if (squash_bit_levels == PETSC_TRUE) {
for (unsigned int ll = 0; ll != bit_levels.size() - 1; ll++) {
true);
}
CHKERR bit_mng->shiftRightBitRef(bit_levels.size() - 1);
}
EntityHandle meshset;
CHKERR moab.create_meshset(MESHSET_SET, meshset);
if (squash_bit_levels)
bit = bit_levels[0];
else
bit = bit_levels.back();
CHKERR bit_mng->getEntitiesByTypeAndRefLevel(
CHKERR moab.write_file(
"out.vtk",
"VTK",
"", &meshset, 1);
CHKERR moab.delete_entities(&meshset, 1);
}
CHKERR moab.write_file(
"out.h5m");
}
return 0;
}
#define CATCH_ERRORS
Catch errors.
#define MYPCOMM_INDEX
default communicator number PCOMM
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
#define CHKERR
Inline error check.
#define _IT_CUBITMESHSETS_FOR_LOOP_(MESHSET_MANAGER, IT)
Iterator that loops over all the Cubit MeshSets in a moFEM field.
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
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< CubitMeshSets, indexed_by< hashed_unique< tag< Meshset_mi_tag >, member< CubitMeshSets, EntityHandle, &CubitMeshSets::meshset > >, ordered_non_unique< tag< CubitMeshSets_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getBcTypeULong > >, ordered_non_unique< tag< CubitMeshSets_mask_meshset_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getMaksedBcTypeULong > >, ordered_non_unique< tag< CubitMeshSets_name >, const_mem_fun< CubitMeshSets, std::string, &CubitMeshSets::getName > >, hashed_unique< tag< Composite_Cubit_msId_And_MeshSetType_mi_tag >, composite_key< CubitMeshSets, const_mem_fun< CubitMeshSets, int, &CubitMeshSets::getMeshsetId >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getMaksedBcTypeULong > > > > > CubitMeshSet_multiIndex
Stores data about meshsets (see CubitMeshSets) storing data about boundary conditions,...
DeprecatedCoreInterface Interface
int main(int argc, char *argv[])
virtual MoFEMErrorCode delete_ents_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, const bool remove_parent=false, int verb=DEFAULT_VERBOSITY)=0
delete entities form mofem and moab database
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.
Deprecated interface functions.
MoFEMErrorCode getInterface(const MOFEMuuid &uuid, IFACE *&iface) const
Get interface by uuid and return reference to pointer of interface.