Nektar++
|
#include <NekLinSysIterGMRES.h>
Public Member Functions | |
NekLinSysIterGMRES (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey=NekSysKey()) | |
~NekLinSysIterGMRES () override=default | |
int | GetMaxLinIte () |
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 | |
int | DoGMRES (const int pNumRows, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int pNumDir) |
Actual iterative solve-GMRES. More... | |
NekDouble | DoGmresRestart (const bool restarted, const bool truncted, const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir) |
Actual iterative gmres solver for one restart. More... | |
void | DoArnoldi (const int starttem, const int endtem, const int nGlobal, const int nDir, Array< OneD, NekDouble > &w, Array< OneD, NekDouble > &Vsingle1, Array< OneD, NekDouble > &Vsingle2, Array< OneD, NekDouble > &hsingle) |
void | DoGivensRotation (const int starttem, const int endtem, const int nGlobal, const int nDir, Array< OneD, NekDouble > &c, Array< OneD, NekDouble > &s, Array< OneD, NekDouble > &hsingle, Array< OneD, NekDouble > &eta) |
void | DoBackward (const int number, Array< OneD, Array< OneD, NekDouble > > &A, const Array< OneD, const NekDouble > &b, Array< OneD, NekDouble > &y) |
Private Attributes | |
Array< OneD, Array< OneD, NekDouble > > | m_hes |
Array< OneD, Array< OneD, NekDouble > > | m_Upper |
Array< OneD, Array< OneD, NekDouble > > | m_V_total |
Static Private Attributes | |
static std::string | lookupIds [] |
static std::string | def |
Friends | |
class | MemoryManager< NekLinSysIterGMRES > |
Support creation through MemoryManager. More... | |
Solves a linear system using iterative methods.
Definition at line 46 of file NekLinSysIterGMRES.h.
Nektar::LibUtilities::NekLinSysIterGMRES::NekLinSysIterGMRES | ( | const LibUtilities::SessionReaderSharedPtr & | pSession, |
const LibUtilities::CommSharedPtr & | vRowComm, | ||
const int | nDimen, | ||
const NekSysKey & | pKey = NekSysKey() |
||
) |
Definition at line 52 of file NekLinSysIterGMRES.cpp.
References m_DifferenceFlag0, Nektar::LibUtilities::NekSysKey::m_DifferenceFlag0, m_DifferenceFlag1, Nektar::LibUtilities::NekSysKey::m_DifferenceFlag1, m_hes, m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekSysKey::m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekLinSysIter::m_LinSysMaxStorage, Nektar::LibUtilities::NekSys::m_maxiter, m_maxrestart, m_NekLinSysLeftPrecon, Nektar::LibUtilities::NekSysKey::m_NekLinSysLeftPrecon, m_NekLinSysRightPrecon, Nektar::LibUtilities::NekSysKey::m_NekLinSysRightPrecon, m_Upper, and m_V_total.
|
overridedefault |
|
inlinestatic |
Definition at line 52 of file NekLinSysIterGMRES.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
|
private |
Definition at line 422 of file NekLinSysIterGMRES.cpp.
References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::LibUtilities::beta, Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot2(), m_DifferenceFlag1, Nektar::LibUtilities::NekLinSysIter::m_map, m_NekLinSysLeftPrecon, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekLinSysIter::m_prec_factor, Nektar::LibUtilities::NekSys::m_rowComm, m_V_total, Nektar::LibUtilities::ReduceSum, Vmath::Smul(), tinysimd::sqrt(), Nektar::LibUtilities::Timer::Start(), Nektar::LibUtilities::Timer::Stop(), Vmath::Svtvp(), and Nektar::UnitTests::w().
Referenced by DoGmresRestart().
|
private |
Definition at line 529 of file NekLinSysIterGMRES.cpp.
Referenced by DoGmresRestart().
|
private |
Definition at line 475 of file NekLinSysIterGMRES.cpp.
References tinysimd::abs(), and tinysimd::sqrt().
Referenced by DoGmresRestart().
|
private |
Actual iterative solve-GMRES.
 Solve a global linear system using the Gmres We solve only for the non-Dirichlet modes. The operator is evaluated  using an auxiliary function v_DoMatrixMultiply defined by the  specific solver. Distributed math routines are used to support  parallel execution of the solver.  Â
