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