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

#include <ExplicitTimeIntegrationSchemeSDC.h>

Inheritance diagram for Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC:
[legend]

Public Member Functions

 ExplicitTimeIntegrationSchemeSDC (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 
- Public Member Functions inherited from Nektar::LibUtilities::TimeIntegrationSchemeSDC
 TimeIntegrationSchemeSDC (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 
 ~TimeIntegrationSchemeSDC () override
 Destructor. More...
 
LUE void SetPFASST (bool pfasst)
 
LUE void SetTime (double time)
 
LUE size_t GetMaxOrder () const
 
LUE bool HasFirstQuadrature () const
 
LUE bool HasLastQuadrature () const
 
LUE size_t GetQuadPtsNumber () const
 
LUE size_t GetNpoints () const
 
LUE size_t GetNvars () const
 
LUE const PointsKeyGetPointsKey () const
 
LUE const DoubleArrayGetFirstQuadratureSolutionVector () const
 
LUE DoubleArrayUpdateFirstQuadratureSolutionVector ()
 
LUE const DoubleArrayGetLastQuadratureSolutionVector () const
 
LUE DoubleArrayUpdateLastQuadratureSolutionVector ()
 
LUE const TripleArrayGetResidualVector () const
 
LUE TripleArrayUpdateResidualVector ()
 
LUE const TripleArrayGetIntegratedResidualVector () const
 
LUE TripleArrayUpdateIntegratedResidualVector ()
 
LUE const TripleArrayGetFAScorrectionVector () const
 
LUE TripleArrayUpdateFAScorrectionVector ()
 
LUE void ResidualEval (const NekDouble &delta_t, const size_t n)
 
LUE void ResidualEval (const NekDouble &delta_t)
 
LUE void ComputeInitialGuess (const NekDouble &delta_t)
 
LUE void SDCIterationLoop (const NekDouble &delta_t)
 
LUE void UpdateFirstQuadrature (void)
 Worker method that update the first quadrature. More...
 
LUE void UpdateLastQuadrature (void)
 Worker method that update the last quadrature. More...
 
LUE void AddFASCorrectionToSFint (void)
 Worker method that add the FASCorrection. More...
 
LUE void UpdateIntegratedResidualSFint (const NekDouble &delta_t)
 Worker method that compute residual integral. More...
 
LUE void UpdateIntegratedResidualQFint (const NekDouble &delta_t)
 
- Public Member Functions inherited from Nektar::LibUtilities::TimeIntegrationScheme
LUE std::string GetFullName () const
 
LUE std::string GetName () const
 
LUE std::string GetVariant () const
 
LUE size_t GetOrder () const
 
LUE std::vector< NekDoubleGetFreeParams ()
 
LUE TimeIntegrationSchemeType GetIntegrationSchemeType ()
 
LUE NekDouble GetTimeStability () const
 
LUE size_t GetNumIntegrationPhases ()
 
LUE const TripleArrayGetSolutionVector () const
 Gets the solution vector of the ODE. More...
 
LUE TripleArrayUpdateSolutionVector ()
 
LUE void SetSolutionVector (const size_t Offset, const DoubleArray &y)
 Sets the solution vector of the ODE. More...
 
LUE void InitializeScheme (const NekDouble deltaT, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op)
 Explicit integration of an ODE. More...
 
LUE ConstDoubleArrayTimeIntegrate (const size_t timestep, const NekDouble delta_t)
 
LUE void print (std::ostream &os) const
 
LUE void printFull (std::ostream &os) const
 

Static Public Member Functions

static TimeIntegrationSchemeSharedPtr create (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 
- Static Public Member Functions inherited from Nektar::LibUtilities::TimeIntegrationSchemeSDC
static TimeIntegrationSchemeSharedPtr create (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 

Static Public Attributes

static std::string className
 
- Static Public Attributes inherited from Nektar::LibUtilities::TimeIntegrationSchemeSDC
static std::string className
 

Protected Member Functions

LUE void v_InitializeScheme (const NekDouble deltaT, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op) override
 Worker method to initialize the integration scheme. More...
 
LUE void v_ResidualEval (const NekDouble &delta_t, const size_t n) override
 Worker method to compute the residual. More...
 
LUE void v_ResidualEval (const NekDouble &delta_t) override
 
LUE void v_ComputeInitialGuess (const NekDouble &delta_t) override
 Worker method to compute the initial SDC guess. More...
 
LUE void v_SDCIterationLoop (const NekDouble &delta_t) override
 Worker method to compute the SDC iteration. More...
 
- Protected Member Functions inherited from Nektar::LibUtilities::TimeIntegrationSchemeSDC
LUE std::string v_GetName () const override
 
LUE std::string v_GetVariant () const override
 
LUE size_t v_GetOrder () const override
 
LUE std::vector< NekDoublev_GetFreeParams () const override
 
LUE TimeIntegrationSchemeType v_GetIntegrationSchemeType () const override
 
LUE NekDouble v_GetTimeStability () const override
 
LUE size_t v_GetNumIntegrationPhases () const override
 
LUE const TripleArrayv_GetSolutionVector () const override
 Gets the solution vector of the ODE. More...
 
LUE TripleArrayv_UpdateSolutionVector () override
 
LUE void v_SetSolutionVector (const size_t Offset, const DoubleArray &y) override
 Sets the solution vector of the ODE. More...
 
LUE void v_InitializeScheme (const NekDouble deltaT, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op) override
 Worker method to initialize the integration scheme. More...
 
LUE ConstDoubleArrayv_TimeIntegrate (const size_t timestep, const NekDouble delta_t) override
 Worker method that performs the time integration. More...
 
virtual LUE void v_ResidualEval (const NekDouble &delta_t, const size_t n)
 
virtual LUE void v_ResidualEval (const NekDouble &delta_t)
 
virtual LUE void v_ComputeInitialGuess (const NekDouble &delta_t)
 
virtual LUE void v_SDCIterationLoop (const NekDouble &delta_t)
 
LUE void v_print (std::ostream &os) const override
 Worker method to print details on the integration scheme. More...
 
LUE void v_printFull (std::ostream &os) const override
 
- Protected Member Functions inherited from Nektar::LibUtilities::TimeIntegrationScheme
virtual LUE std::string v_GetFullName () const
 
virtual LUE std::string v_GetName () const =0
 
virtual LUE std::string v_GetVariant () const =0
 
virtual LUE size_t v_GetOrder () const =0
 
virtual LUE std::vector< NekDoublev_GetFreeParams () const =0
 
virtual LUE TimeIntegrationSchemeType v_GetIntegrationSchemeType () const =0
 
virtual LUE NekDouble v_GetTimeStability () const =0
 
virtual LUE size_t v_GetNumIntegrationPhases () const =0
 
virtual LUE const TripleArrayv_GetSolutionVector () const =0
 
virtual LUE TripleArrayv_UpdateSolutionVector ()=0
 
virtual LUE void v_SetSolutionVector (const size_t Offset, const DoubleArray &y)=0
 
virtual LUE void v_InitializeScheme (const NekDouble deltaT, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op)=0
 
virtual LUE ConstDoubleArrayv_TimeIntegrate (const size_t timestep, const NekDouble delta_t)=0
 
virtual LUE void v_print (std::ostream &os) const =0
 
virtual LUE void v_printFull (std::ostream &os) const =0
 
LUE TimeIntegrationScheme (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 
LUE TimeIntegrationScheme (const TimeIntegrationScheme &in)=delete
 
virtual ~TimeIntegrationScheme ()=default
 

Additional Inherited Members

- Protected Attributes inherited from Nektar::LibUtilities::TimeIntegrationSchemeSDC
NekDouble m_time
 
std::string m_name
 
std::string m_variant
 
std::vector< NekDoublem_freeParams
 
TimeIntegrationSchemeType m_schemeType {eNoTimeIntegrationSchemeType}
 
TimeIntegrationSchemeOperators m_op
 
PointsKey m_pointsKey
 
SingleArray m_tau
 Object containing quadrature data. More...
 
DoubleArray m_Y_f
 Array containing the quadrature points. More...
 
TripleArray m_Y
 Array containing the last stage values. More...
 
TripleArray m_F
 Array containing the stage values. More...
 
TripleArray m_FAScorr
 Array containing the stage derivatives. More...
 
TripleArray m_SFint
 Array containing the FAS correction term. More...
 
TripleArray m_QFint
 Array containing the integrated residual term. More...
 
SingleArray m_QMat
 Array containing the integrated residual term. More...
 
SingleArray m_interp
 Array containing the integration matrix. More...
 
NekDouble m_theta {1.0}
 Array containing the interpolation coefficients. More...
 
size_t m_ordermin {0}
 SDC parameter. More...
 
size_t m_ordermax {0}
 Minimum order of the integration scheme. More...
 
size_t m_order {0}
 Maximum order of the integration scheme. More...
 
size_t m_nQuadPts {0}
 Order of the integration scheme. More...
 
size_t m_nvars {0}
 Number of quadrature points. More...
 
size_t m_npoints {0}
 Number of variables in the integration scheme. More...
 
bool m_first_quadrature {true}
 Number of points in the integration scheme. More...
 
bool m_last_quadrature {true}
 
bool m_initialized {false}
 
bool m_PFASST {false}
 

Detailed Description

Definition at line 46 of file ExplicitTimeIntegrationSchemeSDC.h.

Constructor & Destructor Documentation

◆ ExplicitTimeIntegrationSchemeSDC()

Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::ExplicitTimeIntegrationSchemeSDC ( std::string  variant,
size_t  order,
std::vector< NekDouble freeParams 
)
inline

Definition at line 49 of file ExplicitTimeIntegrationSchemeSDC.h.

51 : TimeIntegrationSchemeSDC(variant, order, freeParams)
52 {
53 m_name = "ExplicitSpectralDeferredCorrection";
55 }
TimeIntegrationSchemeSDC(std::string variant, size_t order, std::vector< NekDouble > freeParams)
@ eExplicit
Formally explicit scheme.

References Nektar::LibUtilities::eExplicit, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_name, and Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_schemeType.

Member Function Documentation

◆ create()

static TimeIntegrationSchemeSharedPtr Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::create ( std::string  variant,
size_t  order,
std::vector< NekDouble freeParams 
)
inlinestatic

Definition at line 57 of file ExplicitTimeIntegrationSchemeSDC.h.

59 {
62 variant, order, freeParams);
63
64 return p;
65 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< TimeIntegrationScheme > TimeIntegrationSchemeSharedPtr

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

◆ v_ComputeInitialGuess()

void Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::v_ComputeInitialGuess ( const NekDouble delta_t)
overrideprotectedvirtual

Worker method to compute the initial SDC guess.

Reimplemented from Nektar::LibUtilities::TimeIntegrationSchemeSDC.

Definition at line 114 of file ExplicitTimeIntegrationSchemeSDC.h.

116{
117 for (size_t n = 0; n < m_nQuadPts; ++n)
118 {
119 // Use explicit Euler as a first guess
120 if (n > 0)
121 {
122 NekDouble dtn = delta_t * (m_tau[n] - m_tau[n - 1]);
123 for (size_t i = 0; i < m_nvars; ++i)
124 {
125 Vmath::Svtvp(m_npoints, dtn, m_F[n - 1][i], 1, m_Y[n - 1][i], 1,
126 m_Y[n][i], 1);
127 }
128 }
129
130 // Compute residual
131 m_op.DoProjection(m_Y[n], m_Y[n], m_time + delta_t * m_tau[n]);
132 m_op.DoOdeRhs(m_Y[n], m_F[n], m_time + delta_t * m_tau[n]);
133 }
134}
void DoProjection(InArrayType &inarray, OutArrayType &outarray, const NekDouble time) const
void DoOdeRhs(InArrayType &inarray, OutArrayType &outarray, const NekDouble time) const
TripleArray m_Y
Array containing the last stage values.
size_t m_nQuadPts
Order of the integration scheme.
size_t m_npoints
Number of variables in the integration scheme.
SingleArray m_tau
Object containing quadrature data.
TripleArray m_F
Array containing the stage values.
double NekDouble
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Svtvp (scalar times vector plus vector): z = alpha*x + y.
Definition: Vmath.hpp:396

References Nektar::LibUtilities::TimeIntegrationSchemeOperators::DoOdeRhs(), Nektar::LibUtilities::TimeIntegrationSchemeOperators::DoProjection(), Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_F, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_npoints, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_nQuadPts, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_nvars, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_op, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_tau, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_time, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_Y, and Vmath::Svtvp().

◆ v_InitializeScheme()

void Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::v_InitializeScheme ( const NekDouble  deltaT,
ConstDoubleArray y_0,
const NekDouble  time,
const TimeIntegrationSchemeOperators op 
)
overrideprotectedvirtual

Worker method to initialize the integration scheme.

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 86 of file ExplicitTimeIntegrationSchemeSDC.h.

89{
91}
LUE void v_InitializeScheme(const NekDouble deltaT, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op) override
Worker method to initialize the integration scheme.

References Nektar::LibUtilities::TimeIntegrationSchemeSDC::v_InitializeScheme().

◆ v_ResidualEval() [1/2]

void Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::v_ResidualEval ( const NekDouble delta_t)
overrideprotectedvirtual

Reimplemented from Nektar::LibUtilities::TimeIntegrationSchemeSDC.

Definition at line 103 of file ExplicitTimeIntegrationSchemeSDC.h.

104{
105 for (size_t n = 0; n < m_nQuadPts; ++n)
106 {
107 v_ResidualEval(delta_t, n);
108 }
109}
LUE void v_ResidualEval(const NekDouble &delta_t, const size_t n) override
Worker method to compute the residual.

References Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_nQuadPts, and v_ResidualEval().

◆ v_ResidualEval() [2/2]

void Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::v_ResidualEval ( const NekDouble delta_t,
const size_t  n 
)
overrideprotectedvirtual

◆ v_SDCIterationLoop()

void Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::v_SDCIterationLoop ( const NekDouble delta_t)
overrideprotectedvirtual

Worker method to compute the SDC iteration.

Reimplemented from Nektar::LibUtilities::TimeIntegrationSchemeSDC.

Definition at line 139 of file ExplicitTimeIntegrationSchemeSDC.h.

141{
142 // Update integrated residual
144
145 // Add FAS correction to integrated residual
147
148 // Loop over quadrature points
149 for (size_t n = 1; n < m_nQuadPts; ++n)
150 {
151 // Update solution
152 for (size_t i = 0; i < m_nvars; ++i)
153 {
154 // Add SFint contribution to solution
155 Vmath::Vadd(m_npoints, m_Y[n - 1][i], 1, m_SFint[n][i], 1,
156 m_Y[n][i], 1);
157
158 // Add explicit contribution to solution
159 if (n > 1)
160 {
161 NekDouble dtn = delta_t * (m_tau[n] - m_tau[n - 1]);
162 Vmath::Svtvp(m_npoints, m_theta * dtn, m_F[n - 1][i], 1,
163 m_Y[n][i], 1, m_Y[n][i], 1);
164 }
165
166 // Add explicit contribution to SFint
167 if (n < m_nQuadPts - 1)
168 {
169 NekDouble dtnp = delta_t * (m_tau[n + 1] - m_tau[n]);
170 Vmath::Svtvp(m_npoints, -m_theta * dtnp, m_F[n][i], 1,
171 m_SFint[n + 1][i], 1, m_SFint[n + 1][i], 1);
172 }
173 }
174
175 // Compute residual
176 m_op.DoProjection(m_Y[n], m_Y[n], m_time + delta_t * m_tau[n]);
177 m_op.DoOdeRhs(m_Y[n], m_F[n], m_time + delta_t * m_tau[n]);
178 }
179}
LUE void UpdateIntegratedResidualSFint(const NekDouble &delta_t)
Worker method that compute residual integral.
LUE void AddFASCorrectionToSFint(void)
Worker method that add the FASCorrection.
TripleArray m_SFint
Array containing the FAS correction term.
NekDouble m_theta
Array containing the interpolation coefficients.
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
Definition: Vmath.hpp:180

References Nektar::LibUtilities::TimeIntegrationSchemeSDC::AddFASCorrectionToSFint(), Nektar::LibUtilities::TimeIntegrationSchemeOperators::DoOdeRhs(), Nektar::LibUtilities::TimeIntegrationSchemeOperators::DoProjection(), Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_F, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_npoints, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_nQuadPts, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_nvars, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_op, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_SFint, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_tau, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_theta, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_time, Nektar::LibUtilities::TimeIntegrationSchemeSDC::m_Y, Vmath::Svtvp(), Nektar::LibUtilities::TimeIntegrationSchemeSDC::UpdateIntegratedResidualSFint(), and Vmath::Vadd().

Member Data Documentation

◆ className

std::string Nektar::LibUtilities::ExplicitTimeIntegrationSchemeSDC::className
static
Initial value:
=
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:197
TimeIntegrationSchemeFactory & GetTimeIntegrationSchemeFactory()

Definition at line 67 of file ExplicitTimeIntegrationSchemeSDC.h.