Nektar++
Loading...
Searching...
No Matches
DriverArnoldi.h
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: DriverArnoldi.h
4//
5// For more information, please see: http://www.nektar.info
6//
7// The MIT License
8//
9// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10// Department of Aeronautics, Imperial College London (UK), and Scientific
11// Computing and Imaging Institute, University of Utah (USA).
12//
13// Permission is hereby granted, free of charge, to any person obtaining a
14// copy of this software and associated documentation files (the "Software"),
15// to deal in the Software without restriction, including without limitation
16// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17// and/or sell copies of the Software, and to permit persons to whom the
18// Software is furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included
21// in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29// DEALINGS IN THE SOFTWARE.
30//
31// Description: Base Driver class for the stability solver
32//
33///////////////////////////////////////////////////////////////////////////////
34
35#ifndef NEKTAR_SOLVERUTILS_DRIVERARNOLDI_H
36#define NEKTAR_SOLVERUTILS_DRIVERARNOLDI_H
37
38#include <SolverUtils/Driver.h>
39
40namespace Nektar::SolverUtils
41{
42
43/// Base class for the development of solvers.
44class DriverArnoldi : public Driver
45{
46public:
47 friend class MemoryManager<DriverArnoldi>;
48
50 {
51 return m_real_evl;
52 }
53
55 {
56 return m_imag_evl;
57 }
58
59protected:
60 int m_kdim; /// Dimension of Krylov subspace
61 int m_nvec; /// Number of vectors to test
62 int m_nits; /// Maxmum number of iterations
63 NekDouble m_evtol; /// Tolerance of iterations
64 NekDouble m_period; /// Period of time stepping algorithm
65 bool m_timeSteppingAlgorithm; /// underlying operator is time stepping
66
67 int m_infosteps; /// interval to dump information if required.
68
72 int m_negatedOp; /// Operator in solve call is negated
73
76
80
81 /// Constructor
84
85 /// Destructor
86 ~DriverArnoldi() override = default;
87
88 /// Virtual function for initialisation implementation.
89 void v_InitObject(std::ostream &out = std::cout) override;
90
91 /// Virtual function for solve implementation.
92 void v_Execute(std::ostream &out = std::cout) override;
93
94 /// Copy Arnoldi storage to fields.
96
97 /// Copy fields to Arnoldi storage.
99
100 /// Copy the forward field to the adjoint system in transient growth
101 /// calculations
102 void CopyFwdToAdj();
103
104 /// Write coefficients to file
105 void WriteFld(std::string file, std::vector<Array<OneD, NekDouble>> coeffs);
106
107 void WriteFld(std::string file, Array<OneD, NekDouble> coeffs);
108
109 void WriteEvs(std::ostream &evlout, const int k, const NekDouble real,
110 const NekDouble imag,
112 bool DumpInverse = true);
113
114 /// Init mask
115 void MaskInit();
116
117 void GetMaskInfo(std::vector<std::vector<LibUtilities::EquationSharedPtr>>
118 &selectedDomains,
119 std::set<int> &unselectedVariables);
120
121 SOLVER_UTILS_EXPORT void ArnoldiSummary(std::ostream &out);
122};
123
124} // namespace Nektar::SolverUtils
125
126#endif // NEKTAR_SOLVERUTILS_DRIVERARNOLDI_H
#define SOLVER_UTILS_EXPORT
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
Base class for the development of solvers.
void CopyFwdToAdj()
Copy the forward field to the adjoint system in transient growth calculations.
void v_InitObject(std::ostream &out=std::cout) override
Virtual function for initialisation implementation.
void WriteFld(std::string file, std::vector< Array< OneD, NekDouble > > coeffs)
Write coefficients to file.
NekDouble m_period
Tolerance of iterations.
int m_infosteps
underlying operator is time stepping
Array< OneD, NekDouble > GetImagEvl(void)
Array< OneD, NekDouble > GetRealEvl(void)
void v_Execute(std::ostream &out=std::cout) override
Virtual function for solve implementation.
Array< OneD, NekDouble > m_maskCoeffs
void CopyFieldToArnoldiArray(Array< OneD, NekDouble > &array)
Copy fields to Arnoldi storage.
int m_nvec
Dimension of Krylov subspace.
bool m_timeSteppingAlgorithm
Period of time stepping algorithm.
int m_nits
Number of vectors to test.
Array< OneD, NekDouble > m_imag_evl
void CopyArnoldiArrayToField(Array< OneD, NekDouble > &array)
Copy Arnoldi storage to fields.
void GetMaskInfo(std::vector< std::vector< LibUtilities::EquationSharedPtr > > &selectedDomains, std::set< int > &unselectedVariables)
Array< OneD, NekDouble > m_maskPhys
~DriverArnoldi() override=default
Destructor.
NekDouble m_evtol
Maxmum number of iterations.
int m_nfields
interval to dump information if required.
SOLVER_UTILS_EXPORT void ArnoldiSummary(std::ostream &out)
Array< OneD, NekDouble > m_real_evl
Operator in solve call is negated.
void WriteEvs(std::ostream &evlout, const int k, const NekDouble real, const NekDouble imag, NekDouble resid=NekConstants::kNekUnsetDouble, bool DumpInverse=true)
Base class for the development of solvers.
Definition Driver.h:65
std::shared_ptr< SessionReader > SessionReaderSharedPtr
static const NekDouble kNekUnsetDouble
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition MeshGraph.h:217