Nektar++
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Nektar::LibUtilities::NekNonlinSys Class Referenceabstract

#include <NekNonlinSys.h>

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

Public Member Functions

 NekNonlinSys (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey)
 
 ~NekNonlinSys ()
 
const Array< OneD, const NekDouble > & GetRefSolution () const
 
const Array< OneD, const NekDouble > & GetRefResidual () const
 
const Array< OneD, const NekDouble > & GetRefSourceVec () const
 
void SetNekNonlinSysTolerance (const NekDouble in)
 
void SetNekNonlinSysMaxIterations (const unsigned int in)
 
const NekLinSysIterSharedPtr & GetLinSys ()
 
void SetNonlinIterTolRelativeL2 (const NekDouble in)
 
void SetLinSysRelativeTolInNonlin (const NekDouble in)
 
int GetNtotLinSysIts ()
 
void SetupNekNonlinSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, const Array< OneD, const NekDouble > &pSource, const int nDir)
 
- Public Member Functions inherited from Nektar::LibUtilities::NekSys
 NekSys (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey)
 
void InitObject ()
 
virtual ~NekSys ()
 
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)
 

Protected Member Functions

virtual void v_InitObject ()
 
virtual void v_SetupNekNonlinSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, const Array< OneD, const NekDouble > &pSource, const int nDir)=0
 
- Protected Member Functions inherited from Nektar::LibUtilities::NekSys
virtual void v_InitObject ()
 
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)
 

Protected Attributes

NekLinSysIterSharedPtr m_linsol
 
NekDouble m_NonlinIterTolRelativeL2
 
NekDouble m_LinSysRelativeTolInNonlin
 
std::string m_LinSysIterSolverType
 
int m_totalIterations = 0
 
int m_NtotLinSysIts = 0
 
Array< OneD, NekDouble > m_Solution
 
Array< OneD, NekDouble > m_Residual
 
Array< OneD, NekDouble > m_DeltSltn
 
Array< OneD, NekDouble > m_SourceVec
 
- Protected Attributes inherited from Nektar::LibUtilities::NekSys
int m_maxiter
 Maximum iterations. More...
 
NekDouble m_tolerance
 Tolerance of iterative solver. More...
 
LibUtilities::CommSharedPtr m_rowComm
 Communicate. More...
 
bool m_converged
 Whether the iteration has been converged. More...
 
bool m_root
 Root if parallel. More...
 
bool m_verbose
 Verbose. More...
 
bool m_FlagWarnings
 
NekSysOperators m_operator
 Operators. More...
 
int m_SysDimen
 The dimension of the system. More...
 

Additional Inherited Members

- 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)
 

Detailed Description

Solves a nonlinear system using iterative methods.

Definition at line 56 of file NekNonlinSys.h.

Constructor & Destructor Documentation

◆ NekNonlinSys()

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

Definition at line 55 of file NekNonlinSys.cpp.

