Nektar++
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
Nektar::LibUtilities::NekLinSysIter Class Reference

#include <NekLinSysIter.h>

Inheritance diagram for Nektar::LibUtilities::NekLinSysIter:
[legend]

Public Member Functions

 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, const int nDir=0)
 
void SetNekLinSysTolerance (const NekDouble in)
 
void SetNekLinSysMaxIterations (const unsigned int in)
 
void SetErrorCheckInterval (const unsigned int in)
 
int GetNekLinSysTolerance ()
 
bool IsLocal ()
 
void DoIterate (const int nGlobal, const Array< OneD, NekDouble > &rhs, Array< OneD, NekDouble > &x, const int nDir, NekDouble &err, int &iter)
 
- 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 ()
 
int SolveSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pOutput, const int nDir=0)
 
const NekSysOperatorsGetSysOperators ()
 
void SetSysOperators (const NekSysOperators &in)
 
void SetFlagWarnings (bool in)
 
void SetRhsMagnitude (const NekDouble mag)
 

Static Public Member Functions

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)
 

Protected Member Functions

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_DoIterate (const int nGlobal, const Array< OneD, NekDouble > &rhs, Array< OneD, NekDouble > &x, const int nDir, NekDouble &err, int &iter)
 
- Protected Member Functions inherited from Nektar::LibUtilities::NekSys
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

Array< OneD, int > m_map
 Global to universal unique map.
 
NekDouble m_NekLinSysTolerance
 
int m_NekLinSysMaxIterations
 
int m_totalIterations = 0
 
NekDouble m_finalError = 999.9
 
int m_errorCheckInterval = 1
 
bool m_mapIsOnes = false
 
bool m_isLocal
 
- Protected Attributes inherited from Nektar::LibUtilities::NekSys
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
 

Friends

class MemoryManager< NekLinSysIter >
 Support creation through MemoryManager.
 

Detailed Description

Solves a linear system using iterative methods.

Definition at line 55 of file NekLinSysIter.h.

Constructor & Destructor Documentation

◆ NekLinSysIter()

Nektar::LibUtilities::NekLinSysIter::NekLinSysIter ( const LibUtilities::SessionReaderSharedPtr pSession,
const LibUtilities::CommSharedPtr vRowComm,
const int  nDimen,
const NekSysKey pKey 
)

Definition at line 51 of file NekLinSysIter.cpp.

55 : NekSys(pSession, vRowComm, nDimen, pKey)
56{
57 m_NekLinSysTolerance = fmax(pKey.m_NekLinSysTolerance, 1.0E-16);
58 m_NekLinSysMaxIterations = pKey.m_NekLinSysMaxIterations;
59 m_isLocal = false;
60}
NekSys(const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey)
Definition NekSys.cpp:46

References m_isLocal, m_NekLinSysMaxIterations, Nektar::LibUtilities::NekSysKey::m_NekLinSysMaxIterations, m_NekLinSysTolerance, and Nektar::LibUtilities::NekSysKey::m_NekLinSysTolerance.

◆ ~NekLinSysIter()

Nektar::LibUtilities::NekLinSysIter::~NekLinSysIter ( )
overridedefault

Member Function Documentation

◆ ConvergenceCheck()

void Nektar::LibUtilities::NekLinSysIter::ConvergenceCheck ( const Array< OneD, const NekDouble > &  Residual)
protected

◆ CreateInstance()

static NekLinSysIterSharedPtr Nektar::LibUtilities::NekLinSysIter::CreateInstance ( const LibUtilities::SessionReaderSharedPtr pSession,
const LibUtilities::CommSharedPtr vRowComm,
const int  nDimen,
const NekSysKey pKey 
)
inlinestatic

Definition at line 61 of file NekLinSysIter.h.

65 {
68 nDimen, pKey);
69 return p;
70 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< NekLinSysIter > NekLinSysIterSharedPtr
std::vector< double > p(NPUPPER)

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

