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

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

#include <DriverArnoldi.h>

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

Public Member Functions

SOLVER_UTILS_EXPORT void ArnoldiSummary (std::ostream &out)
 
SOLVER_UTILS_EXPORT const Array< OneD, const NekDouble > & GetMaskCoeff () const
 
SOLVER_UTILS_EXPORT const Array< OneD, const NekDouble > & GetMaskPhys () const
 
- 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)
 

Protected Member Functions

 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)
 
void MaskInit ()
 init mask More...
 
void GetUnmaskFunction (std::vector< std::vector< LibUtilities::EquationSharedPtr > > &unmaskfun)
 
virtual void v_InitObject (std::ostream &out=std::cout)
 
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...
 
virtual SOLVER_UTILS_EXPORT void v_Execute (std::ostream &out=std::cout)=0
 Virtual function for solve implementation. More...
 

Protected Attributes

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
 
bool m_useMask
 
Array< OneD, NekDoublem_maskCoeffs
 
Array< OneD, NekDoublem_maskPhys
 
- 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...
 

Friends

class MemoryManager< DriverArnoldi >
 

Additional Inherited Members

- Static Protected Attributes inherited from Nektar::SolverUtils::Driver
static std::string evolutionOperatorLookupIds []
 
static std::string evolutionOperatorDef
 
static std::string driverDefault
 

Detailed Description

Base class for the development of solvers.

Definition at line 46 of file DriverArnoldi.h.

Constructor & Destructor Documentation

◆ DriverArnoldi()

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

Constructor.

Constructor

Definition at line 48 of file DriverArnoldi.cpp.