58 : NekSys(pSession, vRowComm, nDimen, pKey)
59{
60 std::vector<std::string> variables(1);
61 variables[0] = pSession->GetVariable(0);
62 string variable = variables[0];
63
64 if (pSession->DefinesGlobalSysSolnInfo(variable, "NekNonlinSysTolerance"))
65 {
66 m_tolerance = boost::lexical_cast<NekDouble>(
67 pSession->GetGlobalSysSolnInfo(variable, "NekNonlinSysTolerance")
68 .c_str());
69 }
70 else
71 {
72 pSession->LoadParameter("NekNonlinSysTolerance", m_tolerance,
73 pKey.m_NekNonlinSysTolerance);
74 }
75
76 if (pSession->DefinesGlobalSysSolnInfo(variable,
77 "NekNonlinSysMaxIterations"))
78 {
79 m_maxiter = boost::lexical_cast<int>(
80 pSession
81 ->GetGlobalSysSolnInfo(variable, "NekNonlinSysMaxIterations")
82 .c_str());
83 }
84 else
85 {
86 pSession->LoadParameter("NekNonlinSysMaxIterations", m_maxiter,
87 pKey.m_NekNonlinSysMaxIterations);
88 }
89
90 if (pSession->DefinesGlobalSysSolnInfo(variable, "NonlinIterTolRelativeL2"))
91 {
92 m_NonlinIterTolRelativeL2 = boost::lexical_cast<NekDouble>(
93 pSession->GetGlobalSysSolnInfo(variable, "NonlinIterTolRelativeL2")
94 .c_str());
95 }
96 else
97 {
98 pSession->LoadParameter("NonlinIterTolRelativeL2",
100 pKey.m_NonlinIterTolRelativeL2);
101 }
102
103 if (pSession->DefinesGlobalSysSolnInfo(variable,
104 "LinSysRelativeTolInNonlin"))
105 {
106 m_LinSysRelativeTolInNonlin = boost::lexical_cast<NekDouble>(
107 pSession
108 ->GetGlobalSysSolnInfo(variable, "LinSysRelativeTolInNonlin")
109 .c_str());
110 }
111 else
112 {
113 pSession->LoadParameter("LinSysRelativeTolInNonlin",
115 pKey.m_LinSysRelativeTolInNonlin);
116 }
117
118 m_LinSysIterSolverType = pKey.m_LinSysIterSolverTypeInNonlin;
119 if (pSession->DefinesGlobalSysSolnInfo(variable,
120 "LinSysIterSolverTypeInNonlin"))
121 {
122 m_LinSysIterSolverType = pSession->GetGlobalSysSolnInfo(
123 variable, "LinSysIterSolverTypeInNonlin");
124 }
125 else
126 {
127 if (pSession->DefinesSolverInfo("LinSysIterSolverTypeInNonlin"))
128 {
130 pSession->GetSolverInfo("LinSysIterSolverTypeInNonlin");
131 }
132 }
133
136 "NekLinSysIter '" + m_LinSysIterSolverType +
137 "' is not defined.\n");
138
141 m_linsol->SetFlagWarnings(false);
142}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:215
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:144
NekLinSysIterSharedPtr m_linsol
Definition: NekNonlinSys.h:122
LibUtilities::CommSharedPtr m_rowComm
Communicate.
Definition: NekSys.h:302
NekDouble m_tolerance
Tolerance of iterative solver.
Definition: NekSys.h:300
int m_SysDimen
The dimension of the system.
Definition: NekSys.h:313
NekSys(const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vRowComm, const int nDimen, const NekSysKey &pKey)
Definition: NekSys.cpp:50
int m_maxiter
Maximum iterations.
Definition: NekSys.h:298
NekLinSysIterFactory & GetNekLinSysIterFactory()

References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::GetNekLinSysIterFactory(), m_linsol, m_LinSysIterSolverType, Nektar::LibUtilities::NekSysKey::m_LinSysIterSolverTypeInNonlin, m_LinSysRelativeTolInNonlin, Nektar::LibUtilities::NekSysKey::m_LinSysRelativeTolInNonlin, Nektar::LibUtilities::NekSys::m_maxiter, Nektar::LibUtilities::NekSysKey::m_NekNonlinSysMaxIterations, Nektar::LibUtilities::NekSysKey::m_NekNonlinSysTolerance, m_NonlinIterTolRelativeL2, Nektar::LibUtilities::NekSysKey::m_NonlinIterTolRelativeL2, Nektar::LibUtilities::NekSys::m_rowComm, Nektar::LibUtilities::NekSys::m_SysDimen, and Nektar::LibUtilities::NekSys::m_tolerance.

◆ ~NekNonlinSys()

Nektar::LibUtilities::NekNonlinSys::~NekNonlinSys ( )

Definition at line 149 of file NekNonlinSys.cpp.

150{
151}

Member Function Documentation

◆ GetLinSys()

const NekLinSysIterSharedPtr & Nektar::LibUtilities::NekNonlinSys::GetLinSys ( )
inline

Definition at line 94 of file NekNonlinSys.h.

95 {
96 return m_linsol;
97 }

References m_linsol.

◆ GetNtotLinSysIts()

int Nektar::LibUtilities::NekNonlinSys::GetNtotLinSysIts ( )
inline

Definition at line 109 of file NekNonlinSys.h.

110 {
111 return m_NtotLinSysIts;
112 }

References m_NtotLinSysIts.

◆ GetRefResidual()

const Array< OneD, const NekDouble > & Nektar::LibUtilities::NekNonlinSys::GetRefResidual ( ) const
inline

Definition at line 71 of file NekNonlinSys.h.

73 {
74 return m_Residual;
75 }
Array< OneD, NekDouble > m_Residual
Definition: NekNonlinSys.h:133

References m_Residual.

◆ GetRefSolution()

const Array< OneD, const NekDouble > & Nektar::LibUtilities::NekNonlinSys::GetRefSolution ( ) const
inline

Definition at line 65 of file NekNonlinSys.h.

67 {
68 return m_Solution;
69 }
Array< OneD, NekDouble > m_Solution
Definition: NekNonlinSys.h:132

References m_Solution.

◆ GetRefSourceVec()

const Array< OneD, const NekDouble > & Nektar::LibUtilities::NekNonlinSys::GetRefSourceVec ( ) const
inline

