OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
oofem::FETISolver Class Reference

This class implements the class NumericalMethod instance FETI linear algebraic equation parallel solver. More...

#include <fetisolver.h>

+ Inheritance diagram for oofem::FETISolver:
+ Collaboration diagram for oofem::FETISolver:

Public Types

enum  {
  FETISolverZeroTag, NumberOfRBMMsg, RBMMessage, QQMessage,
  SolutionMessage, ResidualMessage, DirectionVectorMessage, PPVectorMessage,
  GammasMessage, FETISolverIterationContinue, FETISolverIterationBreak
}
 

Public Member Functions

 FETISolver (Domain *d, EngngModel *m)
 
virtual ~FETISolver ()
 
virtual NM_Status solve (SparseMtrx &A, FloatArray &b, FloatArray &x)
 Solves the given linear system by LDL^T factorization. More...
 
int estimateMaxPackSize (IntArray &, DataStream &, int &)
 
void setUpCommunicationMaps ()
 Sets up the communication maps. More...
 
virtual IRResultType initializeFrom (InputRecord *ir)
 
virtual const char * giveClassName () const
 
virtual LinSystSolverType giveLinSystSolverType () const
 
void projection (FloatArray &v, FloatMatrix &l, FloatMatrix &l1)
 
int packRBM (ProcessCommunicator &processComm)
 
int masterUnpackRBM (ProcessCommunicator &processComm)
 
int packQQProducts (ProcessCommunicator &processComm)
 
int masterUnpackQQProduct (ProcessCommunicator &processComm)
 
int packSolution (ProcessCommunicator &processComm)
 
int unpackSolution (ProcessCommunicator &processComm)
 
int packResiduals (ProcessCommunicator &processComm)
 
int unpackResiduals (ProcessCommunicator &processComm)
 
int packDirectionVector (ProcessCommunicator &processComm)
 
int unpackDirectionVector (ProcessCommunicator &processComm)
 
int packPPVector (ProcessCommunicator &processComm)
 
int unpackPPVector (ProcessCommunicator &processComm)
 
int packGammas (ProcessCommunicator &processComm)
 
int unpackGammas (ProcessCommunicator &processComm)
 
int masterMapRBM ()
 
int masterMapQQProduct ()
 
int masterMapSolution ()
 
int masterMapResiduals ()
 
int masterMapDirectionVector ()
 
int masterMapPPVector ()
 
int masterMapGammas ()
 
virtual SparseMtrxType giveRecommendedMatrix (bool symmetric) const
 Returns the recommended sparse matrix type for this solver. More...
 
- Public Member Functions inherited from oofem::SparseLinearSystemNM
 SparseLinearSystemNM (Domain *d, EngngModel *m)
 Constructor. More...
 
virtual ~SparseLinearSystemNM ()
 Destructor. More...
 
std::string errorInfo (const char *func)
 
virtual NM_Status solve (SparseMtrx &A, FloatMatrix &B, FloatMatrix &X)
 Solves the given sparse linear system of equations $ A\cdot X=B $. More...
 
- Public Member Functions inherited from oofem::NumericalMethod
 NumericalMethod (Domain *d, EngngModel *m)
 Constructor. More...
 
virtual ~NumericalMethod ()
 Destructor. More...
 
EngngModelgiveEngngModel ()
 
virtual void reinitialize ()
 Reinitializes the receiver. More...
 
virtual void setDomain (Domain *d)
 
virtual contextIOResultType saveContext (DataStream &stream, ContextMode mode, void *obj=NULL)
 
virtual contextIOResultType restoreContext (DataStream &stream, ContextMode mode, void *obj=NULL)
 

Private Attributes

int nse
 
int ni
 Max number of iterations. More...
 
double err
 Max allowed error. More...
 
double limit
 Linear dep./indep. trigger. More...
 
FloatMatrix rbm
 Rigid body motions. More...
 
FloatMatrix l
 Rigid body motions of all partitions. On master only. More...
 
IntArray se
 Indices of singular equations. More...
 
IntArray rbmAddr
 Addresses of initial partition contribution to rbm matrix. More...
 
FloatArray w
 Primary unknowns. More...
 
FloatArray qq
 
FloatArray q
 
FloatArray dd
 
FloatArray g
 
FloatArray d
 
FloatArray p
 
FloatArray pp
 
FloatArray gamma
 
FloatArray localGammas
 
IntArray nsem
 
ProcessCommunicatorBuff pcbuff
 
ProcessCommunicator processCommunicator
 
CommunicatorBuffcommBuff
 Common Communicator buffer. More...
 
FETICommunicatormasterCommunicator
 
IntArray masterCommMap
 List of local nodes (at master) participating in communication (list of boundary dof managers). More...
 
int energyNorm_comput_flag
 Flag indicating computation of energy norm. More...
 

Additional Inherited Members

- Protected Attributes inherited from oofem::NumericalMethod
Domaindomain
 Pointer to domain. More...
 
EngngModelengngModel
 Pointer to engineering model. More...
 

Detailed Description

This class implements the class NumericalMethod instance FETI linear algebraic equation parallel solver.

Definition at line 67 of file fetisolver.h.

Member Enumeration Documentation

anonymous enum
Enumerator
FETISolverZeroTag 
NumberOfRBMMsg 
RBMMessage 
QQMessage 
SolutionMessage 
ResidualMessage 
DirectionVectorMessage 
PPVectorMessage 
GammasMessage 
FETISolverIterationContinue 
FETISolverIterationBreak 

Definition at line 151 of file fetisolver.h.

Constructor & Destructor Documentation

oofem::FETISolver::FETISolver ( Domain d,
EngngModel m 
)

Definition at line 49 of file fetisolver.C.

References energyNorm_comput_flag, err, and ni.

oofem::FETISolver::~FETISolver ( )
virtual

Member Function Documentation

virtual const char* oofem::FETISolver::giveClassName ( ) const
inlinevirtual

Implements oofem::SparseLinearSystemNM.

Definition at line 123 of file fetisolver.h.

virtual SparseMtrxType oofem::FETISolver::giveRecommendedMatrix ( bool  symmetric) const
inlinevirtual

Returns the recommended sparse matrix type for this solver.

Implements oofem::SparseLinearSystemNM.

Definition at line 152 of file fetisolver.h.

References oofem::SMT_Skyline, and oofem::SMT_SkylineU.

int oofem::FETISolver::masterMapGammas ( )
int oofem::FETISolver::masterMapQQProduct ( )

Definition at line 432 of file fetisolver.C.

References oofem::IntArray::at(), oofem::FloatArray::at(), nsem, q, qq, and rbmAddr.

Referenced by giveLinSystSolverType(), and solve().

void oofem::FETISolver::projection ( FloatArray v,
FloatMatrix l,
FloatMatrix l1 
)
NM_Status oofem::FETISolver::solve ( SparseMtrx A,
FloatArray b,
FloatArray x 
)
virtual

Solves the given linear system by LDL^T factorization.

Implementation rely on factorization support provided by mapped sparse matrix. It calls Lhs->factorized()->backSubstitutionWith(*solutionArray). Sets solved flag to 1 if o.k.

Parameters
ACoefficient matrix
bRight hand side
xSolution array
Returns
NM_Status value

Implements oofem::SparseLinearSystemNM.

Definition at line 1052 of file fetisolver.C.

References oofem::FloatArray::add(), oofem::IntArray::at(), oofem::FloatArray::at(), oofem::StaticCommunicationBuffer::bcast(), oofem::FloatMatrix::beInverseOf(), oofem::FloatArray::beProductOf(), oofem::FloatArray::beTProductOf(), oofem::FloatMatrix::beTProductOf(), commBuff, oofem::FloatArray::computeSquaredNorm(), d, dd, DirectionVectorMessage, oofem::NumericalMethod::domain, oofem::FloatArray::dotProduct(), energyNorm_comput_flag, oofem::NumericalMethod::engngModel, err, FETISOLVER_ZERONUM, FETISolverIterationBreak, FETISolverIterationContinue, g, gamma, GammasMessage, oofem::NumericalMethod::giveEngngModel(), oofem::Domain::giveEngngModel(), oofem::FETICommunicator::giveNumberOfDomainEquations(), oofem::EngngModel::giveNumberOfProcesses(), oofem::SparseMtrx::giveNumberOfRows(), oofem::CommunicationBuffer::givePackSizeOfInt(), oofem::EngngModel::giveRank(), oofem::FloatArray::giveSize(), oofem::StaticCommunicationBuffer::init(), oofem::Communicator::initReceive(), oofem::ProcessCommunicator::initReceive(), oofem::Communicator::initSend(), oofem::ProcessCommunicator::initSend(), oofem::StaticCommunicationBuffer::iRecv(), oofem::StaticCommunicationBuffer::iSend(), l, oofem::Skyline::ldl_feti_sky(), limit, localGammas, masterCommunicator, masterMapDirectionVector(), masterMapGammas(), masterMapPPVector(), masterMapQQProduct(), masterMapRBM(), masterMapResiduals(), masterMapSolution(), masterUnpackQQProduct(), masterUnpackRBM(), oofem::FloatArray::negated(), oofem::FloatMatrix::negated(), ni, NM_Success, nse, nsem, NumberOfRBMMsg, OOFEM_ERROR, OOFEM_LOG_DEBUG, OOFEM_LOG_INFO, OOFEM_LOG_RELEVANT, p, oofem::Communicator::packAllData(), oofem::ProcessCommunicator::packData(), packDirectionVector(), packGammas(), packPPVector(), packQQProducts(), packRBM(), packResiduals(), packSolution(), pp, PPVectorMessage, processCommunicator, projection(), q, qq, QQMessage, rbm, rbmAddr, RBMMessage, oofem::Skyline::rbmodes(), oofem::StaticCommunicationBuffer::read(), oofem::ProcessCommunicator::receiveCompleted(), ResidualMessage, oofem::IntArray::resize(), oofem::FloatArray::resize(), oofem::StaticCommunicationBuffer::resize(), oofem::FloatMatrix::resize(), se, oofem::FETICommunicator::setUpCommunicationMaps(), setUpCommunicationMaps(), SolutionMessage, oofem::FloatArray::subtract(), oofem::StaticCommunicationBuffer::testCompletion(), oofem::Communicator::unpackAllData(), oofem::ProcessCommunicator::unpackData(), unpackDirectionVector(), unpackGammas(), unpackPPVector(), unpackResiduals(), unpackSolution(), w, oofem::StaticCommunicationBuffer::write(), oofem::FloatArray::zero(), oofem::FloatMatrix::zero(), and oofem::IntArray::zero().

