A 2D cell: quadrilateral. More...

#include <cell2D.hh>

Inheritance diagram for concepts::Quad2d:
concepts::QuadNd concepts::Cell2 concepts::Cell concepts::OutputOperator

Public Types

typedef uint index_type
 

Public Member Functions

Real3d center () const
 Returns the center of the cell. More...
 
Real2d chi (Real xi, Real eta) const
 Evaluates the element map. More...
 
virtual Quad2dchild (uint i)
 Returns a child. More...
 
virtual const Quad2dchild (uint i) const
 Returns a child. More...
 
const Quad2dchild (uint i, Real xi, Real eta, Real &xiC, Real &etaC) const
 Returns a child. More...
 
Quad2dclone (Quad &cntr, MappingQuad2d *map) const
 Returns a copy of itself. More...
 
Quadconnector () const
 Returns the quadrilateral connector (topology) More...
 
virtual uint dim () const
 Returns the dimension of the space. More...
 
MappingEdge2dedgeMap (uint edge) const
 Returns the mapping of an edge. More...
 
virtual Real3d elemMap (const Real coord_local) const
 Element map from point local coordinates in 1D. More...
 
Real3d elemMap (const Real2d &coord_local) const
 Element map from point local coordinates in 2D. More...
 
virtual Real3d elemMap (const Real3d &coord_local) const
 Element map from point local coordinates in 3D. More...
 
const Quad2dSubdivisiongetStrategy () const
 Returns the subdivision strategy of this quad. More...
 
virtual Real gramDeterminantRoot (const Real xi, const Real eta) const
 Returns the square root of the Gram determinant. More...
 
bool hasChildren () const
 
MapReal2d inverseLaplace (const Real xi, const Real eta) const
 Computes the second partial derivatives of the inverse Mapping. More...
 
MapReal2d jacobian (const concepts::Real2d &p) const
 
MapReal2d jacobian (const Real xi, const Real eta) const
 Computes the Jacobian for xi, eta $\in [0,1]$. More...
 
Real jacobianDeterminant (const Real xi, const Real eta) const
 Returns the determinant of the Jacobian for xi, eta $\in [0,1]$. More...
 
MapReal2d jacobianInverse (const Real xi, const Real eta) const
 Returns the inverse of the Jacobian for xi, eta $\in [0,1]$. More...
 
Level< 2 > level () const
 Returns the level of the cell. More...
 
virtual Real lineElement (const Real xi, const uint edge) const
 Computes the differential element on an edge. More...
 
const MappingQuad2dmap () const
 Returns the stored element map (same for all family related to one ancestor). More...
 
 Quad2d (Quad &cntr, const MappingQuad2d &map)
 Constructor. More...
 
virtual void setStrategy (const Quad2dSubdivision *strategy=0) throw (StrategyChange)
 Sets the subdivision strategy of this quad. More...
 
Real3d vertex (uint i) const
 Returns the coordinates of the ith vertex. More...
 
virtual ~Quad2d ()
 

Static Public Attributes

static uint MAX_LEVEL
 

Protected Member Functions

Quad2dcreateChild_ (Quad &cntr, const Index &idx, bool flag) const
 Non-virtual form of the private createChild_() method. More...
 
virtual std::ostream & info (std::ostream &os) const
 Returns information in an output stream. More...
 
 Quad2d (Quad &cntr, MappingQuad2d *map, const Index &idx)
 Private constructor. More...
 

Protected Attributes

Quadcntr_
 Reference to the quadrilateral connector (topology) More...
 
Index idx_
 Index of this element. More...
 
MappingQuad2dmap_
 Pointer to the element map. More...
 

Private Member Functions

virtual Quad2dcreateChild_ (Quad &cntr, const Index &idx) const
 Creates and returns a child. More...
 
Quad2doperator= (const Quad2d &other)
 
 Quad2d (const Quad2d &other)
 

Private Attributes

Quad2dchld_
 Pointer to the first child. More...
 
concepts::Array< Edge2d * > edge_
 
Quad2dlnk_
 Pointer to a sibling. More...
 
const Quad2dSubdivisionsubdivStrategy_
 Subdivision strategy for the quadrilateral. More...
 

Friends