◆ DoIterate()

void Nektar::LibUtilities::NekLinSysIter::DoIterate ( const int  nGlobal,
const Array< OneD, NekDouble > &  rhs,
Array< OneD, NekDouble > &  x,
const int  nDir,
NekDouble err,
int &  iter 
)
inline

Definition at line 109 of file NekLinSysIter.h.

114 {
115 v_DoIterate(nGlobal, rhs, x, nDir, err, iter);
116 }
virtual void v_DoIterate(const int nGlobal, const Array< OneD, NekDouble > &rhs, Array< OneD, NekDouble > &x, const int nDir, NekDouble &err, int &iter)

References v_DoIterate().

◆ GetNekLinSysTolerance()

int Nektar::LibUtilities::NekLinSysIter::GetNekLinSysTolerance ( )
inline

Definition at line 96 of file NekLinSysIter.h.

97 {
99 }

References m_NekLinSysTolerance.

◆ IsLocal()

bool Nektar::LibUtilities::NekLinSysIter::IsLocal ( )
inline

Definition at line 101 of file NekLinSysIter.h.

102 {
103 return m_isLocal;
104 }

References m_isLocal.

◆ Set_Rhs_Magnitude()

void Nektar::LibUtilities::NekLinSysIter::Set_Rhs_Magnitude ( const Array< OneD, NekDouble > &  pIn)
protected

Definition at line 95 of file NekLinSysIter.cpp.

96{
97 NekDouble vExchange(0.0);
98
99 if (m_isLocal)
100 {
101 Array<OneD, NekDouble> wk(pIn.size());
102 m_operator.DoAssembleLoc(pIn, wk);
103 vExchange = Vmath::Dot(pIn.size(), wk, pIn);
104 }
105 else
106 {
107 vExchange = Vmath::Dot2(pIn.size(), pIn, pIn, m_map);
108 }
109
110 m_rowComm->AllReduce(vExchange, LibUtilities::ReduceSum);
111 m_rhs_magnitude = (vExchange > 1.0e-6) ? vExchange : 1.0;
112}
Array< OneD, int > m_map
Global to universal unique map.
NekSysOperators m_operator
Definition NekSys.h:306
void DoAssembleLoc(InArrayType &xn, OutArrayType &xn1, const bool &flag=false) const
Definition NekSys.h:168
T Dot2(int n, const T *w, const T *x, const int *y)
dot product
Definition Vmath.hpp:790

References Nektar::LibUtilities::NekSysOperators::DoAssembleLoc(), Vmath::Dot(), Vmath::Dot2(), m_isLocal, m_map, Nektar::LibUtilities::NekSys::m_operator, Nektar::LibUtilities::NekSys::m_rhs_magnitude, Nektar::LibUtilities::NekSys::m_rowComm, and Nektar::LibUtilities::ReduceSum.

Referenced by Nektar::LibUtilities::NekLinSysIterCGLoc::DoConjugateGradient(), Nektar::LibUtilities::NekLinSysIterCG::DoConjugateGradient(), Nektar::LibUtilities::NekLinSysIterGMRESLoc::DoGMRES(), and Nektar::LibUtilities::NekLinSysIterGMRES::DoGMRES().

◆ SetErrorCheckInterval()

void Nektar::LibUtilities::NekLinSysIter::SetErrorCheckInterval ( const unsigned int  in)
inline

Definition at line 91 of file NekLinSysIter.h.

References m_errorCheckInterval.

◆ SetNekLinSysMaxIterations()

void Nektar::LibUtilities::NekLinSysIter::SetNekLinSysMaxIterations ( const unsigned int  in)
inline

Definition at line 86 of file NekLinSysIter.h.

87 {
89 }

References m_NekLinSysMaxIterations.

◆ SetNekLinSysTolerance()

void Nektar::LibUtilities::NekLinSysIter::SetNekLinSysTolerance ( const NekDouble  in)
inline

