ArchetypedGrid Concept 
An ArchetypedGrid is a grid which associates an archetype with each cell. An archetype is a combinatorial model of a cell, or, more precisely, of the boundary of a cell. Thus, the archetype A of a cell C of dimension d is a grid of dimension d1. The cells of A correspond to the facets of C.
The rationale for having archetypes stems from the fact that in general, it is not enough to know the vertices of a cell to determine its topology. We must also know how the vertices form the facets of the cell. In general, the archetype will again be a model of ArchetypedGrid, so that we can apply the concept recursively.
For an example of how to use archetypes, consider the problem of copying grids from one representation (source) into a different one (target). Consider the case of quadrilateral cells, where the vertices of a cell are ordered in a binary way in the source representation (for example, rowmajor numbering in a Cartesian grid), and cyclically in the target representation. If we don't care about this different numbering, twisted cells will result. In order to avoid this, we must somehow know about the different orderings. We can of course implement ad hoc copy procedures for each pair of grid representations, but this is against the "generic spirit".
A better way is to make this ordering explicit and amenable to algorithmic treatment. This is what archetypes are for. Before starting the actual copying of the grid, we try to match the archetypes of the source grid to that of the target grid by calculating isomorphisms between source and target archetypes. These isomorphisms will define a permutation of the vertex ordering of the source cells, such that an isomorphic copy of the source grid results.
Grid
CellVertex Input Grid Range
G is a type which is a model of ArchetypedGrid
g is an object of type G
A is an object of type G::archetype_type
a is an object of type G::archetype_handle
ai is an object of type G::archetype_iterator
C is an object of type G::Cell
c is an object of type G::cell_handle
Name  Expression  Description 
archetype type  G::archetype_type 
The type of cell archetypes,
model of Grid
and of CellVertex Input Grid Range
of dimension 
archetype handle  G::archetype_handle  unique handle for an archetype
within the grid G

archetype iterator  G::archetype_iterator  iterator over all archetypes of a grid 
Name  Expression  Type requirements  return type 
Archetype association 
g.Archetypeof(C)  archetype_type const&  
Archetype association 
g.archetype_of(c)  archetype_handle  
Archetype iteration start 
g.BeginArchetype()  archetype_iterator  
Archetype iteration pasttheend 
g.EndArchetype()  archetype_iterator  
Archetype count 
g.NumOfArchetypes()  unsigned  
Handle to archetype 
g.Archetype(a)  archetype_type const&  
iterator to handle 
g.handle(ai)  archetype_handle 
Name  Expression  Precondition  Semantics  Postcondition 
&(g.Archetype(archetype_of(C))) == &(g.ArchetypeOf(C))  
std::distance(g.BeginArchetype(), g.EndArchetype()) == g.NumOfArchetypes()  
&(*ai) == &(g.Archetype(g.handle(ai)))

ArchetypedGrid Concept 