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 &vComm, 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 SetRefResidual (const Array< OneD, const NekDouble > &in)
 
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 &vComm, 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 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
 
bool m_ResidualUpdated = false
 
- Protected Attributes inherited from Nektar::LibUtilities::NekSys
int m_maxiter
 Maximum iterations. More...
 
NekDouble m_tolerance
 Tolerance of iterative solver. More...
 
LibUtilities::CommSharedPtr m_Comm
 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 &vComm, 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 vComm,
const int  nDimen,
const NekSysKey pKey 
)

Definition at line 55 of file NekNonlinSys.cpp.

58  : NekSys(pSession, vComm, 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<int>(
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<int>(
107  pSession
108  ->GetGlobalSysSolnInfo(variable, "LinSysRelativeTolInNonlin")
109  .c_str());
110  }
111  else
112  {
113  pSession->LoadParameter("LinSysRelativeTolInNonlin",
115  pKey.m_LinSysRelativeTolInNonlin);
116  }
117 
118  // cout << " m_LinSysRelativeTolInNonlin = " << m_LinSysRelativeTolInNonlin
119  // << endl;
120 
121  m_LinSysIterSolverType = pKey.m_LinSysIterSolverTypeInNonlin;
122  if (pSession->DefinesGlobalSysSolnInfo(variable,
123  "LinSysIterSolverTypeInNonlin"))
124  {
125  m_LinSysIterSolverType = pSession->GetGlobalSysSolnInfo(
126  variable, "LinSysIterSolverTypeInNonlin");
127  }
128  else
129  {
130  if (pSession->DefinesSolverInfo("LinSysIterSolverTypeInNonlin"))
131  {
133  pSession->GetSolverInfo("LinSysIterSolverTypeInNonlin");
134  }
135  }
136 
139  "NekLinSysIter '" + m_LinSysIterSolverType +
140  "' is not defined.\n");
141 
143  m_LinSysIterSolverType, pSession, m_Comm, m_SysDimen, pKey);
144  m_linsol->SetFlagWarnings(false);
145 }
#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:132
NekDouble m_tolerance
Tolerance of iterative solver.
Definition: NekSys.h:278
NekSys(const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vComm, const int nDimen, const NekSysKey &pKey)
Definition: NekSys.cpp:50
int m_SysDimen
The dimension of the system.
Definition: NekSys.h:291
LibUtilities::CommSharedPtr m_Comm
Communicate.
Definition: NekSys.h:280
int m_maxiter
Maximum iterations.
Definition: NekSys.h:276
NekLinSysIterFactory & GetNekLinSysIterFactory()

References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::GetNekLinSysIterFactory(), Nektar::LibUtilities::NekSys::m_Comm, 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_SysDimen, and Nektar::LibUtilities::NekSys::m_tolerance.

◆ ~NekNonlinSys()

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

Definition at line 152 of file NekNonlinSys.cpp.

153 {
154 }

Member Function Documentation

◆ GetLinSys()

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

Definition at line 104 of file NekNonlinSys.h.

105  {
106  return m_linsol;
107  }

References m_linsol.

◆ GetNtotLinSysIts()

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

Definition at line 119 of file NekNonlinSys.h.

120  {
121  return m_NtotLinSysIts;
122  }

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:143

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:142

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:145

References m_SourceVec.

◆ SetLinSysRelativeTolInNonlin()

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

Definition at line 114 of file NekNonlinSys.h.

115  {
117  }

References m_LinSysRelativeTolInNonlin.

◆ SetNekNonlinSysMaxIterations()

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

Definition at line 98 of file NekNonlinSys.h.

100  {
101  m_maxiter = in;
102  }

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

◆ SetNekNonlinSysTolerance()

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

Definition at line 93 of file NekNonlinSys.h.

94  {
95  m_tolerance = in;
96  }

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

◆ SetNonlinIterTolRelativeL2()

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

Definition at line 109 of file NekNonlinSys.h.

110  {
112  }

References m_NonlinIterTolRelativeL2.

◆ SetRefResidual()

void Nektar::LibUtilities::NekNonlinSys::SetRefResidual ( const Array< OneD, const NekDouble > &  in)
inline

Definition at line 83 of file NekNonlinSys.h.

85  {
86  ASSERTL0(in.size() == m_SysDimen,
87  "SetRefResidual dimension not correct");
89 
90  m_ResidualUpdated = true;
91  }
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1255

References ASSERTL0, m_Residual, m_ResidualUpdated, Nektar::LibUtilities::NekSys::m_SysDimen, and Vmath::Vcopy().

◆ 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 124 of file NekNonlinSys.h.

127  {
128  v_SetupNekNonlinSystem(nGlobal, pInput, pSource, nDir);
129  }
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 147 of file NekNonlinSys.cpp.

148 {
150 }
virtual void v_InitObject()
Definition: NekSys.h:293

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 137 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_ResidualUpdated

bool Nektar::LibUtilities::NekNonlinSys::m_ResidualUpdated = false
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 139 of file NekNonlinSys.h.