Definition at line 81 of file NekLinSysIter.h.

82 {
83 m_NekLinSysTolerance = fmax(1.0E-16, in);
84 }

References m_NekLinSysTolerance.

◆ SetUniversalUniqueMap() [1/2]

void Nektar::LibUtilities::NekLinSysIter::SetUniversalUniqueMap ( )
protected

Definition at line 89 of file NekLinSysIter.cpp.

90{
91 m_map = Array<OneD, int>(m_SysDimen, 1);
92 m_mapIsOnes = true;
93}

References m_map, m_mapIsOnes, and Nektar::LibUtilities::NekSys::m_SysDimen.

Referenced by v_InitObject().

◆ SetUniversalUniqueMap() [2/2]

void Nektar::LibUtilities::NekLinSysIter::SetUniversalUniqueMap ( const Array< OneD, const int > &  map,
const int  nDir = 0 
)

Definition at line 68 of file NekLinSysIter.cpp.

70{
71 int nmap = map.size();
72 if (m_map.size() != nmap)
73 {
74 m_map = Array<OneD, int>(nmap, 0);
75 }
76 Vmath::Vcopy(nmap, map, 1, m_map, 1);
77 // check if map is all ones, ignore Dirichlet BCs
78 m_mapIsOnes = true;
79 for (int i = nDir; i < nmap; ++i)
80 {
81 if (map[i] != 1)
82 {
83 m_mapIsOnes = false;
84 break;
85 }
86 }
87}
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition Vmath.hpp:825

References m_map, m_mapIsOnes, and Vmath::Vcopy().

◆ v_DoIterate()

virtual void Nektar::LibUtilities::NekLinSysIter::v_DoIterate ( const int  nGlobal,
const Array< OneD, NekDouble > &  rhs,
Array< OneD, NekDouble > &  x,
const int  nDir,
NekDouble err,
int &  iter 
)
inlineprotectedvirtual

Reimplemented in Nektar::LibUtilities::NekLinSysIterCG, Nektar::LibUtilities::NekLinSysIterCGLoc, Nektar::LibUtilities::NekLinSysIterFixedpointJacobi, Nektar::LibUtilities::NekLinSysIterGMRES, and Nektar::LibUtilities::NekLinSysIterGMRESLoc.

Definition at line 147 of file NekLinSysIter.h.

153 {
154 ASSERTL0(false, "v_DoIterate is NOT defined.");
155 }
#define ASSERTL0(condition, msg)

References ASSERTL0.

Referenced by DoIterate().

◆ v_InitObject()

void Nektar::LibUtilities::NekLinSysIter::v_InitObject ( )
overrideprotectedvirtual

Friends And Related Symbol Documentation

◆ MemoryManager< NekLinSysIter >

friend class MemoryManager< NekLinSysIter >
friend

Support creation through MemoryManager.

Definition at line 53 of file NekLinSysIter.h.

Member Data Documentation

◆ m_errorCheckInterval

int Nektar::LibUtilities::NekLinSysIter::m_errorCheckInterval = 1
protected

◆ m_finalError

NekDouble Nektar::LibUtilities::NekLinSysIter::m_finalError = 999.9
protected

◆ m_isLocal

bool Nektar::LibUtilities::NekLinSysIter::m_isLocal
protected

◆ m_map

Array<OneD, int> Nektar::LibUtilities::NekLinSysIter::m_map
protected

◆ m_mapIsOnes

bool Nektar::LibUtilities::NekLinSysIter::m_mapIsOnes = false
protected

◆ m_NekLinSysMaxIterations

int Nektar::LibUtilities::NekLinSysIter::m_NekLinSysMaxIterations
protected

◆ m_NekLinSysTolerance

NekDouble Nektar::LibUtilities::NekLinSysIter::m_NekLinSysTolerance
protected

◆ m_totalIterations

int Nektar::LibUtilities::NekLinSysIter::m_totalIterations = 0
protected