51  : Driver(pSession, pGraph)
52 {
53  m_session->LoadParameter("IO_InfoSteps", m_infosteps, 1);
54 }
int m_infosteps
underlying operator is time stepping
Definition: DriverArnoldi.h:65
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:89
Driver(const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
Initialises EquationSystem class members.
Definition: Driver.cpp:74

References m_infosteps, and Nektar::SolverUtils::Driver::m_session.

◆ ~DriverArnoldi()

Nektar::SolverUtils::DriverArnoldi::~DriverArnoldi ( )
protectedvirtual

Destructor.

Destructor

Definition at line 60 of file DriverArnoldi.cpp.

61 {
62 }

Member Function Documentation

◆ ArnoldiSummary()

void Nektar::SolverUtils::DriverArnoldi::ArnoldiSummary ( std::ostream &  out)

Definition at line 129 of file DriverArnoldi.cpp.

130 {
131  if (m_comm->GetRank() == 0)
132  {
133  if(m_session->DefinesSolverInfo("ModeType") &&
134  boost::iequals(m_session->GetSolverInfo("ModeType"),
135  "SingleMode"))
136  {
137  out << "\tSingle Fourier mode : true " << endl;
138  ASSERTL0(m_session->DefinesSolverInfo("Homogeneous"),
139  "Expected a homogeneous expansion to be defined "
140  "with single mode");
141  }
142  else
143  {
144  out << "\tSingle Fourier mode : false " << endl;
145  }
146  if(m_session->DefinesSolverInfo("BetaZero"))
147  {
148  out << "\tBeta set to Zero : true (overrides LHom)"
149  << endl;
150  }
151  else
152  {
153  out << "\tBeta set to Zero : false " << endl;
154  }
155 
157  {
158  out << "\tEvolution operator : "
159  << m_session->GetSolverInfo("EvolutionOperator")
160  << endl;
161  }
162  else
163  {
164  out << "\tShift (Real,Imag) : " << m_realShift
165  << "," << m_imagShift << endl;
166  }
167  out << "\tKrylov-space dimension : " << m_kdim << endl;
168  out << "\tNumber of vectors : " << m_nvec << endl;
169  out << "\tMax iterations : " << m_nits << endl;
170  out << "\tEigenvalue tolerance : " << m_evtol << endl;
171  out << "======================================================"
172  << endl;
173  }
174 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
int m_nvec
Dimension of Krylov subspace.
Definition: DriverArnoldi.h:59
bool m_timeSteppingAlgorithm
Period of time stepping algorithm.
Definition: DriverArnoldi.h:63
int m_nits
Number of vectors to test.
Definition: DriverArnoldi.h:60
NekDouble m_evtol
Maxmum number of iterations.
Definition: DriverArnoldi.h:61
LibUtilities::CommSharedPtr m_comm
Communication object.
Definition: Driver.h:86

References ASSERTL0, Nektar::SolverUtils::Driver::m_comm, m_evtol, m_imagShift, m_kdim, m_nits, m_nvec, m_realShift, Nektar::SolverUtils::Driver::m_session, and m_timeSteppingAlgorithm.

Referenced by Nektar::SolverUtils::DriverArpack::v_InitObject(), and Nektar::SolverUtils::DriverModifiedArnoldi::v_InitObject().

◆ CopyArnoldiArrayToField()

void Nektar::SolverUtils::DriverArnoldi::CopyArnoldiArrayToField ( Array< OneD, NekDouble > &  array)
protected

Copy Arnoldi storage to fields.

Copy Arnoldi array to field variables which depend from either the m_fields or m_forces

Definition at line 180 of file DriverArnoldi.cpp.

181 {
182 
183  Array<OneD, MultiRegions::ExpListSharedPtr>& fields = m_equ[0]->UpdateFields();
184  int nq = fields[0]->GetNcoeffs();
185 
186  for (int k = 0; k < m_nfields; ++k)
187  {
188  Vmath::Vcopy(nq, &array[k*nq], 1, &fields[k]->UpdateCoeffs()[0], 1);
189  fields[k]->SetPhysState(false);
190  }
191 }
int m_nfields
interval to dump information if required.
Definition: DriverArnoldi.h:67
Array< OneD, EquationSystemSharedPtr > m_equ
Equation system to solve.
Definition: Driver.h:98
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1199

References Nektar::SolverUtils::Driver::m_equ, m_nfields, and Vmath::Vcopy().

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::EV_update(), and Nektar::SolverUtils::DriverArpack::v_Execute().

◆ CopyFieldToArnoldiArray()

void Nektar::SolverUtils::DriverArnoldi::CopyFieldToArnoldiArray ( Array< OneD, NekDouble > &  array)
protected

Copy fields to Arnoldi storage.

Copy field variables which depend from either the m_fields or m_forces array the Arnoldi array

Definition at line 197 of file DriverArnoldi.cpp.

198 {
199 
200  Array<OneD, MultiRegions::ExpListSharedPtr> fields;
201 
203  {
204  // This matters for the Adaptive SFD method because
205  // m_equ[1] is the nonlinear problem with non
206  // homogeneous BCs.
207  fields = m_equ[0]->UpdateFields();
208  }
209  else
210  {
211  fields = m_equ[m_nequ-1]->UpdateFields();
212  }
213 
214  for (int k = 0; k < m_nfields; ++k)
215  {
216  int nq = fields[0]->GetNcoeffs();
217  Vmath::Vcopy(nq, &fields[k]->GetCoeffs()[0], 1, &array[k*nq], 1);
218  fields[k]->SetPhysState(false);
219 
220  }
221 }
enum EvolutionOperatorType m_EvolutionOperator
Evolution Operator.
Definition: Driver.h:104
int m_nequ
number of equations
Definition: Driver.h:101

References Nektar::SolverUtils::eAdaptiveSFD, Nektar::SolverUtils::Driver::m_equ, Nektar::SolverUtils::Driver::m_EvolutionOperator, Nektar::SolverUtils::Driver::m_nequ, m_nfields, and Vmath::Vcopy().

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::EV_update(), Nektar::SolverUtils::DriverArpack::v_Execute(), and Nektar::SolverUtils::DriverModifiedArnoldi::v_Execute().

◆ CopyFwdToAdj()

void Nektar::SolverUtils::DriverArnoldi::CopyFwdToAdj ( )
protected

Copy the forward field to the adjoint system in transient growth calculations.

Initialisation for the transient growth

Definition at line 227 of file DriverArnoldi.cpp.

228 {
229  Array<OneD, MultiRegions::ExpListSharedPtr> fields;
230 
232  "Transient Growth non available for Coupled Solver");
233 
234  fields = m_equ[0]->UpdateFields();
235  int nq = fields[0]->GetNcoeffs();
236 
237  for (int k=0 ; k < m_nfields; ++k)
238  {
239  Vmath::Vcopy(nq,
240  &fields[k]->GetCoeffs()[0], 1,
241  &m_equ[1]->UpdateFields()[k]->UpdateCoeffs()[0], 1);
242  }
243 }

References ASSERTL0, Nektar::SolverUtils::Driver::m_equ, m_nfields, m_timeSteppingAlgorithm, and Vmath::Vcopy().

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::EV_update(), and Nektar::SolverUtils::DriverArpack::v_Execute().

◆ GetMaskCoeff()

const Array< OneD, const NekDouble > & Nektar::SolverUtils::DriverArnoldi::GetMaskCoeff ( ) const
inline

Definition at line 126 of file DriverArnoldi.h.

127 {
128  return m_maskCoeffs;
129 }
Array< OneD, NekDouble > m_maskCoeffs
Definition: DriverArnoldi.h:76

References m_maskCoeffs.

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::v_Execute().

◆ GetMaskPhys()

const Array< OneD, const NekDouble > & Nektar::SolverUtils::DriverArnoldi::GetMaskPhys ( ) const
inline

Definition at line 131 of file DriverArnoldi.h.

132 {
133  return m_maskPhys;
134 }
Array< OneD, NekDouble > m_maskPhys
Definition: DriverArnoldi.h:77

References m_maskPhys.

◆ GetUnmaskFunction()

void Nektar::SolverUtils::DriverArnoldi::GetUnmaskFunction ( std::vector< std::vector< LibUtilities::EquationSharedPtr > > &  unmaskfun)
protected

Definition at line 334 of file DriverArnoldi.cpp.

335 {
336  string Unmask0("Unmask0");
337  string C0("C0");
338  for(size_t i=0; 1; ++i)
339  {
340  Unmask0[Unmask0.size()-1] = '0' + i;
341  if(!m_session->DefinesFunction(Unmask0))
342  {
343  break;
344  }
345  for(size_t j=0; 1; ++j)
346  {
347  C0[C0.size()-1] = '0' + j;
348  if(!m_session->DefinesFunction(Unmask0, C0))
349  {
350  break;
351  }
352  if(j==0)
353  {
354  unmaskfun.push_back(std::vector<LibUtilities::EquationSharedPtr>());
355  }
356  unmaskfun[unmaskfun.size()-1].push_back(m_session->GetFunction(Unmask0, C0));
357  }
358  }
359 }

References Nektar::SolverUtils::Driver::m_session.

Referenced by MaskInit().

◆ MaskInit()

void Nektar::SolverUtils::DriverArnoldi::MaskInit ( )
protected

init mask

Definition at line 361 of file DriverArnoldi.cpp.

362 {
363  std::vector<std::vector<LibUtilities::EquationSharedPtr> > unmaskfun;
364  GetUnmaskFunction(unmaskfun);
365  if(unmaskfun.size()==0)
366  {
367  m_useMask = false;
368  return;
369  }
370  m_useMask = true;
371  MultiRegions::ExpListSharedPtr field = m_equ[0]->UpdateFields()[0];
372  int ncoef = field->GetNcoeffs();
373  int nphys = field->GetNpoints();
374  m_maskCoeffs = Array<OneD, double>(ncoef*m_nfields, 1.);
375  m_maskPhys = Array<OneD, double>(nphys*m_nfields, 1.);
376  for(size_t i=0; i<field->GetExpSize(); ++i)
377  {
378  LocalRegions::ExpansionSharedPtr exp = field->GetExp(i);
379  SpatialDomains::GeometrySharedPtr geom = exp->GetGeom();
380  int nv = geom->GetNumVerts();
381  NekDouble gc[3] = {0.,0.,0.};
382  NekDouble gct[3] = {0.,0.,0.};
383  for(size_t j=0; j<nv; ++j)
384  {
385  SpatialDomains::PointGeomSharedPtr vertex = geom->GetVertex(j);
386  vertex->GetCoords(gct[0],gct[1],gct[2]);
387  gc[0] += gct[0]/NekDouble(nv);
388  gc[1] += gct[1]/NekDouble(nv);
389  gc[2] += gct[2]/NekDouble(nv);
390  }
391  int unmask = 1;
392  for(size_t m=0; m<unmaskfun.size(); ++m)
393  {
394  unmask = 0;
395  for(size_t n=0; n<unmaskfun[m].size(); ++n)
396  {
397  if(unmaskfun[m][n]->Evaluate(gc[0], gc[1], gc[2])<=0.)
398  {
399  unmask = 0;
400  break;
401  }
402  else
403  {
404  unmask = 1;
405  }
406  }
407  if(unmask==1) break;
408  }
409  if(unmask==0)
410  {
411  for(int j=0; j<m_nfields; ++j)
412  {
413  Vmath::Fill(exp->GetNcoeffs() , 0., &m_maskCoeffs[field->GetCoeff_Offset(i) + j*ncoef], 1);
414  Vmath::Fill(exp->GetTotPoints(), 0., &m_maskPhys[field->GetPhys_Offset(i) + j*nphys], 1);
415  }
416  }
417  }
418 }
void GetUnmaskFunction(std::vector< std::vector< LibUtilities::EquationSharedPtr > > &unmaskfun)
std::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:68
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:59
std::shared_ptr< Geometry > GeometrySharedPtr
Definition: Geometry.h:53
double NekDouble
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.cpp:45

References Vmath::Fill(), GetUnmaskFunction(), Nektar::SolverUtils::Driver::m_equ, m_maskCoeffs, m_maskPhys, m_nfields, and m_useMask.

Referenced by v_InitObject().

◆ v_GetImagEvl()

virtual Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::v_GetImagEvl ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::SolverUtils::Driver.

Definition at line 119 of file DriverArnoldi.h.

120  {
121  return m_imag_evl;
122  }
Array< OneD, NekDouble > m_imag_evl
Definition: DriverArnoldi.h:73

References m_imag_evl.

◆ v_GetRealEvl()

virtual Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::v_GetRealEvl ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::SolverUtils::Driver.

Definition at line 114 of file DriverArnoldi.h.

115  {
116  return m_real_evl;
117  }
Array< OneD, NekDouble > m_real_evl
Operator in solve call is negated.
Definition: DriverArnoldi.h:72

References m_real_evl.

◆ v_InitObject()

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

Arnoldi driver initialisation

Reimplemented from Nektar::SolverUtils::Driver.

Reimplemented in Nektar::SolverUtils::DriverSteadyState, Nektar::SolverUtils::DriverModifiedArnoldi, and Nektar::SolverUtils::DriverArpack.

Definition at line 68 of file DriverArnoldi.cpp.

69 {
71  m_session->MatchSolverInfo("SolverType",
72  "VelocityCorrectionScheme",
74 
76  {
77  m_period = m_session->GetParameter("TimeStep")
78  * m_session->GetParameter("NumSteps");
79  m_nfields = m_equ[0]->UpdateFields().size() - 1;
80 
81  }
82  else
83  {
84  m_period = 1.0;
85  m_nfields = m_equ[0]->UpdateFields().size();
86  }
87 
88  if(m_session->DefinesSolverInfo("ModeType") &&
89  (boost::iequals(m_session->GetSolverInfo("ModeType"),
90  "SingleMode")||
91  boost::iequals(m_session->GetSolverInfo("ModeType"),
92  "HalfMode")))
93  {
94  for(int i = 0; i < m_nfields; ++i)
95  {
96  m_equ[0]->UpdateFields()[i]->SetWaveSpace(true);
97  }
98  }
99  m_negatedOp = m_equ[0]->v_NegatedOp();
100 
101  m_session->LoadParameter("kdim", m_kdim, 16);
102  m_session->LoadParameter("nvec", m_nvec, 2);
103  m_session->LoadParameter("nits", m_nits, 500);
104  m_session->LoadParameter("evtol", m_evtol, 1e-06);
105 
106  ASSERTL0( m_kdim >= m_nvec, "nvec cannot be larger than kdim.");
107 
108  m_session->LoadParameter("realShift", m_realShift, 0.0);
109  m_equ[0]->SetLambda(m_realShift);
110 
111  m_session->LoadParameter("imagShift",m_imagShift,0.0);
112 
113  // The imaginary shift is applied at system assembly
114  // Only if using HOMOGENEOUS expansion and ModeType set to SingleMode
115  if(m_imagShift != 0.0)
116  {
117  if(!m_session->DefinesSolverInfo("HOMOGENEOUS")&&!m_session->DefinesSolverInfo("ModeType"))
118  {
119  NEKERROR(ErrorUtil::efatal, "Imaginary shift only supported with HOMOGENEOUS expansion and ModeType set to SingleMode");
120  }
121  else if(!boost::iequals(m_session->GetSolverInfo("ModeType"),"SingleMode"))
122  {
123  NEKERROR(ErrorUtil::efatal, "Imaginary shift only supported with HOMOGENEOUS expansion and ModeType set to SingleMode");
124  }
125  }
126  MaskInit();
127 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:209
NekDouble m_period
Tolerance of iteratiosn.
Definition: DriverArnoldi.h:62
virtual SOLVER_UTILS_EXPORT void v_InitObject(std::ostream &out=std::cout)
Definition: Driver.cpp:90

References ASSERTL0, Nektar::ErrorUtil::efatal, Nektar::SolverUtils::Driver::m_equ, m_evtol, m_imagShift, m_kdim, m_negatedOp, m_nfields, m_nits, m_nvec, m_period, m_realShift, Nektar::SolverUtils::Driver::m_session, m_timeSteppingAlgorithm, MaskInit(), NEKERROR, and Nektar::SolverUtils::Driver::v_InitObject().

Referenced by Nektar::SolverUtils::DriverArpack::v_InitObject(), and Nektar::SolverUtils::DriverModifiedArnoldi::v_InitObject().

◆ WriteEvs()

void Nektar::SolverUtils::DriverArnoldi::WriteEvs ( std::ostream &  evlout,
const int  k,
const NekDouble  real,
const NekDouble  imag,
NekDouble  resid = NekConstants::kNekUnsetDouble,
bool  DumpInverse = true 
)
protected

Definition at line 278 of file DriverArnoldi.cpp.

285 {
287  {
288  NekDouble abs_ev = hypot (re_ev, im_ev);
289  NekDouble ang_ev = atan2 (im_ev, re_ev);
290 
291  evlout << "EV: " << setw(2) << i
292  << setw(12) << abs_ev
293  << setw(12) << ang_ev
294  << setw(12) << log (abs_ev) / m_period
295  << setw(12) << ang_ev / m_period;
296 
297  if(resid != NekConstants::kNekUnsetDouble)
298  {
299  evlout << setw(12) << resid;
300  }
301  evlout << endl;
302  }
303  else
304  {
305  NekDouble invmag = 1.0/(re_ev*re_ev + im_ev*im_ev);
306  NekDouble sign;
307  if(m_negatedOp)
308  {
309  sign = -1.0;
310  }
311  else
312  {
313  sign = 1.0;
314  }
315 
316  evlout << "EV: " << setw(2) << i
317  << setw(14) << sign*re_ev
318  << setw(14) << sign*im_ev;
319 
320  if(DumpInverse)
321  {
322  evlout << setw(14) << sign*re_ev*invmag + m_realShift
323  << setw(14) << sign*im_ev*invmag + m_imagShift;
324  }
325 
326  if(resid != NekConstants::kNekUnsetDouble)
327  {
328  evlout << setw(12) << resid;
329  }
330  evlout << endl;
331  }
332 }
#define sign(a, b)
return the sign(b)*a
Definition: Polylib.cpp:15
static const NekDouble kNekUnsetDouble
scalarT< T > log(scalarT< T > in)
Definition: scalar.hpp:278

References Nektar::NekConstants::kNekUnsetDouble, tinysimd::log(), m_imagShift, m_negatedOp, m_period, m_realShift, m_timeSteppingAlgorithm, and sign.

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::EV_post(), Nektar::SolverUtils::DriverModifiedArnoldi::EV_test(), and Nektar::SolverUtils::DriverArpack::v_Execute().

◆ WriteFld() [1/2]

void Nektar::SolverUtils::DriverArnoldi::WriteFld ( std::string  file,
Array< OneD, NekDouble coeffs 
)
protected

Definition at line 260 of file DriverArnoldi.cpp.

261 {
262 
263  std::vector<std::string> variables(m_nfields);
264  std::vector<Array<OneD, NekDouble> > fieldcoeffs(m_nfields);
265 
266  int ncoeffs = m_equ[0]->UpdateFields()[0]->GetNcoeffs();
267  ASSERTL1(coeffs.size() >= ncoeffs*m_nfields,"coeffs is not of sufficient size");
268 
269  for(int i = 0; i < m_nfields; ++i)
270  {
271  variables[i] = m_equ[0]->GetVariable(i);
272  fieldcoeffs[i] = coeffs + i*ncoeffs;
273  }
274 
275  m_equ[0]->WriteFld(file,m_equ[0]->UpdateFields()[0], fieldcoeffs, variables);
276 }
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:250

References ASSERTL1, Nektar::SolverUtils::Driver::m_equ, and m_nfields.

◆ WriteFld() [2/2]

void Nektar::SolverUtils::DriverArnoldi::WriteFld ( std::string  file,
std::vector< Array< OneD, NekDouble > >  coeffs 
)
protected

Write coefficients to file.

Definition at line 245 of file DriverArnoldi.cpp.

246 {
247 
248  std::vector<std::string> variables(m_nfields);
249 
250  ASSERTL1(coeffs.size() >= m_nfields, "coeffs is not of the correct length");
251  for(int i = 0; i < m_nfields; ++i)
252  {
253  variables[i] = m_equ[0]->GetVariable(i);
254  }
255 
256  m_equ[0]->WriteFld(file,m_equ[0]->UpdateFields()[0], coeffs, variables);
257 }

References ASSERTL1, Nektar::SolverUtils::Driver::m_equ, and m_nfields.

Referenced by Nektar::SolverUtils::DriverModifiedArnoldi::EV_post(), and Nektar::SolverUtils::DriverArpack::v_Execute().

Friends And Related Function Documentation

◆ MemoryManager< DriverArnoldi >

friend class MemoryManager< DriverArnoldi >
friend

Definition at line 131 of file DriverArnoldi.h.

Member Data Documentation

◆ m_evtol

NekDouble Nektar::SolverUtils::DriverArnoldi::m_evtol
protected

◆ m_imag_evl

Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::m_imag_evl
protected

◆ m_imagShift

NekDouble Nektar::SolverUtils::DriverArnoldi::m_imagShift
protected

◆ m_infosteps

int Nektar::SolverUtils::DriverArnoldi::m_infosteps
protected

underlying operator is time stepping

Definition at line 65 of file DriverArnoldi.h.

Referenced by DriverArnoldi(), and Nektar::SolverUtils::DriverArpack::v_Execute().

◆ m_kdim

int Nektar::SolverUtils::DriverArnoldi::m_kdim
protected

◆ m_maskCoeffs

Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::m_maskCoeffs
protected

Definition at line 76 of file DriverArnoldi.h.

Referenced by GetMaskCoeff(), and MaskInit().

◆ m_maskPhys

Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::m_maskPhys
protected

Definition at line 77 of file DriverArnoldi.h.

Referenced by GetMaskPhys(), and MaskInit().

◆ m_negatedOp

int Nektar::SolverUtils::DriverArnoldi::m_negatedOp
protected

◆ m_nfields

int Nektar::SolverUtils::DriverArnoldi::m_nfields
protected

◆ m_nits

int Nektar::SolverUtils::DriverArnoldi::m_nits
protected

◆ m_nvec

int Nektar::SolverUtils::DriverArnoldi::m_nvec
protected

◆ m_period

NekDouble Nektar::SolverUtils::DriverArnoldi::m_period
protected

Tolerance of iteratiosn.

Definition at line 62 of file DriverArnoldi.h.

Referenced by v_InitObject(), and WriteEvs().

◆ m_real_evl

Array<OneD, NekDouble> Nektar::SolverUtils::DriverArnoldi::m_real_evl
protected

Operator in solve call is negated.

Definition at line 72 of file DriverArnoldi.h.

Referenced by Nektar::SolverUtils::DriverArpack::v_Execute(), Nektar::SolverUtils::DriverModifiedArnoldi::v_Execute(), and v_GetRealEvl().

◆ m_realShift

NekDouble Nektar::SolverUtils::DriverArnoldi::m_realShift
protected

◆ m_timeSteppingAlgorithm

bool Nektar::SolverUtils::DriverArnoldi::m_timeSteppingAlgorithm
protected

◆ m_useMask

bool Nektar::SolverUtils::DriverArnoldi::m_useMask
protected