Member Data Documentation

CommunicatorBuff* oofem::FETISolver::commBuff
private

Common Communicator buffer.

Definition at line 95 of file fetisolver.h.

Referenced by setUpCommunicationMaps(), solve(), and ~FETISolver().

FloatArray oofem::FETISolver::d
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapDirectionVector(), packDirectionVector(), and solve().

FloatArray oofem::FETISolver::dd
private
int oofem::FETISolver::energyNorm_comput_flag
private

Flag indicating computation of energy norm.

Definition at line 100 of file fetisolver.h.

Referenced by FETISolver(), initializeFrom(), and solve().

double oofem::FETISolver::err
private

Max allowed error.

Definition at line 74 of file fetisolver.h.

Referenced by FETISolver(), initializeFrom(), and solve().

FloatArray oofem::FETISolver::g
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapResiduals(), solve(), and unpackResiduals().

FloatArray oofem::FETISolver::gamma
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapGammas(), packGammas(), and solve().

FloatMatrix oofem::FETISolver::l
private

Rigid body motions of all partitions. On master only.

Definition at line 80 of file fetisolver.h.

Referenced by masterMapRBM(), masterUnpackRBM(), and solve().

double oofem::FETISolver::limit
private

Linear dep./indep. trigger.

Definition at line 76 of file fetisolver.h.

Referenced by initializeFrom(), and solve().

FloatArray oofem::FETISolver::localGammas
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapGammas(), solve(), and unpackGammas().

IntArray oofem::FETISolver::masterCommMap
private

List of local nodes (at master) participating in communication (list of boundary dof managers).

Definition at line 98 of file fetisolver.h.

Referenced by masterMapDirectionVector(), masterMapPPVector(), masterMapRBM(), masterMapResiduals(), masterMapSolution(), and setUpCommunicationMaps().

int oofem::FETISolver::ni
private

Max number of iterations.

Definition at line 72 of file fetisolver.h.

Referenced by FETISolver(), initializeFrom(), and solve().

int oofem::FETISolver::nse
private

Definition at line 70 of file fetisolver.h.

Referenced by masterMapGammas(), packQQProducts(), packRBM(), solve(), and unpackGammas().

IntArray oofem::FETISolver::nsem
private
FloatArray oofem::FETISolver::p
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapPPVector(), solve(), and unpackPPVector().

ProcessCommunicatorBuff oofem::FETISolver::pcbuff
private

Definition at line 92 of file fetisolver.h.

FloatArray oofem::FETISolver::pp
private
ProcessCommunicator oofem::FETISolver::processCommunicator
private

Definition at line 93 of file fetisolver.h.

Referenced by setUpCommunicationMaps(), and solve().

FloatArray oofem::FETISolver::q
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapQQProduct(), masterUnpackQQProduct(), and solve().

FloatArray oofem::FETISolver::qq
private

Definition at line 88 of file fetisolver.h.

Referenced by masterMapQQProduct(), packQQProducts(), and solve().

FloatMatrix oofem::FETISolver::rbm
private

Rigid body motions.

Definition at line 78 of file fetisolver.h.

Referenced by masterMapRBM(), packRBM(), and solve().

IntArray oofem::FETISolver::rbmAddr
private

Addresses of initial partition contribution to rbm matrix.

Definition at line 84 of file fetisolver.h.

Referenced by masterMapGammas(), masterMapQQProduct(), masterMapRBM(), masterUnpackQQProduct(), masterUnpackRBM(), packGammas(), and solve().

IntArray oofem::FETISolver::se
private

Indices of singular equations.

Definition at line 82 of file fetisolver.h.

Referenced by solve().

FloatArray oofem::FETISolver::w
private

Primary unknowns.

Definition at line 86 of file fetisolver.h.

Referenced by masterMapSolution(), packSolution(), and solve().


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

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:35 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011