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

#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 ()
 
virtual void v_SetupNekNonlinSystem (const int nGlobal, const Array< OneD, const NekDouble > &pInput, const Array< OneD, const NekDouble > &pSource, const int nDir)
 
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 ()
 
- 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)
 
virtual void v_NekSysInitialGuess (const Array< OneD, const NekDouble > &pInput, Array< OneD, NekDouble > &pguess)
 
void SetFlagWarnings (bool in)
 

Static Public Member Functions

static NekNonlinSysSharedPtr CreateInstance (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::CommSharedPtr &vComm, 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 &vComm, const int nDimen, const NekSysKey &pKey)
 

Protected Member Functions

virtual void v_InitObject ()
 
- 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)
 

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

Friends

class MemoryManager< NekNonlinSys >
 

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:140
NekDouble m_tolerance
Tolerance of iterative solver.
Definition: NekSys.h:282
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:295
LibUtilities::CommSharedPtr m_Comm
Communicate.
Definition: NekSys.h:284
int m_maxiter
Maximum iterations.
Definition: NekSys.h:280
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

◆ CreateInstance()

static NekNonlinSysSharedPtr Nektar::LibUtilities::NekNonlinSys::CreateInstance ( const LibUtilities::SessionReaderSharedPtr pSession,
const LibUtilities::CommSharedPtr vComm,
const int  nDimen,
const NekSysKey pKey 
)
inlinestatic

Definition at line 60 of file NekNonlinSys.h.

64  {
67  nDimen, pKey);
68  return p;
69  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< NekNonlinSys > NekNonlinSysSharedPtr
Definition: NekNonlinSys.h:46

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.

◆ GetLinSys()

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

Definition at line 119 of file NekNonlinSys.h.

120  {
121  return m_linsol;
122  }

References m_linsol.

◆ GetNtotLinSysIts()

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

Definition at line 134 of file NekNonlinSys.h.

135  {
136  return m_NtotLinSysIts;
137  }

References m_NtotLinSysIts.

◆ GetRefResidual()

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

Definition at line 86 of file NekNonlinSys.h.

88  {
89  return m_Residual;
90  }
Array< OneD, NekDouble > m_Residual
Definition: NekNonlinSys.h:151

References m_Residual.

◆ GetRefSolution()

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

Definition at line 80 of file NekNonlinSys.h.

82  {
83  return m_Solution;
84  }
Array< OneD, NekDouble > m_Solution
Definition: NekNonlinSys.h:150

References m_Solution.

◆ GetRefSourceVec()

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

Definition at line 92 of file NekNonlinSys.h.

94  {
95  return m_SourceVec;
96  }
Array< OneD, NekDouble > m_SourceVec
Definition: NekNonlinSys.h:153

References m_SourceVec.

◆ SetLinSysRelativeTolInNonlin()

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

Definition at line 129 of file NekNonlinSys.h.

130  {
132  }

References m_LinSysRelativeTolInNonlin.

◆ SetNekNonlinSysMaxIterations()

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

Definition at line 113 of file NekNonlinSys.h.

115  {
116  m_maxiter = in;
117  }

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

◆ SetNekNonlinSysTolerance()

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

Definition at line 108 of file NekNonlinSys.h.

109  {
110  m_tolerance = in;
111  }

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

◆ SetNonlinIterTolRelativeL2()

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

Definition at line 124 of file NekNonlinSys.h.

125  {
127  }

References m_NonlinIterTolRelativeL2.

◆ SetRefResidual()

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

Definition at line 98 of file NekNonlinSys.h.

100  {
101  ASSERTL0(in.size() == m_SysDimen,
102  "SetRefResidual dimension not correct");
103  Vmath::Vcopy(m_SysDimen, in, 1, m_Residual, 1);
104 
105  m_ResidualUpdated = true;
106  }
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().

◆ 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:297

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

◆ v_SetupNekNonlinSystem()

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

Reimplemented in Nektar::LibUtilities::NekNonlinSysNewton.

Definition at line 156 of file NekNonlinSys.cpp.

159 {
160  boost::ignore_unused(nGlobal, pInput, pSource, nDir);
161  NEKERROR(ErrorUtil::efatal, "v_SetupNekNonlinSystem not defined");
162 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:209

References Nektar::ErrorUtil::efatal, and NEKERROR.

Friends And Related Function Documentation

◆ MemoryManager< NekNonlinSys >

friend class MemoryManager< NekNonlinSys >
friend

Definition at line 54 of file NekNonlinSys.h.

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 145 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 147 of file NekNonlinSys.h.