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 | |
![]() | |
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 | SetNekLinSysTolerance (const NekDouble in) |
void | SetNekLinSysMaxIterations (const unsigned int in) |
int | GetNekLinSysTolerance () |
bool | IsLocal () |
![]() | |
NekSys (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) | |
virtual | ~NekSys ()=default |
void | InitObject () |
int | SolveSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir=0) |
const NekSysOperators & | GetSysOperators () |
void | SetSysOperators (const NekSysOperators &in) |
void | SetFlagWarnings (bool in) |
void | SetRhsMagnitude (const NekDouble mag) |
Static Public Member Functions | |
static NekLinSysIterSharedPtr | create (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) |
![]() | |
static NekLinSysIterSharedPtr | CreateInstance (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey) |
![]() | |
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) override |
![]() | |
void | v_InitObject () override |
void | SetUniversalUniqueMap () |
void | Set_Rhs_Magnitude (const Array< OneD, NekDouble > &pIn) |
void | ConvergenceCheck (const Array< OneD, const NekDouble > &Residual) |
![]() | |
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) |
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 | |
![]() | |
Array< OneD, int > | m_map |
Global to universal unique map. More... | |
NekDouble | m_NekLinSysTolerance |
int | m_NekLinSysMaxIterations |
int | m_totalIterations = 0 |
bool | m_isLocal |
![]() | |
LibUtilities::CommSharedPtr | m_rowComm |
bool | m_converged |
bool | m_root |
bool | m_verbose |
bool | m_FlagWarnings |
int | m_SysDimen |
NekSysOperators | m_operator |
NekDouble | m_rhs_magnitude = NekConstants::kNekUnsetDouble |
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 91 of file NekLinSysIterCG.cpp.
References Nektar::LibUtilities::beta, Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot2(), Nektar::ErrorUtil::efatal, Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekLinSysIter::m_map, Nektar::LibUtilities::NekLinSysIter::m_NekLinSysMaxIterations, Nektar::LibUtilities::NekLinSysIter::m_NekLinSysTolerance, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekSys::m_rhs_magnitude, Nektar::LibUtilities::NekSys::m_root, Nektar::LibUtilities::NekSys::m_rowComm, 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(), and Nektar::LibUtilities::NekLinSysIter::m_totalIterations.
|
friend |
Support creation through MemoryManager.
Definition at line 46 of file NekLinSysIterCG.h.
|
static |
Definition at line 66 of file NekLinSysIterCG.h.