FiniteElementData Class Reference

#include <fei_FiniteElementData.hpp>

Inheritance diagram for FiniteElementData:

Inheritance graph
[legend]
List of all members.

Public Member Functions

virtual ~FiniteElementData ()
virtual int parameters (int numParams, char **params)=0
virtual int setLookup (Lookup &lookup)=0
virtual int describeStructure (int numElemBlocks, const int *numElemsPerBlock, const int *numNodesPerElem, const int *elemMatrixSizePerBlock, int totalNumNodes, int numSharedNodes, int numMultCRs)=0
virtual int setConnectivity (int elemBlockID, int elemID, int numNodes, const int *nodeNumbers, const int *numDofPerNode)=0
virtual int setElemMatrix (int elemBlockID, int elemID, int numNodes, const int *nodeNumbers, const int *dofPerNode, const double *const *coefs)=0
virtual int setElemVector (int elemBlockID, int elemID, int numNodes, const int *nodeNumbers, const int *dofPerNode, const double *coefs)=0
virtual int loadComplete ()=0
virtual int launchSolver (int &solveStatus, int &iterations)=0
virtual int reset ()=0
virtual int deleteConstraints ()=0
virtual int getMultiplierSoln (int CRID, double &lagrangeMultiplier)=0
virtual int putNodalFieldData (int fieldID, int fieldSize, int numNodes, const int *nodeNumbers, const double *coefs)=0

Detailed Description

This interface is used to pass finite-element data through to a solver library, from the FEI implementation. This is primarily intended to be an internal interface in the FEI implementation, acting as an abstraction between the FEI and underlying solvers. The FEI layer is the 'data-source', and this FiniteElementData interface is the 'pipe' through which data passes to the solver that's assembling an underlying set of data-structures. This interface is an alternative to the LinearSystemCore and ESI interfaces, which are the other major 'pipes' for passing data through to solver libraries. The difference is, LinearSystemCore and ESI interfaces accept almost entirely algebraic data, e.g., equation-numbered matrix/vector contributions, whereas this FiniteElementData interface accepts data in terms of nodeNumbers and degree-of-freedom offsets. Equation numbers don't appear in this interface.

Currently (as of August 2001) the only implementation of this interface is for the FETI solver. FETI, as well as the FETI implementation of FiniteElementData, are written by Kendall Pierson.

Note: This interface may eventually be either replaced or combined with Charles Tong's FiniteElementGrid interface.

Note2: Three types of "ID"s appear in this interface: elemBlockID, elemID and nodeNumbers. elemBlockID's and elemID's are not-necessarily globally unique. In certain problems where it matters (e.g., multi-physics, in parallel) element-blocks may span processor boundaries, in which case the implementer of FiniteElementData may assume that elemBlockID's are globally unique. In most cases it won't matter. Elements are never shared between processors, and so elemID's don't need to be globally unique. They may be assumed to be locally zero-based numbers. nodeNumbers are globally unique, and are also globally contiguous and zero-based.

Definition at line 39 of file fei_FiniteElementData.hpp.


Member Function Documentation

virtual int FiniteElementData::parameters ( int  numParams,
char **  params 
) [pure virtual]

For setting argc/argv style parameters.

Parameters:
numParams Number of strings in the params argument
params A list of strings which will usually contain space-separated key-value pairs. Example: "debugOutput /usr/users/me/work_dir"

Implemented in FEData.

virtual int FiniteElementData::setLookup ( Lookup lookup  )  [pure virtual]

Supply the FiniteElementData implementation with an object (created and owned by the FEI layer) that can be used to obtain various information about problem layout, shared finite-element nodes, etc. For details, see the documentation for the Lookup interface.

Parameters:
lookup Input. Reference to an implementation of the Lookup interface

Implemented in FEData.

virtual int FiniteElementData::describeStructure ( int  numElemBlocks,
const int *  numElemsPerBlock,
const int *  numNodesPerElem,
const int *  elemMatrixSizePerBlock,
int  totalNumNodes,
int  numSharedNodes,
int  numMultCRs 
) [pure virtual]

For describing the general structure of the finite-element problem that is to be assembled.

Parameters:
numElemBlocks Number of element-blocks. An element-block is a collection of elements having the same number of nodes and the same pattern of num-degrees-of-freedom-per-node.
numElemsPerBlock List of length numElemBlocks.
numNodesPerElem List of length numElemBlocks.
elemMatrixSizePerBlock List of length numElemBlocks, i-th entry gives the number of scalar degrees-of-freedom in element-matrices for the i-th element-block.
totalNumNodes Total number of local nodes.
numSharedNodes Number of nodes that are shared with other processors.
Returns:
error-code 0 if successful

Implemented in FEData.

virtual int FiniteElementData::setConnectivity ( int  elemBlockID,
int  elemID,
int  numNodes,
const int *  nodeNumbers,
const int *  numDofPerNode 
) [pure virtual]

For passing element-connectivity arrays.

Parameters:
elemBlockID Identifier for the element-block that this element belongs to.
elemID Locally zero-based identifier for this element.
numNodes Number of nodes for this element.
nodeNumbers List of length numNodes.
numDofPerNode List of length numNodes.

Implemented in FEData.

virtual int FiniteElementData::setElemMatrix ( int  elemBlockID,
int  elemID,
int  numNodes,
const int *  nodeNumbers,
const int *  dofPerNode,
const double *const *  coefs 
) [pure virtual]

For passing element-stiffness arrays.

Parameters:
elemBlockID Identifier for the element-block that these elements belong to.
elemID Locally zero-based identifier for this element.
numNodes Number of nodes on this element.
nodeNumbers List of length numNodes
dofPerNode List of length numNodes.
coefs C-style table (list of pointers). Each row of the table is of length sum(dofPerNode[i]), and that is also the number of rows.

Implemented in FEData.

virtual int FiniteElementData::setElemVector ( int  elemBlockID,
int  elemID,
int  numNodes,
const int *  nodeNumbers,
const int *  dofPerNode,
const double *  coefs 
) [pure virtual]

For passing element-load vectors.

Parameters:
elemBlockID Identifier for the element-block that this element belongs to.
elemID Locally zero-based identifier for this element.
numNodes Number of nodes on this element.
nodeNumbers 
dofPerNode 
coefs Packed list, length sum(dofPerNode[i]).

Implemented in FEData.

virtual int FiniteElementData::loadComplete (  )  [pure virtual]

Function called to signal to the FiniteElementData implementation that data-loading is complete and any synchronization or other final operations may be performed now. This is a collective function, must be called by all processors.

Returns:
error-code 0 if successful

Implemented in FEData.

virtual int FiniteElementData::launchSolver ( int &  solveStatus,
int &  iterations 
) [pure virtual]

Function called to request the launching of the linear solver.

Parameters:
solveStatus Output, should indicate the status of the solve. A successful solve is usually indicated by a value of 0.
iterations Output, how many iterations were performed.
Returns:
error-code, 0 if convergence tolerance was achieved within the specified maximum number of iterations. If error return is non-zero, the calling application will be expected to check solveStatus, and consult the solver-library's documentation to figure out exactly what happened.

Implemented in FEData.

virtual int FiniteElementData::reset (  )  [pure virtual]

Function to signal that all coefficient values should be zero'd in preparation for a new assemble/solve phase. This is to handle cases where no structural information is changing from one time-step to the next, but new coefficient values need to be loaded for the next solve.

Implemented in FEData.

virtual int FiniteElementData::deleteConstraints (  )  [pure virtual]

Function to signal that lagrange multiplier constraints should be deleted.

Implemented in FEData.

virtual int FiniteElementData::getMultiplierSoln ( int  CRID,
double &  lagrangeMultiplier 
) [pure virtual]

Function for requesting the solution value of a Lagrange Multiplier.

Implemented in FEData.

virtual int FiniteElementData::putNodalFieldData ( int  fieldID,
int  fieldSize,
int  numNodes,
const int *  nodeNumbers,
const double *  coefs 
) [pure virtual]

Pass nodal data that probably doesn't mean anything to the FEI implementation, but may mean something to the linear solver. Examples: geometric coordinates, nullspace data, etc.

Parameters:
fieldID Identifier for the field that describes this data. Lists of field identifiers and field sizes defined for the finite-element problem may be obtained from the Lookup interface that is supplied by the FEI implementation.
nodeNumbers List of nodes for which data is being supplied.
numNodes 
data List of length numNodes * (size of field 'fieldID')

Implemented in FEData.


The documentation for this class was generated from the following file:
Generated on Mon Jul 12 09:31:28 2010 for FEI by  doxygen 1.4.7