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 NekLinSysIterSharedPtrGetLinSys ()
 
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 NekSysOperatorsGetSysOperators ()
 
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, NekDoublem_Solution
 
Array< OneD, NekDoublem_Residual
 
Array< OneD, NekDoublem_DeltSltn
 
Array< OneD, NekDoublem_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.