ug4
|
Specialization of ug::HangingNodeRefiner for ug::Grid. More...
#include <hanging_node_refiner_grid.h>
Public Types | |
typedef HangingNodeRefinerBase< Selector > | BaseClass |
![]() | |
enum | HNodeRefMarks |
typedef Selector | selector_t |
Public Member Functions | |
virtual bool | adaptivity_supported () const |
returns whether the refiner is able to perform adaptive refinement | |
virtual void | assign_grid (Grid &grid) |
virtual bool | coarsening_supported () const |
returns true, if the refiner supports coarsening. | |
virtual Grid * | get_associated_grid () |
DEPRECIATED! Use grid(). Has to return the associated grid. Pure virtual. | |
virtual int | get_local_mark (Face *f) const |
returns the local mark of the specified face or volume. | |
virtual int | get_local_mark (Volume *f) const |
returns the local mark of the specified face or volume. | |
virtual Grid * | grid () |
Returns the grid associated with the refiner. | |
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. | |
virtual bool | mark (Edge *e, RefinementMark refMark=RM_REFINE) |
Marks an edge for refinement (ignores RM_COARSEN). | |
virtual bool | mark (Face *f, RefinementMark refMark=RM_REFINE) |
Marks a face for refinement (ignores RM_COARSEN). | |
virtual bool | mark (Vertex *v, RefinementMark refMark=RM_REFINE) |
Marks a vertex for refinement (ignores RM_COARSEN). | |
virtual bool | mark (Volume *v, RefinementMark refMark=RM_REFINE) |
Marks a volume for refinement (ignores RM_COARSEN). | |
virtual void | mark_local (Face *f, int localMark) |
Marks a face or volume for local refinement. | |
virtual void | mark_local (Volume *f, int localMark) |
Marks a face or volume for local refinement. | |
virtual | ~HangingNodeRefiner_Grid () |
![]() | |
void | add_ref_mark_adjuster (SPIRefMarkAdjuster adjuster) |
Add a refmark adjuster, which will be called while marks are adjusted during refinement / coarsening. | |
virtual void | clear_marks () |
clears all marks. Default implementation is empty | |
HangingNodeRefinerBase (SPRefinementProjector projector=SPNULL) | |
void | mark (const TIterator &iterBegin, const TIterator &iterEnd, RefinementMark refMark=RM_REFINE) |
marks all elements between iterBegin and iterEnd. | |
virtual bool | mark (Edge *e, RefinementMark refMark=RM_REFINE) |
Marks an element for refinement. Default implementation is empty. | |
virtual bool | mark (Face *f, RefinementMark refMark=RM_REFINE) |
Marks an element for refinement. Default implementation is empty. | |
virtual bool | mark (GridObject *o, RefinementMark refMark=RM_REFINE) |
marks the specified geometric object | |
virtual bool | mark (Vertex *v, RefinementMark refMark=RM_REFINE) |
Marks an element for refinement. Default implementation is empty. | |
virtual bool | mark (Volume *v, RefinementMark refMark=RM_REFINE) |
Marks an element for refinement. Default implementation is empty. | |
virtual void | mark_neighborhood (size_t numIterations, RefinementMark refMark, bool sideNbrsOnly) |
Marks the neighborhood of the current selection. | |
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. | |
virtual | ~HangingNodeRefinerBase () |
void | enable_node_dependency_order_1 (bool bEnable) |
enables or disables node-dependency-order-1. | |
bool | node_dependency_order_1_enabled () |
enables or disables node-dependency-order-1. | |
virtual RefinementMark | get_mark (Vertex *v) const |
Returns the mark of a given element. | |
virtual RefinementMark | get_mark (Edge *e) const |
Returns the mark of a given element. | |
virtual RefinementMark | get_mark (Face *f) const |
Returns the mark of a given element. | |
virtual RefinementMark | get_mark (Volume *v) const |
Returns the mark of a given element. | |
![]() | |
bool | coarsen () |
Performs coarsening on the elements marked RM_COARSEN. | |
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 | |
int | get_local_edge_mark (Volume *vol, Edge *e) const |
returns the local mark of the specified edge of the given volume | |
int | get_local_face_mark (Volume *vol, Face *f) const |
returns the local mark of the specified face of the given volume | |
virtual RefinementMark | get_mark (GridObject *o) const |
returns the mark of the specified geometric object | |
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. | |
void | mark_neighborhood (size_t numIterations) |
marks the neighborhood of currently marked elements. | |
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 | |
size_t | num_marked_edges (std::vector< int > &numMarkedEdgesOut) |
returns the number of (globally) marked edges on all levels of the hierarchy | |
size_t | num_marked_elements () |
returns the number of (globally) marked grid-objects of highest dimension | |
size_t | num_marked_elements (std::vector< int > &numMarkedElemsOut) |
returns the number of (globally) marked grid-objects of highest dimension | |
size_t | num_marked_faces () |
returns the number of (globally) marked faces on all levels of the hierarchy | |
size_t | num_marked_faces (std::vector< int > &numMarkedFacesOut) |
returns the number of (globally) marked faces on all levels of the hierarchy | |
size_t | num_marked_volumes () |
returns the number of (globally) marked volumes on all levels of the hierarchy | |
size_t | num_marked_volumes (std::vector< int > &numMarkedVolsOut) |
returns the number of (globally) marked volumes on all levels of the hierarchy | |
SPRefinementProjector | projector () |
void | refine () |
Performs refinement on the marked elements. | |
void | set_adjusted_marks_debug_filename (const char *filename) |
sets a filename to which adjusted marks are saved during refinement / coarsening | |
void | set_projector (SPRefinementProjector projector) |
virtual | ~IRefiner () |
void | adaption_begins () |
notifies all listeners of the associated message-hub, that adaption begins / ends. | |
void | adaption_ends () |
notifies all listeners of the associated message-hub, that adaption begins / ends. | |
![]() | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
virtual Vertex * | get_center_vertex (Edge *e) |
Returns the vertex associated with the edge. | |
virtual Vertex * | get_center_vertex (Face *f) |
Returns the vertex associated with the face. | |
virtual void | num_marked_edges_local (std::vector< int > &numMarkedEdgesOut) |
returns the number of (globally) marked edges on this level of the hierarchy | |
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 | |
virtual void | num_marked_volumes_local (std::vector< int > &numMarkedVolsOut) |
returns the number of (globally) marked volumes on this level of the hierarchy | |
virtual void | post_refine () |
erases unused refined elements | |
virtual void | process_constraining_edge (ConstrainingEdge *cge) |
called to refine the specified element. | |
virtual void | process_constraining_face (ConstrainingFace *cgf) |
called to refine the specified element. | |
virtual void | refine_edge_with_normal_vertex (Edge *e, Vertex **newCornerVrts=NULL) |
called to refine the specified element. | |
virtual void | refine_face_with_normal_vertex (Face *f, Vertex **newCornerVrts=NULL) |
called to refine the specified element. | |
virtual void | refine_volume_with_normal_vertex (Volume *v, Vertex **newVolumeVrts=NULL) |
called to refine the specified element. | |
virtual void | set_center_vertex (Edge *e, Vertex *v) |
Associates a vertex with the edge. | |
virtual void | set_center_vertex (Face *f, Vertex *v) |
Associates a vertex with the face. | |
void | set_grid (Grid *grid) |
performs registration and deregistration at a grid. | |
![]() | |
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. | |
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. | |
virtual void | pre_refine () |
virtual bool | refinement_is_allowed (Edge *elem) |
a callback that allows to deny refinement of special edges | |
virtual bool | refinement_is_allowed (Face *elem) |
a callback that allows to deny refinement of special faces | |
virtual bool | refinement_is_allowed (Vertex *elem) |
a callback that allows to deny refinement of special vertices | |
virtual bool | refinement_is_allowed (Volume *elem) |
a callback that allows to deny refinement of special volumes | |
bool | remove_coarsen_marks () |
removes coarsen marks from the selection | |
void | remove_hmark (TElem *elem, uint mark) |
void | set_grid (typename TSelector::grid_type *grid) |
performs registration and deregistration at a grid. | |
virtual void | process_constrained_vertex (ConstrainedVertex *cdv) |
called to refine the specified element. | |
virtual void | process_constrained_edge (ConstrainedEdge *cde) |
called to refine the specified element. | |
virtual void | refine_edge_with_hanging_vertex (Edge *e, Vertex **newCornerVrts=NULL) |
called to refine the specified element. | |
virtual void | process_constrained_face (ConstrainedFace *cdf) |
called to refine the specified element. | |
virtual void | refine_face_with_hanging_vertex (Face *f, Vertex **newCornerVrts=NULL) |
called to refine the specified element. | |
![]() | |
virtual bool | perform_coarsening () |
Called by coarsen(). Derived classes sould implement their coarsen algorithm here. | |
void | set_message_hub (SPMessageHub msgHub) |
sets the message hub. | |
Additional Inherited Members | |
![]() | |
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 |
![]() | |
std::vector< SPIRefMarkAdjuster > | m_refMarkAdjusters |
Selector | m_selMarkedElements |
![]() | |
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().
Referenced by ug::bridge::RegisterGridBridge_Refinement().
|
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.
Referenced by mark_local(), and mark_local().
|
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, 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, 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(), get_local_mark(), mark_local(), 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 |