OOFEM
2.4
OOFEM.org - Object Oriented Finite Element Solver
|
The Superconvergent Patch Recovery (SPR) nodal recovery model is based on paper of Zienkiewicz and Zhu "The Superconvergent Patch recovery and Posteriori Error Estimates. Part 1: The Recovery Technique", Int. More...
#include <sprnodalrecoverymodel.h>
Classes | |
struct | parallelStruct |
Helper structure to pass required arguments to packing/unpacking functions needed in parallel mode. More... | |
Public Member Functions | |
SPRNodalRecoveryModel (Domain *d) | |
Constructor. More... | |
virtual | ~SPRNodalRecoveryModel () |
Destructor. More... | |
virtual int | recoverValues (Set elementSet, InternalStateType type, TimeStep *tStep) |
Recovers the nodal values for all regions. More... | |
virtual const char * | giveClassName () const |
Public Member Functions inherited from oofem::NodalRecoveryModel | |
NodalRecoveryModel (Domain *d) | |
Constructor. More... | |
virtual | ~NodalRecoveryModel () |
Destructor. More... | |
void | setDomain (Domain *ipDomain) |
virtual int | clear () |
Clears the receiver's nodal table. More... | |
int | giveNodalVector (const FloatArray *&ptr, int node) |
Returns vector of recovered values for given node and region. More... | |
virtual int | giveRegionRecordSize () |
Returns the region record size. More... | |
std::string | errorInfo (const char *func) |
Private Member Functions | |
void | initRegionMap (IntArray ®ionMap, IntArray ®ionTypes, InternalStateType type) |
Initializes the region table indicating regions to skip. More... | |
void | determinePatchAssemblyPoints (IntArray &pap, SPRPatchType regType, Set &elemset) |
void | initPatch (IntArray &patchElems, IntArray &dofManToDetermine, IntArray &pap, int papNumber, Set &elementList) |
void | computePatch (FloatMatrix &a, IntArray &patchElems, int ®ionValSize, SPRPatchType regType, InternalStateType type, TimeStep *tStep) |
void | determineValuesFromPatch (FloatArray &dofManValues, IntArray &dofManCount, IntArray ®ionNodalNumbers, IntArray &dofManToDetermine, FloatMatrix &a, SPRPatchType type) |
void | computePolynomialTerms (FloatArray &P, FloatArray &coords, SPRPatchType type) |
int | giveNumberOfUnknownPolynomialCoefficients (SPRPatchType regType) |
SPRPatchType | determinePatchType (Set &elementList) |
void | initCommMaps () |
void | exchangeDofManValues (FloatArray &dofManValues, IntArray &dofManPatchCount, IntArray ®ionNodalNumbers, int regionValSize) |
int | packSharedDofManData (parallelStruct *s, ProcessCommunicator &processComm) |
int | unpackSharedDofManData (parallelStruct *s, ProcessCommunicator &processComm) |
Additional Inherited Members | |
Public Types inherited from oofem::NodalRecoveryModel | |
enum | NodalRecoveryModelType { NRM_NodalAveraging = 0, NRM_ZienkiewiczZhu = 1, NRM_SPR = 2 } |
Protected Member Functions inherited from oofem::NodalRecoveryModel | |
int | initRegionNodeNumbering (IntArray ®ionNodalNumbers, int ®ionDofMans, Set ®ion) |
Determine local region node numbering and determine and check nodal values size. More... | |
int | updateRegionRecoveredValues (const IntArray ®ionNodalNumbers, int regionValSize, const FloatArray &rhs) |
Update the nodal table according to recovered solution for given region. More... | |
Protected Attributes inherited from oofem::NodalRecoveryModel | |
std::map< int, FloatArray > | nodalValList |
Map of nodal values. More... | |
InternalStateType | valType |
Determines the type of recovered values. More... | |
StateCounterType | stateCounter |
Time stamp of recovered values. More... | |
Domain * | domain |
CommunicatorBuff * | commBuff |
Common Communicator buffer. More... | |
ProblemCommunicator * | communicator |
Communicator. More... | |
bool | initCommMap |
Communication init flag. More... | |
The Superconvergent Patch Recovery (SPR) nodal recovery model is based on paper of Zienkiewicz and Zhu "The Superconvergent Patch recovery and Posteriori Error Estimates. Part 1: The Recovery Technique", Int.
Journal for Num. Meth in Engng, vol. 33, 1331-1364, 1992. The recovery uses local discrete least square smoothing over an element patch surrounding the particular node considered.
Definition at line 63 of file sprnodalrecoverymodel.h.
oofem::SPRNodalRecoveryModel::SPRNodalRecoveryModel | ( | Domain * | d | ) |
Constructor.
Definition at line 56 of file sprnodalrecoverymodel.C.
|
virtual |
Destructor.
Definition at line 59 of file sprnodalrecoverymodel.C.
|
private |
Definition at line 468 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::FloatArray::at(), oofem::FloatMatrix::at(), oofem::Element::computeGlobalCoordinates(), computePolynomialTerms(), oofem::NodalRecoveryModel::domain, oofem::Element::giveDefaultIntegrationRulePtr(), oofem::Domain::giveElement(), oofem::FEMComponent::giveInterface(), oofem::Element::giveIPValue(), giveNumberOfUnknownPolynomialCoefficients(), oofem::IntArray::giveSize(), oofem::FloatArray::giveSize(), oofem::FloatArray::resize(), oofem::FloatMatrix::resize(), oofem::FloatMatrix::solveForRhs(), oofem::SPRNodalRecoveryModelInterfaceType, oofem::FloatArray::zero(), and oofem::FloatMatrix::zero().
Referenced by recoverValues().
|
private |
Definition at line 541 of file sprnodalrecoverymodel.C.
References oofem::FloatArray::at(), OOFEM_ERROR, oofem::FloatArray::resize(), oofem::SPRPatchType_2dquadratic, oofem::SPRPatchType_2dxy, oofem::SPRPatchType_3dBiLin, and oofem::SPRPatchType_3dBiQuadratic.
Referenced by computePatch(), and determineValuesFromPatch().
|
private |
Definition at line 156 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::NodalRecoveryModel::domain, oofem::Element_local, oofem::Domain::giveConnectivityTable(), oofem::Domain::giveDofManager(), oofem::ConnectivityTable::giveDofManConnectivityArray(), oofem::Domain::giveElement(), oofem::Set::giveElementList(), oofem::FEMComponent::giveInterface(), oofem::FEMComponent::giveNumber(), oofem::Domain::giveNumberOfDofManagers(), giveNumberOfUnknownPolynomialCoefficients(), oofem::Element::giveParallelMode(), oofem::IntArray::giveSize(), oofem::Set::hasElement(), oofem::DofManager::isBoundary(), OOFEM_WARNING, oofem::IntArray::resize(), oofem::SPRNodalRecoveryModelInterface::SPRNodalRecoveryMI_giveNumberOfIP(), oofem::SPRNodalRecoveryModelInterface::SPRNodalRecoveryMI_giveSPRAssemblyPoints(), and oofem::SPRNodalRecoveryModelInterfaceType.
Referenced by recoverValues().
|
private |
Definition at line 596 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::NodalRecoveryModel::domain, oofem::Domain::giveElement(), oofem::Set::giveElementList(), oofem::FEMComponent::giveInterface(), oofem::IntArray::giveSize(), OOFEM_ERROR, oofem::SPRNodalRecoveryModelInterface::SPRNodalRecoveryMI_givePatchType(), oofem::SPRNodalRecoveryModelInterfaceType, and oofem::SPRPatchType_none.
Referenced by recoverValues().
|
private |
Definition at line 518 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::FloatArray::at(), oofem::FloatArray::beTProductOf(), computePolynomialTerms(), oofem::NodalRecoveryModel::domain, oofem::Domain::giveNode(), oofem::IntArray::giveSize(), and oofem::FloatArray::giveSize().
Referenced by recoverValues().
|
private |
Definition at line 634 of file sprnodalrecoverymodel.C.
References oofem::NodalRecoveryModel::communicator, oofem::Communicator::finishExchange(), oofem::Communicator::initExchange(), oofem::Communicator::packAllData(), packSharedDofManData(), oofem::Communicator::unpackAllData(), and unpackSharedDofManData().
Referenced by recoverValues().
|
inlinevirtual |
Implements oofem::NodalRecoveryModel.
Definition at line 87 of file sprnodalrecoverymodel.h.
|
private |
Definition at line 580 of file sprnodalrecoverymodel.C.
References oofem::SPRPatchType_2dquadratic, oofem::SPRPatchType_2dxy, oofem::SPRPatchType_3dBiLin, and oofem::SPRPatchType_3dBiQuadratic.
Referenced by computePatch(), and determinePatchAssemblyPoints().
|
private |
Definition at line 617 of file sprnodalrecoverymodel.C.
References oofem::CBT_dynamic, oofem::NodalRecoveryModel::commBuff, oofem::NodalRecoveryModel::communicator, oofem::NodalRecoveryModel::domain, oofem::Domain::giveEngngModel(), oofem::EngngModel::giveNumberOfProcesses(), oofem::EngngModel::giveRank(), oofem::NodalRecoveryModel::initCommMap, and OOFEM_LOG_INFO.
Referenced by recoverValues().
|
private |
Definition at line 336 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::IntArray::clear(), oofem::NodalRecoveryModel::domain, oofem::Element_local, oofem::Domain::giveConnectivityTable(), oofem::ConnectivityTable::giveDofManConnectivityArray(), oofem::Domain::giveElement(), oofem::Set::giveElementList(), oofem::FEMComponent::giveInterface(), oofem::Domain::giveNumberOfDofManagers(), oofem::Element::giveParallelMode(), oofem::IntArray::giveSize(), oofem::Set::hasElement(), oofem::IntArray::resize(), oofem::SPRNodalRecoveryModelInterface::SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(), oofem::SPRNodalRecoveryModelInterface::SPRNodalRecoveryMI_giveSPRAssemblyPoints(), oofem::SPRNodalRecoveryModelInterfaceType, and oofem::IntArray::zero().
Referenced by recoverValues().
|
private |
Initializes the region table indicating regions to skip.
regionMap | Region table, the nonzero entry for region indicates region to skip due to unsupported elements or incompatible value size |
regionTypes | SPRPatchType of each region. |
type | Determines the type of internal variable to be recovered |
|
private |
Definition at line 647 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::FloatArray::at(), oofem::SPRNodalRecoveryModel::parallelStruct::dofManPatchCount, oofem::SPRNodalRecoveryModel::parallelStruct::dofManValues, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToSendMap(), oofem::SPRNodalRecoveryModel::parallelStruct::regionNodalNumbers, oofem::SPRNodalRecoveryModel::parallelStruct::regionValSize, and oofem::ProcessCommunicatorBuff::write().
Referenced by exchangeDofManValues().
|
virtual |
Recovers the nodal values for all regions.
type | Determines the type of internal variable to be recovered. |
tStep | Time step. |
Implements oofem::NodalRecoveryModel.
Definition at line 63 of file sprnodalrecoverymodel.C.
References oofem::__InternalStateTypeToString(), oofem::IntArray::at(), oofem::FloatArray::at(), oofem::NodalRecoveryModel::clear(), computePatch(), determinePatchAssemblyPoints(), determinePatchType(), determineValuesFromPatch(), oofem::DofManager_local, oofem::DofManager_shared, oofem::NodalRecoveryModel::domain, exchangeDofManValues(), oofem::Domain::giveDofManager(), oofem::Domain::giveNumberOfDofManagers(), oofem::DofManager::giveParallelMode(), oofem::IntArray::giveSize(), oofem::TimeStep::giveSolutionStateCounter(), initCommMaps(), initPatch(), oofem::NodalRecoveryModel::initRegionNodeNumbering(), OOFEM_WARNING, oofem::IntArray::resize(), oofem::FloatArray::resize(), oofem::NodalRecoveryModel::stateCounter, oofem::NodalRecoveryModel::updateRegionRecoveredValues(), oofem::NodalRecoveryModel::valType, oofem::FloatArray::zero(), and oofem::IntArray::zero().
|
private |
Definition at line 675 of file sprnodalrecoverymodel.C.
References oofem::IntArray::at(), oofem::FloatArray::at(), oofem::SPRNodalRecoveryModel::parallelStruct::dofManPatchCount, oofem::SPRNodalRecoveryModel::parallelStruct::dofManValues, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToRecvMap(), oofem::ProcessCommunicatorBuff::read(), oofem::SPRNodalRecoveryModel::parallelStruct::regionNodalNumbers, and oofem::SPRNodalRecoveryModel::parallelStruct::regionValSize.
Referenced by exchangeDofManValues().