Programming tasks to Scientific Computing I
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType > Class Template Reference

#include <adaptiveTriangMesh.h>

Classes

class  DartIterator
 Dart iterator. More...
 

Public Types

typedef TriangleType ElementType
 
typedef DataTypeContainer::RealType RealType
 
typedef DataTypeContainer::DomVecType DomVecType
 
typedef DataTypeContainer::Point3DType Point3DType
 
typedef DataTypeContainer::Indices3DType Indices3DType
 
typedef DataTypeContainer::VectorType VectorType
 
typedef DataTypeContainer::MaskType MaskType
 
typedef std::vector< Indices3DTypeVertexIndicesType
 
typedef std::vector< Point3DTypeVertexCoordsType
 
- Public Types inherited from shellFE::TriangMesh< DataTypeContainer, TriangleType >
typedef TriangleType ElementType
 
typedef DataTypeContainer::RealType RealType
 
typedef DataTypeContainer::Point3DType Point3DType
 
typedef DataTypeContainer::TangentVecType TangentVecType
 
typedef DataTypeContainer::Indices3DType Indices3DType
 
typedef DataTypeContainer::VectorType VectorType
 
typedef DataTypeContainer::MaskType MaskType
 

Public Member Functions

 AdaptiveTriangMesh (const string &fileName)
 
const std::map< int, ParentInformation< DomVecType > > & getInterpolationMap () const
 
void mark (int element)
 Mark element for refinement. More...
 
void markAll ()
 Mark all elements for refinement. More...
 
void unmark (int element)
 Ensure that element is not marked for refinement. More...
 
void unmarkAll ()
 Unmark all elements. More...
 
bool isMarkedForRefinement (int element) const
 
int pushBackTriang (const Indices3DType newTriang)
 
void refineMarkedTriangles ()
 Refines at least all triangles that have been marked. More...
 
void prolongateLinearly (VectorType &function) const
 Prolongate by linear interpolation. More...
 
LocalIndex getLongestEdgeIndex (GlobalIndex triangle) const
 Get longest edge index (starting search possibly with a preferred edge) More...
 
- Public Member Functions inherited from shellFE::TriangMesh< DataTypeContainer, TriangleType >
 TriangMesh ()
 Create empty TriangMesh. More...
 
 TriangMesh (const string &fileName)
 
virtual ~TriangMesh ()
 
int getNumVertices () const
 
int getNumTriangs () const
 
int pushBackVertex (const Point3DType newVertex)
 Insert new vertex and return global index. More...
 
int pushBackTriang (const Indices3DType nodeIdx)
 Insert new triangle and return global index. More...
 
const Point3DTypegetVertex (const int num) const
 
void setVertex (const int num, const Point3DType Arg)
 
int getNeighbour (const int elementID, const int acrossLocalEdge) const
 Get neighbor on edge. More...
 
void setNeighbour (const int elementID, const int acrossLocalEdge, const int value) const
 Set neighbor on edge. More...
 
const TriangleTypegetTriang (const int num) const
 
TriangleTypegetTriang (const int num)
 Returns a triangle. More...
 
void setTriang (const int num, const TriangleType Arg)
 
int getTriangNodeIdx (const int num, const int localNode) const
 
void setTriangNodeIdx (const int num, const int localNode, const int newIdx)
 
void updateAllTriangles ()
 
void print ()
 
void loadFromLegacyVTK (const string &filename)
 load from file in the .vtk file format. Currently only loads geometric information. More...
 
void makeNeighbour () const
 
void makeOrientationConsistent ()
 

Protected Member Functions

GlobalIndex refine (GlobalIndex triangleToRefine)
 
GlobalIndex refine (const DartIterator &d)
 
GlobalIndex addEdgeMidpoint (const DartIterator &d)
 Add edge midpoint on d.edge, update _interpolationMap and return global index of node. More...
 

Protected Attributes

std::vector< bool > _markedForRefinement
 
std::map< int, ParentInformation< DomVecType > > _interpolationMap
 
- Protected Attributes inherited from shellFE::TriangMesh< DataTypeContainer, TriangleType >
std::vector< Point3DType_vertexIterator
 
std::vector< TriangleType_triangIterator
 
std::vector< Indices3DType_neighbour_
 

Detailed Description

template<typename DataTypeContainer, typename TriangleType>
class shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >

Definition at line 21 of file adaptiveTriangMesh.h.

Member Typedef Documentation

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::DomVecType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::DomVecType

Definition at line 26 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef TriangleType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::ElementType

Definition at line 24 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::Indices3DType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::Indices3DType

Definition at line 28 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::MaskType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::MaskType

Definition at line 30 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::Point3DType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::Point3DType

Definition at line 27 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::RealType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::RealType

Definition at line 25 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef DataTypeContainer::VectorType shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::VectorType

Definition at line 29 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef std::vector< Point3DType > shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::VertexCoordsType

Definition at line 32 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
typedef std::vector< Indices3DType > shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::VertexIndicesType

Definition at line 31 of file adaptiveTriangMesh.h.

Constructor & Destructor Documentation

template<typename DataTypeContainer , typename TriangleType >
shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::AdaptiveTriangMesh ( const string &  fileName)
inline

Definition at line 206 of file adaptiveTriangMesh.h.

206  :
207  TriangMesh<DataTypeContainer, TriangleType >( fileName ),
208  _markedForRefinement( this->getNumTriangs(), false )
209  {
210  this->makeNeighbour();
211  }
void makeNeighbour() const
Definition: triangMesh.h:180
std::vector< bool > _markedForRefinement
int getNumTriangs() const
Definition: triangMesh.h:46

Member Function Documentation

template<typename DataTypeContainer , typename TriangleType >
GlobalIndex shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::addEdgeMidpoint ( const DartIterator d)
inlineprotected

Add edge midpoint on d.edge, update _interpolationMap and return global index of node.

Note
For the lab, _interpolationMap can be ignored

Definition at line 325 of file adaptiveTriangMesh.h.

326  {
327  DartIterator d1 = d;
328  d1.flipNode();
329 
331  parents.globalIndices[0] = d.getGlobalNodeIndex();
332  parents.globalIndices[1] = d1.getGlobalNodeIndex();
333  parents.ElementIndex = d.getGlobalTriangleIndex();
334 
335  // get edge midpoint between nodes n1 and n2
336  Point3DType newVertex;
337  newVertex.setZero();
338  newVertex += this->getVertex ( d.getGlobalNodeIndex() );
339  newVertex += this->getVertex ( d1.getGlobalNodeIndex() );
340  newVertex /= 2.;
341 
342  // add new vertex
343  int newNodeIdx = this->pushBackVertex( newVertex );
344  _interpolationMap.insert( std::pair< int, ParentInformation<DomVecType> >( newNodeIdx, parents ) );
345  return newNodeIdx;
346  }
const Point3DType & getVertex(const int num) const
Definition: triangMesh.h:66
std::map< int, ParentInformation< DomVecType > > _interpolationMap
int pushBackVertex(const Point3DType newVertex)
Insert new vertex and return global index.
Definition: triangMesh.h:52
DataTypeContainer::Point3DType Point3DType
template<typename DataTypeContainer , typename TriangleType >
const std::map< int, ParentInformation<DomVecType> >& shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::getInterpolationMap ( ) const
inline

Definition at line 213 of file adaptiveTriangMesh.h.

214  {
215  return _interpolationMap;
216  }
std::map< int, ParentInformation< DomVecType > > _interpolationMap
template<typename DataTypeContainer , typename TriangleType >
LocalIndex shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::getLongestEdgeIndex ( GlobalIndex  triangle) const
inline

Get longest edge index (starting search possibly with a preferred edge)

Definition at line 281 of file adaptiveTriangMesh.h.

282  {
283  // get global node indices of triangle
284  const Indices3DType &triangIdx ( this->getTriang( triangle ).getGlobalNodeIdx() );
285  // assume that edge 0 is longest edge
286  LocalIndex localIdx = 0;
287  Point3DType edge = this->getVertex( triangIdx[1] );
288  edge -= this->getVertex( triangIdx[2] );
289  RealType maxLength = edge.squaredNorm();
290  // now check if edge 1 is longer
291  edge = this->getVertex( triangIdx[2] );
292  edge -= this->getVertex( triangIdx[0] );
293  RealType candidate = edge.squaredNorm();
294  if( candidate > maxLength ) {
295  localIdx = 1;
296  maxLength = candidate;
297  }
298  // now check if edge 2 is longer
299  edge = this->getVertex( triangIdx[0] );
300  edge -= this->getVertex( triangIdx[1] );
301  candidate = edge.squaredNorm();
302  if( candidate > maxLength ) localIdx = 2;
303 
304  return localIdx;
305  }
const TriangleType & getTriang(const int num) const
Definition: triangMesh.h:87
const Point3DType & getVertex(const int num) const
Definition: triangMesh.h:66
short LocalIndex
defines for local node and edge numbering
double RealType
Definition: ex2.cpp:21
DataTypeContainer::Point3DType Point3DType
DataTypeContainer::Indices3DType Indices3DType
template<typename DataTypeContainer , typename TriangleType >
bool shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::isMarkedForRefinement ( int  element) const
inline

Definition at line 242 of file adaptiveTriangMesh.h.

243  {
244  return _markedForRefinement[element];
245  }
std::vector< bool > _markedForRefinement
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::mark ( int  element)
inline

Mark element for refinement.

Definition at line 219 of file adaptiveTriangMesh.h.

220  {
221  _markedForRefinement[ element ] = true;
222  }
std::vector< bool > _markedForRefinement
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::markAll ( )
inline

