Nektar++
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
Nektar::SolverUtils::Driver Class Referenceabstract

Base class for the development of solvers. More...

#include <Driver.h>

Inheritance diagram for Nektar::SolverUtils::Driver:
[legend]

Public Member Functions

virtual ~Driver ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void InitObject (std::ostream &out=std::cout)
 Initialise Object. More...
 
SOLVER_UTILS_EXPORT void Execute (std::ostream &out=std::cout)
 Execute driver. More...
 
SOLVER_UTILS_EXPORT Array< OneD, EquationSystemSharedPtrGetEqu ()
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleGetRealEvl (void)
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleGetImagEvl (void)
 

Protected Member Functions

 Driver (const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
 Initialises EquationSystem class members. More...
 
virtual SOLVER_UTILS_EXPORT void v_InitObject (std::ostream &out=std::cout)
 
virtual SOLVER_UTILS_EXPORT void v_Execute (std::ostream &out=std::cout)=0
 Virtual function for solve implementation. More...
 
virtual SOLVER_UTILS_EXPORT Array< OneD, NekDoublev_GetRealEvl (void)
 
virtual SOLVER_UTILS_EXPORT Array< OneD, NekDoublev_GetImagEvl (void)
 

Protected Attributes

LibUtilities::CommSharedPtr m_comm
 Communication object. More...
 
LibUtilities::SessionReaderSharedPtr m_session
 Session reader object. More...
 
LibUtilities::SessionReaderSharedPtr session_LinNS
 I the Coupling between SFD and arnoldi. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 MeshGraph object. More...
 
Array< OneD, EquationSystemSharedPtrm_equ
 Equation system to solve. More...
 
int m_nequ
 number of equations More...
 
enum EvolutionOperatorType m_EvolutionOperator
 Evolution Operator. More...
 

Static Protected Attributes

static std::string evolutionOperatorLookupIds []
 
static std::string evolutionOperatorDef
 
static std::string driverDefault
 

Detailed Description

Base class for the development of solvers.

Definition at line 66 of file Driver.h.

Constructor & Destructor Documentation

◆ ~Driver()

Nektar::SolverUtils::Driver::~Driver ( )
virtual

Destructor.

Definition at line 82 of file Driver.cpp.

84 {
85 }

◆ Driver()

Nektar::SolverUtils::Driver::Driver ( const LibUtilities::SessionReaderSharedPtr  pSession,
const SpatialDomains::MeshGraphSharedPtr  pGraph 
)
protected

Initialises EquationSystem class members.

Definition at line 74 of file Driver.cpp.

76  : m_comm(pSession->GetComm()),
77  m_session(pSession),
78  m_graph(pGraph)
79 {
80 }
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:89
LibUtilities::CommSharedPtr m_comm
Communication object.
Definition: Driver.h:86
SpatialDomains::MeshGraphSharedPtr m_graph
MeshGraph object.
Definition: Driver.h:95

Member Function Documentation

◆ Execute()

void Nektar::SolverUtils::Driver::Execute ( std::ostream &  out = std::cout)
inline

Execute driver.

Definition at line 131 of file Driver.h.

132 {
133  v_Execute(out);
134 }
virtual SOLVER_UTILS_EXPORT void v_Execute(std::ostream &out=std::cout)=0
Virtual function for solve implementation.

References v_Execute().

◆ GetEqu()

Array< OneD, EquationSystemSharedPtr > Nektar::SolverUtils::Driver::GetEqu ( )
inline

Definition at line 136 of file Driver.h.

137 {
138  return m_equ;
139 }
Array< OneD, EquationSystemSharedPtr > m_equ
Equation system to solve.
Definition: Driver.h:98

References m_equ.

◆ GetImagEvl()

Array< OneD, NekDouble > Nektar::SolverUtils::Driver::GetImagEvl ( void  )
inline

Definition at line 146 of file Driver.h.

147 {
148  return v_GetImagEvl();
149 }
virtual SOLVER_UTILS_EXPORT Array< OneD, NekDouble > v_GetImagEvl(void)
Definition: Driver.cpp:204

References v_GetImagEvl().

◆ GetRealEvl()

Array< OneD, NekDouble > Nektar::SolverUtils::Driver::GetRealEvl ( void  )
inline

Definition at line 141 of file Driver.h.

142 {
143  return v_GetRealEvl();
144 }
virtual SOLVER_UTILS_EXPORT Array< OneD, NekDouble > v_GetRealEvl(void)
Definition: Driver.cpp:198

References v_GetRealEvl().

◆ InitObject()

void Nektar::SolverUtils::Driver::InitObject ( std::ostream &  out = std::cout)
inline

Initialise Object.

Definition at line 126 of file Driver.h.

127 {
128  v_InitObject(out);
129 }
virtual SOLVER_UTILS_EXPORT void v_InitObject(std::ostream &out=std::cout)
Definition: Driver.cpp:90

References v_InitObject().

◆ v_Execute()

virtual SOLVER_UTILS_EXPORT void Nektar::SolverUtils::Driver::v_Execute ( std::ostream &  out = std::cout)
protectedpure virtual

◆ v_GetImagEvl()

Array< OneD, NekDouble > Nektar::SolverUtils::Driver::v_GetImagEvl ( void  )
protectedvirtual

Reimplemented in Nektar::SolverUtils::DriverArnoldi.

Definition at line 204 of file Driver.cpp.

205 {
206  ASSERTL0(false,"This routine is not valid in this class");
207  return NullNekDouble1DArray;
208 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
static Array< OneD, NekDouble > NullNekDouble1DArray

References ASSERTL0, and Nektar::NullNekDouble1DArray.

Referenced by GetImagEvl().

◆ v_GetRealEvl()

Array< OneD, NekDouble > Nektar::SolverUtils::Driver::v_GetRealEvl ( void  )
protectedvirtual

Reimplemented in Nektar::SolverUtils::DriverArnoldi.

Definition at line 198 of file Driver.cpp.

199 {
200  ASSERTL0(false,"This routine is not valid in this class");
201  return NullNekDouble1DArray;
202 }

References ASSERTL0, and Nektar::NullNekDouble1DArray.

Referenced by GetRealEvl().

◆ v_InitObject()

void Nektar::SolverUtils::Driver::v_InitObject ( std::ostream &  out = std::cout)
protectedvirtual
Todo:
At the moment this is Navier-Stokes specific - generalise?

Reimplemented in Nektar::SolverUtils::DriverSteadyState, Nektar::SolverUtils::DriverStandard, Nektar::SolverUtils::DriverModifiedArnoldi, Nektar::SolverUtils::DriverArpack, Nektar::SolverUtils::DriverArnoldi, and Nektar::SolverUtils::DriverAdaptive.

Definition at line 90 of file Driver.cpp.

91 {
92  try
93  {
94  // Retrieve the equation system to solve.
95  ASSERTL0(m_session->DefinesSolverInfo("EqType"),
96  "EqType SolverInfo tag must be defined.");
97  std::string vEquation = m_session->GetSolverInfo("EqType");
98  if (m_session->DefinesSolverInfo("SolverType"))
99  {
100  vEquation = m_session->GetSolverInfo("SolverType");
101  }
102 
103  // Check such a module exists for this equation.
104  ASSERTL0(GetEquationSystemFactory().ModuleExists(vEquation),
105  "EquationSystem '" + vEquation + "' is not defined.\n"
106  "Ensure equation name is correct and module is compiled.\n");
107 
108  // Retrieve the type of evolution operator to use
109  /// @todo At the moment this is Navier-Stokes specific - generalise?
111  m_session->GetSolverInfoAsEnum<EvolutionOperatorType>(
112  "EvolutionOperator");
113 
115  m_EvolutionOperator == eAdaptiveSFD) ? 2 : 1);
116 
117  m_equ = Array<OneD, EquationSystemSharedPtr>(m_nequ);
118 
119  // Set the AdvectiveType tag and create EquationSystem objects.
120  switch (m_EvolutionOperator)
121  {
122  case eNonlinear:
123  m_session->SetTag("AdvectiveType","Convective");
125  vEquation, m_session, m_graph);
126  break;
127  case eDirect:
128  m_session->SetTag("AdvectiveType","Linearised");
130  vEquation, m_session, m_graph);
131  break;
132  case eAdjoint:
133  m_session->SetTag("AdvectiveType","Adjoint");
135  vEquation, m_session, m_graph);
136  break;
137  case eTransientGrowth:
138  //forward timestepping
139  m_session->SetTag("AdvectiveType","Linearised");
141  vEquation, m_session, m_graph);
142 
143  //backward timestepping
144  m_session->SetTag("AdvectiveType","Adjoint");
146  vEquation, m_session, m_graph);
147  break;
148  case eSkewSymmetric:
149  m_session->SetTag("AdvectiveType","SkewSymmetric");
151  vEquation, m_session, m_graph);
152  break;
153  case eAdaptiveSFD:
154  {
155  // Coupling SFD method and Arnoldi algorithm
156  // For having 2 equation systems defined into 2 different
157  // session files (with the mesh into a file named 'session'.gz)
158  string meshfile;
159  string LinNSCondFile;
160  vector<string> LinNSFilename;
161  meshfile = m_session->GetFilenames()[0];
162  LinNSCondFile = m_session->GetSessionName();
163  LinNSCondFile += "_LinNS.xml";
164  LinNSFilename.push_back(meshfile);
165  LinNSFilename.push_back(LinNSCondFile);
166 
167  char *argv[] = {
168  const_cast<char*>("IncNavierStokesSolver"), nullptr };
170  1, argv, LinNSFilename, m_session->GetComm());
171 
174 
175  //For running stability analysis
176  session_LinNS->SetTag("AdvectiveType","Linearised");
178  vEquation, session_LinNS, graph_linns);
179 
180  //For running the SFD method on the nonlinear problem
181  m_session->SetTag("AdvectiveType","Convective");
183  vEquation, m_session, m_graph);
184  }
185  break;
186  default:
187  ASSERTL0(false, "Unrecognised evolution operator.");
188 
189  }
190  }
191  catch (int e)
192  {
193  ASSERTL0(e == -1, "No such class class defined.");
194  out << "An error occurred during driver initialisation." << endl;
195  }
196 }
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:145
static SessionReaderSharedPtr CreateInstance(int argc, char *argv[])
Creates an instance of the SessionReader class.
LibUtilities::SessionReaderSharedPtr session_LinNS
I the Coupling between SFD and arnoldi.
Definition: Driver.h:92
enum EvolutionOperatorType m_EvolutionOperator
Evolution Operator.
Definition: Driver.h:104
int m_nequ
number of equations
Definition: Driver.h:101
static MeshGraphSharedPtr Read(const LibUtilities::SessionReaderSharedPtr pSession, LibUtilities::DomainRangeShPtr rng=LibUtilities::NullDomainRangeShPtr, bool fillGraph=true)
Definition: MeshGraph.cpp:113
EquationSystemFactory & GetEquationSystemFactory()
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition: MeshGraph.h:174

