|
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>
Inheritance diagram for oofem::SPRNodalRecoveryModel:
Collaboration diagram for oofem::SPRNodalRecoveryModel: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().