Mark all elements for refinement.

Definition at line 225 of file adaptiveTriangMesh.h.

226  {
227  for( unsigned i = 0; i < _markedForRefinement.size(); i++ ) _markedForRefinement[i] = true;
228  }
std::vector< bool > _markedForRefinement
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::prolongateLinearly ( VectorType function) const
inline

Prolongate by linear interpolation.

Definition at line 266 of file adaptiveTriangMesh.h.

267  {
268  VectorType oldFunction = function;
269  int oldSize = function.size();
270  function.resize( this->getNumVertices() );
271  for( int i = 0; i < oldSize; ++i ) function[i] = oldFunction[i];
272  typename std::map< int, ParentInformation<DomVecType> >::const_iterator iter;
273  for( int i = oldSize; i < function.size(); ++i ) {
274  iter = _interpolationMap.find( i );
275  if( iter == _interpolationMap.end() ) throw std::invalid_argument ( aol::strprintf ( "unknown vertex in File %s at line %d.", __FILE__, __LINE__ ).c_str() );
276  function[i] = 0.5 * ( function[iter->second.globalIndices[0]] + function[iter->second.globalIndices[1]] );
277  }
278  }
std::map< int, ParentInformation< DomVecType > > _interpolationMap
int getNumVertices() const
Definition: triangMesh.h:42
string strprintf(const char *format,...)
Give back formatted string, analogously to sprintf, but save the long way &#39;round with char arrays...
Definition: aol.cpp:5
ConfiguratorType::VectorType VectorType
Definition: ex2.cpp:26
template<typename DataTypeContainer , typename TriangleType >
int shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::pushBackTriang ( const Indices3DType  newTriang)
inline
Note
when adding a new face we have to expand the array _markedForRefinement correspondingly

Definition at line 248 of file adaptiveTriangMesh.h.

249  {
250  _markedForRefinement.push_back( false );
252  }
int pushBackTriang(const Indices3DType nodeIdx)
Insert new triangle and return global index.
Definition: triangMesh.h:59
std::vector< bool > _markedForRefinement
template<typename DataTypeContainer , typename TriangleType >
GlobalIndex shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::refine ( GlobalIndex  triangleToRefine)
inlineprotected

Definition at line 309 of file adaptiveTriangMesh.h.

310  {
311  DartIterator d( *this, triangleToRefine, getLongestEdgeIndex( triangleToRefine ) );
312  return refine( d );
313  }
GlobalIndex refine(GlobalIndex triangleToRefine)
LocalIndex getLongestEdgeIndex(GlobalIndex triangle) const
Get longest edge index (starting search possibly with a preferred edge)
template<typename DataTypeContainer , typename TriangleType >
GlobalIndex shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::refine ( const DartIterator d)
inlineprotected
Todo:
Implement longest edge refinement
Todo:
Return index of newly created triangle instead of 0

Definition at line 315 of file adaptiveTriangMesh.h.

316  {
318 
320  return 0;
321  }
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::refineMarkedTriangles ( )
inline

Refines at least all triangles that have been marked.

Note
May refine unmarked triangles

Definition at line 256 of file adaptiveTriangMesh.h.

257  {
258  const int numElements = this->getNumTriangs();
259  for ( int elementIndex = 0; elementIndex < numElements; ++elementIndex )
260  if ( isMarkedForRefinement( elementIndex ) ) refine( elementIndex );
262  this->updateAllTriangles();
263  }
GlobalIndex refine(GlobalIndex triangleToRefine)
void updateAllTriangles()
Definition: triangMesh.h:115
int getNumTriangs() const
Definition: triangMesh.h:46
void makeOrientationConsistent()
Definition: triangMesh.h:252
bool isMarkedForRefinement(int element) const
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::unmark ( int  element)
inline

Ensure that element is not marked for refinement.

Definition at line 231 of file adaptiveTriangMesh.h.

232  {
233  _markedForRefinement[ element ] = false;
234  }
std::vector< bool > _markedForRefinement
template<typename DataTypeContainer , typename TriangleType >
void shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::unmarkAll ( )
inline

Unmark all elements.

Definition at line 237 of file adaptiveTriangMesh.h.

238  {
239  for( unsigned i = 0; i < _markedForRefinement.size(); i++ )
240  _markedForRefinement[i] = false;
241  }
std::vector< bool > _markedForRefinement

Member Data Documentation

template<typename DataTypeContainer , typename TriangleType >
std::map< int, ParentInformation<DomVecType> > shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::_interpolationMap
protected

Definition at line 203 of file adaptiveTriangMesh.h.

template<typename DataTypeContainer , typename TriangleType >
std::vector<bool> shellFE::AdaptiveTriangMesh< DataTypeContainer, TriangleType >::_markedForRefinement
protected

Definition at line 202 of file adaptiveTriangMesh.h.


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