pInput | Input residual of all DOFs. Â |
pOutput | Solution vector of all DOFs. Â |
Definition at line 116 of file NekLinSysIterGMRES.cpp.
References DoGmresRestart(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Vmath::Dot2(), Nektar::eWrapper, Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekSys::m_converged, m_DifferenceFlag0, Nektar::LibUtilities::NekSys::m_FlagWarnings, m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekLinSysIter::m_map, m_maxrestart, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekLinSysIter::m_prec_factor, 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, Nektar::LibUtilities::NekLinSysIter::Set_Rhs_Magnitude(), tinysimd::sqrt(), Vmath::Svtvp(), WARNINGL1, and Vmath::Zero().
Referenced by v_SolveSystem().
|
private |
Actual iterative gmres solver for one restart.
Definition at line 205 of file NekLinSysIterGMRES.cpp.
References Nektar::LibUtilities::beta, DoArnoldi(), DoBackward(), DoGivensRotation(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot2(), Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekSys::m_converged, m_DifferenceFlag0, m_hes, m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekLinSysIter::m_LinSysMaxStorage, Nektar::LibUtilities::NekLinSysIter::m_map, m_NekLinSysLeftPrecon, m_NekLinSysRightPrecon, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekLinSysIter::m_prec_factor, Nektar::LibUtilities::NekLinSysIter::m_rhs_magnitude, Nektar::LibUtilities::NekSys::m_rowComm, Nektar::LibUtilities::NekSys::m_tolerance, Nektar::LibUtilities::NekLinSysIter::m_totalIterations, m_Upper, m_V_total, Nektar::LibUtilities::ReduceSum, Vmath::Smul(), tinysimd::sqrt(), Vmath::Svtvp(), Vmath::Vadd(), Vmath::Vcopy(), Nektar::UnitTests::w(), and Vmath::Zero().
Referenced by DoGMRES().
|
inline |
Definition at line 72 of file NekLinSysIterGMRES.h.
References Nektar::LibUtilities::NekLinSysIter::m_LinSysMaxStorage, and m_maxrestart.
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekLinSysIter.
Definition at line 86 of file NekLinSysIterGMRES.cpp.
References Nektar::LibUtilities::NekLinSysIter::v_InitObject().
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekSys.
Definition at line 94 of file NekLinSysIterGMRES.cpp.
References DoGMRES(), and Nektar::LibUtilities::NekSys::m_tolerance.
|
friend |
Support creation through MemoryManager.
Definition at line 1 of file NekLinSysIterGMRES.h.
|
static |
Definition at line 64 of file NekLinSysIterGMRES.h.
|
staticprivate |
Definition at line 130 of file NekLinSysIterGMRES.h.
|
staticprivate |
Definition at line 129 of file NekLinSysIterGMRES.h.
|
protected |
Definition at line 88 of file NekLinSysIterGMRES.h.
Referenced by DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRES().
|
protected |
Definition at line 89 of file NekLinSysIterGMRES.h.
Referenced by DoArnoldi(), and NekLinSysIterGMRES().
Definition at line 133 of file NekLinSysIterGMRES.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRES().
|
protected |
Definition at line 83 of file NekLinSysIterGMRES.h.
Referenced by DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRES().
|
protected |
Definition at line 79 of file NekLinSysIterGMRES.h.
Referenced by DoGMRES(), GetMaxLinIte(), and NekLinSysIterGMRES().
|
protected |
Definition at line 85 of file NekLinSysIterGMRES.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRES().
|
protected |
Definition at line 86 of file NekLinSysIterGMRES.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRES().
Definition at line 135 of file NekLinSysIterGMRES.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRES().
Definition at line 137 of file NekLinSysIterGMRES.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRES().