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

Base class for GLM time integration schemes. More...

#include <TimeIntegrationSchemeGLM.h>

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

Public Member Functions

LUE void InitializeSecondaryData (TimeIntegrationAlgorithmGLM *phase, NekDouble deltaT) const
 
- 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
 

Protected Member Functions

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 size_t v_GetNumIntegrationPhases () const override
 
LUE const TripleArrayv_GetSolutionVector () const override
 
LUE TripleArrayv_UpdateSolutionVector () override
 
LUE void v_SetSolutionVector (const size_t Offset, const DoubleArray &y) override
 
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 actually does the time integration. More...
 
virtual LUE void v_InitializeSecondaryData (TimeIntegrationAlgorithmGLM *phase, NekDouble deltaT) const
 
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
 
LUE TimeIntegrationSchemeGLM (std::string variant, size_t order, std::vector< NekDouble > freeParams)
 
 ~TimeIntegrationSchemeGLM () 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
 

Protected Attributes

TimeIntegrationAlgorithmGLMVector m_integration_phases
 
TimeIntegrationSolutionGLMSharedPtr m_solVector
 

Friends

LUE friend std::ostream & operator<< (std::ostream &os, const TimeIntegrationSchemeGLM &rhs)
 
LUE friend std::ostream & operator<< (std::ostream &os, const TimeIntegrationSchemeGLMSharedPtr &rhs)
 

Detailed Description

Base class for GLM time integration schemes.

Definition at line 49 of file TimeIntegrationSchemeGLM.h.

Constructor & Destructor Documentation

◆ TimeIntegrationSchemeGLM()

LUE Nektar::LibUtilities::TimeIntegrationSchemeGLM::TimeIntegrationSchemeGLM ( std::string  variant,
size_t  order,
std::vector< NekDouble freeParams 
)
inlineprotected

Definition at line 105 of file TimeIntegrationSchemeGLM.h.

107 : TimeIntegrationScheme(variant, order, freeParams)
108 {
109 }
LUE TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)

◆ ~TimeIntegrationSchemeGLM()

Nektar::LibUtilities::TimeIntegrationSchemeGLM::~TimeIntegrationSchemeGLM ( )
inlineoverrideprotected

Definition at line 111 of file TimeIntegrationSchemeGLM.h.

112 {
113 }

Member Function Documentation

◆ InitializeSecondaryData()

LUE void Nektar::LibUtilities::TimeIntegrationSchemeGLM::InitializeSecondaryData ( TimeIntegrationAlgorithmGLM phase,
NekDouble  deltaT 
) const
inline

Definition at line 52 of file TimeIntegrationSchemeGLM.h.

54 {
55 v_InitializeSecondaryData(phase, deltaT);
56 }
virtual LUE void v_InitializeSecondaryData(TimeIntegrationAlgorithmGLM *phase, NekDouble deltaT) const

References v_InitializeSecondaryData().

Referenced by Nektar::LibUtilities::TimeIntegrationAlgorithmGLM::TimeIntegrate().

◆ v_GetFreeParams()

std::vector< NekDouble > Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetFreeParams ( ) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 57 of file TimeIntegrationSchemeGLM.cpp.

58{
59 ASSERTL0(!m_integration_phases.empty(), "No scheme")
60
61 return m_integration_phases.back()->m_freeParams;
62}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208
TimeIntegrationAlgorithmGLMVector m_integration_phases

References ASSERTL0, and m_integration_phases.

◆ v_GetIntegrationSchemeType()

TimeIntegrationSchemeType Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetIntegrationSchemeType ( ) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 64 of file TimeIntegrationSchemeGLM.cpp.

66{
67 ASSERTL0(!m_integration_phases.empty(), "No scheme")
68
69 return m_integration_phases.back()->m_schemeType;
70}

References ASSERTL0, and m_integration_phases.

◆ v_GetNumIntegrationPhases()

size_t Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetNumIntegrationPhases ( ) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 72 of file TimeIntegrationSchemeGLM.cpp.

73{
74 return m_integration_phases.size();
75}

References m_integration_phases.

◆ v_GetOrder()

size_t Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetOrder ( ) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 50 of file TimeIntegrationSchemeGLM.cpp.

51{
52 ASSERTL0(!m_integration_phases.empty(), "No scheme")
53
54 return m_integration_phases.back()->m_order;
55}

References ASSERTL0, and m_integration_phases.

◆ v_GetSolutionVector()

LUE const TripleArray & Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetSolutionVector ( ) const
inlineoverrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 73 of file TimeIntegrationSchemeGLM.h.

74 {
75 return m_solVector->GetSolutionVector();
76 }

References m_solVector.

◆ v_GetVariant()

std::string Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_GetVariant ( ) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 43 of file TimeIntegrationSchemeGLM.cpp.

44{
45 ASSERTL0(!m_integration_phases.empty(), "No scheme")
46
47 return m_integration_phases.back()->m_variant;
48}

References ASSERTL0, and m_integration_phases.

◆ v_InitializeScheme()

void Nektar::LibUtilities::TimeIntegrationSchemeGLM::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 80 of file TimeIntegrationSchemeGLM.cpp.

83{
84 for (int i = 0; i < m_integration_phases.size(); i++)
85 {
86 m_integration_phases[i]->InitializeScheme(op);
87 }
88
90 m_integration_phases.back()->InitializeData(deltaT, y_0, time);
91}

References m_integration_phases, and m_solVector.

◆ v_InitializeSecondaryData()

void Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_InitializeSecondaryData ( TimeIntegrationAlgorithmGLM phase,
NekDouble  deltaT 
) const
protectedvirtual

Reimplemented in Nektar::LibUtilities::EulerExponentialTimeIntegrationScheme.

Definition at line 107 of file TimeIntegrationSchemeGLM.cpp.

110{
111 ASSERTL0(false,
112 "No InitializeSecondaryData method for scheme " + GetFullName());
113}

References ASSERTL0, and Nektar::LibUtilities::TimeIntegrationScheme::GetFullName().

Referenced by InitializeSecondaryData().

◆ v_print()

void Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_print ( std::ostream &  os) const
overrideprotectedvirtual

Worker method to print details on the integration scheme.

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 118 of file TimeIntegrationSchemeGLM.cpp.

119{
120 os << "Time Integration Scheme: " << GetFullName() << std::endl
121 << " Has " << m_integration_phases.size() << " phase(s)"
122 << std::endl;
123
124 for (size_t i = 0; i < m_integration_phases.size(); i++)
125 {
126 os << " - " << m_integration_phases[i]->m_name << std::endl;
127 }
128}

References Nektar::LibUtilities::TimeIntegrationScheme::GetFullName(), and m_integration_phases.

◆ v_printFull()

void Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_printFull ( std::ostream &  os) const
overrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 130 of file TimeIntegrationSchemeGLM.cpp.

131{
132 os << "Time Integration Scheme: " << GetFullName() << std::endl
133 << " Has " << m_integration_phases.size() << " phase(s)"
134 << std::endl;
135
136 for (size_t i = 0; i < m_integration_phases.size(); i++)
137 {
138 os << " - " << m_integration_phases[i]->m_name << std::endl;
139
140 os << " - " << m_integration_phases[i] << std::endl;
141 }
142}

References Nektar::LibUtilities::TimeIntegrationScheme::GetFullName(), and m_integration_phases.

◆ v_SetSolutionVector()

LUE void Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_SetSolutionVector ( const size_t  Offset,
const DoubleArray y 
)
inlineoverrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 84 of file TimeIntegrationSchemeGLM.h.

86 {
87 m_solVector->SetSolutionVector(Offset, y);
88 }

References m_solVector.

◆ v_TimeIntegrate()

ConstDoubleArray & Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_TimeIntegrate ( const size_t  timestep,
const NekDouble  delta_t 
)
overrideprotectedvirtual

Worker method that actually does the time integration.

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 96 of file TimeIntegrationSchemeGLM.cpp.

98{
99 size_t nPhases = m_integration_phases.size();
100
102 m_integration_phases[std::min(timestep, nPhases - 1)];
103
104 return algorithm->TimeIntegrate(delta_t, m_solVector);
105}
std::shared_ptr< TimeIntegrationAlgorithmGLM > TimeIntegrationAlgorithmGLMSharedPtr

References m_integration_phases, and m_solVector.

◆ v_UpdateSolutionVector()

LUE TripleArray & Nektar::LibUtilities::TimeIntegrationSchemeGLM::v_UpdateSolutionVector ( )
inlineoverrideprotectedvirtual

Implements Nektar::LibUtilities::TimeIntegrationScheme.

Definition at line 78 of file TimeIntegrationSchemeGLM.h.

79 {
80 return m_solVector->UpdateSolutionVector();
81 }

References m_solVector.

Friends And Related Function Documentation

◆ operator<< [1/2]

LUE friend std::ostream & operator<< ( std::ostream &  os,
const TimeIntegrationSchemeGLM rhs 
)
friend

Definition at line 145 of file TimeIntegrationSchemeGLM.cpp.

146{
147 rhs.print(os);
148
149 return os;
150}

◆ operator<< [2/2]

LUE friend std::ostream & operator<< ( std::ostream &  os,
const TimeIntegrationSchemeGLMSharedPtr rhs 
)
friend

Definition at line 152 of file TimeIntegrationSchemeGLM.cpp.

154{
155 os << *rhs.get();
156
157 return os;
158}

Member Data Documentation

◆ m_integration_phases

TimeIntegrationAlgorithmGLMVector Nektar::LibUtilities::TimeIntegrationSchemeGLM::m_integration_phases
protected

Definition at line 115 of file TimeIntegrationSchemeGLM.h.

Referenced by Nektar::LibUtilities::AdamsBashforthTimeIntegrationScheme::AdamsBashforthTimeIntegrationScheme(), Nektar::LibUtilities::AdamsMoultonTimeIntegrationScheme::AdamsMoultonTimeIntegrationScheme(), Nektar::LibUtilities::BDFImplicitTimeIntegrationScheme::BDFImplicitTimeIntegrationScheme(), Nektar::LibUtilities::CNABTimeIntegrationScheme::CNABTimeIntegrationScheme(), Nektar::LibUtilities::DIRKTimeIntegrationScheme::DIRKTimeIntegrationScheme(), Nektar::LibUtilities::EulerExponentialTimeIntegrationScheme::EulerExponentialTimeIntegrationScheme(), Nektar::LibUtilities::EulerTimeIntegrationScheme::EulerTimeIntegrationScheme(), Nektar::LibUtilities::IMEXdirkTimeIntegrationScheme::IMEXdirkTimeIntegrationScheme(), Nektar::LibUtilities::IMEXGearTimeIntegrationScheme::IMEXGearTimeIntegrationScheme(), Nektar::LibUtilities::IMEXTimeIntegrationScheme::IMEXTimeIntegrationScheme(), Nektar::LibUtilities::MCNABTimeIntegrationScheme::MCNABTimeIntegrationScheme(), Nektar::LibUtilities::RungeKuttaTimeIntegrationScheme::RungeKuttaTimeIntegrationScheme(), Nektar::LibUtilities::EulerExponentialTimeIntegrationScheme::SetExponentialCoefficients(), v_GetFreeParams(), Nektar::LibUtilities::EulerTimeIntegrationScheme::v_GetFullName(), Nektar::LibUtilities::IMEXdirkTimeIntegrationScheme::v_GetFullName(), Nektar::LibUtilities::IMEXTimeIntegrationScheme::v_GetFullName(), v_GetIntegrationSchemeType(), v_GetNumIntegrationPhases(), v_GetOrder(), v_GetVariant(), v_InitializeScheme(), v_print(), v_printFull(), and v_TimeIntegrate().

◆ m_solVector

TimeIntegrationSolutionGLMSharedPtr Nektar::LibUtilities::TimeIntegrationSchemeGLM::m_solVector
protected