39 #include <boost/algorithm/string.hpp> 
   48     string EulerCFE::className = 
 
   50         "EulerCFE", EulerCFE::create, 
 
   51         "Euler equations in conservative variables without " 
   52         "artificial diffusion.");
 
   64         if(
m_session->DefinesSolverInfo(
"PROBLEMTYPE"))
 
   67             std::string ProblemTypeStr = 
 
   90             ASSERTL0(
false, 
"Implicit CFE not set up.");
 
  115         bool        dumpInitialConditions,
 
  150         int nvariables = inarray.num_elements();
 
  158         for (i = 0; i < nvariables; ++i)
 
  164         std::vector<SolverUtils::ForcingSharedPtr>::const_iterator x;
 
  167             (*x)->Apply(
m_fields, inarray, outarray, time);
 
  181         int nvariables = inarray.num_elements();
 
  190                 for(i = 0; i < nvariables; ++i)
 
  200                 ASSERTL0(
false, 
"No Continuous Galerkin for Euler equations");
 
  204                 ASSERTL0(
false, 
"Unknown projection scheme");
 
  226         int nvariables = inarray.num_elements();
 
  230         for (
int i = 0; i < nvariables; ++i)
 
  233             m_fields[i]->ExtractTracePhys(inarray[i], Fwd[i]);
 
  236         std::string userDefStr;
 
  237         int nreg = 
m_fields[0]->GetBndConditions().num_elements();
 
  239         for (
int n = 0; n < nreg; ++n)
 
  241             userDefStr = 
