41#ifndef NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_BDF_TIME_INTEGRATION_SCHEME
42#define NEKTAR_LIB_UTILITIES_TIME_INTEGRATION_BDF_TIME_INTEGRATION_SCHEME
44#define LUE LIB_UTILITIES_EXPORT
62 std::vector<NekDouble> freeParams)
67 "BDFImplicit Time integration scheme bad order (1-4): " +
68 std::to_string(order));
72 for (
size_t n = 0; n < order; ++n)
115 "BDFImplicit Time integration scheme bad order: " +
116 std::to_string(order));
125 std::string variant,
size_t order, std::vector<NekDouble> freeParams)
129 variant, order, freeParams);
139 constexpr NekDouble ABcoefficients[5] = {0.,
146 constexpr NekDouble UVcoefficients[5][4] =
147 { { 0., 0., 0., 0. },
151 { 4./ 3., -1./ 3., 0., 0. },
153 { 18./11., -9./11., 2./11., 0. },
155 { 48./25., -36./25., 16./25., -3./25. } };
159 phase->m_order = order;
161 std::string(
"BDFImplicitOrder" + std::to_string(phase->m_order));
163 phase->m_numsteps = phase->m_order;
164 phase->m_numstages = 1;
181 phase->m_A[0][0][0] = ABcoefficients[phase->m_order];
182 phase->m_B[0][0][0] = ABcoefficients[phase->m_order];
185 for (
size_t n = 0; n < phase->m_order; ++n)
187 phase->m_U[0][n] = UVcoefficients[phase->m_order][n];
188 phase->m_V[0][n] = UVcoefficients[phase->m_order][n];
192 for (
size_t n = 1; n < phase->m_order; ++n)
194 phase->m_V[n][n - 1] = 1.0;
197 phase->m_numMultiStepValues = phase->m_order;
198 phase->m_numMultiStepImplicitDerivs = 0;
199 phase->m_numMultiStepExplicitDerivs = 0;
201 for (
size_t n = 0; n < phase->m_order; ++n)
203 phase->m_timeLevelOffset[n] = n;
206 phase->CheckAndVerify();
212 return std::string(
"BDFImplicit");
229 std::vector<NekDouble> freeParams)
232 boost::ignore_unused(variant);
233 boost::ignore_unused(order);
237 std::string variant,
size_t order, std::vector<NekDouble> freeParams)
239 boost::ignore_unused(variant);
240 boost::ignore_unused(order);
260 std::vector<NekDouble> freeParams)
263 boost::ignore_unused(variant);
264 boost::ignore_unused(order);
268 std::string variant,
size_t order, std::vector<NekDouble> freeParams)
270 boost::ignore_unused(variant);
271 boost::ignore_unused(order);
291 std::vector<NekDouble> freeParams)
294 boost::ignore_unused(variant);
295 boost::ignore_unused(order);
299 std::string variant,
size_t order, std::vector<NekDouble> freeParams)
301 boost::ignore_unused(variant);
302 boost::ignore_unused(order);
322 std::vector<NekDouble> freeParams)
325 boost::ignore_unused(variant);
326 boost::ignore_unused(order);
330 std::string variant,
size_t order, std::vector<NekDouble> freeParams)
332 boost::ignore_unused(variant);
333 boost::ignore_unused(order);
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
static std::string TimeIntegrationMethodLookupId
BDFImplicitOrder1TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static std::string className
static std::string className
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
BDFImplicitOrder2TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static std::string TimeIntegrationMethodLookupId
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static std::string className
static std::string TimeIntegrationMethodLookupId
BDFImplicitOrder3TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
BDFImplicitOrder4TimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static std::string className
static std::string TimeIntegrationMethodLookupId
static std::string className
virtual LUE std::string v_GetName() const override
virtual ~BDFImplicitTimeIntegrationScheme()
BDFImplicitTimeIntegrationScheme(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static TimeIntegrationSchemeSharedPtr create(std::string variant, size_t order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, size_t order)
virtual LUE NekDouble v_GetTimeStability() const override
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, size_t order)
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
@ eDiagonallyImplicit
Diagonally implicit scheme (e.g. the DIRK schemes)
std::vector< TimeIntegrationAlgorithmGLMSharedPtr > TimeIntegrationAlgorithmGLMVector
std::shared_ptr< TimeIntegrationScheme > TimeIntegrationSchemeSharedPtr
The above copyright notice and this permission notice shall be included.