Nektar++
|
#include <NekLinSysIterGMRESLoc.h>
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 nLocal, 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) |
Protected Attributes | |
int | m_maxrestart |
int | m_KrylovMaxHessMatBand |
int | m_LinSysMaxStorage |
NekDouble | m_prec_factor = 1.0 |
bool | m_NekLinSysLeftPrecon = false |
bool | m_NekLinSysRightPrecon = true |
bool | m_GMRESCentralDifference = false |
![]() | |
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 |
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 46 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_GMRESCentralDifference, Nektar::LibUtilities::NekSysKey::m_GMRESCentralDifference, m_hes, Nektar::LibUtilities::NekLinSysIter::m_isLocal, m_KrylovMaxHessMatBand, Nektar::LibUtilities::NekSysKey::m_KrylovMaxHessMatBand, m_LinSysMaxStorage, Nektar::LibUtilities::NekSysKey::m_LinSysMaxStorage, m_maxrestart, m_NekLinSysLeftPrecon, Nektar::LibUtilities::NekSysKey::m_NekLinSysLeftPrecon, Nektar::LibUtilities::NekLinSysIter::m_NekLinSysMaxIterations, m_NekLinSysRightPrecon, Nektar::LibUtilities::NekSysKey::m_NekLinSysRightPrecon, m_Upper, and m_V_total.
|
overridedefault |
|
inlinestatic |
Definition at line 52 of file NekLinSysIterGMRESLoc.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
|
private |
Definition at line 406 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_GMRESCentralDifference, m_NekLinSysLeftPrecon, Nektar::LibUtilities::NekSys::m_operator, 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 511 of file NekLinSysIterGMRESLoc.cpp.
Referenced by DoGmresRestart().
|
private |
Definition at line 457 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 119 of file NekLinSysIterGMRESLoc.cpp.
References Nektar::LibUtilities::NekSysOperators::DoAssembleLoc(), DoGmresRestart(), Nektar::LibUtilities::NekSysOperators::DoNekSysLhsEval(), Vmath::Dot(), Nektar::NekConstants::kNekUnsetDouble, Nektar::LibUtilities::NekSys::m_converged, Nektar::LibUtilities::NekSys::m_FlagWarnings, m_GMRESCentralDifference, m_KrylovMaxHessMatBand, m_maxrestart, Nektar::LibUtilities::NekLinSysIter::m_NekLinSysTolerance, Nektar::LibUtilities::NekSys::m_operator, m_prec_factor, 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, Nektar::LibUtilities::NekLinSysIter::Set_Rhs_Magnitude(), tinysimd::sqrt(), Vmath::Vsub(), and WARNINGL1.
Referenced by v_SolveSystem().
|
private |
Actual iterative gmres solver for one restart.
Definition at line 205 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_GMRESCentralDifference, m_hes, m_KrylovMaxHessMatBand, m_LinSysMaxStorage, m_NekLinSysLeftPrecon, m_NekLinSysRightPrecon, Nektar::LibUtilities::NekLinSysIter::m_NekLinSysTolerance, Nektar::LibUtilities::NekSys::m_operator, m_prec_factor, Nektar::LibUtilities::NekSys::m_rhs_magnitude, Nektar::LibUtilities::NekSys::m_rowComm, 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 NekLinSysIterGMRESLoc.h.
References 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().
|
friend |
Support creation through MemoryManager.
Definition at line 1 of file NekLinSysIterGMRESLoc.h.
|
static |
Definition at line 64 of file NekLinSysIterGMRESLoc.h.
|
staticprivate |
Definition at line 138 of file NekLinSysIterGMRESLoc.h.
|
staticprivate |
Definition at line 137 of file NekLinSysIterGMRESLoc.h.
|
protected |
Definition at line 95 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
Definition at line 141 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 83 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGMRES(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 89 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), GetMaxLinIte(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 79 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGMRES(), GetMaxLinIte(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 93 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 94 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
|
protected |
Definition at line 91 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGMRES(), and DoGmresRestart().
Definition at line 143 of file NekLinSysIterGMRESLoc.h.
Referenced by DoGmresRestart(), and NekLinSysIterGMRESLoc().
Definition at line 145 of file NekLinSysIterGMRESLoc.h.
Referenced by DoArnoldi(), DoGmresRestart(), and NekLinSysIterGMRESLoc().