class Quad2dSubdiv2H
 
class Quad2dSubdiv2V
 
class Quad2dSubdiv4
 
class Quad2dSubdivision
 

Detailed Description

A 2D cell: quadrilateral.

If a quad is subdivided, two or four new quads are created. This happens automatically, if a child is requested, depending on the strategy that has been set. If two or four children are created depends on the chosen strategy. The default strategy is the create four children.

The directions of the edges in the quadrilateral on the coarsest level are externally defined, see Quad::rho(). The edges of quadrilaterals which are created by subdivision are always counter-clockwise.

See also
Cell for more information on cells in a mesh.
Test:

test::TestJacobian2D

test::TestMatrices2D

Examples
meshes.cc.

Definition at line 378 of file cell2D.hh.

Member Typedef Documentation

◆ index_type

typedef uint concepts::QuadNd::index_type
inherited

Definition at line 194 of file cell2D.hh.

Constructor & Destructor Documentation

◆ Quad2d() [1/3]

concepts::Quad2d::Quad2d ( Quad cntr,
const MappingQuad2d map 
)

Constructor.

Takes the connector cntr and the element map map and creates a cell.

Parameters
cntrTopological information of the quadrilateral
mapElement map of the quadrilateral

◆ ~Quad2d()

virtual concepts::Quad2d::~Quad2d ( )
virtual

◆ Quad2d() [2/3]

concepts::Quad2d::Quad2d ( const Quad2d other)
private

◆ Quad2d() [3/3]

concepts::Quad2d::Quad2d ( Quad cntr,
MappingQuad2d map,
const Index idx 
)
protected

Private constructor.

Member Function Documentation

◆ center()

Real3d concepts::Quad2d::center ( ) const
inlinevirtual

Returns the center of the cell.

Implements concepts::Cell2.

Definition at line 516 of file cell2D.hh.

◆ chi()

Real2d concepts::Quad2d::chi ( Real  xi,
Real  eta 
) const

Evaluates the element map.

Maps a point from the the reference coordinates in [0,1]2 onto the physical coordinates.

Returns
Point in 2D in physical coordinates.
Parameters
xi$\in [0,1]$
eta$\in [0,1]$

◆ child() [1/3]

virtual Quad2d* concepts::Quad2d::child ( uint  i)
virtual

Returns a child.

If no children exist, four new children are created. The quadrilateral is cut into four new quadrilaterals by joining the midpoints of its edges.

Parameters
iIndex of the child to be returned.

Implements concepts::Cell2.

◆ child() [2/3]

virtual const Quad2d* concepts::Quad2d::child ( uint  i) const
virtual

Returns a child.

If no children exist, none are created and 0 is returned.

Parameters
iIndex of the child to be returned.

Implements concepts::Cell2.

◆ child() [3/3]

const Quad2d* concepts::Quad2d::child ( uint  i,
Real  xi,
Real  eta,
Real xiC,
Real etaC 
) const
inline

Returns a child.

If not a valid children exist, none are created and 0 is returned. FIXME: xiC and etaC are useless parameters

Parameters
iIndex of the child to be returned.
xi,etalocal coordinates, where the child is located
xiC,etaClocal coordinates in the child

Definition at line 420 of file cell2D.hh.

◆ clone()

Quad2d* concepts::Quad2d::clone ( Quad cntr,
MappingQuad2d map 
) const
inline

Returns a copy of itself.

Definition at line 536 of file cell2D.hh.

◆ connector()

Quad& concepts::QuadNd::connector ( ) const
inlinevirtualinherited

Returns the quadrilateral connector (topology)

Implements concepts::Cell2.

Definition at line 234 of file cell2D.hh.

◆ createChild_() [1/2]

virtual Quad2d* concepts::Quad2d::createChild_ ( Quad cntr,
const Index idx 
) const
privatevirtual

Creates and returns a child.

Can only called by the object itself or friend classes. Its virtual, so that inheritated classes with additional properties can create a child of the same kind.

◆ createChild_() [2/2]

Quad2d* concepts::Quad2d::createChild_ ( Quad cntr,
const Index idx,
bool  flag 
) const
protected

Non-virtual form of the private createChild_() method.

Can be called by inheritated classes.

