40#ifndef NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_IMEX_GEAR_TIME_INTEGRATION_SCHEME
41#define NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_IMEX_GEAR_TIME_INTEGRATION_SCHEME
43#define LUE LIB_UTILITIES_EXPORT
45#include <boost/core/ignore_unused.hpp>
57 std::vector<NekDouble> freeParams)
60 boost::ignore_unused(variant, order);
78 [[maybe_unused]] std::string variant, [[maybe_unused]]
size_t order,
79 std::vector<NekDouble> freeParams)
93 phase->m_schemeType =
eIMEX;
94 phase->m_variant =
"Gear";
97 std::string(
"IMEXGearOrder" + std::to_string(phase->m_order));
99 phase->m_numsteps = 4;
100 phase->m_numstages = 1;
105 constexpr NekDouble twothirds = 2.0 / 3.0;
108 phase->m_numstages, twothirds);
120 phase->m_B[0][0][0] = twothirds;
121 phase->m_B[1][2][0] = 1.0;
122 phase->m_U[0][0] = 2.0 * twothirds;
123 phase->m_U[0][1] = -0.5 * twothirds;
124 phase->m_U[0][2] = 2.0 * twothirds;
125 phase->m_U[0][3] = -twothirds;
127 phase->m_V[0][0] = 2.0 * twothirds;
128 phase->m_V[0][1] = -0.5 * twothirds;
129 phase->m_V[0][2] = 2.0 * twothirds;
130 phase->m_V[0][3] = -twothirds;
131 phase->m_V[1][0] = 1.0;
132 phase->m_V[3][2] = 1.0;
134 phase->m_numMultiStepValues = 2;
135 phase->m_numMultiStepImplicitDerivs = 0;
136 phase->m_numMultiStepExplicitDerivs = 2;
138 phase->m_timeLevelOffset[0] = 0;
139 phase->m_timeLevelOffset[1] = 1;
140 phase->m_timeLevelOffset[2] = 0;
141 phase->m_timeLevelOffset[3] = 1;
143 phase->CheckAndVerify();
149 return std::string(
"IMEX");
static std::string className
IMEXGearTimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
~IMEXGearTimeIntegrationScheme() override
LUE NekDouble v_GetTimeStability() const override
static std::string TimeIntegrationMethodLookupId
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
LUE std::string v_GetName() const override
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, size_t order, std::vector< NekDouble > freeParams)
Base class for GLM time integration schemes.
TimeIntegrationAlgorithmGLMVector m_integration_phases
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< TimeIntegrationAlgorithmGLM > TimeIntegrationAlgorithmGLMSharedPtr
@ eIMEX
Implicit Explicit General Linear Method.
std::vector< TimeIntegrationAlgorithmGLMSharedPtr > TimeIntegrationAlgorithmGLMVector
std::shared_ptr< TimeIntegrationScheme > TimeIntegrationSchemeSharedPtr