ug4
|
Specialization of ug::HangingNodeRefiner for ug::Grid. More...
#include <hanging_node_refiner_grid.h>
Public Types | |
typedef HangingNodeRefinerBase< Selector > | BaseClass |
Public Types inherited from ug::HangingNodeRefinerBase< Selector > | |
enum | HNodeRefMarks |
typedef Selector | selector_t |
Public Member Functions | |
virtual bool | adaptivity_supported () const |
returns whether the refiner is able to perform adaptive refinement More... | |
virtual void | assign_grid (Grid &grid) |
virtual bool | coarsening_supported () const |
returns true, if the refiner supports coarsening. More... | |
virtual Grid * | get_associated_grid () |
DEPRECIATED! Use grid(). Has to return the associated grid. Pure virtual. More... | |
virtual int | get_local_mark (Face *f) const |
returns the local mark of the specified face or volume. More... | |
virtual int | get_local_mark (Volume *f) const |
returns the local mark of the specified face or volume. More... | |
virtual Grid * | grid () |
Returns the grid associated with the refiner. More... | |
virtual void | grid_to_be_destroyed (Grid *grid) |
HangingNodeRefiner_Grid (Grid &grid, SPRefinementProjector projector=SPNULL) | |
HangingNodeRefiner_Grid (SPRefinementProjector projector=SPNULL) | |
virtual bool | local_marks_supported () const |
returns true, if the refiner supports local marks. More... | |
virtual bool | mark (Edge *e, RefinementMark refMark=RM_REFINE) |
Marks an edge for refinement (ignores RM_COARSEN). More... | |
virtual bool | mark (Face *f, RefinementMark refMark=RM_REFINE) |
Marks a face for refinement (ignores RM_COARSEN). More... | |
virtual bool | mark (Vertex *v, RefinementMark refMark=RM_REFINE) |
Marks a vertex for refinement (ignores RM_COARSEN). More... | |
virtual bool | mark (Volume *v, RefinementMark refMark=RM_REFINE) |
Marks a volume for refinement (ignores RM_COARSEN). More... | |
virtual void | mark_local (Face *f, int localMark) |
Marks a face or volume for local refinement. More... | |
virtual void | mark_local (Volume *f, int localMark) |
Marks a face or volume for local refinement. More... | |
virtual | ~HangingNodeRefiner_Grid () |
Public Member Functions inherited from ug::HangingNodeRefinerBase< Selector > | |
void | add_ref_mark_adjuster (SPIRefMarkAdjuster adjuster) |
Add a refmark adjuster, which will be called while marks are adjusted during refinement / coarsening. More... | |
virtual void | clear_marks () |
clears all marks. Default implementation is empty More... | |
HangingNodeRefinerBase (SPRefinementProjector projector=SPNULL) | |
void | mark (const TIterator &iterBegin, const TIterator &iterEnd, RefinementMark refMark=RM_REFINE) |
marks all elements between iterBegin and iterEnd. More... | |
virtual bool | mark (Edge *e, RefinementMark refMark=RM_REFINE) |
virtual bool | mark (Face *f, RefinementMark refMark=RM_REFINE) |
virtual bool | mark (GridObject *o, RefinementMark refMark=RM_REFINE) |
marks the specified geometric object More... | |
virtual bool | mark (Vertex *v, RefinementMark refMark=RM_REFINE) |
Marks an element for refinement. Default implementation is empty. More... | |
virtual bool | mark (Volume *v, RefinementMark refMark=RM_REFINE) |
virtual void | mark_neighborhood (size_t numIterations, RefinementMark refMark, bool sideNbrsOnly) |
Marks the neighborhood of the current selection. More... | |
bool | marked_adaptive (TElem *elem) const |
bool | marked_coarsen (TElem *elem) const |
bool | marked_refine (Edge *elem) const |
bool | marked_refine (TElem *elem) const |
bool | marked_regular (TElem *elem) const |
virtual bool | save_marks_to_file (const char *filename) |
Writes the associated grid and marks to a file. Pure virtual. More... | |
virtual | ~HangingNodeRefinerBase () |
void | enable_node_dependency_order_1 (bool bEnable) |
enables or disables node-dependency-order-1. More... | |
bool | node_dependency_order_1_enabled () |
enables or disables node-dependency-order-1. More... | |
virtual RefinementMark | get_mark (Vertex *v) const |
Returns the mark of a given element. More... | |
virtual RefinementMark | get_mark (Edge *e) const |
Returns the mark of a given element. More... | |
virtual RefinementMark | get_mark (Face *f) const |
Returns the mark of a given element. More... | |
virtual RefinementMark | get_mark (Volume *v) const |
Returns the mark of a given element. More... | |
Public Member Functions inherited from ug::IRefiner | |
bool | coarsen () |
Performs coarsening on the elements marked RM_COARSEN. More... | |
bool | debugging_enabled () const |
void | enable_debugging (bool enable) |
int | get_local_edge_mark (Face *f, Edge *e) const |
returns the local mark of the specified edge of the given face More... | |
int | get_local_edge_mark (Volume *vol, Edge *e) const |
returns the local mark of the specified edge of the given volume More... | |
int | get_local_face_mark (Volume *vol, Face *f) const |
returns the local mark of the specified face of the given volume More... | |
virtual RefinementMark | get_mark (GridObject *o) const |
returns the mark of the specified geometric object More... | |
IRefiner (SPRefinementProjector projector=SPNULL) | |
template<class TIterator > | |
void | mark (const TIterator &iterBegin, const TIterator &iterEnd, RefinementMark refMark=RM_REFINE) |
marks all elements between iterBegin and iterEnd. More... | |
virtual bool | mark (GridObject *o, RefinementMark refMark=RM_REFINE) |
marks the specified geometric object More... | |
void | mark_neighborhood (size_t numIterations) |
marks the neighborhood of currently marked elements. More... | |
template<class TElem > | |
bool | marked_closure (TElem *elem) const |
template<class TElem > | |
bool | marked_full (TElem *elem) const |
template<class TElem > | |
bool | marked_local (TElem *elem) const |
size_t | num_marked_edges () |
returns the number of (globally) marked edges on all levels of the hierarchy More... | |
size_t | num_marked_edges (std::vector< int > &numMarkedEdgesOut) |
returns the number of (globally) marked edges on all levels of the hierarchy More... | |
size_t | num_marked_elements () |
returns the number of (globally) marked grid-objects of highest dimension More... | |
size_t | num_marked_elements (std::vector< int > &numMarkedElemsOut) |
returns the number of (globally) marked grid-objects of highest dimension More... | |
size_t | num_marked_faces () |
returns the number of (globally) marked faces on all levels of the hierarchy More... | |
size_t | num_marked_faces (std::vector< int > &numMarkedFacesOut) |
returns the number of (globally) marked faces on all levels of the hierarchy More... | |
size_t | num_marked_volumes () |
returns the number of (globally) marked volumes on all levels of the hierarchy More... | |
size_t | num_marked_volumes (std::vector< int > &numMarkedVolsOut) |
returns the number of (globally) marked volumes on all levels of the hierarchy More... | |
SPRefinementProjector | projector () |
void | refine () |
Performs refinement on the marked elements. More... | |
void | set_adjusted_marks_debug_filename (const char *filename) |
sets a filename to which adjusted marks are saved during refinement / coarsening More... | |
void | set_projector (SPRefinementProjector projector) |
virtual | ~IRefiner () |
void | adaption_begins () |
notifies all listeners of the associated message-hub, that adaption begins / ends. More... | |
void | adaption_ends () |
notifies all listeners of the associated message-hub, that adaption begins / ends. More... | |
Public Member Functions inherited from ug::GridObserver | |
virtual void | elements_to_be_cleared (Grid *grid) |
virtual | ~GridObserver () |
virtual void | vertex_created (Grid *grid, Vertex *vrt, GridObject *pParent=NULL, bool replacesParent=false) |
Notified whenever a new element of the given type is created in the given grid. More... | |
virtual void | edge_created (Grid *grid, Edge *e, GridObject *pParent=NULL, bool replacesParent=false) |
Notified whenever a new element of the given type is created in the given grid. More... | |
virtual void | face_created (Grid *grid, Face *f, GridObject *pParent=NULL, bool replacesParent=false) |
Notified whenever a new element of the given type is created in the given grid. More... | |
virtual void | volume_created (Grid *grid, Volume *vol, GridObject *pParent=NULL, bool replacesParent=false) |
Notified whenever a new element of the given type is created in the given grid. More... | |
virtual void | vertex_to_be_erased (Grid *grid, Vertex *vrt, Vertex *replacedBy=NULL) |
Notified whenever an element of the given type is erased from the given grid. More... | |
virtual void | edge_to_be_erased (Grid *grid, Edge *e, Edge *replacedBy=NULL) |
Notified whenever an element of the given type is erased from the given grid. More... | |
virtual void | face_to_be_erased (Grid *grid, Face *f, Face *replacedBy=NULL) |
Notified whenever an element of the given type is erased from the given grid. More... | |
virtual void | volume_to_be_erased (Grid *grid, Volume *vol, Volume *replacedBy=NULL) |
Notified whenever an element of the given type is erased from the given grid. More... | |
virtual void | vertices_to_be_merged (Grid *grid, Vertex *target, Vertex *elem1, Vertex *elem2) |
Notified when two elements of the same type are going to be merged. More... | |
virtual void | edges_to_be_merged (Grid *grid, Edge *target, Edge *elem1, Edge *elem2) |
Notified when two elements of the same type are going to be merged. More... | |
virtual void | faces_to_be_merged (Grid *grid, Face *target, Face *elem1, Face *elem2) |
Notified when two elements of the same type are going to be merged. More... | |
virtual void | volumes_to_be_merged (Grid *grid, Volume *target, Volume *elem1, Volume *elem2) |
Notified when two elements of the same type are going to be merged. More... | |
Protected Member Functions | |
void | attach_local_marks () |
virtual void | collect_objects_for_refine () |
marks unmarked elements that have to be refined due to marked neighbors. More... | |
virtual Vertex * | get_center_vertex (Edge *e) |
Returns the vertex associated with the edge. More... | |
virtual Vertex * | get_center_vertex (Face *f) |
Returns the vertex associated with the face. More... | |
virtual void | num_marked_edges_local (std::vector< int > &numMarkedEdgesOut) |
returns the number of (globally) marked edges on this level of the hierarchy More... | |
template<class TElem > | |
void | num_marked_elems (std::vector< int > &numMarkedElemsOut) |
virtual void | num_marked_faces_local (std::vector< int > &numMarkedFacesOut) |
returns the number of (globally) marked faces on this level of the hierarchy More... | |
virtual void | num_marked_volumes_local (std::vector< int > &numMarkedVolsOut) |
returns the number of (globally) marked volumes on this level of the hierarchy More... | |
virtual void | post_refine () |
erases unused refined elements More... | |
virtual void | process_constraining_edge (ConstrainingEdge *cge) |
called to refine the specified element. More... | |
virtual void | process_constraining_face (ConstrainingFace *cgf) |
called to refine the specified element. More... | |
virtual void | refine_edge_with_normal_vertex (Edge *e, Vertex **newCornerVrts=NULL) |
called to refine the specified element. More... | |
virtual void | refine_face_with_normal_vertex (Face *f, Vertex **newCornerVrts=NULL) |
called to refine the specified element. More... | |
virtual void | refine_volume_with_normal_vertex (Volume *v, Vertex **newVolumeVrts=NULL) |
called to refine the specified element. More... | |
virtual void | set_center_vertex (Edge *e, Vertex *v) |
Associates a vertex with the edge. More... | |
virtual void | set_center_vertex (Face *f, Vertex *v) |
Associates a vertex with the face. More... | |
void | set_grid (Grid *grid) |
performs registration and deregistration at a grid. More... | |
Protected Member Functions inherited from ug::HangingNodeRefinerBase< Selector > | |
void | add_hmark (TElem *elem, HNodeRefMarks mark) |
bool | adjusting_ref_marks () const |
virtual void | assign_hnode_marks () |
virtual bool | continue_collect_objects_for_refine (bool continueRequired) |
Selector & | get_refmark_selector () |
returns the selector which is internally used to mark elements. More... | |
bool | is_marked (Edge *e) |
bool | is_marked (Face *f) |
bool | is_marked (Vertex *v) |
bool | is_marked (Volume *v) |
bool | marked_to_constrained (TElem *elem) const |
bool | marked_to_constraining (TElem *elem) const |
bool | marked_to_normal (TElem *elem) const |
void | perform_refinement () |
performs refinement on the marked elements. More... | |
virtual void | pre_refine () |
virtual bool | refinement_is_allowed (Edge *elem) |
a callback that allows to deny refinement of special edges More... | |
virtual bool | refinement_is_allowed (Face *elem) |
a callback that allows to deny refinement of special faces More... | |
virtual bool | refinement_is_allowed (Vertex *elem) |
a callback that allows to deny refinement of special vertices More... | |
virtual bool | refinement_is_allowed (Volume *elem) |
a callback that allows to deny refinement of special volumes More... | |
bool | remove_coarsen_marks () |
removes coarsen marks from the selection More... | |
void | remove_hmark (TElem *elem, uint mark) |
void | set_grid (typename TSelector::grid_type *grid) |
performs registration and deregistration at a grid. More... | |
virtual void | process_constrained_vertex (ConstrainedVertex *cdv) |
called to refine the specified element. More... | |
virtual void | process_constrained_edge (ConstrainedEdge *cde) |
called to refine the specified element. More... | |
virtual void | refine_edge_with_hanging_vertex (Edge *e, Vertex **newCornerVrts=NULL) |
called to refine the specified element. More... | |
virtual void | process_constrained_face (ConstrainedFace *cdf) |
called to refine the specified element. More... | |
virtual void | refine_face_with_hanging_vertex (Face *f, Vertex **newCornerVrts=NULL) |
called to refine the specified element. More... | |
Protected Member Functions inherited from ug::IRefiner | |
virtual bool | perform_coarsening () |
Called by coarsen(). Derived classes sould implement their coarsen algorithm here. More... | |
void | set_message_hub (SPMessageHub msgHub) |
sets the message hub. More... | |
Additional Inherited Members | |
Protected Types inherited from ug::HangingNodeRefinerBase< Selector > | |
typedef TSelector::template traits< Edge >::iterator | sel_edge_iter |
typedef TSelector::template traits< Face >::iterator | sel_face_iter |
typedef TSelector::template traits< Volume >::iterator | sel_vol_iter |
typedef TSelector::template traits< Vertex >::iterator | sel_vrt_iter |
Protected Attributes inherited from ug::HangingNodeRefinerBase< Selector > | |
std::vector< SPIRefMarkAdjuster > | m_refMarkAdjusters |
Selector | m_selMarkedElements |
Protected Attributes inherited from ug::IRefiner | |
bool | m_adaptionIsActive |
std::string | m_adjustedMarksDebugFilename |
bool | m_debuggingEnabled |
SPMessageHub | m_messageHub |
int | m_msgIdAdaption |
SPRefinementProjector | m_projector |
Specialization of ug::HangingNodeRefiner for ug::Grid.
This class should be used, if hanging node refinement shall be applied on a flat grid (ug::Grid).
Marked elements will be replaced by their newly created children.
Take a look at ug::HangingNodeRefinerBase for a more in-depth documentation.
ug::HangingNodeRefiner_Grid::HangingNodeRefiner_Grid | ( | SPRefinementProjector | projector = SPNULL | ) |
ug::HangingNodeRefiner_Grid::HangingNodeRefiner_Grid | ( | Grid & | grid, |
SPRefinementProjector | projector = SPNULL |
||
) |
References grid(), and set_grid().
|
virtual |
References set_grid().
|
inlinevirtual |
returns whether the refiner is able to perform adaptive refinement
pure virtual!
Implements ug::IRefiner.
|
virtual |
References grid(), and set_grid().
|
protected |
|
inlinevirtual |
|
protectedvirtual |
marks unmarked elements that have to be refined due to marked neighbors.
all elements that have to be refined will be written to the passed queues. Note that this will most likely be more elements than just the marked ones.
This method is virtual to allow derivates to mark additional elements as required. Normally a a derived class will first call the method of its this class and the perform its own operations.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Selector::begin(), ug::HangingNodeRefinerBase< Selector >::collect_objects_for_refine(), ug::ConstrainingEdge::constrained_vertex(), ug::ConstrainingFace::constrained_vertex(), ug::Selector::end(), ug::HangingNodeRefinerBase< Selector >::get_refmark_selector(), ug::ConstrainingEdge::num_constrained_vertices(), ug::ConstrainingFace::num_constrained_vertices(), and set_center_vertex().
|
inlinevirtual |
DEPRECIATED! Use grid(). Has to return the associated grid. Pure virtual.
Implements ug::IRefiner.
References m_pGrid.
Returns the vertex associated with the edge.
Implements ug::HangingNodeRefinerBase< Selector >.
References m_aaVertexEDGE.
Returns the vertex associated with the face.
Implements ug::HangingNodeRefinerBase< Selector >.
References m_aaVertexFACE.
|
virtual |
returns the local mark of the specified face or volume.
If the i-th edge of the element shall be refined, it holds true: 'get_local_mark(e) & 1<<i != 0'
Reimplemented from ug::IRefiner.
References m_aaLocalMark.
|
virtual |
returns the local mark of the specified face or volume.
If the i-th edge of the element shall be refined, it holds true: 'get_local_mark(e) & 1<<i != 0'
Reimplemented from ug::IRefiner.
References m_aaLocalMark.
|
inlinevirtual |
Returns the grid associated with the refiner.
Pure virtual. Specify this method in derived classes!
Implements ug::IRefiner.
References m_pGrid.
Referenced by assign_grid(), HangingNodeRefiner_Grid(), post_refine(), and set_grid().
|
virtual |
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References set_grid().
|
inlinevirtual |
returns true, if the refiner supports local marks.
Reimplemented from ug::IRefiner.
|
virtual |
Marks an edge for refinement (ignores RM_COARSEN).
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::HangingNodeRefinerBase< Selector >::mark(), and ug::RM_COARSEN.
|
virtual |
Marks a face for refinement (ignores RM_COARSEN).
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::HangingNodeRefinerBase< Selector >::mark(), and ug::RM_COARSEN.
|
virtual |
Marks a vertex for refinement (ignores RM_COARSEN).
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::HangingNodeRefinerBase< Selector >::mark(), and ug::RM_COARSEN.
|
virtual |
Marks a volume for refinement (ignores RM_COARSEN).
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::HangingNodeRefinerBase< Selector >::mark(), and ug::RM_COARSEN.
|
virtual |
Marks a face or volume for local refinement.
The passed mark is an or combination. If the i-th edge of the element shall be refined, it should hold true: 'mark & 1<<i != 0'. The passed element will also receive the RM_LOCAL flag.
Reimplemented from ug::IRefiner.
References ug::HangingNodeRefinerBase< Selector >::adjusting_ref_marks(), attach_local_marks(), m_aaLocalMark, ug::HangingNodeRefinerBase< Selector >::mark(), ug::IRefiner::marked_local(), ug::RM_LOCAL, and ug::RM_NONE.
|
virtual |
Marks a face or volume for local refinement.
The passed mark is an or combination. If the i-th edge of the element shall be refined, it should hold true: 'mark & 1<<i != 0'. The passed element will also receive the RM_LOCAL flag.
Reimplemented from ug::IRefiner.
References ug::HangingNodeRefinerBase< Selector >::adjusting_ref_marks(), attach_local_marks(), m_aaLocalMark, ug::HangingNodeRefinerBase< Selector >::mark(), ug::IRefiner::marked_local(), ug::RM_LOCAL, and ug::RM_NONE.
|
protectedvirtual |
returns the number of (globally) marked edges on this level of the hierarchy
Implements ug::IRefiner.
|
protected |
|
protectedvirtual |
returns the number of (globally) marked faces on this level of the hierarchy
Implements ug::IRefiner.
|
protectedvirtual |
returns the number of (globally) marked volumes on this level of the hierarchy
Implements ug::IRefiner.
|
protectedvirtual |
erases unused refined elements
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Selector::begin(), ug::CollectFaces(), ug::CollectVolumes(), ug::Selector::end(), ug::Grid::erase(), grid(), ug::LIB_GRID, m_pGrid, ug::HangingNodeRefinerBase< Selector >::m_selMarkedElements, ug::Grid::num_faces(), ug::Grid::num_volumes(), and UG_DLOG.
|
protectedvirtual |
called to refine the specified element.
Refines the element. Corner vertices of the newly created element can be specified through newCornerVrts. newCornerVrts = NULL (default) means, that the corner vertices of the original element shall be taken.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Grid::erase(), m_pGrid, ug::Grid::num_faces(), and ug::HangingNodeRefinerBase< Selector >::process_constraining_edge().
|
protectedvirtual |
called to refine the specified element.
Refines the element. Corner vertices of the newly created element can be specified through newCornerVrts. newCornerVrts = NULL (default) means, that the corner vertices of the original element shall be taken.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Grid::erase(), m_pGrid, ug::Grid::num_volumes(), and ug::HangingNodeRefinerBase< Selector >::process_constraining_face().
|
protectedvirtual |
called to refine the specified element.
Refines the element. Corner vertices of the newly created element can be specified through newCornerVrts. newCornerVrts = NULL (default) means, that the corner vertices of the original element shall be taken.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Grid::erase(), m_pGrid, ug::Grid::num_faces(), and ug::HangingNodeRefinerBase< Selector >::refine_edge_with_normal_vertex().
|
protectedvirtual |
called to refine the specified element.
Refines the element. Corner vertices of the newly created element can be specified through newCornerVrts. newCornerVrts = NULL (default) means, that the corner vertices of the original element shall be taken.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Grid::erase(), m_pGrid, ug::Grid::num_volumes(), and ug::HangingNodeRefinerBase< Selector >::refine_face_with_normal_vertex().
|
protectedvirtual |
called to refine the specified element.
Refines the element. Corner vertices of the newly created element can be specified through newCornerVrts. newCornerVrts = NULL (default) means, that the corner vertices of the original element shall be taken.
Reimplemented from ug::HangingNodeRefinerBase< Selector >.
References ug::Grid::erase(), m_pGrid, and ug::HangingNodeRefinerBase< Selector >::refine_volume_with_normal_vertex().
Associates a vertex with the edge.
Implements ug::HangingNodeRefinerBase< Selector >.
References m_aaVertexEDGE.
Referenced by collect_objects_for_refine().
Associates a vertex with the face.
Implements ug::HangingNodeRefinerBase< Selector >.
References m_aaVertexFACE.
|
protected |
performs registration and deregistration at a grid.
Initializes all grid related variables. call set_grid(NULL) to unregister the observer from a grid.
Please note that though the base grid features a set_grid method, it is not declared virtual. This is because we want to call it during construction and destruction.
References ug::Grid::attach_to_edges_dv(), ug::Grid::attach_to_faces_dv(), ug::Grid::detach_from_edges(), ug::Grid::detach_from_faces(), ug::Grid::detach_from_volumes(), grid(), m_aaLocalMark, m_aaVertexEDGE, m_aaVertexFACE, m_aLocalMark, m_aVertex, m_pGrid, and ug::HangingNodeRefinerBase< Selector >::set_grid().
Referenced by assign_grid(), grid_to_be_destroyed(), HangingNodeRefiner_Grid(), and ~HangingNodeRefiner_Grid().
|
private |
Referenced by attach_local_marks(), get_local_mark(), mark_local(), and set_grid().
|
private |
Referenced by get_center_vertex(), set_center_vertex(), and set_grid().
|
private |
Referenced by get_center_vertex(), set_center_vertex(), and set_grid().
|
private |
Referenced by attach_local_marks(), and set_grid().
|
private |
Referenced by set_grid().
|
private |