Subdivision strategy for hexahedrons which generates 2 children perpendicular to the x direction. More...

#include <hexsubdiv.hh>

Inheritance diagram for concepts::HexSubdiv2x:
concepts::HexSubdivision concepts::Subdivision concepts::OutputOperator

Public Member Functions

virtual void createChildren (Hexahedron &q) const
 If no children of q exist, they are created. More...
 
virtual void removeChildren (Hexahedron &q) const
 If there are children, they are removed. More...
 
virtual ~HexSubdiv2x ()
 

Static Public Member Functions

static const HexSubdiv2xinstance ()
 

Protected Member Functions

bool faceSubdiv4 (Quad &q) const throw (StrategyChange)
 Takes a face and tries to subdivide it into 4 (by setting the strategy to QuadSubdiv4). More...
 
QuadfindFace (const Vertex *const v, Quad *const q[4], const unsigned int tau, const unsigned int rho, const unsigned int vtxIdx) const
 Looks for the quad in q which contains the vertex v. More...
 
virtual std::ostream & info (std::ostream &os) const
 Returns information in an output stream. More...
 
void subdivFace0 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 Subdivides a face of a hexehedron h into 4 children. More...
 
void subdivFace1 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 
void subdivFace2 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 
void subdivFace3 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 
void subdivFace4 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 
void subdivFace5 (Hexahedron &h, Quad *&A, Quad *&B, Quad *&C, Quad *&D, bool normal) const
 
void subFace0011 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const
 Gets the two children of q and sorts them. More...
 
void subFace0110 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const
 
void subFace0123 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const
 Gets the four children of q and sorts them. More...
 
void subFace1001 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const
 
void subFace1100 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B) const
 
void subFace1230 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const
 
void subFace2301 (Quad &q, Z2 rho, Z4 tau, Quad *&A, Quad *&B, Quad *&C, Quad *&D) const
 

Static Private Attributes

static std::unique_ptr< HexSubdiv2xinstance_
 

Detailed Description

Subdivision strategy for hexahedrons which generates 2 children perpendicular to the x direction.

The children are generated by subdividing the respective faces into 2 quadrilaterals and introducing 1 new face.

Author
Philipp Frauenfelder, 2002

Definition at line 189 of file hexsubdiv.hh.

Constructor & Destructor Documentation

◆ ~HexSubdiv2x()

virtual concepts::HexSubdiv2x::~HexSubdiv2x ( )
virtual

Member Function Documentation

◆ createChildren()

virtual void concepts::HexSubdiv2x::createChildren ( Hexahedron q) const
virtual

If no children of q exist, they are created.

Implements concepts::HexSubdivision.

◆ faceSubdiv4()

bool concepts::HexSubdivision::faceSubdiv4 ( Quad q) const
throw (StrategyChange
)
protectedinherited

Takes a face and tries to subdivide it into 4 (by setting the strategy to QuadSubdiv4).

Firstly, a normal subdivision in one shot into 4 children is tried. If this fails (by catching a StrategyChange exception), then a previous subdivision into 2 children was executed on this face. The orthogonal subdivision into 2 children is then reserved (by setting the strategy accordingly) on the two children of the face. This can be called a subdivision into 4 children in two shots.

Parameters
qFace to be subdivided into 4
Returns
true if the subdivision in one shot succeeded, false otherwise
Exceptions
StrategyChangeif the subdivision in two shots fails too

◆ findFace()

Quad* concepts::HexSubdivision::findFace ( const Vertex *const  v,
Quad *const  q[4],
const unsigned int  tau,
const unsigned int  rho,
const unsigned int  vtxIdx 
) const
protectedinherited

Looks for the quad in q which contains the vertex v.

This is done by a loop over the four entries of q and checking the indicated vertex (given by the index location vtxIdx).

Parameters
vVertex to look for
qList of quads to search through
tauOrientation flags of the quads
rhoRotation flags of the quads
vtxIdxIndex location of the vertex in the quads counted from vertex 0 in the quad in rho = 0 direction
Returns
the matching quad

◆ info()

virtual std::ostream& concepts::HexSubdiv2x::info ( std::ostream &  os) const
protectedvirtual

Returns information in an output stream.

Reimplemented from concepts::OutputOperator.

◆ instance()

static const HexSubdiv2x* concepts::HexSubdiv2x::instance ( )
static

◆ removeChildren()

virtual void concepts::HexSubdiv2x::removeChildren ( Hexahedron q) const
virtual

If there are children, they are removed.

The additional faces, edges and vertices are removed as well.

Implements concepts::HexSubdivision.

◆ subdivFace0()

void concepts::HexSubdivision::subdivFace0 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

Subdivides a face of a hexehedron h into 4 children.

normal is taken into account: true means that the face is to be subdivided in one shot, false means two shots.

Parameters
hHexahedron of which the face has to be subdivided
AResult
BResult
CResult
DResult
normalone or two shots

◆ subdivFace1()

void concepts::HexSubdivision::subdivFace1 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

◆ subdivFace2()

void concepts::HexSubdivision::subdivFace2 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

◆ subdivFace3()

void concepts::HexSubdivision::subdivFace3 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

◆ subdivFace4()

void concepts::HexSubdivision::subdivFace4 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

◆ subdivFace5()

void concepts::HexSubdivision::subdivFace5 ( Hexahedron h,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D,
bool  normal 
) const
protectedinherited

◆ subFace0011()

void concepts::HexSubdivision::subFace0011 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B 
) const
protectedinherited

Gets the two children of q and sorts them.

The sorting rule is given in the name and parametrized by the orientation flags rho and tau.

The code 0011 means the following:

rho \ tau 0 1 2 3
0 0011
1 1100

The indices 0 and 1 denote the index in the call to Quad::child which has to be used to get the correct face back.

Returns
A and B

◆ subFace0110()

void concepts::HexSubdivision::subFace0110 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B 
) const
protectedinherited

◆ subFace0123()

void concepts::HexSubdivision::subFace0123 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D 
) const
protectedinherited

Gets the four children of q and sorts them.

The sorting rule is given in the name and and parametrized by the orientation flags rho and tau.

The code 0123 means the following:

rho \ tau 0 1 2 3
0 0123
1 1230

The indices 0, 1, 2 and 3 denote the index in the call to Quad::child which has to be used to get the correct face back.

Returns
A, B, C and D

◆ subFace1001()

void concepts::HexSubdivision::subFace1001 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B 
) const
protectedinherited

◆ subFace1100()

void concepts::HexSubdivision::subFace1100 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B 
) const
protectedinherited

◆ subFace1230()

void concepts::HexSubdivision::subFace1230 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D 
) const
protectedinherited

◆ subFace2301()

void concepts::HexSubdivision::subFace2301 ( Quad q,
Z2  rho,
Z4  tau,
Quad *&  A,
Quad *&  B,
Quad *&  C,
Quad *&  D 
) const
protectedinherited

Member Data Documentation

◆ instance_

std::unique_ptr<HexSubdiv2x> concepts::HexSubdiv2x::instance_
staticprivate

Definition at line 198 of file hexsubdiv.hh.


The documentation for this class was generated from the following file:
Page URL: http://wiki.math.ethz.ch/bin/view/Concepts/WebHome
21 August 2020
© 2020 Eidgenössische Technische Hochschule Zürich