Definition at line 77 of file NekNonlinSys.h.

79 {
80 return m_SourceVec;
81 }
Array< OneD, NekDouble > m_SourceVec
Definition: NekNonlinSys.h:135

References m_SourceVec.

◆ SetLinSysRelativeTolInNonlin()

void Nektar::LibUtilities::NekNonlinSys::SetLinSysRelativeTolInNonlin ( const NekDouble  in)
inline

Definition at line 104 of file NekNonlinSys.h.

105 {
107 }

References m_LinSysRelativeTolInNonlin.

◆ SetNekNonlinSysMaxIterations()

void Nektar::LibUtilities::NekNonlinSys::SetNekNonlinSysMaxIterations ( const unsigned int  in)
inline

Definition at line 88 of file NekNonlinSys.h.

90 {
91 m_maxiter = in;
92 }

References Nektar::LibUtilities::NekSys::m_maxiter.

◆ SetNekNonlinSysTolerance()

void Nektar::LibUtilities::NekNonlinSys::SetNekNonlinSysTolerance ( const NekDouble  in)
inline

Definition at line 83 of file NekNonlinSys.h.

84 {
85 m_tolerance = in;
86 }

References Nektar::LibUtilities::NekSys::m_tolerance.

◆ SetNonlinIterTolRelativeL2()

void Nektar::LibUtilities::NekNonlinSys::SetNonlinIterTolRelativeL2 ( const NekDouble  in)
inline

Definition at line 99 of file NekNonlinSys.h.

100 {
102 }

References m_NonlinIterTolRelativeL2.

◆ SetupNekNonlinSystem()

void Nektar::LibUtilities::NekNonlinSys::SetupNekNonlinSystem ( const int  nGlobal,
const Array< OneD, const NekDouble > &  pInput,
const Array< OneD, const NekDouble > &  pSource,
const int  nDir 
)
inline

Definition at line 114 of file NekNonlinSys.h.

117 {
118 v_SetupNekNonlinSystem(nGlobal, pInput, pSource, nDir);
119 }
virtual void v_SetupNekNonlinSystem(const int nGlobal, const Array< OneD, const NekDouble > &pInput, const Array< OneD, const NekDouble > &pSource, const int nDir)=0

References v_SetupNekNonlinSystem().

◆ v_InitObject()

void Nektar::LibUtilities::NekNonlinSys::v_InitObject ( )
protectedvirtual

Reimplemented from Nektar::LibUtilities::NekSys.

Reimplemented in Nektar::LibUtilities::NekNonlinSysNewton.

Definition at line 144 of file NekNonlinSys.cpp.

145{
147}
virtual void v_InitObject()
Definition: NekSys.h:315

References Nektar::LibUtilities::NekSys::v_InitObject().

◆ v_SetupNekNonlinSystem()

virtual void Nektar::LibUtilities::NekNonlinSys::v_SetupNekNonlinSystem ( const int  nGlobal,
const Array< OneD, const NekDouble > &  pInput,
const Array< OneD, const NekDouble > &  pSource,
const int  nDir 
)
protectedpure virtual

Member Data Documentation

◆ m_DeltSltn

Array<OneD, NekDouble> Nektar::LibUtilities::NekNonlinSys::m_DeltSltn
protected

◆ m_linsol

NekLinSysIterSharedPtr Nektar::LibUtilities::NekNonlinSys::m_linsol
protected

◆ m_LinSysIterSolverType

std::string Nektar::LibUtilities::NekNonlinSys::m_LinSysIterSolverType
protected

Definition at line 127 of file NekNonlinSys.h.

Referenced by NekNonlinSys().

◆ m_LinSysRelativeTolInNonlin

NekDouble Nektar::LibUtilities::NekNonlinSys::m_LinSysRelativeTolInNonlin
protected

◆ m_NonlinIterTolRelativeL2

NekDouble Nektar::LibUtilities::NekNonlinSys::m_NonlinIterTolRelativeL2
protected

◆ m_NtotLinSysIts

int Nektar::LibUtilities::NekNonlinSys::m_NtotLinSysIts = 0
protected

◆ m_Residual

Array<OneD, NekDouble> Nektar::LibUtilities::NekNonlinSys::m_Residual
protected

◆ m_Solution

Array<OneD, NekDouble> Nektar::LibUtilities::NekNonlinSys::m_Solution
protected

◆ m_SourceVec

Array<OneD, NekDouble> Nektar::LibUtilities::NekNonlinSys::m_SourceVec
protected

◆ m_totalIterations

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

Definition at line 129 of file NekNonlinSys.h.