Nektar++
|
#include <NekLinSysIterCG.h>
Public Member Functions | |
NekLinSysIterCG (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) | |
Constructor for full direct matrix solve. More... | |
~NekLinSysIterCG () override=default | |
Public Member Functions inherited from Nektar::LibUtilities::NekLinSysIter | |
NekLinSysIter (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) | |
~NekLinSysIter () override=default | |
void | SetUniversalUniqueMap (const Array< OneD, const int > &map) |
void | setRhsMagnitude (const NekDouble mag) |
void | SetNekLinSysMaxIterations (const unsigned int in) |
void | SetLinSysMaxStorage (const unsigned int in) |
bool | IsLocal () |
Public Member Functions inherited from Nektar::LibUtilities::NekSys | |
NekSys (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) | |
virtual | ~NekSys ()=default |
void | InitObject () |
void | SetSysOperators (const NekSysOperators &in) |
const NekSysOperators & | GetSysOperators () |
int | SolveSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir, const NekDouble tol=1.0E-7, const NekDouble factor=1.0) |
bool | ConvergenceCheck (const int nIteration, const Array< OneD, const NekDouble > &Residual, const NekDouble tol=1.0E-7) |
void | SetFlagWarnings (bool in) |
Static Public Member Functions | |
static NekLinSysIterSharedPtr | create (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) |
Static Public Member Functions inherited from Nektar::LibUtilities::NekLinSysIter | |
static NekLinSysIterSharedPtr | CreateInstance (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) |
Static Public Member Functions inherited from Nektar::LibUtilities::NekSys | |
static NekSysSharedPtr | CreateInstance (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) |
Static Public Attributes | |
static std::string | className |
Protected Member Functions | |
void | v_InitObject () override |
int | v_SolveSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir, const NekDouble tol, const NekDouble factor) override |
Protected Member Functions inherited from Nektar::LibUtilities::NekLinSysIter | |
void | Set_Rhs_Magnitude (const NekVector< NekDouble > &pIn) |
void | Set_Rhs_Magnitude (const Array< OneD, NekDouble > &pIn) |
void | SetUniversalUniqueMap () |
void | v_InitObject () override |
Protected Member Functions inherited from Nektar::LibUtilities::NekSys | |
virtual void | v_InitObject () |
virtual void | v_SetSysOperators (const NekSysOperators &in) |
virtual int | v_SolveSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir, const NekDouble tol, const NekDouble factor) |
virtual bool | v_ConvergenceCheck (const int nIteration, const Array< OneD, const NekDouble > &Residual, const NekDouble tol) |
virtual void | v_NekSysInitialGuess (const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pguess) |
Private Member Functions | |
void | DoConjugateGradient (const int pNumRows, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int pNumDir) |
Actual iterative solve. More... | |
Friends | |
class | MemoryManager< NekLinSysIterCG > |
Support creation through MemoryManager. More... | |
Additional Inherited Members | |
Protected Attributes inherited from Nektar::LibUtilities::NekLinSysIter | |
Array< OneD, int > | m_map |
Global to universal unique map. More... | |
NekDouble | m_rhs_magnitude = NekConstants::kNekUnsetDouble |
Dot product of rhs to normalise stopping criterion. More... | |
int | m_totalIterations = 0 |
NekDouble | m_prec_factor = 1.0 |
int | m_LinSysMaxStorage |
bool | m_isLocal |
Protected Attributes inherited from Nektar::LibUtilities::NekSys | |
int | m_maxiter |
Maximum iterations. More... | |
NekDouble | m_tolerance |
Tolerance of iterative solver. More... | |
LibUtilities::CommSharedPtr | m_rowComm |
Communicate. More... | |
bool | m_converged |
Whether the iteration has been converged. More... | |
bool | m_root |
Root if parallel. More... | |
bool | m_verbose |
Verbose. More... | |
bool | m_FlagWarnings |
NekSysOperators | m_operator |
Operators. More... | |
int | m_SysDimen |
The dimension of the system. More... | |
Solves a linear system using iterative methods.
Definition at line 48 of file NekLinSysIterCG.h.
Nektar::LibUtilities::NekLinSysIterCG::NekLinSysIterCG | ( | const LibUtilities::SessionReaderSharedPtr & | pSession, |
const LibUtilities::CommSharedPtr & | vRowComm, | ||
const int | nDimen, | ||
const NekSysKey & | pKey | ||
) |
Constructor for full direct matrix solve.
Definition at line 52 of file NekLinSysIterCG.cpp.
|
overridedefault |
|
inlinestatic |
Definition at line 54 of file NekLinSysIterCG.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
|
private |
Actual iterative solve.
Solve a global linear system using the conjugate gradient method. We solve only for the non-Dirichlet modes. The operator is evaluated using an auxiliary function m_operator.DoNekSysLhsEval defined by the specific solver. Distributed math routines are used to support parallel execution of the solver. The implemented algorithm uses a reduced-communication reordering of the standard PCG method (Demmel, Heath and Vorst, 1993)
pInput | Input residual of all DOFs. |
pOutput | Solution vector of all DOFs. |
Definition at line 94 of file NekLinSysIterCG.cpp.
References Nektar::LibUtilities::beta, Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot2(), Nektar::ErrorUtil::efatal, Nektar::eWrapper, Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekLinSysIter::m_map, Nektar::LibUtilities::NekSys::m_maxiter, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekLinSysIter::m_rhs_magnitude, Nektar::LibUtilities::NekSys::m_root, Nektar::LibUtilities::NekSys::m_rowComm, Nektar::LibUtilities::NekSys::m_tolerance, Nektar::LibUtilities::NekLinSysIter::m_totalIterations, Nektar::LibUtilities::NekSys::m_verbose, Nektar::LibUtilities::ReduceSum, ROOTONLY_NEKERROR, Nektar::LibUtilities::NekLinSysIter::Set_Rhs_Magnitude(), tinysimd::sqrt(), Vmath::Svtvp(), Vmath::Vcopy(), and Vmath::Zero().
Referenced by v_SolveSystem().
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekLinSysIter.
Definition at line 60 of file NekLinSysIterCG.cpp.
References Nektar::LibUtilities::NekLinSysIter::v_InitObject().
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekSys.
Definition at line 68 of file NekLinSysIterCG.cpp.
References DoConjugateGradient(), Nektar::LibUtilities::NekSys::m_tolerance, and Nektar::LibUtilities::NekLinSysIter::m_totalIterations.
|
friend |
Support creation through MemoryManager.
Definition at line 46 of file NekLinSysIterCG.h.
|
static |
Definition at line 65 of file NekLinSysIterCG.h.