References ASSERTL0, Nektar::LibUtilities::SessionReader::CreateInstance(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::SolverUtils::eAdaptiveSFD, Nektar::SolverUtils::eAdjoint, Nektar::SolverUtils::eDirect, Nektar::SolverUtils::eNonlinear, Nektar::SolverUtils::eSkewSymmetric, Nektar::SolverUtils::eTransientGrowth, Nektar::SolverUtils::GetEquationSystemFactory(), m_equ, m_EvolutionOperator, m_graph, m_nequ, m_session, Nektar::SpatialDomains::MeshGraph::Read(), and session_LinNS.

Referenced by InitObject(), Nektar::SolverUtils::DriverAdaptive::v_Execute(), Nektar::SolverUtils::DriverAdaptive::v_InitObject(), Nektar::SolverUtils::DriverArnoldi::v_InitObject(), and Nektar::SolverUtils::DriverStandard::v_InitObject().

Member Data Documentation

◆ driverDefault

std::string Nektar::SolverUtils::Driver::driverDefault
staticprotected
Initial value:
=
"Driver", "Standard")
static std::string RegisterDefaultSolverInfo(const std::string &pName, const std::string &pValue)
Registers the default string value of a solver info property.

Definition at line 122 of file Driver.h.

◆ evolutionOperatorDef

