Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Static Protected Attributes | Static Private Attributes | Friends | List of all members
Nektar::SolverUtils::DriverArpack Class Reference

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

#include <DriverArpack.h>

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

Static Public Member Functions

static DriverSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 Creates an instance of this class. More...
 

Static Public Attributes

static std::string className = GetDriverFactory().RegisterCreatorFunction("Arpack", DriverArpack::create)
 Name of the class. More...
 

Protected Member Functions

 DriverArpack (const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
 Constructor. More...
 
virtual ~DriverArpack ()
 Destructor. More...
 
virtual void v_InitObject (std::ostream &out=std::cout)
 Virtual function for initialisation implementation. More...
 
virtual void v_Execute (std::ostream &out=std::cout)
 Virtual function for solve implementation. More...
 
- Protected Member Functions inherited from Nektar::SolverUtils::DriverArnoldi
 DriverArnoldi (const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
 Constructor. More...
 
virtual ~DriverArnoldi ()
 Destructor. More...
 
void CopyArnoldiArrayToField (Array< OneD, NekDouble > &array)
 Copy Arnoldi storage to fields. More...
 
void CopyFieldToArnoldiArray (Array< OneD, NekDouble > &array)
 Copy fields to Arnoldi storage. More...
 
void CopyFwdToAdj ()
 Copy the forward field to the adjoint system in transient growth calculations. More...
 
void WriteFld (std::string file, std::vector< Array< OneD, NekDouble > > coeffs)
 Write coefficients to file. More...
 
void WriteFld (std::string file, Array< OneD, NekDouble > coeffs)
 
void WriteEvs (std::ostream &evlout, const int k, const NekDouble real, const NekDouble imag, NekDouble resid=NekConstants::kNekUnsetDouble, bool DumpInverse=true)
 
virtual Array< OneD, NekDoublev_GetRealEvl (void)
 
virtual Array< OneD, NekDoublev_GetImagEvl (void)
 
- Protected Member Functions inherited from Nektar::SolverUtils::Driver
 Driver (const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
 Initialises EquationSystem class members. More...
 

Protected Attributes

int m_maxn
 
int m_maxnev
 
int m_maxncv
 
- Protected Attributes inherited from Nektar::SolverUtils::DriverArnoldi
int m_kdim
 
int m_nvec
 Dimension of Krylov subspace. More...
 
int m_nits
 Number of vectors to test. More...
 
NekDouble m_evtol
 Maxmum number of iterations. More...
 
NekDouble m_period
 Tolerance of iteratiosn. More...
 
bool m_timeSteppingAlgorithm
 Period of time stepping algorithm. More...
 
int m_infosteps
 underlying operator is time stepping More...
 
int m_nfields
 interval to dump information if required. More...
 
NekDouble m_realShift
 
NekDouble m_imagShift
 
int m_negatedOp
 
Array< OneD, NekDoublem_real_evl
 Operator in solve call is negated. More...
 
Array< OneD, NekDoublem_imag_evl
 
- Protected Attributes inherited from Nektar::SolverUtils::Driver
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 arpackProblemTypeLookupIds []
 
static std::string arpackProblemTypeDefault = LibUtilities::SessionReader::RegisterDefaultSolverInfo("ArpackProblemType","LargestMag")
 
static std::string driverLookupId = LibUtilities::SessionReader::RegisterEnumValue("Driver","Arpack",0)
 
- Static Protected Attributes inherited from Nektar::SolverUtils::Driver
static std::string evolutionOperatorLookupIds []
 
static std::string evolutionOperatorDef
 
static std::string driverDefault
 

Static Private Attributes

static std::string ArpackProblemTypeTrans []
 

Friends

class MemoryManager< DriverArpack >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::SolverUtils::DriverArnoldi
SOLVER_UTILS_EXPORT void ArnoldiSummary (std::ostream &out)
 
- Public Member Functions inherited from Nektar::SolverUtils::Driver
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)
 

Detailed Description

Base class for the development of solvers.

Definition at line 48 of file DriverArpack.h.

Constructor & Destructor Documentation

◆ DriverArpack()

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

Constructor.

Definition at line 64 of file DriverArpack.cpp.

66  : DriverArnoldi(pSession, pGraph)
67 {
68 }
DriverArnoldi(const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
Constructor.

◆ ~DriverArpack()

Nektar::SolverUtils::DriverArpack::~DriverArpack ( )
protectedvirtual

Destructor.

Definition at line 74 of file DriverArpack.cpp.

75 {
76 }

Member Function Documentation

◆ create()

static DriverSharedPtr Nektar::SolverUtils::DriverArpack::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr pGraph 
)
inlinestatic

Creates an instance of this class.

Definition at line 54 of file DriverArpack.h.

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

57  {
59  pSession, pGraph);
60  p->InitObject();
61  return p;
62  }
std::shared_ptr< Driver > DriverSharedPtr
A shared pointer to a Driver object.
Definition: Driver.h:51
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ v_Execute()

void Nektar::SolverUtils::DriverArpack::v_Execute ( std::ostream &  out = std::cout)
protectedvirtual

Virtual function for solve implementation.

Implements Nektar::SolverUtils::Driver.

Definition at line 118 of file DriverArpack.cpp.

References ArpackProblemTypeTrans, ASSERTL0, Nektar::SolverUtils::DriverArnoldi::CopyArnoldiArrayToField(), Nektar::SolverUtils::DriverArnoldi::CopyFieldToArnoldiArray(), Nektar::SolverUtils::DriverArnoldi::CopyFwdToAdj(), Arpack::Dnaupd(), Arpack::Dneupd(), Nektar::SolverUtils::eTransientGrowth, Nektar::NekConstants::kNekUnsetDouble, Nektar::NekConstants::kNekZeroTol, Nektar::SolverUtils::Driver::m_comm, Nektar::SolverUtils::Driver::m_equ, Nektar::SolverUtils::Driver::m_EvolutionOperator, Nektar::SolverUtils::DriverArnoldi::m_evtol, Nektar::SolverUtils::DriverArnoldi::m_imag_evl, Nektar::SolverUtils::DriverArnoldi::m_imagShift, Nektar::SolverUtils::DriverArnoldi::m_infosteps, Nektar::SolverUtils::DriverArnoldi::m_kdim, m_maxn, Nektar::SolverUtils::DriverArnoldi::m_negatedOp, Nektar::SolverUtils::DriverArnoldi::m_nfields, Nektar::SolverUtils::DriverArnoldi::m_nits, Nektar::SolverUtils::DriverArnoldi::m_nvec, Nektar::SolverUtils::DriverArnoldi::m_real_evl, Nektar::SolverUtils::DriverArnoldi::m_realShift, Nektar::SolverUtils::Driver::m_session, Nektar::SolverUtils::DriverArnoldi::m_timeSteppingAlgorithm, CellMLToNektar.pycml::name, Vmath::Sadd(), WARNINGL0, Nektar::SolverUtils::DriverArnoldi::WriteEvs(), and Nektar::SolverUtils::DriverArnoldi::WriteFld().

120 {
121  Array<OneD, NekDouble> tmpworkd;
122 
123  int nq = m_equ[0]->UpdateFields()[0]->GetNcoeffs(); // Number of points in the mesh
124  int n = m_nfields*nq; // Number of points in eigenvalue calculation
125  int lworkl = 3*m_kdim*(m_kdim+2); // Size of work array
126  int ido ; //REVERSE COMMUNICATION parameter. At the first call must be initialised at 0
127  int info; // do not set initial vector (info=0 random initial vector, info=1 read initial vector from session file)
128 
129  int iparam[11];
130  int ipntr[14];
131 
132  Array<OneD, int> ritzSelect;
133  Array<OneD, NekDouble> dr;
134  Array<OneD, NekDouble> di;
135  Array<OneD, NekDouble> workev;
136  Array<OneD, NekDouble> z;
137  NekDouble sigmar, sigmai;
138 
139  Array<OneD, NekDouble> resid(n);
140  Array<OneD, NekDouble> v(n*m_kdim);
141  Array<OneD, NekDouble> workl(lworkl, 0.0);
142  Array<OneD, NekDouble> workd(3*n, 0.0);
143 
144  ASSERTL0(n <= m_maxn, "N is greater than MAXN");
145 
146  if(m_session->DefinesFunction("InitialConditions"))
147  {
148  out << "\tInital vector : input file " << endl;
149  info = 1;
151  }
152  else
153  {
154  out << "\tInital vector : random " << endl;
155  info = 0;
156  }
157 
158  char B;
159 
160  iparam[0] = 1; // strategy for shift-invert
161  iparam[1] = 0; // (deprecated)
162  iparam[2] = m_nits; // maximum number of iterations allowed/taken
163  iparam[3] = 1; // blocksize to be used for recurrence
164  iparam[4] = 0; // number of converged ritz eigenvalues
165  iparam[5] = 0; // (deprecated)
166 
167  // Use generalized B matrix for coupled solver.
169  {
170  iparam[6] = 1; // computation mode 1=> matrix-vector prod
171  B = 'I';
172  }
173  else {
174  iparam[6] = 3; // computation mode 1=> matrix-vector prod
175  B = 'G';
176  }
177 #if 0
178  if((fabs(m_realShift) > NekConstants::kNekZeroTol)|| // use shift if m_realShift > 1e-12
180  {
181  iparam[6] = 3; // This was 3 need to know what to set it to
182  B = 'G';
183  }
184  else
185  {
186  iparam[6] = 1; // computation mode 1=> matrix-vector prod
187  B = 'I';
188  }
189 #endif
190  iparam[7] = 0; // (for shift-invert)
191  iparam[8] = 0; // number of MV operations
192  iparam[9] = 0; // number of BV operations
193  iparam[10]= 0; // number of reorthogonalisation steps
194 
195  int cycle = 0;
196  const char* problem = ArpackProblemTypeTrans[m_session->GetSolverInfoAsEnum<int>("ArpackProblemType")].c_str();
197 
198  std::string name = m_session->GetSessionName() + ".evl";
199  ofstream pFile(name.c_str());
200 
201  ido = 0; //At the first call must be initialisedat 0
202 
203  while(ido != 99)//ido==-1 || ido==1 || ido==0)
204  {
205  //Routine for eigenvalue evaluation for non-symmetric operators
206  Arpack::Dnaupd( ido, &B, // B='I' for std eval problem
207  n, problem, m_nvec,
208  m_evtol, &resid[0], m_kdim,
209  &v[0], n, iparam, ipntr, &workd[0],
210  &workl[0], lworkl, info);
211 
212  //Plotting of real and imaginary part of the
213  //eigenvalues from workl
214  out << "\rIteration " << cycle << ", output: " << info << ", ido=" << ido << " " << std::flush;
215 
216  if(!((cycle-1)%m_kdim)&&(cycle> m_kdim)&&(ido!=2))
217  {
218  pFile << "Krylov spectrum at iteration: " << cycle << endl;
219 
221  {
222  pFile << "EV Magnitude Angle Growth Frequency Residual" << endl;
223  }
224  else
225  {
226  pFile << "EV Real Imaginary inverse real inverse imag Residual" << endl;
227  }
228 
229  out << endl;
230  for(int k = 0; k < m_kdim; ++k)
231  {
232  // write m_kdim eigs to screen
233  WriteEvs(pFile,k, workl[ipntr[5]-1+k],workl[ipntr[6]-1+k]);
234  }
235  }
236 
237  if (ido == 99) break;
238 
239  switch(ido)
240  {
241  case -1:
242  case 1: // Note that ido=1 we are using input x
243  // (workd[inptr[0]-1]) rather than Mx as
244  // recommended in manual since it is not
245  // possible to impose forcing directly.
246  CopyArnoldiArrayToField(tmpworkd = workd + (ipntr[0]-1));
247 
248  m_equ[0]->TransCoeffToPhys();
249 
250  m_equ[0]->DoSolve();
252  {
253  //start Adjoint with latest fields of direct
254  CopyFwdToAdj();
255 
256  m_equ[1]->TransCoeffToPhys();
257  m_equ[1]->DoSolve();
258  }
259 
260  if(!(cycle%m_infosteps))
261  {
262  out << endl;
263  m_equ[0]->Output();
264  }
265 
266  // operated fields are copied into workd[inptr[1]-1]
267  CopyFieldToArnoldiArray(tmpworkd = workd + (ipntr[1]-1));
268 
269  cycle++;
270  break;
271  case 2: // provide y = M x (bwd trans and iproduct);
272  {
273  //workd[inptr[0]-1] copied into operator fields
274  CopyArnoldiArrayToField(tmpworkd = workd + (ipntr[0]-1));
275 
276  m_equ[0]->TransCoeffToPhys();
277 
278  Array<OneD, MultiRegions::ExpListSharedPtr> fields = m_equ[0]->UpdateFields();
279  for (int i = 0; i < fields.num_elements(); ++i)
280  {
281  fields[i]->IProductWRTBase(fields[i]->GetPhys(),
282  fields[i]->UpdateCoeffs());
283  }
284 
285  // operated fields are copied into workd[inptr[1]-1]
286  CopyFieldToArnoldiArray(tmpworkd = workd + (ipntr[1]-1));
287  break;
288  }
289  default:
290  ASSERTL0(false, "Unexpected reverse communication request.");
291  }
292 
293  }
294 
295  out<< endl << "Converged in " << iparam[8] << " iterations" << endl;
296 
297  ASSERTL0(info >= 0," Error with Dnaupd");
298 
299  ritzSelect = Array<OneD, int> (m_kdim,0);
300  dr = Array<OneD, NekDouble> (m_nvec+1,0.0);
301  di = Array<OneD, NekDouble> (m_nvec+1,0.0);
302  workev = Array<OneD, NekDouble> (3*m_kdim);
303  z = Array<OneD, NekDouble> (n*(m_nvec+1));
304 
305  if(m_negatedOp)
306  {
307  sigmar = -m_realShift;
308  }
309  else
310  {
311  sigmar = m_realShift;
312  }
313 
314  // Do not pass imaginary shift to Arpack since we have not
315  // used a Fortran complex number format and so processing
316  // is mucked up. Need to do some processing afterwards.
317  sigmai = 0;
318 
319  //Setting 'A', Ritz vectors are computed. 'S' for Shur vectors
320  Arpack::Dneupd(1, "A", ritzSelect.get(), dr.get(), di.get(),
321  z.get(), n, sigmar, sigmai, workev.get(), &B,
322  n, problem, m_nvec, m_evtol, resid.get(), m_kdim,
323  v.get(), n, iparam, ipntr, workd.get(),
324  workl.get(),lworkl,info);
325 
326  ASSERTL0(info == 0, " Error with Dneupd");
327 
328  int nconv=iparam[4];
329 
330  // Subtract off complex shift if it exists
331  if(m_negatedOp)
332  {
333  Vmath::Sadd(nconv,m_imagShift,di,1,di,1);
334  }
335  else
336  {
337  Vmath::Sadd(nconv,-m_imagShift,di,1,di,1);
338  }
339 
340  WARNINGL0(m_imagShift == 0,"Complex Shift applied. "
341  "Need to implement Ritz re-evaluation of"
342  "eigenvalue. Only one half of complex "
343  "value will be correct");
344 
345 
346  Array<OneD, MultiRegions::ExpListSharedPtr> fields = m_equ[0]->UpdateFields();
347 
348  out << "Converged Eigenvalues: " << nconv << endl;
349  pFile << "Converged Eigenvalues: " << nconv << endl;
350 
352  {
353  out << " Magnitude Angle Growth Frequency" << endl;
354  pFile << " Magnitude Angle Growth Frequency" << endl;
355  for(int i= 0; i< nconv; ++i)
356  {
357  WriteEvs(out,i,dr[i],di[i]);
358  WriteEvs(pFile,i,dr[i],di[i]);
359 
360  std::string file = m_session->GetSessionName() + "_eig_"
361  + boost::lexical_cast<std::string>(i)
362  + ".fld";
363  WriteFld(file,z + i*n);
364  }
365  }
366  else
367  {
368  out << " Real Imaginary " << endl;
369  pFile << " Real Imaginary " << endl;
370  for(int i= 0; i< nconv; ++i)
371  {
372  WriteEvs(out,i,dr[i],di[i],
374  WriteEvs(pFile,i,dr[i],di[i],
376 
377  std::string file = m_session->GetSessionName() + "_eig_"
378  + boost::lexical_cast<std::string>(i)
379  + ".fld";
380  WriteFld(file,z + i*n);
381  }
382  }
383 
384  m_real_evl = dr;
385  m_imag_evl = di;
386 
387  pFile.close();
388 
389  for(int j = 0; j < m_equ[0]->GetNvariables(); ++j)
390  {
391  NekDouble vL2Error = m_equ[0]->L2Error(j,false);
392  NekDouble vLinfError = m_equ[0]->LinfError(j);
393  if (m_comm->GetRank() == 0)
394  {
395  out << "L 2 error (variable " << m_equ[0]->GetVariable(j) << ") : " << vL2Error << endl;
396  out << "L inf error (variable " << m_equ[0]->GetVariable(j) << ") : " << vLinfError << endl;
397  }
398  }
399 }
Array< OneD, NekDouble > m_imag_evl
Definition: DriverArnoldi.h:69
static void Dneupd(const int &rvec, const char *howmny, const int *select, double *dr, double *di, double *z, const int &ldz, const double &sigmar, const double &sigmai, double *workev, const char *bmat, const int &n, const char *which, const int &nev, const double &tol, double *resid, const int &ncv, double *v, const int &ldv, int *iparam, int *ipntr, double *workd, double *workl, const int &lworkl, int &info)
Post-processing routine to computed eigenvector of computed eigenvalues in Dnaupd.
Definition: Arpack.hpp:148
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
void CopyFwdToAdj()
Copy the forward field to the adjoint system in transient growth calculations.
NekDouble m_evtol
Maxmum number of iterations.
Definition: DriverArnoldi.h:57
void CopyArnoldiArrayToField(Array< OneD, NekDouble > &array)
Copy Arnoldi storage to fields.
void CopyFieldToArnoldiArray(Array< OneD, NekDouble > &array)
Copy fields to Arnoldi storage.
void WriteFld(std::string file, std::vector< Array< OneD, NekDouble > > coeffs)
Write coefficients to file.
static const NekDouble kNekZeroTol
int m_nvec
Dimension of Krylov subspace.
Definition: DriverArnoldi.h:55
Array< OneD, NekDouble > m_real_evl
Operator in solve call is negated.
Definition: DriverArnoldi.h:68
void WriteEvs(std::ostream &evlout, const int k, const NekDouble real, const NekDouble imag, NekDouble resid=NekConstants::kNekUnsetDouble, bool DumpInverse=true)
#define WARNINGL0(condition, msg)
Definition: ErrorUtil.hpp:223
static void Dnaupd(int &ido, const char *bmat, const int &n, const char *which, const int &nev, const double &tol, double *resid, const int &ncv, double *v, const int &ldv, int *iparam, int *ipntr, double *workd, double *workl, const int &lworkl, int &info)
Top level reverse communication interface to solve real double-precision non-symmetric problems...
Definition: Arpack.hpp:134
enum EvolutionOperatorType m_EvolutionOperator
Evolution Operator.
Definition: Driver.h:104
double NekDouble
static const NekDouble kNekUnsetDouble
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
Definition: Vmath.cpp:318
int m_nfields
interval to dump information if required.
Definition: DriverArnoldi.h:63
bool m_timeSteppingAlgorithm
Period of time stepping algorithm.
Definition: DriverArnoldi.h:59
static std::string ArpackProblemTypeTrans[]
Definition: DriverArpack.h:92
Array< OneD, EquationSystemSharedPtr > m_equ
Equation system to solve.
Definition: Driver.h:98
int m_infosteps
underlying operator is time stepping
Definition: DriverArnoldi.h:61
LibUtilities::CommSharedPtr m_comm
Communication object.
Definition: Driver.h:86
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:89
int m_nits
Number of vectors to test.
Definition: DriverArnoldi.h:56

◆ v_InitObject()

void Nektar::SolverUtils::DriverArpack::v_InitObject ( std::ostream &  out = std::cout)
protectedvirtual

Virtual function for initialisation implementation.

Reimplemented from Nektar::SolverUtils::DriverArnoldi.

Definition at line 81 of file DriverArpack.cpp.

References Nektar::SolverUtils::DriverArnoldi::ArnoldiSummary(), ArpackProblemTypeTrans, ASSERTL0, Nektar::SolverUtils::Driver::m_comm, Nektar::SolverUtils::Driver::m_equ, Nektar::SolverUtils::DriverArnoldi::m_kdim, m_maxn, m_maxncv, m_maxnev, Nektar::SolverUtils::Driver::m_nequ, Nektar::SolverUtils::DriverArnoldi::m_nvec, Nektar::SolverUtils::Driver::m_session, and Nektar::SolverUtils::DriverArnoldi::v_InitObject().

82 {
84 
85  //Initialisation of Arnoldi parameters
86  m_maxn = 1000000; // Maximum size of the problem
87  m_maxnev = 200; // maximum number of eigenvalues requested
88  m_maxncv = 500; // Largest number of basis vector used in Implicitly Restarted Arnoldi
89 
90  // Error alerts
91  ASSERTL0(m_nvec <= m_maxnev,"NEV is greater than MAXNEV");
92  ASSERTL0(m_kdim <= m_maxncv,"NEV is greater than MAXNEV");
93  ASSERTL0(2 <= m_kdim-m_nvec,"NCV-NEV is less than 2");
94 
95  m_equ[0]->PrintSummary(out);
96 
97  ASSERTL0(m_comm->GetSize() == 1,
98  "ARPACK Arnoldi solver does not support execution in parallel.");
99 
100  // Print session parameters
101  out << "\tArnoldi solver type : Arpack" << endl;
102 
103  out << "\tArpack problem type : ";
104  out << ArpackProblemTypeTrans[m_session->GetSolverInfoAsEnum<int>("ArpackProblemType")] << endl;
106 
107  for( int i = 0; i < m_nequ; ++i)
108  {
109  m_equ[i]->DoInitialise();
110  }
111 
112  // FwdTrans Initial conditions to be in Coefficient Space
113  m_equ[m_nequ-1] ->TransPhysToCoeff();
114 
115 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
SOLVER_UTILS_EXPORT void ArnoldiSummary(std::ostream &out)
int m_nvec
Dimension of Krylov subspace.
Definition: DriverArnoldi.h:55
virtual void v_InitObject(std::ostream &out=std::cout)
static std::string ArpackProblemTypeTrans[]
Definition: DriverArpack.h:92
Array< OneD, EquationSystemSharedPtr > m_equ
Equation system to solve.
Definition: Driver.h:98
LibUtilities::CommSharedPtr m_comm
Communication object.
Definition: Driver.h:86
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:89
int m_nequ
number of equations
Definition: Driver.h:101

Friends And Related Function Documentation

◆ MemoryManager< DriverArpack >

friend class MemoryManager< DriverArpack >
friend

Definition at line 51 of file DriverArpack.h.

Member Data Documentation

◆ arpackProblemTypeDefault

std::string Nektar::SolverUtils::DriverArpack::arpackProblemTypeDefault = LibUtilities::SessionReader::RegisterDefaultSolverInfo("ArpackProblemType","LargestMag")
staticprotected

Definition at line 88 of file DriverArpack.h.

◆ arpackProblemTypeLookupIds

std::string Nektar::SolverUtils::DriverArpack::arpackProblemTypeLookupIds
staticprotected
Initial value:
= {
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","LargestReal" ,0),
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","SmallestReal" ,1),
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","LargestImag" ,2),
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","SmallestImag" ,3),
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","LargestMag" ,4),
LibUtilities::SessionReader::RegisterEnumValue("ArpackProblemType","SmallestMag" ,5),
}

Definition at line 87 of file DriverArpack.h.

◆ ArpackProblemTypeTrans

std::string Nektar::SolverUtils::DriverArpack::ArpackProblemTypeTrans
staticprivate
Initial value:
=
{ "LR", "SR", "LI", "SI", "LM", "SM" }

Definition at line 92 of file DriverArpack.h.

Referenced by v_Execute(), and v_InitObject().

◆ className

std::string Nektar::SolverUtils::DriverArpack::className = GetDriverFactory().RegisterCreatorFunction("Arpack", DriverArpack::create)
static

Name of the class.

Definition at line 65 of file DriverArpack.h.

◆ driverLookupId

std::string Nektar::SolverUtils::DriverArpack::driverLookupId = LibUtilities::SessionReader::RegisterEnumValue("Driver","Arpack",0)
staticprotected

Definition at line 89 of file DriverArpack.h.

◆ m_maxn

int Nektar::SolverUtils::DriverArpack::m_maxn
protected

Definition at line 70 of file DriverArpack.h.

Referenced by v_Execute(), and v_InitObject().

◆ m_maxncv

int Nektar::SolverUtils::DriverArpack::m_maxncv
protected

Definition at line 72 of file DriverArpack.h.

Referenced by v_InitObject().

◆ m_maxnev

int Nektar::SolverUtils::DriverArpack::m_maxnev
protected

Definition at line 71 of file DriverArpack.h.

Referenced by v_InitObject().