m_fields[0]->GetBndConditions()[n]->GetUserDefined();
 
  242             if(!userDefStr.empty())
 
  244                 if(boost::iequals(userDefStr,
"WallViscous"))
 
  246                     ASSERTL0(
false, 
"WallViscous is a wrong bc for the " 
  249                 else if(boost::iequals(userDefStr, 
"IsentropicVortex"))
 
  254                 else if (boost::iequals(userDefStr,
"RinglebFlow"))
 
  261                     SetCommonBC(userDefStr, n, time, cnt, Fwd, inarray);
 
  266             cnt += 
m_fields[0]->GetBndCondExpansions()[n]->GetExpSize(); 
 
  307         int nq = x.num_elements();
 
  317         NekDouble fac = 1.0/(16.0*gamma*M_PI*M_PI);
 
  326         for (
int i = 0; i < nq; ++i)
 
  328             xbar      = x[i] - u0*time - x0;
 
  329             ybar      = y[i] - v0*time - y0;
 
  330             r         = sqrt(xbar*xbar + ybar*ybar);
 
  331             tmp       = beta*exp(1-r*r);
 
  332             u[0][i+o] = pow(1.0 - (gamma-1.0)*tmp*tmp*fac, 1.0/(gamma-1.0));
 
  333             u[1][i+o] = u[0][i+o]*(u0 - tmp*ybar/(2*M_PI));
 
  334             u[2][i+o] = u[0][i+o]*(v0 + tmp*xbar/(2*M_PI));
 
  335             u[
m_spacedim+1][i+o] = pow(u[0][i+o], gamma)/(gamma-1.0) +
 
  336             0.5*(u[1][i+o]*u[1][i+o] + u[2][i+o]*u[2][i+o]) / u[0][i+o];
 
  387         for(
int i = 0; i < 
m_fields.num_elements(); ++i)
 
  406         int nvariables      = physarray.num_elements();
 
  410         e_max = 
m_fields[0]->GetBndCondExpansions()[bcRegion]->GetExpSize();
 
  412         for(
int e = 0; e < e_max; ++e)
 
  415             GetBndCondExpansions()[bcRegion]->GetExp(e)->GetTotPoints();
 
  417             GetBndCondExpansions()[bcRegion]->GetPhys_Offset(e);
 
  418             id2 = 
m_fields[0]->GetTrace()->GetPhys_Offset(bndTraceMap[cnt++]);
 
  424             m_fields[0]->GetBndCondExpansions()[bcRegion]->
 
  425             GetExp(e)->GetCoords(x, y, z);
 
  429             for (
int i = 0; i < nvariables; ++i)
 
  432                              &(
m_fields[i]->GetBndCondExpansions()[bcRegion]->
 
  433                              UpdatePhys())[id1], 1);
 
  458         NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
 
  472         NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
 
  474         for (
int i = 0; i < nTotQuadPoints; ++i)
 
  476             while ((abs(errV) > toll) || (abs(errTheta) > toll))
 
  480                 c    = sqrt(1.0 - gamma_1_2 * VV);
 
  484                 J    = 1.0 / c + 1.0 / (3.0 * c * c * c) + 
 
  485                 1.0 / (5.0 * c * c * c * c * c) - 
 
  486                 0.5 * log((1.0 + c) / (1.0 - c));
 
  488                 r    = pow(c, 1.0 / gamma_1_2);
 
  489                 xi   = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
 
  490                 yi   = phi / (r * V) * sqrt(1.0 - VV * pp);
 
  491                 par1 = 25.0 - 5.0 * VV;
 
  497                 J11  = 39062.5 / pow(par1, 3.5) * (1.0 / VV - 2.0 / VV * ss) * 
 
  498                 V + 1562.5 / pow(par1, 2.5) * (-2.0 / (VV * V) + 4.0 / 
 
  499                 (VV * V) * ss) + 12.5 / pow(par1, 1.5) * V + 312.5 / 
 
  500                 pow(par1, 2.5) * V + 7812.5 / pow(par1, 3.5) * V - 
 
  501                 0.25 * (-1.0 / pow(par1, 0.5) * V/(1.0 - 0.2 * 
 
  502                 pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) / 
 
  503                 pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) / 
 
  504                 pow(par1, 0.5) * V) / (1.0 + 0.2 * pow(par1, 0.5)) * 
 
  505                 (1.0 - 0.2 * pow(par1, 0.5));
 
  507                 J12  = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
 
  508                 J21  = -6250.0 / (VV * V) * sint / 
 
  509                 pow(par1, 2.5) * pow((1.0 - ss), 0.5) + 
 
  510                 78125.0 / V * sint / pow(par1, 3.5) * 
 
  511                 pow((1.0 - ss), 0.5);
 
  514                 if(abs(y[i])<toll && abs(cos(theta))<toll)
 
  516                     J22 = -39062.5 / pow(par1, 3.5) / V + 3125 / 
 
  517                     pow(par1, 2.5) / (VV * V) + 12.5 / pow(par1, 1.5) * 
 
  518                     V + 312.5 / pow(par1, 2.5) * V + 7812.5 / 
 
  519                     pow(par1, 3.5) * V - 0.25 * (-1.0 / pow(par1, 0.5) *
 
  520                     V / (1.0 - 0.2 * pow(par1, 0.5)) - (1.0 + 0.2 * 
 
  521                     pow(par1, 0.5)) / pow((1.0 - 0.2 * 
 
  522                     pow(par1, 0.5)), 2.0) / pow(par1, 0.5) * V) / 
 
  523                     (1.0 + 0.2 * pow(par1, 0.5)) * (1.0 - 0.2 * 
 
  527                     dV      = -1.0 / J22 * Fx;
 
  533                     J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) * 
 
  534                     pow((1.0 - ss), 0.5) - 3125.0 / VV * ss / 
 
  535                     pow(par1, 2.5) / pow((1.0 - ss), 0.5) * cos(theta);
 
  537                     det = -1.0 / (J11 * J22 - J12 * J21);
 
  540                     dV     = det * ( J22 * Fx - J12 * Fy);
 
  541                     dtheta = det * (-J21 * Fx + J11 * Fy);
 
  545                 theta = theta + dtheta;
 
  548                 errTheta = abs(dtheta);
 
  552             c = sqrt(1.0 - gamma_1_2 * VV);
 
  553             r = pow(c, 1.0 / gamma_1_2);
 
  556             rhou[i] = rho[i] * V * cos(theta);
 
  557             rhov[i] = rho[i] * V * sin(theta);
 
  558             P       = (c * c) * rho[i] / gamma;
 
  559             E[i]    = P / (gamma - 1.0) + 0.5 * 
 
  560             (rhou[i] * rhou[i] / rho[i] + rhov[i] * rhov[i] / rho[i]);
 
  584                 ASSERTL0(
false, 
"Error in variable number!");
 
  595         int nbnd    = 
m_fields[0]->GetBndConditions().num_elements();
 
  598         for(
int bcRegion=0; bcRegion < nbnd; ++bcRegion)
 
  602             GetBndCondExpansions()[bcRegion]->GetNpoints();
 
  613             m_fields[0]->GetBndCondExpansions()[bcRegion]->
 
  614             GetCoords(x0, x1, x2);
 
  617             NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
 
  631             NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
 
  634             for (
int j = 0; j < npoints; j++)
 
  636                 while ((abs(errV) > toll) || (abs(errTheta) > toll))
 
  641                     c    = sqrt(1.0 - gamma_1_2 * VV);
 
  645                     J    = 1.0 / c + 1.0 / (3.0 * c * c * c) + 
 
  646                     1.0 / (5.0 * c * c * c * c * c) - 
 
  647                     0.5 * log((1.0 + c) / (1.0 - c));
 
  649                     r    = pow(c, 1.0 / gamma_1_2);
 
  650                     xi   = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
 
  651                     yi   = phi / (r * V) * sqrt(1.0 - VV * pp);
 
  652                     par1 = 25.0 - 5.0 * VV;
 
  658                     J11 = 39062.5 / pow(par1, 3.5) * 
 
  659                     (1.0 / VV - 2.0 / VV * ss) * V + 
 
  660                     1562.5 / pow(par1, 2.5) * (-2.0 / 
 
  661                     (VV * V) + 4.0 / (VV * V) * ss) + 
 
  662                     12.5 / pow(par1, 1.5) * V + 
 
  663                     312.5 / pow(par1, 2.5) * V + 
 
  664                     7812.5 / pow(par1, 3.5) * V - 
 
  665                     0.25 * (-1.0 / pow(par1, 0.5) * V / 
 
  666                     (1.0 - 0.2 * pow(par1, 0.5)) - (1.0 + 0.2 * 
 
  667                     pow(par1, 0.5)) / pow((1.0 - 0.2 * 
 
  668                     pow(par1, 0.5)), 2.0) / 
 
  669                     pow(par1, 0.5) * V) / 
 
  670                     (1.0 + 0.2 * pow(par1, 0.5)) * 
 
  671                     (1.0 - 0.2 * pow(par1, 0.5));
 
  673                     J12 = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
 
  674                     J21 = -6250.0 / (VV * V) * sint / pow(par1, 2.5) * 
 
  675                     pow((1.0 - ss), 0.5) + 78125.0 / V * sint / 
 
  676                     pow(par1, 3.5) * pow((1.0 - ss), 0.5);
 
  679                     if (abs(x1[j]) < toll && abs(cos(theta)) < toll)
 
  682                         J22 = -39062.5 / pow(par1, 3.5) / V +
 
  683                         3125 / pow(par1, 2.5) / (VV * V) + 12.5 / 
 
  684                         pow(par1, 1.5) * V + 312.5 / pow(par1, 2.5) * V + 
 
  685                         7812.5 / pow(par1, 3.5) * V - 
 
  686                         0.25 * (-1.0 / pow(par1, 0.5) * V / 
 
  687                         (1.0 - 0.2 * pow(par1, 0.5)) - 
 
  688                         (1.0 + 0.2 * pow(par1, 0.5)) / 
 
  689                         pow((1.0 - 0.2*  pow(par1, 0.5)), 2.0) / 
 
  691                         (1.0 + 0.2 * pow(par1, 0.5)) * 
 
  692                         (1.0 - 0.2 * pow(par1, 0.5));
 
  695                         dV     = -1.0 / J22 * Fx;
 
  702                         J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) * 
 
  703                         pow((1.0 - ss), 0.5) - 3125.0 / VV * ss / 
 
  704                         pow(par1, 2.5) / pow((1.0 - ss), 0.5) * 
 
  707                         det = -1.0 / (J11 * J22 - J12 * J21);
 
  710                         dV     = det * ( J22 * Fx - J12 * Fy);
 
  711                         dtheta = det * (-J21 * Fx + J11 * Fy);
 
  715                     theta = theta + dtheta;
 
  718                     errTheta = abs(dtheta);
 
  722                 c        = sqrt(1.0 - gamma_1_2 * VV);
 
  723                 rho[j]   = pow(c, 1.0 / gamma_1_2) * exp(-1.0);
 
  724                 rhou[j]  = rho[j] * V * cos(theta) * exp(-1.0);
 
  725                 rhov[j]  = rho[j] * V * sin(theta) * exp(-1.0);
 
  726                 P        = (c * c) * rho[j] / gamma;
 
  727                 E[j]     = P / (gamma - 1.0) + 0.5 * 
 
  729                 rho[j] + rhov[j] * rhov[j] / rho[j]);
 
  733                 V        = kExt * sin(theta);
 
  738             m_fields[0]->GetBndCondExpansions()[bcRegion]->SetPhys(rho);
 
  739             m_fields[1]->GetBndCondExpansions()[bcRegion]->SetPhys(rhou);
 
  740             m_fields[2]->GetBndCondExpansions()[bcRegion]->SetPhys(rhov);
 
  741             m_fields[3]->GetBndCondExpansions()[bcRegion]->SetPhys(E);
 
  744             for(
int i = 0; i < 
m_fields.num_elements(); ++i)
 
  746                 m_fields[i]->GetBndCondExpansions()[bcRegion]->
 
  747                 FwdTrans_BndConstrained(
 
  748                     m_fields[i]->GetBndCondExpansions()[bcRegion]->
 
  750                                         m_fields[i]->GetBndCondExpansions()[bcRegion]->
 
  768         for(
int j = 0; j < nq; j++)
 
  779             for (
int bcRegion = 0; bcRegion < nbnd; ++bcRegion)
 
  783                 GetBndCondExpansions()[bcRegion]->GetNpoints();
 
  789                 m_fields[0]->GetBndCondExpansions()[bcRegion]->
 
  790                 GetCoords(xb0, xb1, xb2);
 
  792                 for (
int k = 0; k < npoints; k++)
 
  794                     Dist = sqrt((xb0[k] - x0[j]) * (xb0[k] - x0[j]) + 
 
  795                     (xb1[k] - x1[j]) * (xb1[k] - x1[j]));
 
  799                     GetBndCondExpansions()[bcRegion]->GetPhys())[k];
 
  801                     GetBndCondExpansions()[bcRegion]->GetPhys())[k];
 
  803                     GetBndCondExpansions()[bcRegion]->GetPhys())[k];
 
  805                     GetBndCondExpansions()[bcRegion]->GetPhys())[k];
 
  810             rhou = rhou / SumDist;
 
  811             rhov = rhov / SumDist;
 
  814             (
m_fields[0]->UpdatePhys())[j] = rho;
 
  815             (
m_fields[1]->UpdatePhys())[j] = rhou;
 
  816             (
m_fields[2]->UpdatePhys())[j] = rhov;
 
  821         for (
int i = 0 ; i < 
m_fields.num_elements(); i++)
 
  843         int nvariables      = physarray.num_elements();
 
  849             int nPointsTot = 
m_fields[0]->GetTotPoints();
 
  850             int nPointsTot_plane = 
m_fields[0]->GetPlane(0)->GetTotPoints();
 
  851             n_planes = nPointsTot/nPointsTot_plane;
 
  854         int id2, id2_plane, e_max;
 
  856         e_max = 
m_fields[0]->GetBndCondExpansions()[bcRegion]->GetExpSize();
 
  858         for(
int e = 0; e < e_max; ++e)
 
  861             GetBndCondExpansions()[bcRegion]->GetExp(e)->GetTotPoints();
 
  863             GetBndCondExpansions()[bcRegion]->GetPhys_Offset(e);
 
  868                 int cnt_plane = cnt/n_planes;
 
  870                 int e_max_plane = e_max/n_planes;
 
  873                 int planeID = floor((e + 0.5 )/ e_max_plane );
 
  874                 e_plane = e - e_max_plane*planeID;
 
  876                 id2_plane  = 
m_fields[0]->GetTrace()->GetPhys_Offset(
 
  878                     GetBndCondCoeffsToGlobalCoeffsMap(
 
  879                         cnt_plane + e_plane));
 
  880                 id2 = id2_plane + planeID*nTracePts_plane;
 
  885                 GetTrace()->GetPhys_Offset(
m_fields[0]->GetTraceMap()->
 
  886                 GetBndCondTraceToGlobalTraceMap(cnt++));
 
  893             m_fields[0]->GetBndCondExpansions()[bcRegion]->
 
  894             GetExp(e)->GetCoords(x0, x1, x2);
 
  897             NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
 
  911             NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
 
  914             for (
int j = 0; j < npoints; j++)
 
  917                 while ((abs(errV) > toll) || (abs(errTheta) > toll))
 
  921                     c    = sqrt(1.0 - gamma_1_2 * VV);
 
  925                     J    = 1.0 / c + 1.0 / (3.0 * c * c * c) + 
 
  926                     1.0 / (5.0 * c * c * c * c * c) - 
 
  927                     0.5 * log((1.0 + c) / (1.0 - c));
 
  929                     r    = pow(c, 1.0 / gamma_1_2);
 
  930                     xi   = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
 
  931                     yi   = phi / (r * V) * sqrt(1.0 - VV * pp);
 
  932                     par1 = 25.0 - 5.0 * VV;
 
  938                     J11 = 39062.5 / pow(par1, 3.5) * 
 
  939                     (1.0 / VV - 2.0 / VV * ss) * V + 1562.5 / 
 
  940                     pow(par1, 2.5) * (-2.0 / (VV * V) + 4.0 / 
 
  941                     (VV * V) * ss) + 12.5 / pow(par1, 1.5) * V + 
 
  942                     312.5 / pow(par1, 2.5) * V + 7812.5 / 
 
  943                     pow(par1, 3.5) * V - 0.25 * 
 
  944                     (-1.0 / pow(par1, 0.5) * V / (1.0 - 0.2 * 
 
  945                     pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) / 
 
  946                     pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) / 
 
  947                     pow(par1, 0.5) * V) / (1.0 + 0.2 * pow(par1, 0.5)) *
 
  948                     (1.0 - 0.2 * pow(par1, 0.5));
 
  950                     J12 = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
 
  951                     J21 = -6250.0 / (VV * V) * sint / pow(par1, 2.5) * 
 
  952                     pow((1.0 - ss), 0.5) + 78125.0 / V * sint / 
 
  953                     pow(par1, 3.5) * pow((1.0 - ss), 0.5);
 
  956                     if (abs(x1[j]) < toll && abs(cos(theta)) < toll)
 
  958                         J22 = -39062.5 / pow(par1, 3.5) / V + 3125 / 
 
  959                         pow(par1, 2.5) / (VV * V) + 12.5 / 
 
  960                         pow(par1, 1.5) * V + 312.5 / pow(par1, 2.5) * 
 
  961                         V + 7812.5 / pow(par1, 3.5) * V - 0.25 * 
 
  962                         (-1.0 / pow(par1, 0.5) * V / (1.0 - 0.2 * 
 
  963                         pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) /
 
  964                         pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) / 
 
  965                         pow(par1, 0.5) * V) / (1.0 + 0.2 * 
 
  966                         pow(par1, 0.5)) * (1.0 - 0.2 * pow(par1, 0.5));
 
  969                         dV      = -1.0 / J22 * Fx;
 
  975                         J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) * 
 
  976                         pow((1.0 - ss), 0.5) - 3125.0 / VV * ss / 
 
  977                         pow(par1, 2.5) / pow((1.0 - ss), 0.5) * 
 
  980                         det = -1.0 / (J11 * J22 - J12 * J21);
 
  983                         dV     = det * ( J22 * Fx - J12 * Fy);
 
  984                         dtheta = det * (-J21 * Fx + J11 * Fy);
 
  988                     theta = theta + dtheta;
 
  991                     errTheta = abs(dtheta);
 
  994                 c                      = sqrt(1.0 - gamma_1_2 * VV);
 
  997                 std::string restartstr = 
