moab
|
Refine a mesh using a streaming operation. More...
#include <MeshRefiner.hpp>
Public Member Functions | |
MeshRefiner (Interface *imesh, Interface *omesh) | |
Construct a mesh refiner. The input and output mesh pointers may be identical. Existing elements will not be removed from the input mesh as they are refined, so the adjacencies for entitities may appear strange after refinement. | |
virtual | ~MeshRefiner () |
Destroy a mesh refiner. | |
bool | set_entity_refiner (EntityRefiner *) |
Specify which techniqe will be used to refine entities in the mesh. The entity refiner object you specify is ``owned'' by the mesh refiner after this call; the entity refiner will be deleted when this mesh refiner is destroyed. You should not delete the entity refiner yourself. | |
EntityRefiner * | get_entity_refiner () |
bool | set_comm (ParallelComm *c) |
ParallelComm * | get_comm () |
RefinerTagManager * | get_tag_manager () |
const RefinerTagManager * | get_tag_manager () const |
void | reset_vertex_tags () |
A convenience method to reset the list of tags to be copied to output vertices. This simply calls the method of the same name on the tag manager. | |
int | add_vertex_tag (Tag tag_handle) |
A convenience method to add a tag to be copied/interpolated from input vertices to output vertices. This simply calls the method of the same name on the tag manager. | |
virtual bool | refine (Range &) |
Refine entities in a mesh set. This will recursively descend any mesh sets contained in the range. It returns false when not able to refine (because no entity refiner is set or no edge size evaluator has been set on the entity refiner) and true otherwise. | |
Protected Attributes | |
Interface * | mesh_in |
Interface * | mesh_out |
EntityRefiner * | entity_refiner |
RefinerTagManager * | tag_manager |
MeshOutputFunctor * | output_functor |
ParallelComm * | comm |
Refine a mesh using a streaming operation.
This is an class that contains the method used for mesh refinement.
Definition at line 42 of file MeshRefiner.hpp.
moab::MeshRefiner::MeshRefiner | ( | Interface * | imesh, |
Interface * | omesh | ||
) |
Construct a mesh refiner. The input and output mesh pointers may be identical. Existing elements will not be removed from the input mesh as they are refined, so the adjacencies for entitities may appear strange after refinement.
Definition at line 24 of file MeshRefiner.cpp.
{ this->mesh_in = imesh; this->mesh_out = omesh; this->tag_manager = new RefinerTagManager( this->mesh_in, this->mesh_out ); this->output_functor = new MeshOutputFunctor( this->tag_manager ); this->entity_refiner = 0; this->comm = ParallelComm::get_pcomm( this->mesh_out, 0 ); }
moab::MeshRefiner::~MeshRefiner | ( | ) | [virtual] |
Destroy a mesh refiner.
Note that any EntityRefiner object associated with the mesh refiner will be deleted inside this destructor. Destruction is virtual so subclasses may clean up after refinement.
Definition at line 39 of file MeshRefiner.cpp.
{ delete this->tag_manager; delete this->output_functor; if ( this->entity_refiner ) delete this->entity_refiner; }
int moab::MeshRefiner::add_vertex_tag | ( | Tag | tag_handle | ) |
A convenience method to add a tag to be copied/interpolated from input vertices to output vertices. This simply calls the method of the same name on the tag manager.
Definition at line 72 of file MeshRefiner.cpp.
{ return this->tag_manager->add_vertex_tag( tag_handle ); }
ParallelComm* moab::MeshRefiner::get_comm | ( | ) | [inline] |
Definition at line 52 of file MeshRefiner.hpp.
{ return this->comm; }
EntityRefiner* moab::MeshRefiner::get_entity_refiner | ( | ) | [inline] |
Definition at line 49 of file MeshRefiner.hpp.
{ return this->entity_refiner; }
RefinerTagManager* moab::MeshRefiner::get_tag_manager | ( | ) | [inline] |
Definition at line 54 of file MeshRefiner.hpp.
{ return this->tag_manager; }
const RefinerTagManager* moab::MeshRefiner::get_tag_manager | ( | ) | const [inline] |
Definition at line 55 of file MeshRefiner.hpp.
{ return this->tag_manager; }
bool moab::MeshRefiner::refine | ( | Range & | range | ) | [virtual] |
Refine entities in a mesh set. This will recursively descend any mesh sets contained in the range. It returns false when not able to refine (because no entity refiner is set or no edge size evaluator has been set on the entity refiner) and true otherwise.
Definition at line 88 of file MeshRefiner.cpp.
{ this->tag_manager->create_output_tags(); if ( ! this->entity_refiner->prepare( this->tag_manager, this->output_functor ) ) { // Oops, perhaps the edge_size_evaluator was not set? return false; } MeshRefinerIterator entry; std::vector<MeshRefinerIterator> work; entry.subset = range; entry.destination_set = 0; work.push_back( entry ); while ( ! work.empty() ) { entry = work.back(); work.pop_back(); this->output_functor->destination_set = entry.destination_set; for ( Range::const_iterator it = entry.subset.begin(); it != entry.subset.end(); ++ it ) { EntityType etyp = this->mesh_in->type_from_handle( *it ); if ( etyp == MBENTITYSET ) { Range set_ents; if ( this->mesh_in->get_entities_by_handle( *it, set_ents, false ) == MB_SUCCESS ) { // Create a matching set on the output mesh. MeshRefinerIterator set_work; unsigned int set_work_opts; this->mesh_in->get_meshset_options( *it, set_work_opts ); this->mesh_out->create_meshset( set_work_opts, set_work.destination_set ); set_work.subset = set_ents; work.push_back( set_work ); // Copy any per-element tag values the user has requested to the output set. this->tag_manager->set_element_tags_from_ent( *it ); this->tag_manager->assign_element_tags( set_work.destination_set ); // Copy the global ID to the new set (assuming it exists). this->tag_manager->copy_gid( *it, set_work.destination_set ); } } else { this->tag_manager->set_element_tags_from_ent( *it ); this->tag_manager->set_element_procs_from_ent( *it ); this->entity_refiner->refine_entity( etyp, *it ); } } } this->output_functor->assign_global_ids( this->comm ); return true; }
void moab::MeshRefiner::reset_vertex_tags | ( | ) |
A convenience method to reset the list of tags to be copied to output vertices. This simply calls the method of the same name on the tag manager.
Definition at line 64 of file MeshRefiner.cpp.
{ this->tag_manager->reset_vertex_tags(); }
bool moab::MeshRefiner::set_comm | ( | ParallelComm * | c | ) | [inline] |
Definition at line 51 of file MeshRefiner.hpp.
bool moab::MeshRefiner::set_entity_refiner | ( | EntityRefiner * | er | ) |
Specify which techniqe will be used to refine entities in the mesh. The entity refiner object you specify is ``owned'' by the mesh refiner after this call; the entity refiner will be deleted when this mesh refiner is destroyed. You should not delete the entity refiner yourself.
Definition at line 52 of file MeshRefiner.cpp.
{ if ( ! er || er == this->entity_refiner ) return false; this->entity_refiner = er; return true; }
ParallelComm* moab::MeshRefiner::comm [protected] |
Definition at line 67 of file MeshRefiner.hpp.
EntityRefiner* moab::MeshRefiner::entity_refiner [protected] |
Definition at line 64 of file MeshRefiner.hpp.
Interface* moab::MeshRefiner::mesh_in [protected] |
Definition at line 62 of file MeshRefiner.hpp.
Interface* moab::MeshRefiner::mesh_out [protected] |
Definition at line 63 of file MeshRefiner.hpp.
MeshOutputFunctor* moab::MeshRefiner::output_functor [protected] |
Definition at line 66 of file MeshRefiner.hpp.
RefinerTagManager* moab::MeshRefiner::tag_manager [protected] |
Definition at line 65 of file MeshRefiner.hpp.