Diffpack Documentation


Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

MxFiniteElement Class Reference

version of class FiniteElement for mixed FEM. More...

#include <MxFiniteElement.h>

Inheritance diagram for MxFiniteElement::

HandleId List of all members.

Public Methods

 MxFiniteElement ()
 MxFiniteElement (GridFE &grid, int ncomponents)
 MxFiniteElement (FieldsFE &all_unknowns)
 ~MxFiniteElement ()
bool redim (GridFE &grid, int ncomponents)
bool redim (FieldsFE &all_unknowns)
const FiniteElementoperator() (int i) const
FiniteElementoperator() (int i)
int size () const
int getNoFiniteElementObjects () const
void refill (int elm_no, FEM *solver=NULL)
void setLocalEvalPts (ElmItgRules &elmitg)
void refill (int elm_no, ElmItgRules &elmitg)
void refill4side (int side)
int getNoSpaceDim () const
int getElmNo () const
int getNoSides () const
int getCurrentSide () const
void evalDerivatives (int i)
void setItgRuleManager (int component)
int getItgRuleManager ()
int initNumItg ()
bool moreItgPoints ()
void update4nextItgPt ()
void update4nextItgPt (int itg_pt_no)
int getNoItgPts () const
int getCurrentItgPt () const
void getGlobalEvalPt (Ptv(real) &glob_pt) const
void setLocalEvalPt (const Ptv(real) &loc_pt)
real N (int field_no, int basis_no) const
real dN (int field_no, int basis_no, int deriv_field) const
real detJ () const
real detJxW () const
real detSideJxW () const
bool boSide (int side, int indno) const
void getNormalVectorOnSide (Ptv(real) &vec) const
void errorMsg4detJlt0 (bool onoff)
const Mat(real)& JacobiMatrix () const
const Mat(real)& invJacobiMatrix () const
const Mat(real)& geomtNodeCoor () const
void print (Os os, int degree_of_output=1)

Public Attributes

bool special_mapping
Handle(MxMappingmap

Detailed Description

version of class FiniteElement for mixed FEM.

NAME: MxFiniteElement - version of class FiniteElement for mixed FEM

DESCRIPTION:

Class "MxFiniteElement" implements a set of "FiniteElement" objects In mixed finite element methods, different unknowns will in general have different element types. In the "integrands" procedure one will then need a "FiniteElement" object for each scalar quantity. Class "MxFiniteElement" provides access to these "FiniteElement" objects.

Internally, the class has an array of handles til "FiniteElement" objects. Since there may be several scalar fields, but few element types (consider e.g. Navier-Stokes solvers in 3D; there are four scalar fields, but usually only two different "FiniteElement" objects), it is possible to create only the strictly necessary number of "FiniteElement" objects and let the handles in the array point to the relevant objects. Also when updating the "FiniteElement" components in "MxFiniteElement" one must avoid repeated calls to identical computations. (Hence, the internal code in this class is somewhat more complicated than expected.)

For a user, class "MxFiniteElement" looks like an array of "FiniteElement" objects and the interface is the same for the two classes. There is a "FiniteElement" manager (i.e. one of the components in the "MxFiniteElement" object) that handles the integration rule. The rule is usually set automatically and the other "FiniteElement" objects adjust their rules according to the manager's rule. Many of the "MxFiniteElement" functions are just calls to the managers corresponding functions.


Constructor & Destructor Documentation

MxFiniteElement::MxFiniteElement ( )
 

There are three constructors. The one without arguments performs no initialization; a "redim" function is then needed to carry out the initial initialization of the object. The other two constructors coincide with the "redim" functions.

The standard constructor or "redim" function is the one that takes a "FieldsFE" object as argument. This field contains handles to all scalar fields that enter the system of PDEs being solved (or more precisely, the scalar fields that are unknown in the linear or nonlinear system). The "MxFiniteElement" object needs access to the "BasisFuncGrid" grid overlay for each unknown and this access is enabled through the "FieldsFE" object.

The constructor or "redim" function that takes a "GridFE" and an integer as argument is aimed at the situation where all the unknowns in the PDE system have the same element (i.e. the isoparametric case).

Recall from class "FiniteElement" that the object must be initialized when visiting a new element, by calling "refill" (for volume integration) and, if necessary, "refill4side" (for surface integration).

MxFiniteElement::MxFiniteElement ( GridFE & grid,
int ncomponents )
 

See documentation of one of the overloaded constructor.

MxFiniteElement::MxFiniteElement ( FieldsFE & all_unknowns )
 

See documentation of one of the overloaded constructor.

MxFiniteElement::~MxFiniteElement ( ) [inline]
 


Member Function Documentation

const Mat(real) & MxFiniteElement::JacobiMatrix ( ) const
 

real MxFiniteElement::N ( int field_no,
int basis_no ) const
 

evaluates the basis functions on an element (the element index, "field_no", and the basis function no, "basis_no", must be given). One can either call up "N" (or "dN" for derivatives) in a "FiniteElement" object using "operator()", or one can use the "N" and "dN" functions in class "MxFiniteElement". The latter functions are safer as they ensure that the geometry mapping of the elements is correct (some H(div)-type mixed finite elements require special mappings, handled by class "MxMapping", and these are automatically accessed when using the "N" or "dN" functions in a "MxFiniteElement" object.

bool MxFiniteElement::boSide ( int side,
int indno ) const
 

real MxFiniteElement::dN ( int field_no,
int basis_no,
int deriv_field ) const
 

real MxFiniteElement::detJ ( ) const
 

real MxFiniteElement::detJxW ( ) const
 

real MxFiniteElement::detSideJxW ( ) const
 

void MxFiniteElement::errorMsg4detJlt0 ( bool onoff )
 

void MxFiniteElement::evalDerivatives ( int i )
 

const Mat(real) & MxFiniteElement::geomtNodeCoor ( ) const
 

int MxFiniteElement::getCurrentItgPt ( ) const
 

int MxFiniteElement::getCurrentSide ( ) const
 

int MxFiniteElement::getElmNo ( ) const
 

void MxFiniteElement::getGlobalEvalPt ( Ptv(real) & glob_pt ) const
 

int MxFiniteElement::getItgRuleManager ( ) [inline]
 

int MxFiniteElement::getNoFiniteElementObjects ( ) const [inline]
 

int MxFiniteElement::getNoItgPts ( ) const
 

int MxFiniteElement::getNoSides ( ) const
 

int MxFiniteElement::getNoSpaceDim ( ) const
 

void MxFiniteElement::getNormalVectorOnSide ( Ptv(real) & vec ) const
 

int MxFiniteElement::initNumItg ( )
 

const Mat(real) & MxFiniteElement::invJacobiMatrix ( ) const
 

bool MxFiniteElement::moreItgPoints ( )
 

FiniteElement & MxFiniteElement::operator() ( int i ) [inline]
 

const FiniteElement & MxFiniteElement::operator() ( int i ) const [inline]
 

void MxFiniteElement::print ( Os os,
int degree_of_output = 1 )
 

bool MxFiniteElement::redim ( FieldsFE & all_unknowns )
 

bool MxFiniteElement::redim ( GridFE & grid,
int ncomponents )
 

void MxFiniteElement::refill ( int elm_no,
ElmItgRules & elmitg ) [inline]
 

void MxFiniteElement::refill ( int elm_no,
FEM * solver = NULL )
 

void MxFiniteElement::refill4side ( int side )
 

void MxFiniteElement::setItgRuleManager ( int component )
 

sets one of the "FiniteElement" objects to be in charge of defining the integration rule over the element. Usually, this is the element with the highest order of the polynomials in the basis functions. The value of the integer reflecting the integration rule manager corresponds to the index of the associated scalar field in the "FieldsFE" object. For example, in a flow problem with three velocity scalar fields and a pressure field, stored in that order in a "FieldsFE" object, the velocity elements usually govern the integration rule, and the integration rule manager is then 1 (or 2 or 3 - the three velocity components employ the same element, i.e. the same "BasisFuncGrid").

void MxFiniteElement::setLocalEvalPt ( const Ptv(real) & loc_pt )
 

void MxFiniteElement::setLocalEvalPts ( ElmItgRules & elmitg )
 

int MxFiniteElement::size ( ) const [inline]
 

void MxFiniteElement::update4nextItgPt ( int itg_pt_no )
 

void MxFiniteElement::update4nextItgPt ( )
 


Member Data Documentation

Handle(MxMapping) MxFiniteElement::map
 

bool MxFiniteElement::special_mapping
 


The documentation for this class was generated from the following file:
Copyright © 2003 inuTech GmbH. All rights reserved.