"RESTART";
 
  999                     !(
m_session->DefinesFunction(
"InitialConditions") &&
 
 1000                     m_session->GetFunctionType(
"InitialConditions", 0) ==
 
 1003                     Fwd[0][kk] = pow(c, 1.0 / gamma_1_2) * 
 
 1004                     exp(-1.0 + time /timeramp);
 
 1006                     Fwd[1][kk] = Fwd[0][kk] * V * cos(theta) * 
 
 1007                     exp(-1 + time / timeramp);
 
 1009                     Fwd[2][kk] = Fwd[0][kk] * V * sin(theta) * 
 
 1010                     exp(-1 + time / timeramp);
 
 1014                     Fwd[0][kk]  = pow(c, 1.0 / gamma_1_2);
 
 1015                     Fwd[1][kk] = Fwd[0][kk] * V * cos(theta);
 
 1016                     Fwd[2][kk] = Fwd[0][kk] * V * sin(theta);
 
 1019                 P  = (c * c) * Fwd[0][kk] / gamma;
 
 1020                 Fwd[3][kk]  = P / (gamma - 1.0) + 0.5 * 
 
 1021                 (Fwd[1][kk] * Fwd[1][kk] / Fwd[0][kk] + 
 
 1022                 Fwd[2][kk] * Fwd[2][kk] / Fwd[0][kk]);
 
 1027                 V        = kExt * sin(theta);
 
 1030             for (
int i = 0; i < nvariables; ++i)
 
 1033                              &(
m_fields[i]->GetBndCondExpansions()[bcRegion]->
 
 1034                              UpdatePhys())[id1],1);
 