◆ dim()

virtual uint concepts::Quad2d::dim ( ) const
inlinevirtual

Returns the dimension of the space.

Implements concepts::QuadNd.

Definition at line 561 of file cell2D.hh.

◆ edgeMap()

MappingEdge2d* concepts::Quad2d::edgeMap ( uint  edge) const

Returns the mapping of an edge.

Construct a cell for an edge of quad with

Edge2d edge(*quad.connector().edge(0), *quad.edgeMap(0));

The edgeMap can be useful for egde integrals in a 2D quadrilateral mesh.

◆ elemMap() [1/3]

virtual Real3d concepts::Cell::elemMap ( const Real  coord_local) const
virtualinherited

Element map from point local coordinates in 1D.

Reimplemented in concepts::Edge2d, concepts::Edge1d, concepts::Sphere3d, and concepts::SphericalSurface3d.

◆ elemMap() [2/3]

Real3d concepts::Quad2d::elemMap ( const Real2d coord_local) const
inlinevirtual

Element map from point local coordinates in 2D.

Implements concepts::Cell2.

Definition at line 447 of file cell2D.hh.

◆ elemMap() [3/3]

virtual Real3d concepts::Cell2::elemMap ( const Real3d coord_local) const
inlinevirtualinherited

Element map from point local coordinates in 3D.

Reference element is 2D, third component is omitted.

Reimplemented from concepts::Cell.

Definition at line 104 of file cell.hh.

◆ getStrategy()

const Quad2dSubdivision* concepts::Quad2d::getStrategy ( ) const
inline

Returns the subdivision strategy of this quad.

If you want to find check against another strategy use

quad.getStrategy() == QuadSubdiv2V::instance()

Definition at line 559 of file cell2D.hh.

◆ gramDeterminantRoot()

virtual Real concepts::Quad2d::gramDeterminantRoot ( const Real  xi,
const Real  eta 
) const
inlinevirtual

Returns the square root of the Gram determinant.

The Gram determinant is given by

\[ \det(A^\top A) \,, \]

where A is the Jacobian of the mapping. Note that for a Quad2d this is the same as the determinant of the Jacobian.

Implements concepts::QuadNd.

Definition at line 491 of file cell2D.hh.

◆ hasChildren()

bool concepts::Quad2d::hasChildren ( ) const
inline

Definition at line 409 of file cell2D.hh.

◆ info()

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

Returns information in an output stream.

Implements concepts::Cell.

◆ inverseLaplace()

MapReal2d concepts::Quad2d::inverseLaplace ( const Real  xi,
const Real  eta 
) const

Computes the second partial derivatives of the inverse Mapping.

Those from a cell in the initial mesh are computed by the element map itsself. For a subdivided cell, with the use of the subdivision map $H$ , the values are computed by the element map at the Point $ (a \cdot xi, b \cdot eta)$. For notation check out the documentation of the method jacobian() of this class.

xi, eta $\in [0,1]$

◆ jacobian() [1/2]

MapReal2d concepts::Quad2d::jacobian ( const concepts::Real2d p) const

◆ jacobian() [2/2]

MapReal2d concepts::Quad2d::jacobian ( const Real  xi,
const Real  eta 
) const

Computes the Jacobian for xi, eta $\in [0,1]$.

The Jacobian of a cell in the initial mesh is computed by the element map. The Jacobian of a subdivided cell is computed as follows. Let $H : \hat K \rightarrow \hat K'$ be the subdivision map in the reference coordinates (0,1)2 and $F_K : \hat K \rightarrow K$, $F_{K'} : \hat K \rightarrow K'$ the element maps of K and K' respectively. Then,

\[F_K : \hat K' \rightarrow K' \quad \text{and} \quad F_K \circ H = F_{K'}. \]

The subdivision map H in reference coordinates is

\[H : \vec\xi \mapsto \begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix} \vec \xi \]

where $a = 2^{-l_0}$, $b = 2^{-l_1}$. $\vec l = (l_0, l_1)$ is the level of the cell with respect to the cell in the initial mesh. The derivative of H is $dH = \begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix}$.

