Nektar++
|
#include <NekLinSysIterGMRESLoc.h>
Public Member Functions | |
NekLinSysIterGMRESLoc (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey=NekSysKey()) | |
~NekLinSysIterGMRESLoc () 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 nLocal, 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) |
Actual iterative solve-GMRES. More... | |
NekDouble | DoGmresRestart (const bool restarted, const bool truncted, const int nLocal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput) |
Actual iterative gmres solver for one restart. More... | |
void | DoArnoldi (const int starttem, const int endtem, const int nLocal, Array< OneD, NekDouble > &w, Array< OneD, NekDouble > &wk, Array< OneD, NekDouble > &V1, Array< OneD, NekDouble > &V2, Array< OneD, NekDouble > &h) |
void | DoGivensRotation (const int starttem, const int endtem, Array< OneD, NekDouble > &c, Array< OneD, NekDouble > &s, Array< OneD, NekDouble > &h, 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< NekLinSysIterGMRESLoc > |
Support creation through MemoryManager. More... | |
Solves a linear system using iterative methods using local storage rather than global
Definition at line 45 of file NekLinSysIterGMRESLoc.h.
Nektar::LibUtilities::NekLinSysIterGMRESLoc::NekLinSysIterGMRESLoc | ( | const LibUtilities::SessionReaderSharedPtr & | pSession, |
const LibUtilities::CommSharedPtr & | vRowComm, | ||
const int | nDimen, | ||
const NekSysKey & | pKey = NekSysKey() |
||
) |
Definition at line 54 of file NekLinSysIterGMRESLoc.cpp.
References m_DifferenceFlag0, Nektar::LibUtilities::NekSysKey::m_DifferenceFlag0, m_DifferenceFlag1, Nektar::LibUtilities::NekSysKey::m_DifferenceFlag1, m_hes, Nektar::LibUtilities::NekLinSysIter::m_isLocal, 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 51 of file NekLinSysIterGMRESLoc.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
|
private |
Definition at line 408 of file NekLinSysIterGMRESLoc.cpp.
References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::LibUtilities::beta, Nektar::LibUtilities::NekSysOperators::DoAssembleLoc(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot(), m_DifferenceFlag1, 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 513 of file NekLinSysIterGMRESLoc.cpp.
Referenced by DoGmresRestart().
|
private |
Definition at line 459 of file NekLinSysIterGMRESLoc.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 in local format. |
pOutput | Solution vector in local format but with continuous values |
Definition at line 121 of file NekLinSysIterGMRESLoc.cpp.
References Nektar::LibUtilities::NekSysOperators::DoAssembleLoc(), DoGmresRestart(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Vmath::Dot(), Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekSys::m_converged, m_DifferenceFlag0, Nektar::LibUtilities::NekSys::m_FlagWarnings, m_KrylovMaxHessMatBand, 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(), and WARNINGL1.
Referenced by v_SolveSystem().
|
private |
Actual iterative gmres solver for one restart.
Definition at line 207 of file NekLinSysIterGMRESLoc.cpp.
References ASSERTL0, Nektar::LibUtilities::beta, DoArnoldi(), Nektar::LibUtilities::NekSysOperators::DoAssembleLoc(), DoBackward(), DoGivensRotation(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Nektar::LibUtilities::NekSysOperators::DoNekSysPrecon(), Vmath::Dot(), Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekSys::m_converged, m_DifferenceFlag0, m_hes, m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekLinSysIter::m_LinSysMaxStorage, 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 70 of file NekLinSysIterGMRESLoc.h.
References Nektar::LibUtilities::NekLinSysIter::m_LinSysMaxStorage, and m_maxrestart.
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekLinSysIter.
Definition at line 90 of file NekLinSysIterGMRESLoc.cpp.
References Nektar::LibUtilities::NekLinSysIter::v_InitObject().
|
overrideprotectedvirtual |
Reimplemented from Nektar::LibUtilities::NekSys.
Definition at line 98 of file NekLinSysIterGMRESLoc.cpp.
References DoGMRES(), and Nektar::LibUtilities::NekSys::m_tolerance.
|
friend |
Support creation through MemoryManager.
Definition at line 1 of file NekLinSysIterGMRESLoc.h.
|
static |
Definition at line 62 of file NekLinSysIterGMRESLoc.h.
|
staticprivate |
Definition at line 131 of file NekLinSysIterGMRESLoc.h.
|
staticprivate |
Definition at line 130 of file NekLinSysIterGMRESLoc.h.
|
protected |
Definition at line 86 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 87 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), and NekLinSysIterGMRESLoc().
Definition at line 134 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 81 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 77 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGMRES(), GetMaxLinIte(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 83 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 84 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
Definition at line 136 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
Definition at line 138 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRESLoc().