ViennaGrid - The Vienna Grid Library  2.1.0
Data Structures | Namespaces | Functions
viennagrid/mesh/segmentation.hpp File Reference

Contains definition and implementation of segmentations and segments. More...

#include <limits>
#include <string>
#include <sstream>
#include "viennagrid/forwards.hpp"
#include "viennagrid/mesh/mesh.hpp"
#include "viennagrid/accessor.hpp"

Go to the source code of this file.

Data Structures

struct  add_functor< SegmentT >
 For internal use only. More...
struct  cell_only_segmentation< MeshT, ViewT, SegmentIDType, AppendixType, view_container_tag >
 Metafunction for obtaining a segmentation type using only cells for a mesh type and with settings. Segment element information is not present (see segment_element_info for more information) More...
class  segment_info_t< element_segment_mapping_type, container_tag >::const_iterator
class  segmentation< WrappedConfigType >::const_iterator
 Const iterator for iterating over all segments. More...
struct  copy_segmentation_functor< SourceMeshT, SourceSegmentationT, DestinationMeshT, DestinationSegmentationT >
 Functor for copying a segmentation. For internal use only. More...
struct  element_segment_mapping< segment_id_type_, segment_element_info_type_ >
 For internal use only. More...
struct  interface_information_collection_typemap< element_taglist, segment_id_type, interface_information_container_tag, ChangeCounterType >
struct  interface_information_collection_typemap_impl< segment_id_type, interface_information_container_tag, ChangeCounterType, viennagrid::null_type >
struct  interface_information_collection_typemap_impl< segment_id_type, interface_information_container_tag, ChangeCounterType, viennagrid::typelist< element_tag, tail > >
struct  interface_information_wrapper< segment_id_type, container_type_, ChangeCounterType >
 For internal use only. More...
class  segmentation< WrappedConfigType >::iterator
 Iterator for iterating over all segments. More...
struct  mesh< viennagrid::segment_handle< SegmentationT > >
 Meta function for querying the mesh type of a segment handle. More...
struct  mesh< viennagrid::segmentation< WrappedConfigType > >
 Meta function for querying the mesh type of a segmentation. More...
struct  non_recursive_erase_functor< SegmentHandleT >
struct  oriented_3d_hull_segmentation< MeshT, ViewT, SegmentIDType, AppendixType, view_container_tag >
 Metafunction for obtaining a segmentation type for a 3D hull mesh type and with settings. Segment element information is a bool (see segment_element_info for more information) More...
struct  segmentation< WrappedConfigType >::segment
 For internal use only.
class  segment_handle< viennagrid::segmentation< WrappedConfigType > >
 A segment defines a submesh within a segmentation. The segment_handle is used to deal with segments, since segments are not represented by a dedicated class. More...
class  segment_id_not_found_exception
 Provides an exception for the case a segment id cannot be found. More...
struct  segment_id_range< SegmentationT, ElementTypeOrTagT >
 Defines a range of segment IDs which represents segments in which an element is included. More...
struct  segment_id_range_t< SegmentInfoT >
 Defines a range of segment IDs which represents segments in which an element is included, use result_of::segment_id_range for defining this type. More...
struct  segment_info_t< element_segment_mapping_type, container_tag >
 Information container providing iteration over segments of a segmentation. More...
struct  segment_interface_information_wrapper< container_type_, ChangeCounterType >
 For internal use only. More...
class  segment_name_collision_exception
 Provides an exception for the case of a name collision of segment names. More...
class  segment_name_not_found_exception
 Provides an exception for the case a segment name cannot be found. More...
struct  segmentation< MeshT, ViewT, SegmentIDType, AppendixType, view_container_tag >
 Metafunction for obtaining a segmentation type for a mesh type and with settings. Segment element information is not present (see segment_element_info for more information) More...
class  segmentation< WrappedConfigType >
 A segmentation is a logical decomposition of the mesh (or a subset thereof) into segments. Segments may overlap. More...
struct  segmentation< viennagrid::segment_handle< const SegmentationT > >
struct  segmentation< viennagrid::segment_handle< SegmentationT > >
 Returns the underlying segmentation type from a segment_handle (Segment) object. More...
struct  segmentation_info_container_typemap< viennagrid::null_type, segment_id_type, container_tag, segment_info_container_tag >
struct  segmentation_info_container_typemap< viennagrid::typelist< viennagrid::static_pair< element_tag, segment_info_type >, tail >, segment_id_type, container_tag, segment_info_container_tag >
struct  trivial_segmentation_appendix< viennagrid::null_type, segment_id_type, container_tag >
struct  trivial_segmentation_appendix< viennagrid::typelist< element_type, tail >, segment_id_type, container_tag >
struct  unchecked_add_functor< SegmentT >
 For internal use only. More...

Namespaces

namespace  viennagrid
 

The main ViennaGrid namespace. Most user functionality resides directly in this namespace rather than in sub-namespaces.


namespace  viennagrid::config
 

Provides a number of predefined configuration classes, which cover the most frequent use cases.


namespace  viennagrid::detail
 

Namespace for implementation details. Not intended to be used directly by a library user.


namespace  viennagrid::detail::result_of
 

Namespace for metafunctions for implementation details. Not intended to be used directly by a library user.


namespace  viennagrid::result_of
 

The metafunction layer. Provides type generators that derive the respective type from the mesh configuration.


Functions

template<typename segment_handle_type , typename element_segment_mapping_type , typename container_tag >
void add (segment_handle_type &segment, segment_info_t< element_segment_mapping_type, container_tag > &segment_info)
 For internal use only.
