Loading...
Searching...
No Matches
Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim > Class Template Reference

A geometry implementation for axis-aligned hypercubes. More...

`#include <dune/geometry/axisalignedcubegeometry.hh>`

Inheritance diagram for Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >:

## Public Types

typedef CoordType | ctype
| Type used for single coordinate coefficients.
typedef FieldVector< ctype, dim > | LocalCoordinate
| Type used for a vector of element coordinates.
typedef FieldVector< ctype, coorddim > | GlobalCoordinate
| Type used for a vector of world coordinates.
typedef ctype | Volume
| Type used for volume.
typedef std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, dim, coorddim > >::type | JacobianTransposed
| Return type of jacobianTransposed.
typedef std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, coorddim, dim > >::type | JacobianInverseTransposed
| Return type of jacobianInverseTransposed.
using | Jacobian = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,coorddim,dim> >
| Return type of jacobian.
using | JacobianInverse = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,dim,coorddim> >
| Return type of jacobianInverse.

## Public Member Functions

| AxisAlignedCubeGeometry ()=default
| Constructs an empty geometry.
| AxisAlignedCubeGeometry (const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper)
| Constructor from a lower left and an upper right corner.
| AxisAlignedCubeGeometry (const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper, const std::bitset< coorddim > &axes)
| Constructor from a lower left and an upper right corner.
| AxisAlignedCubeGeometry (const Dune::FieldVector< ctype, coorddim > lower)
| Constructor from a single point only.
GeometryType | type () const
| Type of the cube. Here: a hypercube of the correct dimension.
GlobalCoordinate | global (const LocalCoordinate &local) const
| Map a point in local (element) coordinates to world coordinates.
LocalCoordinate | local (const GlobalCoordinate &global) const
| Map a point in global (world) coordinates to element coordinates.
JacobianTransposed | jacobianTransposed (const LocalCoordinate &local) const
| Jacobian transposed of the transformation from local to global coordinates.
JacobianInverseTransposed | jacobianInverseTransposed (const LocalCoordinate &local) const
| Inverse Jacobian transposed of the transformation from local to global coordinates.
Jacobian | jacobian (const LocalCoordinate &local) const
| Jacobian of the transformation from local to global coordinates.
JacobianInverse | jacobianInverse (const LocalCoordinate &local) const
| Inverse Jacobian of the transformation from local to global coordinates.
Volume | integrationElement (const LocalCoordinate &local) const
| Return the integration element, i.e., the determinant term in the integral transformation formula.
GlobalCoordinate | center () const
| Return center of mass of the element.
int | corners () const
| Return the number of corners of the element.
GlobalCoordinate | corner (int k) const
| Return world coordinates of the k-th corner of the element.
Volume | volume () const
| Return the element volume.
bool | affine () const
| Return if the element is affine. Here: yes.

## Static Public Attributes

static constexpr int | mydimension = dim
| Dimension of the cube element.
static constexpr int | coorddimension = coorddim
| Dimension of the world space that the cube element is embedded in.

## Friends

Dune::ReferenceElements< ctype, dim >::ReferenceElement | referenceElement (const AxisAlignedCubeGeometry &)

## Detailed Description

template<class CoordType, unsigned int dim, unsigned int coorddim>
class Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >

A geometry implementation for axis-aligned hypercubes.

This code is much faster than a generic implementation for hexahedral elements. All methods use the fact that a geometry for axis-aligned cubes is basically just a(n affine) scaling in the coordinate directions.

If dim < coorddim then local coordinates need to be suitably mapped to global ones. AxisAlignedCubeGeometry uses a special std::bitset 'axes' for this. 'axes' has coorddim entries, of which precisely 'dim' need to be set. Each set entry marks a local coordinate, i.e., a coordinate in which the cube has extension. The cube is flat in all other directions. Its coordinates in these directions is taking from the array called 'lower', which specifies the lower left corner of the hypercube.

In the case of dim==coorddim, the code goes into overdrive. Then special code path's are taken (statically) which omit the conditionals needed to sort out the embedding of local into global coordinates. Aggressive compiler/scheduler optimization becomes possible. Additionally, the types returned by the methods jacobianTransposed and jacobianInverseTransposed are dedicated types for diagonal matrices (DiagonalMatrix).

Template Parameters

  CoordType | Type used for single coordinate coefficients
  dim | Dimension of the cube
  coorddim | Dimension of the space that the cube lives in

## Member Typedef Documentation

## ctype

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef CoordType Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::ctype

Type used for single coordinate coefficients.

## GlobalCoordinate

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef FieldVector<ctype,coorddim> Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::GlobalCoordinate

Type used for a vector of world coordinates.

## Jacobian

template<class CoordType, unsigned int dim, unsigned int coorddim>

using Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::Jacobian = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,coorddim,dim> >

Return type of jacobian.

This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per row, hence it could be replaced by something more efficient.

## JacobianInverse

template<class CoordType, unsigned int dim, unsigned int coorddim>

using Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::JacobianInverse = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,dim,coorddim> >

Return type of jacobianInverse.

This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per row, hence it could be replaced by something more efficient.

## JacobianInverseTransposed

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef std::conditional<dim==coorddim,DiagonalMatrix<ctype,dim>,FieldMatrix<ctype,coorddim,dim>>::type Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::JacobianInverseTransposed

Return type of jacobianInverseTransposed.

This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per column, hence it could be replaced by something more efficient.

## JacobianTransposed

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef std::conditional<dim==coorddim,DiagonalMatrix<ctype,dim>,FieldMatrix<ctype,dim,coorddim>>::type Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::JacobianTransposed

Return type of jacobianTransposed.

This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per row, hence it could be replaced by something more efficient.

## LocalCoordinate

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef FieldVector<ctype,dim> Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::LocalCoordinate

Type used for a vector of element coordinates.

## Volume

template<class CoordType, unsigned int dim, unsigned int coorddim>

typedef ctype Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::Volume

Type used for volume.

## Constructor & Destructor Documentation

## AxisAlignedCubeGeometry() [1/4]

template<class CoordType, unsigned int dim, unsigned int coorddim>

Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::AxisAlignedCubeGeometry | ( |  | ) |

default

Constructs an empty geometry.

This constructor creates an empty (invalid) axis-aligned cube geometry. It may not be used in any way except for assigning other axis-aligned cube geometries to it. After assigning a valid geometry, it may be used without restrictions.

## AxisAlignedCubeGeometry() [2/4]

template<class CoordType, unsigned int dim, unsigned int coorddim>

Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::AxisAlignedCubeGeometry | ( | const Dune::FieldVector< ctype, coorddim > | lower,
|  | const Dune::FieldVector< ctype, coorddim > | upper )

inline

Constructor from a lower left and an upper right corner.

Note
  Only for dim==coorddim

## AxisAlignedCubeGeometry() [3/4]

template<class CoordType, unsigned int dim, unsigned int coorddim>

Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::AxisAlignedCubeGeometry | ( | const Dune::FieldVector< ctype, coorddim > | lower,
|  | const Dune::FieldVector< ctype, coorddim > | upper,
|  | const std::bitset< coorddim > & | axes )

inline

Constructor from a lower left and an upper right corner.

Parameters

  lower | Coordinates for the lower left corner.
  upper | Coordinates for the upper right corner.
  axes | Each bit set to 'true' here corresponds to a local coordinate axis. In other words, precisely 'dim' bits must be set here.

## AxisAlignedCubeGeometry() [4/4]

template<class CoordType, unsigned int dim, unsigned int coorddim>

Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::AxisAlignedCubeGeometry | ( | const Dune::FieldVector< ctype, coorddim > | lower | ) |

inline

Constructor from a single point only.

Note
  Only for dim==0

## Member Function Documentation

## affine()

template<class CoordType, unsigned int dim, unsigned int coorddim>

bool Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::affine | ( |  | ) | const

inline

Return if the element is affine. Here: yes.

## center()

template<class CoordType, unsigned int dim, unsigned int coorddim>

GlobalCoordinate Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::center | ( |  | ) | const

inline

Return center of mass of the element.

## corner()

template<class CoordType, unsigned int dim, unsigned int coorddim>

GlobalCoordinate Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::corner | ( | int | k | ) | const

inline

Return world coordinates of the k-th corner of the element.

## corners()

template<class CoordType, unsigned int dim, unsigned int coorddim>

int Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::corners | ( |  | ) | const

inline

Return the number of corners of the element.

## global()

template<class CoordType, unsigned int dim, unsigned int coorddim>

GlobalCoordinate Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::global | ( | const LocalCoordinate & | local | ) | const

inline

Map a point in local (element) coordinates to world coordinates.

## integrationElement()

template<class CoordType, unsigned int dim, unsigned int coorddim>

Volume Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::integrationElement | ( | const LocalCoordinate & | local | ) | const

inline

Return the integration element, i.e., the determinant term in the integral transformation formula.

## jacobian()

template<class CoordType, unsigned int dim, unsigned int coorddim>

Jacobian Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::jacobian | ( | const LocalCoordinate & | local | ) | const

inline

Jacobian of the transformation from local to global coordinates.

## jacobianInverse()

template<class CoordType, unsigned int dim, unsigned int coorddim>

JacobianInverse Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::jacobianInverse | ( | const LocalCoordinate & | local | ) | const

inline

Inverse Jacobian of the transformation from local to global coordinates.

## jacobianInverseTransposed()

template<class CoordType, unsigned int dim, unsigned int coorddim>

JacobianInverseTransposed Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::jacobianInverseTransposed | ( | const LocalCoordinate & | local | ) | const

inline

Inverse Jacobian transposed of the transformation from local to global coordinates.

## jacobianTransposed()

template<class CoordType, unsigned int dim, unsigned int coorddim>

JacobianTransposed Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::jacobianTransposed | ( | const LocalCoordinate & | local | ) | const

inline

Jacobian transposed of the transformation from local to global coordinates.

## local()

template<class CoordType, unsigned int dim, unsigned int coorddim>

LocalCoordinate Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::local | ( | const GlobalCoordinate & | global | ) | const

inline

Map a point in global (world) coordinates to element coordinates.

## type()

template<class CoordType, unsigned int dim, unsigned int coorddim>

GeometryType Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::type | ( |  | ) | const

inline

Type of the cube. Here: a hypercube of the correct dimension.

## volume()

template<class CoordType, unsigned int dim, unsigned int coorddim>

Volume Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::volume | ( |  | ) | const

inline

Return the element volume.

## Friends And Related Symbol Documentation

## referenceElement

template<class CoordType, unsigned int dim, unsigned int coorddim>

Dune::ReferenceElements< ctype, dim >::ReferenceElement referenceElement | ( | const AxisAlignedCubeGeometry< CoordType, dim, coorddim > & |  | ) |

friend

## Member Data Documentation

## coorddimension

template<class CoordType, unsigned int dim, unsigned int coorddim>

int Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::coorddimension = coorddim

static constexpr

Dimension of the world space that the cube element is embedded in.

## mydimension

template<class CoordType, unsigned int dim, unsigned int coorddim>

int Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >::mydimension = dim

static constexpr

Dimension of the cube element.

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

- axisalignedcubegeometry.hh