#define ASSERTL0(condition, msg)
 
virtual void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
Set the initial conditions. 
 
virtual void v_InitObject()
Initialization object for CompressibleFlowSystem class. 
 
virtual void v_GenerateSummary(SolverUtils::SummaryList &s)
Print a summary of time stepping parameters. 
 
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use. 
 
std::vector< std::pair< std::string, std::string > > SummaryList
 
void SetInitialIsentropicVortex(NekDouble initialtime)
Set the initial condition for the isentropic vortex problem. 
 
int m_expdim
Expansion dimension. 
 
SOLVER_UTILS_EXPORT void Checkpoint_Output(const int n)
Write checkpoint file of m_fields. 
 
void EvaluateIsentropicVortex(const Array< OneD, NekDouble > &x, const Array< OneD, NekDouble > &y, const Array< OneD, NekDouble > &z, Array< OneD, Array< OneD, NekDouble > > &u, NekDouble time, const int o=0)
Isentropic Vortex Test Case. 
 
enum MultiRegions::ProjectionType m_projectionType
Type of projection; e.g continuous or discontinuous. 
 
void SetBoundaryIsentropicVortex(int bcRegion, NekDouble time, int cnt, Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &physarray)
Set the boundary conditions for the isentropic vortex problem. 
 
std::string m_sessionName
Name of the session. 
 
void SetInitialRinglebFlow(void)
Set the initial condition for the Ringleb flow problem. 
 
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
 
int m_checksteps
Number of steps between checkpoints. 
 
void SetBoundaryRinglebFlow(int bcRegion, NekDouble time, int cnt, Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &physarray)
Set the boundary conditions for the Ringleb flow problem. 
 
virtual ~EulerCFE()
problem type selector 
 
SOLVER_UTILS_EXPORT int GetTotPoints()
 
virtual void v_GenerateSummary(SolverUtils::SummaryList &s)
Print a summary of time stepping parameters. 
 
void DefineProjection(FuncPointerT func, ObjectPointerT obj)
 
void DoOdeProjection(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
Compute the projection and call the method for imposing the boundary conditions in case of discontinu...
 
bool m_explicitAdvection
Indicates if explicit or implicit treatment of advection is used. 
 
void DefineOdeRhs(FuncPointerT func, ObjectPointerT obj)
 
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list. 
 
int m_spacedim
Spatial dimension (>= expansion dim). 
 
void Neg(int n, T *x, const int incx)
Negate x = -x. 
 
virtual SOLVER_UTILS_EXPORT void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
Compute the right-hand side. 
 
void GetExactIsentropicVortex(int field, Array< OneD, NekDouble > &outarray, NekDouble time)
Compute the exact solution for the isentropic vortex problem. 
 
void GetExactRinglebFlow(int field, Array< OneD, NekDouble > &outarray)
Ringleb Flow Test Case. 
 
EquationSystemFactory & GetEquationSystemFactory()
 
SolverUtils::AdvectionSharedPtr m_advection
 
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
 
SOLVER_UTILS_EXPORT void WriteFld(const std::string &outname)
Write field data to the given filename. 
 
virtual void v_EvaluateExactSolution(unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time=0.0)
Get the exact solutions for isentropic vortex and Ringleb flow problems. 
 
SOLVER_UTILS_EXPORT int GetNpoints()
 
ProblemType m_problemType
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables. 
 
virtual void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 
virtual void v_InitObject()
Initialization object for CompressibleFlowSystem class. 
 
LibUtilities::SessionReaderSharedPtr m_session
The session reader. 
 
void SetCommonBC(const std::string &userDefStr, const int n, const NekDouble time, int &cnt, Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &inarray)
Set boundary conditions which can be: a) Wall and Symmerty BCs implemented at CompressibleFlowSystem ...
 
void Zero(int n, T *x, const int incx)
Zero vector. 
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
 
std::vector< SolverUtils::ForcingSharedPtr > m_forcing
 
virtual SOLVER_UTILS_EXPORT void v_EvaluateExactSolution(unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 
void SetBoundaryConditions(Array< OneD, Array< OneD, NekDouble > > &physarray, NekDouble time)
Set boundary conditions which can be: a) Wall and Symmerty BCs implemented at CompressibleFlowSystem ...
 
enum HomogeneousType m_HomogeneousType
 
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory. 
 
const char *const ProblemTypeMap[]