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::
List of all members.
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 (
|
)
|
|
|
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
|
bool MxFiniteElement::special_mapping
|
|
The documentation for this class was generated from the following file:
Copyright © 2003 inuTech GmbH. All rights reserved.