cell.h File Reference

(r1659/r1652)

#include <iostream>
#include <list>
#include "hash_set.h"
#include "hash_classes.h"
#include "iterator_wrapper.h"
#include "globals.h"
#include "persistance.h"
#include "util.h"

Include dependency graph for cell.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  hashers

Classes

class  hashers::hash< Cell * >
class  hashers::hash< VertexCell * >
class  hashers::hash< EdgeCell * >
class  hashers::hash< FaceCell * >
class  hashers::hash< BoundaryVertex * >
class  hashers::hash< BoundaryEdge * >
class  hashers::hash< BoundaryFace * >
class  hashers::hash< BezierVertex * >
class  hashers::hash< BezierEdge * >
class  hashers::hash< BezierTriangle * >
class  hashers::hash< const Cell * >
class  hashers::hash< const VertexCell * >
class  hashers::hash< const EdgeCell * >
class  hashers::hash< const FaceCell * >
class  hashers::hash< const BoundaryVertex * >
class  hashers::hash< const BoundaryEdge * >
class  hashers::hash< const BoundaryFace * >
class  hashers::hash< const BezierVertex * >
class  hashers::hash< const BezierEdge * >
class  hashers::hash< const BezierTriangle * >
class  Cell
 The model for all Cells great and small. More...
class  VertexCell
 The model for all Vertexes of a CellComplex. More...
class  EdgeCell
 The model for all Edges of a CellComplex. More...
class  FaceCell
 The model for all Faces of a CellComplex. More...
class  BoundaryVertex
 The Vertex type for a BoundaryMesh. More...
class  BoundaryEdge
 The Edge type for a BoundaryMesh. More...
class  BoundaryFace
 The Face type for a BoundaryMesh. More...
class  BezierVertex
 The Vertex type for BezierMesh. More...
class  BezierEdge
 The Edge type for BezierMesh. More...
class  CurvedTriangle
 An abstract class that models a BezierTriangle without data. More...
class  BezierTriangle
 The Face type for BezierMesh. More...
class  GhostTriangle
 A class to keep a copy of a BezierTriangle without all the CellComplex baggage. More...

Defines

#define declare_iterators_any(cell, plural, out)
#define declare_iterators_canon(cell, plural, out)

Enumerations

enum  Movement { FixedNone, FixedHorizontal, FixedVertical, FixedAll }
 Movement restrictions for Boundarys. More...

Functions

std::ostream & operator<< (std::ostream &stream, const BoundaryVertex &)
std::ostream & operator<< (std::ostream &stream, const BoundaryEdge &)
std::ostream & operator<< (std::ostream &stream, const BoundaryFace &)
std::ostream & operator<< (std::ostream &stream, const BezierVertex &)
std::ostream & operator<< (std::ostream &stream, const BezierEdge &)
std::ostream & operator<< (std::ostream &stream, const BezierTriangle &)


Detailed Description

This file contains the class declarations for all of the Cell types. A CellComplex needs to be instantiated with cells of type VertexCell, EdgeCell, and FaceCell. Thus together with CellComplex, these Cell classes define the topology of the mesh.

There are two types of each cell, one for BezierMesh's and one for BoundaryMeshs. The respective mesh types are built from CellComplexs which have either BezierVertex, BezierEdge, and BezierTriangle types, or BoundaryVertex, BoundaryEdge, and BoundaryFace types.

The relations of sub-cell or super-cell are maintained via lists in each cell. Thus, to find out the EdgeCells of a FaceCell, you can use the BezierTriangle::get_edge() method and FaceCell::num_edges member. This is faster and more compact than using a set of maps in CellComplex.

Each cell type also contains pointers to it's geometric data (ContolPoint) and functional data (DataPoint). These pointers are actually iterators into master lists maintained by the DataStore. To get a pointer to a data type one should look for the cp or dp member arrays. To get the actual value of the data itself, one should use the get_cp() or get_dp() functions.

Todo:
Develop a more general (cell,key)->value dictionary for cell properties specific to a particular application
Author:
Mark J. Olah (mjo@andrew.cmu.edu)

Definition in file cell.h.


Define Documentation

#define declare_iterators_any ( cell,
plural,
out   ) 

Value:

typedef Tumble::iterators::caster<super::cell##_iterator, out*, out*>        \
      cell##_iterator;                                                       \
    typedef Tumble::iterators::caster<super::cell##_const_iterator, const out*, const out*>  \
      cell##_const_iterator;                                                 \
    cell##_iterator begin_##plural();                                        \
    cell##_const_iterator begin_##plural() const;                            \
    cell##_iterator end_##plural();                                          \
    cell##_const_iterator end_##plural() const;                              \
    out *get_any_##cell();                                                   \
    const out *get_any_##cell() const;
Excessively ugly hack (undefined later) to generate the iteration functions and typedefs for the subtypes of cells.

These aren't inlined because of issues of circular dependencies: BezierVertex needs to know that BezierEdge inherits from EdgeCell, but BezierEdge needs to know BezierVertex inherits from VertexCell.

Definition at line 290 of file cell.h.

#define declare_iterators_canon ( cell,
plural,
out   ) 

Value:

typedef Tumble::iterators::caster<super::cell##_iterator, out*, out*>        \
      cell##_iterator;                                                       \
    typedef Tumble::iterators::caster<super::cell##_const_iterator, const out*, const out*>  \
      cell##_const_iterator;                                                 \
    cell##_iterator begin_##plural();                                        \
    cell##_const_iterator begin_##plural() const;                            \
    cell##_iterator end_##plural();                                          \
    cell##_const_iterator end_##plural() const;                              \
    out *get_canon_##cell();                                                   \
    const out *get_canon_##cell() const;

Definition at line 302 of file cell.h.


Enumeration Type Documentation

enum Movement

Movement restrictions for Boundarys.

In some situations, one may not want certain BoundaryEdges or BoundaryVertexs to move. Thus, BoundaryVertexs and BoundaryEdges come equipped with a fixed member, which is of type Movement. This variable determines what types of movement are allowed for that Cell.

Enumerator:
FixedNone  No restrictions on movement
FixedHorizontal  No horizontal movement
FixedVertical  No vertical movement
FixedAll  No movment at all, totally fixed

Definition at line 105 of file cell.h.


Function Documentation

std::ostream& operator<< ( std::ostream &  stream,
const BezierTriangle  
)

std::ostream& operator<< ( std::ostream &  stream,
const BezierEdge  
)

std::ostream& operator<< ( std::ostream &  stream,
const BezierVertex  
)

std::ostream& operator<< ( std::ostream &  stream,
const BoundaryFace  
)

std::ostream& operator<< ( std::ostream &  stream,
const BoundaryEdge  
)

std::ostream& operator<< ( std::ostream &  stream,
const BoundaryVertex  
)


Generated on Mon May 24 09:53:31 2010 for TUMBLE by  doxygen 1.5.2