ug4
ug::GlobalSubdivisionMultiGridRefiner< TAPosition > Class Template Reference

Specialization of the GlobalMultiGridRefiner class to incorporate subdivision refinement. More...

#include <global_subdivision_multi_grid_refiner.h>

+ Inheritance diagram for ug::GlobalSubdivisionMultiGridRefiner< TAPosition >:

Public Member Functions

void assign_mark_subset_handler (MGSubsetHandler &markSH)
 
void assign_mark_subset_handler (MGSubsetHandler *markSH)
 sets the SubsetHandler designated for obligatory marked manifold elements More...
 
void assign_position_attachment (TAPosition &aPos)
 
void assign_position_attachment (TAPosition *aPos)
 sets the position attachment depending on the world dimension More...
 
void assign_subset_handler (MGSubsetHandler &sh)
 
void assign_subset_handler (MGSubsetHandler *sh)
 sets the default SubsetHandler More...
 
 GlobalSubdivisionMultiGridRefiner (MultiGrid &mg, SPRefinementProjector projector=SPNULL)
 
 GlobalSubdivisionMultiGridRefiner (MultiGrid &mg, TAPosition &aPos, MGSubsetHandler &sh, MGSubsetHandler &markSH, SPRefinementProjector projector=SPNULL)
 
 GlobalSubdivisionMultiGridRefiner (SPRefinementProjector projector=SPNULL)
 
void nest_hierarchy ()
 projection of the vertices of all levels to their smooth subdivision limit positions to ensure node nested hierarchy More...
 
void set_constrained_subdivision (bool constrained)
 sets constrained subdivision volumes scheme More...
 
void set_linear_manifold_subsets (MGSubsetHandler &linearManifoldSH, const char *linearManifoldSubsets)
 sets the manifold subsets which shall be linearly refined More...
 
virtual ~GlobalSubdivisionMultiGridRefiner ()
 
- Public Member Functions inherited from ug::GlobalMultiGridRefiner
virtual bool adaptivity_supported () const
 returns whether the refiner is able to perform adaptive refinement More...
 
void assign_grid (MultiGrid &mg)
 
void assign_grid (MultiGrid *mg)
 
virtual bool coarsening_supported () const
 returns true, if the refiner supports coarsening. More...
 
virtual Gridget_associated_grid ()
 DEPRECIATED! Use grid(). Has to return the associated grid. Pure virtual. More...
 
 GlobalMultiGridRefiner (MultiGrid &mg, SPRefinementProjector projector=SPNULL)
 
 GlobalMultiGridRefiner (SPRefinementProjector projector=SPNULL)
 
virtual Gridgrid ()
 Returns the grid associated with the refiner. More...
 
virtual void grid_to_be_destroyed (Grid *grid)
 
virtual MultiGridmulti_grid ()
 
virtual bool save_marks_to_file (const char *filename)
 Writes the associated grid and marks to a file. Pure virtual. More...
 
virtual ~GlobalMultiGridRefiner ()
 
- Public Member Functions inherited from ug::IRefiner
virtual void clear_marks ()
 clears all marks. Default implementation is empty More...
 
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)
 
virtual bool local_marks_supported () const
 returns true, if the refiner supports local marks. More...
 
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...
 
virtual void mark_neighborhood (size_t numIterations, RefinementMark refMark, bool sideNbrsOnly)
 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 ()
 
virtual bool mark (Vertex *v, RefinementMark refMark=RM_REFINE)
 Marks an element for refinement. Default implementation is empty. More...
 
virtual bool mark (Edge *e, RefinementMark refMark=RM_REFINE)
 Marks an element for refinement. Default implementation is empty. More...
 
virtual bool mark (Face *f, RefinementMark refMark=RM_REFINE)
 Marks an element for refinement. Default implementation is empty. More...
 
virtual bool mark (Volume *v, RefinementMark refMark=RM_REFINE)
 Marks an element for refinement. Default implementation is empty. More...
 
virtual void mark_local (Face *e, int mark)
 Marks a face or volume for local refinement. More...
 
virtual void mark_local (Volume *e, int mark)
 Marks a face or volume for local refinement. More...
 
virtual int get_local_mark (Face *e) const
 returns the local mark of the specified face or volume. More...
 
virtual int get_local_mark (Volume *e) const
 returns the local mark of the specified face or volume. More...
 
virtual RefinementMark get_mark (Vertex *v) const
 Returns the mark of a given element. Default returns RM_REFINE. More...
 
virtual RefinementMark get_mark (Edge *e) const
 Returns the mark of a given element. Default returns RM_REFINE. More...
 
