43 namespace LibUtilities
80 m_solVector(m_scheme->GetNsteps()),
81 m_t(m_scheme->GetNsteps())
87 int nvar = y.num_elements();
88 int npoints = y[0].num_elements();
89 int nMultiStepVals =
m_scheme->GetNmultiStepValues();
91 for(
int i = 1; i < nsteps; i++)
94 for(
int j = 0; j < nvar; j++)
98 if(i < nMultiStepVals)
100 m_t[i] = time - i*timestep*timeLevels[i];
116 ASSERTL1(y.num_elements()==
m_scheme->GetNsteps(),
"Amount of Entries does not match number of (multi-) steps");
121 unsigned int npoints):
123 m_solVector(m_scheme->GetNsteps()),
124 m_t(m_scheme->GetNsteps())
126 for(
int i = 0; i <
m_scheme->GetNsteps(); i++)
129 for(
int j = 0; j < nvar; j++)
138 m_solVector(m_scheme->GetNsteps()),
139 m_t(m_scheme->GetNsteps())
190 m_B[0][0][0] = 3.0/2.0;
203 m_timeLevelOffset[1] = 1;
222 m_U[0][1] = 23.0/12.0;
223 m_U[0][2] = -4.0/3.0;
224 m_U[0][3] = 5.0/12.0;
227 m_V[0][1] = 23.0/12.0;
228 m_V[0][2] = -4.0/3.0;
229 m_V[0][3] = 5.0/12.0;
238 m_timeLevelOffset[1] = 1;
239 m_timeLevelOffset[2] = 2;
240 m_timeLevelOffset[3] = 3;
290 m_timeLevelOffset[1] = 0;
309 m_B[0][0][0] = 2*third;
312 m_U[0][3] = -2*third;
317 m_V[0][3] = -2*third;
326 m_timeLevelOffset[1] = 1;
327 m_timeLevelOffset[2] = 0;
328 m_timeLevelOffset[3] = 1;
347 m_B[0][0][0] = 6*eleventh;
349 m_U[0][1] = -9*eleventh;
350 m_U[0][2] = 2*eleventh;
351 m_U[0][4] = -18*eleventh;
352 m_U[0][5] = 6*eleventh;
354 m_V[0][0] = 18*eleventh;
355 m_V[0][1] = -9*eleventh;
356 m_V[0][2] = 2*eleventh;
357 m_V[0][3] = 18*eleventh;
358 m_V[0][4] = -18*eleventh;
359 m_V[0][5] = 6*eleventh;
370 m_timeLevelOffset[1] = 1;
371 m_timeLevelOffset[2] = 2;
372 m_timeLevelOffset[3] = 0;
373 m_timeLevelOffset[4] = 1;
374 m_timeLevelOffset[5] = 2;
405 m_timeLevelOffset[1] = 0;
422 m_B[0][0][0] = 2*third;
437 m_timeLevelOffset[1] = 1;
507 m_B[0][0][0] = 1.0/6.0;
508 m_B[0][0][1] = 1.0/6.0;
509 m_B[0][0][2] = 2.0/3.0;
536 m_B[0][0][0] = 1.0/6.0;
537 m_B[0][0][1] = 1.0/3.0;
538 m_B[0][0][2] = 1.0/3.0;
539 m_B[0][0][3] = 1.0/6.0;
563 m_A[0][0][0] = lambda;
564 m_A[0][1][0] = 1.0 - lambda;
565 m_A[0][1][1] = lambda;
567 m_B[0][0][0] = 1.0 - lambda;
568 m_B[0][0][1] = lambda;
592 m_A[0][0][0] = lambda;
593 m_A[0][1][0] = 0.5 * (1.0 - lambda);
594 m_A[0][2][0] = 0.25 * (-6.0*lambda*lambda + 16.0*lambda - 1.0);
595 m_A[0][1][1] = lambda;
596 m_A[0][2][1] = 0.25 * ( 6.0*lambda*lambda - 20.0*lambda + 5.0);
597 m_A[0][2][2] = lambda;
599 m_B[0][0][0] = 0.25 * (-6.0*lambda*lambda + 16.0*lambda - 1.0);
600 m_B[0][0][1] = 0.25 * ( 6.0*lambda*lambda - 20.0*lambda + 5.0);
601 m_B[0][0][2] = lambda;
628 m_A[0][1][1] = lambda;
629 m_A[0][2][1] = 1.0 - lambda;
630 m_A[0][2][2] = lambda;
632 m_B[0][0][1] = 1.0 - lambda;
633 m_B[0][0][2] = lambda;
635 m_A[1][1][0] = lambda;
636 m_A[1][2][0] = delta;
637 m_A[1][2][1] = 1.0 - delta;
639 m_B[1][0][1] = 1.0 - lambda;
640 m_B[1][0][2] = lambda;
666 m_A[0][1][1] = lambda;
667 m_A[0][2][1] = 0.5 * (1.0 - lambda);
668 m_A[0][3][1] = 0.25 * (-6.0*lambda*lambda + 16.0*lambda - 1.0);
669 m_A[0][2][2] = lambda;
670 m_A[0][3][2] = 0.25 * ( 6.0*lambda*lambda - 20.0*lambda + 5.0);
671 m_A[0][3][3] = lambda;
673 m_B[0][0][1] = 0.25 * (-6.0*lambda*lambda + 16.0*lambda - 1.0);
674 m_B[0][0][2] = 0.25 * ( 6.0*lambda*lambda - 20.0*lambda + 5.0);
675 m_B[0][0][3] = lambda;
677 m_A[1][1][0] = 0.4358665215;
678 m_A[1][2][0] = 0.3212788860;
679 m_A[1][2][1] = 0.3966543747;
680 m_A[1][3][0] =-0.105858296;
681 m_A[1][3][1] = 0.5529291479;
682 m_A[1][3][2] = 0.5529291479;
684 m_B[1][0][1] = 0.25 * (-6.0*lambda*lambda + 16.0*lambda - 1.0);
685 m_B[1][0][2] = 0.25 * ( 6.0*lambda*lambda - 20.0*lambda + 5.0);
686 m_B[1][0][3] = lambda;
711 m_B[0][0][0] = secondth;
714 m_U[0][0] = 2*secondth;
715 m_U[0][2] = 3*secondth;
716 m_U[0][3] = -1*secondth;
718 m_V[0][0] = 2*secondth;
719 m_V[0][1] = secondth;
720 m_V[0][2] = 3*secondth;
721 m_V[0][3] = -1*secondth;
729 m_timeLevelOffset[1] = 0;
730 m_timeLevelOffset[2] = 0;
731 m_timeLevelOffset[3] = 1;
750 m_B[0][0][0] = twothirdth;
751 m_B[1][0][0] = twothirdth;
752 m_U[0][0] = 2*twothirdth;
753 m_U[0][1] = -0.5*twothirdth;
755 m_V[0][0] = 2*twothirdth;
756 m_V[0][1] = -0.5*twothirdth;
764 m_timeLevelOffset[1] = 1;
783 m_B[0][0][0] = sixthx;
787 m_U[0][1] = 6.0/16.0;
788 m_U[0][2] = 1.0/16.0;
793 m_V[0][1] = 6.0/16.0;
794 m_V[0][2] = 1.0/16.0;
805 m_timeLevelOffset[1] = 0;
806 m_timeLevelOffset[2] = 1;
807 m_timeLevelOffset[3] = 0;
808 m_timeLevelOffset[4] = 1;
829 m_A[0][1][1] = glambda;
830 m_A[0][2][1] = 1.0 - glambda;
831 m_A[0][2][2] = glambda;
833 m_B[0][0][1] = 1.0 - glambda;
834 m_B[0][0][2] = glambda;
836 m_A[1][1][0] = glambda;
837 m_A[1][2][0] = gdelta;
838 m_A[1][2][1] = 1.0 - gdelta;
840 m_B[1][0][0] = gdelta;
841 m_B[1][0][1] = 1.0 - gdelta;
867 m_A[0][1][1] = glambda;
868 m_A[0][2][1] = 1.0 - 2.0*glambda;
869 m_A[0][2][2] = glambda;
874 m_A[1][1][0] = glambda;
875 m_A[1][2][0] = glambda - 1.0;
876 m_A[1][2][1] = 2.0*(1-glambda);
964 m_A[0][1][1] = 1.0/2.0;
968 m_A[1][1][0] = 1.0/2.0;
994 m_A[0][1][1] = 1.0/2.0;
995 m_A[0][2][1] = 1.0/6.0;
996 m_A[0][2][2] = 1.0/2.0;
997 m_A[0][3][1] = -1.0/2.0;
998 m_A[0][3][2] = 1.0/2.0;
999 m_A[0][3][3] = 1.0/2.0;
1000 m_A[0][4][1] = 3.0/2.0;
1001 m_A[0][4][2] = -3.0/2.0;
1002 m_A[0][4][3] = 1.0/2.0;
1003 m_A[0][4][4] = 1.0/2.0;
1005 m_B[0][0][1] = 3.0/2.0;
1006 m_B[0][0][2] = -3.0/2.0;
1007 m_B[0][0][3] = 1.0/2.0;
1008 m_B[0][0][4] = 1.0/2.0;
1010 m_A[1][1][0] = 1.0/2.0;
1011 m_A[1][2][0] = 11.0/18.0;
1012 m_A[1][2][1] = 1.0/18.0;
1013 m_A[1][3][0] = 5.0/6.0;
1014 m_A[1][3][1] = -5.0/6.0;
1015 m_A[1][3][2] = 1.0/2.0;
1016 m_A[1][4][0] = 1.0/4.0;
1017 m_A[1][4][1] = 7.0/4.0;
1018 m_A[1][4][2] = 3.0/4.0;
1019 m_A[1][4][3] = -7.0/4.0;
1021 m_B[1][0][0] = 1.0/4.0;
1022 m_B[1][0][1] = 7.0/4.0;
1023 m_B[1][0][2] = 3.0/4.0;
1024 m_B[1][0][3] = -7.0/4.0;
1043 "Time integration scheme coefficients do not match its type");
1057 int IMEXdim =
A.num_elements();
1058 int dim =
A[0].GetRows();
1062 for(m = 0; m < IMEXdim; m++)
1064 for(i = 0; i < dim; i++)
1072 for(i = 0; i < dim; i++)
1074 for(j = i+1; j < dim; j++)
1079 ASSERTL1(
false,
"Fully Impplicit schemes cannnot be handled by the TimeIntegrationScheme class");
1087 ASSERTL1(
B.num_elements()==2,
"Coefficient Matrix B should have an implicit and explicit part for IMEX schemes");
1095 ASSERTL1(
false,
"This is not a proper IMEX scheme");
1099 return (vertype[0] == type);
1121 int nvar = y_0.num_elements();
1122 int npoints = y_0[0].num_elements();
1124 for(i = 0; i < nvar; i++)
1132 for(i = 0; i < nvar; i++)
1134 Blas::Dscal(npoints,timestep,f_y_0[i].
get(),1);
1136 y_out->SetDerivative(0,f_y_0,timestep);
1149 "Fully Implicit integration scheme cannot be handled by this routine.");
1151 int nvar = solvector->GetFirstDim ();
1152 int npoints = solvector->GetSecondDim();
1154 if( (solvector->GetIntegrationScheme()).
get() != this )
1190 unsigned int nMasterSchemeVals = solvector->GetNvalues();
1191 unsigned int nMasterSchemeDers = solvector->GetNderivs();
1204 for(n = 0; n < nCurSchemeVals; n++)
1210 y_n = solvector->GetValue ( curTimeLevels[n] );
1211 t_n = solvector->GetValueTime( curTimeLevels[n] );
1215 solvector_in->SetValue(curTimeLevels[n],y_n,t_n);
1217 for(n = nCurSchemeVals; n < nCurSchemeSteps; n++)
1222 dtFy_n = solvector->GetDerivative ( curTimeLevels[n] );
1226 solvector_in->SetDerivative(curTimeLevels[n],dtFy_n,timestep);
1235 solvector_in->GetTimeVector(),
1236 solvector_out->UpdateSolutionVector(),
1237 solvector_out->UpdateTimeVector(),op);
1251 bool CalcNewDeriv =
false;
1253 if( nMasterSchemeDers > 0 )
1255 if(nCurSchemeDers == 0)
1257 CalcNewDeriv =
true;
1261 if( masterTimeLevels[nMasterSchemeVals] < curTimeLevels[nCurSchemeVals] )
1263 CalcNewDeriv =
true;
1270 int newDerivTimeLevel = masterTimeLevels[nMasterSchemeVals];
1277 if (newDerivTimeLevel == 0)
1279 y_n = solvector_out->GetValue(0);
1280 t_n = solvector_out->GetValueTime(0);
1284 else if( newDerivTimeLevel == 1 )
1286 y_n = solvector->GetValue(0);
1287 t_n = solvector->GetValueTime(0);
1291 ASSERTL1(
false,
"Problems with initialising scheme");
1295 for(j = 0; j < nvar; j++)
1304 for(j = 0; j < nvar; j++)
1312 solvector->RotateSolutionVector();
1314 solvector->SetDerivative(newDerivTimeLevel,f_n,timestep);
1320 solvector->RotateSolutionVector();
1327 for(n = 0; n < nCurSchemeVals; n++)
1333 y_n = solvector_out->GetValue ( curTimeLevels[n] );
1334 t_n = solvector_out->GetValueTime( curTimeLevels[n] );
1337 solvector->SetValue(curTimeLevels[n],y_n,t_n);
1340 for(n = nCurSchemeVals; n < nCurSchemeSteps; n++)
1346 dtFy_n = solvector_out->GetDerivative ( curTimeLevels[n] );
1350 solvector->SetDerivative(curTimeLevels[n],dtFy_n,timestep);
1360 solvector->GetTimeVector(),
1361 solvector_new->UpdateSolutionVector(),
1362 solvector_new->UpdateTimeVector(),op);
1364 solvector = solvector_new;
1366 return solvector->GetSolution();
1386 for(j = 0; j <
m_nvar; j++)
1410 for(j = 0; j <
m_nvar; j++)
1424 for(j = 0; j <
m_nvar; j++)
1436 for(j = 0; j <
m_nvar; j++)
1448 for(j = 0; j <
m_nvar; j++)
1464 for(k = 0; k <
m_nvar; k++)
1477 for(k = 0; k <
m_nvar; k++)
1490 m_T =
A(i,0)*timestep;
1492 for( j = 1; j < i; j++ )
1494 for(k = 0; k <
m_nvar; k++)
1506 m_T +=
A(i,j)*timestep;
1513 for(k = 0; k <
m_nvar; k++)
1518 m_T +=
U(i,j)*t_old[j];
1527 m_T= t_old[0]+timestep;
1532 for(
int j=0; j<=i; ++j)
1534 m_T +=
A(i,j)*timestep;
1540 for(k = 0; k <
m_nvar; k++)
1546 else if(type ==
eIMEX)
1550 m_T= t_old[0]+timestep;
1555 for(
int j=0; j<=i; ++j)
1557 m_T +=
A(i,j)*timestep;
1565 for(k = 0; k <
m_nvar; k++)
1569 m_F[i][k],1,
m_F[i][k],1);
1597 for(k = 0; k <
m_nvar; k++)
1602 if (m_numstages==1 && type ==
eIMEX)
1604 t_new[0] = t_old[0]+timestep;
1608 t_new[0] =
B(0,0)*timestep;
1611 t_new[0] +=
B(0,j)*timestep;
1615 t_new[0] +=
V(0,j)*t_old[j];
1626 for(k = 0; k <
m_nvar; k++)
1638 if(m_numstages != 1 || type !=
eIMEX)
1640 t_new[i] =
B(i,0)*timestep;
1646 for(k = 0; k <
m_nvar; k++)
1649 y_new[i][k],1,y_new[i][k],1);
1658 if(m_numstages != 1 || type !=
eIMEX)
1660 t_new[i] +=
B(i,j)*timestep;
1668 for(k = 0; k <
m_nvar; k++)
1671 y_new[i][k],1,y_new[i][k],1);
1673 if(m_numstages != 1 || type !=
eIMEX)
1675 t_new[i] +=
V(i,j)*t_old[j];
1698 for(m = 0; m <
A.num_elements(); m++)
1736 for(m = 0; m <
A.num_elements(); m++)
1770 ASSERTL1(y_old[0]. num_elements()==y_new[0]. num_elements(),
"Non-matching number of variables.");
1771 ASSERTL1(y_old[0][0].num_elements()==y_new[0][0].num_elements(),
"Non-matching number of coefficients.");
1792 int osprecision = 6;
1795 os <<
"- number of steps: " << r << endl;
1796 os <<
"- number of stages: " << s << endl;
1798 os <<
"General linear method tableau: " << endl;
1800 for(i = 0; i < s; i++)
1802 for(j = 0; j < s; j++)
1805 os.precision(osprecision);
1806 os << right << rhs.
A(i,j) <<
" ";
1811 for(j = 0; j < s; j++)
1814 os.precision(osprecision);
1815 os << right << rhs.
A_IMEX(i,j) <<
" ";
1820 for(j = 0; j < r; j++)
1823 os.precision(osprecision);
1824 os << right << rhs.
U(i,j);
1828 int imexflag = (type ==
eIMEX)?2:1;
1829 for(
int i = 0; i < (r+imexflag*s)*(oswidth+1)+imexflag*2-1; i++)
1834 for(i = 0; i < r; i++)
1836 for(j = 0; j < s; j++)
1839 os.precision(osprecision);
1840 os << right << rhs.
B(i,j) <<
" ";
1845 for(j = 0; j < s; j++)
1848 os.precision(osprecision);
1849 os << right << rhs.
B_IMEX(i,j) <<
" ";
1854 for(j = 0; j < r; j++)
1857 os.precision(osprecision);
1858 os << right << rhs.
V(i,j);
NekDouble B_IMEX(const unsigned int i, const unsigned int j) const
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
NekDouble U(const unsigned int i, const unsigned int j) const
NekDouble B(const unsigned int i, const unsigned int j) const
bool m_firstStageEqualsOldSolution
BDF multi-step scheme of order 1 (implicit)
Array< OneD, unsigned int > m_timeLevelOffset
Adams-Bashforth Forward multi-step scheme of order 2.
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
Array< OneD, Array< TwoD, NekDouble > > m_B
int m_nvar
bool to identify if array has been initialised
Runge-Kutta multi-stage scheme 4th order explicit (old name)
Implicit-Explicit Midpoint IMEX DIRK(1,2,2)
void DoImplicitSolve(InArrayType &inarray, OutArrayType &outarray, const NekDouble time, const NekDouble lambda) const
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
const char *const TimeIntegrationSchemeTypeMap[]
DoubleArray m_tmp
Array containing the stage values.
Classical RungeKutta4 method (new name for eClassicalRungeKutta4)
NekDouble V(const unsigned int i, const unsigned int j) const
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
Formally explicit scheme.
TimeIntegrationSolutionSharedPtr InitializeScheme(const NekDouble timestep, ConstDoubleArray &y_0, const NekDouble time, const TimeIntegrationSchemeOperators &op)
This function initialises the time integration scheme.
L-stable, four stage, third order IMEX DIRK(4,4,3)
Forward-Backward Euler IMEX DIRK(1,2,1)
Implicit Explicit General Linear Method.
const char *const TimeIntegrationMethodMap[]
TimeIntegrationSchemeKey m_schemeKey
void DoOdeRhs(InArrayType &inarray, OutArrayType &outarray, const NekDouble time) const
Nonlinear SSP RungeKutta3 explicit.
bool operator()(const TimeIntegrationSchemeKey &lhs, const TimeIntegrationSchemeKey &rhs) const
DoubleArray m_Y
The size of inner data which is stored for reuse.
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)
Adams-Moulton Forward multi-step scheme of order 2.
Adams-Bashforth Forward multi-step scheme of order 3.
bool operator==(const BasisKey &x, const BasisKey &y)
unsigned int GetNstages(void) const
Crank-Nicolson/Adams-Bashforth Order 2 (CNAB)
int GetSecondDim(ConstTripleArray &y) const
TimeIntegrationSchemeSharedPtr m_scheme
IMEX 2nd order scheme using Backward Different Formula & Extrapolation.
std::ostream & operator<<(std::ostream &os, const BasisKey &rhs)
TripleArray m_F
explicit right hand side of each stage equation
Diagonally implicit scheme (e.g. the DIRK schemes)
Classical RungeKutta2 method (new name for eMidpoint)
TimeIntegrationSchemeType m_schemeType
bool CheckIfFirstStageEqualsOldSolution(const Array< OneD, const Array< TwoD, NekDouble > > &A, const Array< OneD, const Array< TwoD, NekDouble > > &B, const Array< TwoD, const NekDouble > &U, const Array< TwoD, const NekDouble > &V) const
static const NekDouble kNekZeroTol
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Adams-Moulton Forward multi-step scheme of order 1.
NekDouble A_IMEX(const unsigned int i, const unsigned int j) const
Adams-Bashforth Forward multi-step scheme of order 1.
const TimeIntegrationSchemeKey & GetIntegrationSchemeKey() const
TimeIntegrationSolution(const TimeIntegrationSchemeKey &key, const DoubleArray &y, const NekDouble time, const NekDouble timestep)
int GetFirstDim(ConstTripleArray &y) const
L-stable, three stage, third order IMEX DIRK(3,4,3)
int m_npoints
The number of variables in integration scheme.
Nonlinear SSP RungeKutta2 explicit (surrogate for eRungeKutta2_ImprovedEuler)
ConstDoubleArray & TimeIntegrate(const NekDouble timestep, TimeIntegrationSolutionSharedPtr &y, const TimeIntegrationSchemeOperators &op)
Explicit integration of an ODE.
bool CheckTimeIntegrateArguments(const NekDouble timestep, ConstTripleArray &y_old, ConstSingleArray &t_old, TripleArray &y_new, SingleArray &t_new, const TimeIntegrationSchemeOperators &op) const
Improved RungeKutta2 explicit (old name meaning Heun's method)
Forward-Backward Euler IMEX DIRK(1,1,1)
Array< OneD, Array< OneD, NekDouble > > DoubleArray
NekDouble A(const unsigned int i, const unsigned int j) const
TimeIntegrationMethod GetIntegrationMethod() const
void DoProjection(InArrayType &inarray, OutArrayType &outarray, const NekDouble time) const
bool operator<(const BasisKey &lhs, const BasisKey &rhs)
TimeIntegrationSchemeType GetIntegrationSchemeType() const
boost::shared_ptr< TimeIntegrationScheme > TimeIntegrationSchemeSharedPtr
unsigned int m_numMultiStepDerivs
static boost::shared_ptr< TimeIntegrationScheme > Create(const TimeIntegrationSchemeKey &key)
unsigned int m_numMultiStepValues
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
Array< OneD, NekDouble > m_t
BDF multi-step scheme of order 2 (implicit)
L-stable, two stage, second order IMEX DIRK(2,2,2)
TimeIntegrationMethod m_method
integration method
bool VerifyIntegrationSchemeType(TimeIntegrationSchemeType type, const Array< OneD, const Array< TwoD, NekDouble > > &A, const Array< OneD, const Array< TwoD, NekDouble > > &B, const Array< TwoD, const NekDouble > &U, const Array< TwoD, const NekDouble > &V) const
Diagonally Implicit Runge Kutta scheme of order 3.
IMEX 3rd order scheme using Backward Different Formula & Extrapolation.
L-stable, three stage, third order IMEX DIRK(3,4,3)
Diagonally Implicit Runge Kutta scheme of order 3.
boost::shared_ptr< TimeIntegrationSolution > TimeIntegrationSolutionSharedPtr
bool RegisterGlobalCreator(const CreateFuncType &createFunc)
Register the Global Create Function. The return value is just to facilitate calling statically...
L-stable, two stage, third order IMEX DIRK(2,3,3)
unsigned int GetNsteps(void) const
bool m_lastStageEqualsNewSolution
bool CheckIfLastStageEqualsNewSolution(const Array< OneD, const Array< TwoD, NekDouble > > &A, const Array< OneD, const Array< TwoD, NekDouble > > &B, const Array< TwoD, const NekDouble > &U, const Array< TwoD, const NekDouble > &V) const
TimeIntegrationMethod GetIntegrationMethod() const
Array< OneD, Array< TwoD, NekDouble > > m_A
Modified Crank-Nicolson/Adams-Bashforth Order 2 (MCNAB)
IMEX 1st order scheme using Euler Backwards/Euler Forwards.
midpoint method (old name)
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
void Zero(int n, T *x, const int incx)
Zero vector.
NekDouble m_T
Used to store the Explicit stage derivative of IMEX schemes.
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > TripleArray
Array< TwoD, NekDouble > m_U
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
TripleArray m_F_IMEX
Array corresponding to the stage Derivatives.
TimeIntegrationSchemeType
Array< TwoD, NekDouble > m_V