std::string Nektar::SolverUtils::Driver::evolutionOperatorDef
staticprotected
Initial value:
=
"EvolutionOperator","Nonlinear")

Definition at line 121 of file Driver.h.

◆ evolutionOperatorLookupIds

std::string Nektar::SolverUtils::Driver::evolutionOperatorLookupIds
staticprotected
Initial value:
= {
"EvolutionOperator","Nonlinear" ,eNonlinear),
"EvolutionOperator","Direct" ,eDirect),
"EvolutionOperator","Adjoint" ,eAdjoint),
"EvolutionOperator","TransientGrowth",eTransientGrowth),
"EvolutionOperator","SkewSymmetric" ,eSkewSymmetric),
"EvolutionOperator","AdaptiveSFD" ,eAdaptiveSFD)
}
static std::string RegisterEnumValue(std::string pEnum, std::string pString, int pEnumValue)
Registers an enumeration value.

Definition at line 120 of file Driver.h.

◆ m_comm

LibUtilities::CommSharedPtr Nektar::SolverUtils::Driver::m_comm
protected

◆ m_equ

Array<OneD, EquationSystemSharedPtr> Nektar::SolverUtils::Driver::m_equ
protected

◆ m_EvolutionOperator

enum EvolutionOperatorType Nektar::SolverUtils::Driver::m_EvolutionOperator
protected

◆ m_graph

SpatialDomains::MeshGraphSharedPtr Nektar::SolverUtils::Driver::m_graph
protected

MeshGraph object.

Definition at line 95 of file Driver.h.

Referenced by Nektar::SolverUtils::DriverAdaptive::v_Execute(), and v_InitObject().

◆ m_nequ

int Nektar::SolverUtils::Driver::m_nequ
protected

◆ m_session

LibUtilities::SessionReaderSharedPtr Nektar::SolverUtils::Driver::m_session
protected

◆ session_LinNS

LibUtilities::SessionReaderSharedPtr Nektar::SolverUtils::Driver::session_LinNS
protected

I the Coupling between SFD and arnoldi.

Definition at line 92 of file Driver.h.

Referenced by v_InitObject().