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
53 namespace LibUtilities
63 std::vector<NekDouble> freeParams)
70 "BDFImplicit Time integration scheme bad order (1-4): " +
71 std::to_string(order));
75 for (
unsigned int n = 0; n < order; ++n)
117 "BDFImplicit Time integration scheme bad order: " +
118 std::to_string(order));
127 std::string variant,
unsigned int order,
128 std::vector<NekDouble> freeParams)
132 variant, order, freeParams);
141 return std::string(
"BDFImplicit");
162 { { 0., 0., 0., 0. },
166 { 4./ 3., -1./ 3., 0., 0. },
168 { 18./11., -9./11., 2./11., 0. },
170 { 48./25., -36./25., 16./25., -3./25. } };
174 phase->m_order = order;
176 std::string(
"BDFImplicitOrder" + std::to_string(phase->m_order));
178 phase->m_numsteps = phase->m_order;
179 phase->m_numstages = 1;
199 phase->m_A[0][0][0] = ABcoefficients[phase->m_order];
200 phase->m_B[0][0][0] = ABcoefficients[phase->m_order];
203 for (
int n = 0; n < phase->m_order; ++n)
205 phase->m_U[0][n] = UVcoefficients[phase->m_order][n];
206 phase->m_V[0][n] = UVcoefficients[phase->m_order][n];
210 for (
int n = 1; n < phase->m_order; ++n)
212 phase->m_V[n][n - 1] = 1.0;
215 phase->m_numMultiStepValues = phase->m_order;
216 phase->m_numMultiStepDerivs = 0;
220 for (
int n = 0; n < phase->m_order; ++n)
222 phase->m_timeLevelOffset[n] = n;
225 phase->CheckAndVerify();
238 std::vector<NekDouble> freeParams)
241 boost::ignore_unused(variant);
242 boost::ignore_unused(order);
246 std::string variant,
unsigned int order,
247 std::vector<NekDouble> freeParams)
249 boost::ignore_unused(variant);
250 boost::ignore_unused(order);
268 std::vector<NekDouble> freeParams)
271 boost::ignore_unused(variant);
272 boost::ignore_unused(order);
276 std::string variant,
unsigned int order,
277 std::vector<NekDouble> freeParams)
279 boost::ignore_unused(variant);
280 boost::ignore_unused(order);
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
BDFImplicitOrder1TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static std::string className
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
BDFImplicitOrder2TimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static std::string className
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static std::string className
virtual LUE NekDouble GetTimeStability() const
BDFImplicitTimeIntegrationScheme(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
virtual ~BDFImplicitTimeIntegrationScheme()
virtual LUE std::string GetName() const
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, unsigned int order)
static TimeIntegrationSchemeSharedPtr create(std::string variant, unsigned int order, std::vector< NekDouble > freeParams)
static LUE void SetupSchemeData(TimeIntegrationAlgorithmGLMSharedPtr &phase, unsigned int 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
@ 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.