Then, the Jacobian of $F_{K'}$ is

\[dF_{K'} = dF_K \circ H \cdot dH. \]

The part $dF_K \circ H$ (without H) is computed by the element map and the part $\cdot dH$ is computed in jacobian().

◆ jacobianDeterminant()

Real concepts::Quad2d::jacobianDeterminant ( const Real  xi,
const Real  eta 
) const
inline

Returns the determinant of the Jacobian for xi, eta $\in [0,1]$.

Definition at line 487 of file cell2D.hh.

◆ jacobianInverse()

MapReal2d concepts::Quad2d::jacobianInverse ( const Real  xi,
const Real  eta 
) const
inline

Returns the inverse of the Jacobian for xi, eta $\in [0,1]$.

Definition at line 480 of file cell2D.hh.

◆ level()

Level<2> concepts::QuadNd::level ( ) const
inlineinherited

Returns the level of the cell.

The level describes the refinements in both directions with respect to the parent cell in the initial mesh. This level information is taken into account when evaluating the element map or the Jacobian.

Definition at line 257 of file cell2D.hh.

◆ lineElement()

virtual Real concepts::Quad2d::lineElement ( const Real  xi,
const uint  edge 
) const
virtual

Computes the differential element on an edge.

xi stand for one of the variables

\[\xi\]

,

\[\eta\]

depending on the edge.

Implements concepts::QuadNd.

◆ map()

const MappingQuad2d* concepts::Quad2d::map ( ) const
inline

Returns the stored element map (same for all family related to one ancestor).

Definition at line 521 of file cell2D.hh.

◆ operator=()

Quad2d& concepts::Quad2d::operator= ( const Quad2d other)
private

◆ setStrategy()

virtual void concepts::Quad2d::setStrategy ( const Quad2dSubdivision strategy = 0)
throw (StrategyChange
)
virtual

Sets the subdivision strategy of this quad.

If the parameter is set to 0 (or if the method is called without parameter) the strategy is set to the default (if not already set). The default subdivision strategy is subdivision into 4 children.

Parameters
strategyPointer to an instance of a subdivision strategy.
Exceptions
StrategyChangeif the change is not allowed (the change is not allowed if there are children present or the topological strategy is set).

◆ vertex()

Real3d concepts::Quad2d::vertex ( uint  i) const
virtual

Returns the coordinates of the ith vertex.

Implements concepts::Cell2.

Friends And Related Function Documentation

◆ Quad2dSubdiv2H

friend class Quad2dSubdiv2H
friend

Definition at line 381 of file cell2D.hh.

◆ Quad2dSubdiv2V

friend class Quad2dSubdiv2V
friend

Definition at line 382 of file cell2D.hh.

◆ Quad2dSubdiv4

friend class Quad2dSubdiv4
friend

Definition at line 380 of file cell2D.hh.

◆ Quad2dSubdivision

friend class Quad2dSubdivision
friend

Definition at line 379 of file cell2D.hh.

Member Data Documentation

◆ chld_

Quad2d* concepts::Quad2d::chld_
private

Pointer to the first child.

The children are stored in a linked list.

Definition at line 582 of file cell2D.hh.

◆ cntr_

Quad& concepts::QuadNd::cntr_
protectedinherited

Reference to the quadrilateral connector (topology)

Definition at line 261 of file cell2D.hh.

◆ edge_

concepts::Array<Edge2d*> concepts::Quad2d::edge_
mutableprivate

Definition at line 588 of file cell2D.hh.

◆ idx_

Index concepts::QuadNd::idx_
protectedinherited

Index of this element.

Definition at line 263 of file cell2D.hh.

◆ lnk_

Quad2d* concepts::Quad2d::lnk_
private

Pointer to a sibling.

Definition at line 577 of file cell2D.hh.

◆ map_

MappingQuad2d* concepts::Quad2d::map_
protected

Pointer to the element map.

Definition at line 566 of file cell2D.hh.

◆ MAX_LEVEL

uint concepts::QuadNd::MAX_LEVEL
staticinherited

Definition at line 198 of file cell2D.hh.

◆ subdivStrategy_

const Quad2dSubdivision* concepts::Quad2d::subdivStrategy_
private

Subdivision strategy for the quadrilateral.

Definition at line 585 of file cell2D.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