template<typename segment_handle_type , typename accessor_type , typename element_type >
void add (segment_handle_type &segment, accessor_type accessor, element_type &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
void add (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 Adds an element to a segment, all boundary elements are added recursively.
template<typename SegmentHandleT , typename ElementHandleT >
void add (SegmentHandleT &segment, ElementHandleT element_handle)
 Adds an element to a segment, all boundary elements are added recursively.
template<typename WrappedConfigT , typename ElementTagT , typename WrappedElementConfigT >
void add (segmentation< WrappedConfigT > &segmentation_obj, typename segmentation< WrappedConfigT >::segment_id_type segment_id, viennagrid::element< ElementTagT, WrappedElementConfigT > &element)
 Adds an element to a segment, all boundary elements are added recursively.
template<typename WrappedConfigT , typename ElementHandleT >
void add (segmentation< WrappedConfigT > &segmentation_obj, typename segmentation< WrappedConfigT >::segment_id_type segment_id, ElementHandleT element_handle)
 Adds an element to a segment, all boundary elements are added recursively.
template<typename WrappedConfigT , typename SegmentIDIteratorT , typename ElementTagT , typename WrappedElementConfigT >
void add (segmentation< WrappedConfigT > &segmentation_obj, SegmentIDIteratorT segment_ids_it, SegmentIDIteratorT const &segment_ids_end, viennagrid::element< ElementTagT, WrappedElementConfigT > &element)
 Adds an element to all segment provided in a segment id iterator range.
template<typename WrappedConfigT , typename SegmentIDIteratorT , typename ElementHandleT >
void add (segmentation< WrappedConfigT > &segmentation_obj, SegmentIDIteratorT segment_ids_it, SegmentIDIteratorT const &segment_ids_end, ElementHandleT element_handle)
 Adds an element to all segment provided in a segment id iterator range.
template<typename ViewT , typename HandleT >
void add_single_handle (ViewT &view_or_segment, HandleT handle)
 Adds a single element handle (no boundary elements/handles) to a view if it isn't already present in that view. The runtime of this function is linear in the number of elements present in the view.
template<typename SegmentationT >
void clear (segment_handle< SegmentationT > &segment_)
 Completely clears a segmentation.
template<typename WrappedConfigT >
void clear (segmentation< WrappedConfigT > &segmentation_)
 Completely clears a segmentation.
template<typename SourceMeshT , typename SourceSegmentationT , typename DestinationMeshT , typename DestinationSegmentationT >
void copy_segmentation (SourceMeshT const &src_mesh_, SourceSegmentationT const &src_segmentation_, DestinationMeshT &dst_mesh_, DestinationSegmentationT &dst_segmentation_)
 Copies a segmentation. Warning: may be slow!
template<typename SegmentationT , typename HandleT >
detail::result_of::value_type
< HandleT >::type & 
dereference_handle (segment_handle< SegmentationT > &segment_handle, HandleT const &handle)
 Function for dereferencing a handle using a segment object.
template<typename SegmentationT , typename HandleT >
detail::result_of::value_type
< HandleT >::type const & 
dereference_handle (segment_handle< SegmentationT > const &segment_handle, HandleT const &handle)
 Function for dereferencing a handle using a segment object.
template<typename WrappedConfigT , typename HandleT >
detail::result_of::value_type
< HandleT >::type & 
dereference_handle (segmentation< WrappedConfigT > &segmentation_, HandleT const &handle)
 Function for dereferencing a handle using a segmentation.
template<typename WrappedConfigT , typename HandleT >
detail::result_of::value_type
< HandleT >::type const & 
dereference_handle (segmentation< WrappedConfigT > const &segmentation_, HandleT const &handle)
 Function for dereferencing a handle using a segmentation.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::element_collection_type & 
element_collection (segment_handle< SegmentationType > &segment)
 For internal use only.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::element_collection_type
const & 
element_collection (segment_handle< SegmentationType > const &segment)
 For internal use only.
template<typename WrappedConfigT >
viennagrid::segmentation
< WrappedConfigT >
::view_type::element_collection_type & 
element_collection (viennagrid::segmentation< WrappedConfigT > &segmentation)
 For internal use only.
template<typename WrappedConfigT >
viennagrid::segmentation
< WrappedConfigT >
::view_type::element_collection_type
const & 
element_collection (viennagrid::segmentation< WrappedConfigT > const &segmentation)
 For internal use only.
template<typename SegmentationT >
viennagrid::detail::result_of::lookup
< typename
SegmentationT::appendix_type,
element_segment_mapping_tag >
::type & 
element_segment_mapping_collection (SegmentationT &segmentation)
template<typename SegmentationT >
viennagrid::detail::result_of::lookup
< typename
SegmentationT::appendix_type,
element_segment_mapping_tag >
::type const & 
element_segment_mapping_collection (SegmentationT const &segmentation)
template<typename segment_handle_type >
viennagrid::detail::result_of::lookup
< typename
segment_handle_type::segmentation_type::appendix_type,
element_segment_mapping_tag >
::type & 
element_segment_mapping_collection (segment_handle_type &segment)
template<typename segment_handle_type >
viennagrid::detail::result_of::lookup
< typename
segment_handle_type::segmentation_type::appendix_type,
element_segment_mapping_tag >
::type const & 
element_segment_mapping_collection (segment_handle_type const &segment)
template<typename SegmentHandleT , typename ElementSegmentMappingT , typename ContainerTagT >
void erase (SegmentHandleT &segment, segment_info_t< ElementSegmentMappingT, ContainerTagT > &segment_info)
 For internal use only.
template<typename SegmentHandleT , typename AccessorT , typename ElementT >
void erase (SegmentHandleT &segment, AccessorT accessor, ElementT const &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
void erase (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 Deletes an element from a segment. The runtime of this function is linear in the number of elements of the element type to delete.
template<typename SegmentationType , typename ElementTagT , typename WrappedConfigT >
result_of::handle
< segment_handle
< SegmentationType >
, viennagrid::element
< ElementTagT, WrappedConfigT >
>::type 
handle (segment_handle< SegmentationType > &mesh_or_segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 Function for creating a handle for a given element using a mesh/segment object.
template<typename SegmentationType , typename ElementTagT , typename WrappedConfigT >
result_of::const_handle
< segment_handle
< SegmentationType >
, viennagrid::element
< ElementTagT, WrappedConfigT >
>::type 
handle (segment_handle< SegmentationType > const &mesh_or_segment, viennagrid::element< ElementTagT, WrappedConfigT > const &element)
 Function for creating a handle for a given element using a mesh/segment object, const version.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::inserter_type::id_generator_type & 
id_generator (segment_handle< SegmentationType > &segment)
 For internal use only.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::inserter_type::id_generator_type
const & 
id_generator (segment_handle< SegmentationType > const &segment)
 For internal use only.
template<typename ElementTypeOrTag , typename SegmentationType >
viennagrid::result_of::id
< typename
viennagrid::result_of::element
< segment_handle
< SegmentationType >
, ElementTypeOrTag >::type >
::type 
id_upper_bound (segment_handle< SegmentationType > const &segment)
 Function for obtaining the heighest ID for a specific element type/tag in a segment.
template<typename SegmentationType >
void increment_change_counter (segment_handle< SegmentationType > &segment)
 For internal use only.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::inserter_type & 
inserter (segment_handle< SegmentationType > &segment)
 For internal use only.
template<typename SegmentationType >
viennagrid::segment_handle
< SegmentationType >
::view_type::inserter_type
const & 
inserter (segment_handle< SegmentationType > const &segment)
 For internal use only.
template<typename element_tag , typename segment_handle_type >
viennagrid::detail::result_of::lookup
< typename
viennagrid::detail::result_of::lookup
< typename
segment_handle_type::segmentation_type::appendix_type,
interface_information_collection_tag >
::type, element_tag >
::type::segment_interface_information_wrapper_type & 
interface_information_collection (segment_handle_type &seg0, segment_handle_type &seg1)
template<typename element_tag , typename segment_handle_type >
viennagrid::detail::result_of::lookup
< typename
viennagrid::detail::result_of::lookup
< typename
segment_handle_type::segmentation_type::appendix_type,
interface_information_collection_tag >
::type, element_tag >
::type::segment_interface_information_wrapper_type
const & 
interface_information_collection (segment_handle_type const &seg0, segment_handle_type const &seg1)
template<typename segment_handle_type , typename element_segment_mapping_type , typename container_tag >
bool is_in_segment (segment_handle_type const &segment, segment_info_t< element_segment_mapping_type, container_tag > const &segment_info)
 For internal use only.
template<typename segment_handle_type , typename accessor_type , typename element_type >
bool is_in_segment (segment_handle_type const &segment, accessor_type const accessor, element_type const &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
bool is_in_segment (SegmentHandleT const &segment, viennagrid::element< ElementTagT, WrappedConfigT > const &element)
 Queries if element is within a given segment.
template<typename SegmentationType >
bool is_obsolete (segment_handle< SegmentationType > const &segment, typename segment_handle< SegmentationType >::view_type::change_counter_type change_counter_to_check)
 For internal use only.
template<typename SegmentationT >
mesh_proxy< typename
SegmentationT::view_type > 
make_view (segment_handle< SegmentationT > &segment)
 Creates an empty view out of a segment.
template<typename SegmentationType >
result_of::point
< segment_handle
< SegmentationType > >::type & 
point (segment_handle< SegmentationType > &segment, typename result_of::vertex< typename SegmentationType::mesh_type >::type &vertex)
 Function for obtaining the point from a vertex.
template<typename SegmentationType >
result_of::point
< segment_handle
< SegmentationType > >::type
const & 
point (segment_handle< SegmentationType > const &segment, typename result_of::vertex< typename SegmentationType::mesh_type >::type const &vertex)
 Function for obtaining the point from a vertex, const version.
template<typename SegmentationType >
result_of::point
< segment_handle
< SegmentationType > >::type & 
point (segment_handle< SegmentationType > &segment, typename result_of::vertex_handle< typename SegmentationType::mesh_type >::type vertex_handle)
 Function for obtaining the point from a vertex.
template<typename SegmentationType >
result_of::point
< segment_handle
< SegmentationType > >::type
const & 
point (segment_handle< SegmentationType > const &segment, typename result_of::const_vertex_handle< typename SegmentationType::mesh_type >::type vertex_handle)
 Function for obtaining the point from a vertex, const version.
template<bool generate_id, bool call_callback, typename SegmentationType , typename ElementTag , typename WrappedConfigType >
std::pair< typename
viennagrid::result_of::container_of
< typename
viennagrid::result_of::element_collection
< viennagrid::segment_handle
< SegmentationType > >::type,
viennagrid::element
< ElementTag,
WrappedConfigType >
>::type::handle_type, bool > 
push_element (viennagrid::segment_handle< SegmentationType > &segment, viennagrid::element< ElementTag, WrappedConfigType > const &element)
 For internal use only.
template<typename segment_handle_type , typename element_segment_mapping_type , typename container_tag >
element_segment_mapping_type::segment_element_info_type * segment_element_info (segment_handle_type const &segment, segment_info_t< element_segment_mapping_type, container_tag > &segment_info)
 For internal use only.
template<typename segment_handle_type , typename element_segment_mapping_type , typename container_tag >
element_segment_mapping_type::segment_element_info_type
const * 
segment_element_info (segment_handle_type const &segment, segment_info_t< element_segment_mapping_type, container_tag > const &segment_info)
 For internal use only.
template<typename segment_handle_type , typename accessor_type , typename element_type >
accessor_type::value_type::segment_element_info_type * segment_element_info (segment_handle_type &segment, accessor_type accessor, element_type const &element)
 For internal use only.
template<typename segment_handle_type , typename accessor_type , typename element_type >
accessor_type::value_type::segment_element_info_type
const * 
segment_element_info (segment_handle_type const &segment, const accessor_type accessor, element_type const &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
viennagrid::result_of::container_of
< typename
viennagrid::detail::result_of::lookup
< typename
SegmentHandleT::segmentation_type::appendix_type,
viennagrid::detail::element_segment_mapping_tag >
::type, viennagrid::element
< ElementTagT, WrappedConfigT >
>::type::value_type::segment_element_info_type
const * 
segment_element_info (SegmentHandleT const &segment, viennagrid::element< ElementTagT, WrappedConfigT > const &element)
 Returns a pointer to additional segment element information. Segment element information is meta information for a combination of a segment and an element, e.g. the orientation of a triangle in a segment in a 3D hull mesh.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
viennagrid::result_of::container_of
< typename
viennagrid::detail::result_of::lookup
< typename
SegmentHandleT::segmentation_type::appendix_type,
viennagrid::detail::element_segment_mapping_tag >
::type, viennagrid::element
< ElementTagT, WrappedConfigT >
>::type::value_type::segment_element_info_type * 
segment_element_info (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > const &element)
 Returns a pointer to additional segment element information. Segment element information is meta information for a combination of a segment and an element, e.g. the orientation of a triangle in a segment in a 3D hull mesh. Const version.
template<typename SegmentationT , typename ElementTagT , typename WrappedConfigT >
result_of::segment_id_range
< SegmentationT,
viennagrid::element
< ElementTagT, WrappedConfigT >
>::type 
segment_ids (SegmentationT const &segmentation, viennagrid::element< ElementTagT, WrappedConfigT > const &element)
 Obtains the segment ID range of an element within a segmentation. The segment ID range holds all IDs of segments in which the element is included.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
void simple_add (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
void simple_unchecked_add (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 For internal use only.
template<typename SegmentHandleT , typename ElementTagT , typename WrappedConfigT >
void unchecked_add (SegmentHandleT &segment, viennagrid::element< ElementTagT, WrappedConfigT > &element)
 Adds an element to a segment, all boundary elements are added recursively, does guarantee that elements are only present once within the segment.
template<typename SegmentHandleT , typename ElementHandleT >
void unchecked_add (SegmentHandleT &segment, ElementHandleT element_handle)
 Adds an element to a segment, all boundary elements are added recursively, does guarantee that elements are only present once within the segment.
template<typename SegmentationType >
void update_change_counter (segment_handle< SegmentationType > &segment, typename segment_handle< SegmentationType >::view_type::change_counter_type &change_counter_to_update)
 For internal use only.

Detailed Description

Contains definition and implementation of segmentations and segments.