virtual RefinementMark get_mark (Face *f) const
 Returns the mark of a given element. Default returns RM_REFINE. More...
 
virtual RefinementMark get_mark (Volume *v) const
 Returns the mark of a given element. Default returns RM_REFINE. More...
 
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

virtual void refinement_step_ends ()
 wrapper for smooth() method in parallel case (see class ParallelGlobalSubdivisionRefiner) More...
 
void smooth ()
 performs subdivision smoothing on the marked elements after base class regular refinement More...
 
- Protected Member Functions inherited from ug::GlobalMultiGridRefiner
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 perform_refinement ()
 performs refinement on the marked elements. More...
 
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...
 
virtual void refinement_step_begins ()
 this method helps derived classes to perform operations directly before actual element refinement is performed. 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...
 

Protected Attributes

bool m_bConstrained
 
TAPosition * m_pAPos
 
MGSubsetHandlerm_pMarkSH
 
MGSubsetHandlerm_pSH
 
MGSubsetHandlerm_spLinearManifoldSH
 
- Protected Attributes inherited from ug::GlobalMultiGridRefiner
MultiGridm_pMG
 
- 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
 

Detailed Description

template<class TAPosition>
class ug::GlobalSubdivisionMultiGridRefiner< TAPosition >

Specialization of the GlobalMultiGridRefiner class to incorporate subdivision refinement.

Each step of global refinement is subsequently followed by a vertex smoothing pass determined by a user-specified subdivision scheme.

Currently this only works in 2d and 3d.

Constructor & Destructor Documentation

◆ GlobalSubdivisionMultiGridRefiner() [1/3]

◆ GlobalSubdivisionMultiGridRefiner() [2/3]

◆ GlobalSubdivisionMultiGridRefiner() [3/3]

◆ ~GlobalSubdivisionMultiGridRefiner()

template<class TAPosition >
ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::~GlobalSubdivisionMultiGridRefiner
virtual

Member Function Documentation

◆ assign_mark_subset_handler() [1/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_mark_subset_handler ( MGSubsetHandler markSH)
inline

◆ assign_mark_subset_handler() [2/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_mark_subset_handler ( MGSubsetHandler markSH)
inline

◆ assign_position_attachment() [1/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_position_attachment ( TAPosition &  aPos)

References UG_THROW.

◆ assign_position_attachment() [2/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_position_attachment ( TAPosition *  aPos)

sets the position attachment depending on the world dimension

References UG_THROW.

Referenced by ug::GlobalSubdivisionDomainRefiner(), and ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::GlobalSubdivisionMultiGridRefiner().

◆ assign_subset_handler() [1/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_subset_handler ( MGSubsetHandler sh)
inline

◆ assign_subset_handler() [2/2]

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::assign_subset_handler ( MGSubsetHandler sh)
inline

◆ nest_hierarchy()

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::nest_hierarchy

projection of the vertices of all levels to their smooth subdivision limit positions to ensure node nested hierarchy

References ug::ProjectHierarchyToSubdivisionLimit(), and UG_THROW.

◆ refinement_step_ends()

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::refinement_step_ends
protectedvirtual

◆ set_constrained_subdivision()

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::set_constrained_subdivision ( bool  constrained)
inline

sets constrained subdivision volumes scheme

References ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::m_bConstrained.

Referenced by ug::GlobalSubdivisionDomainRefiner().

◆ set_linear_manifold_subsets()

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::set_linear_manifold_subsets ( MGSubsetHandler linearManifoldSH,
const char *  linearManifoldSubsets 
)

sets the manifold subsets which shall be linearly refined

References ug::InitLinearManifoldSubsetHandler().

Referenced by ug::GlobalSubdivisionDomainRefiner().

◆ smooth()

template<class TAPosition >
void ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::smooth
protected

performs subdivision smoothing on the marked elements after base class regular refinement

References ug::ApplySmoothSubdivisionVolumesToTopLevel(), and UG_THROW.

Referenced by ug::ParallelGlobalSubdivisionRefiner< TAPosition >::refinement_step_ends().

Member Data Documentation

◆ m_bConstrained

◆ m_pAPos

template<class TAPosition >
TAPosition* ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::m_pAPos
protected

◆ m_pMarkSH

◆ m_pSH

◆ m_spLinearManifoldSH

template<class TAPosition >
MGSubsetHandler* ug::GlobalSubdivisionMultiGridRefiner< TAPosition >::m_spLinearManifoldSH
protected

The documentation for this class was generated from the following files: