39 #include <boost/algorithm/string.hpp>
49 "Euler equations in conservative variables without "
50 "artificial diffusion.");
62 if(
m_session->DefinesSolverInfo(
"PROBLEMTYPE"))
65 std::string ProblemTypeStr =
88 ASSERTL0(
false,
"Implicit CFE not set up.");
113 bool dumpInitialConditions,
125 EquationSystem::v_SetInitialConditions(initialtime,
false);
148 int nvariables = inarray.num_elements();
156 for (i = 0; i < nvariables; ++i)
162 std::vector<SolverUtils::ForcingSharedPtr>::const_iterator x;
165 (*x)->Apply(
m_fields, inarray, outarray, time);
179 int nvariables = inarray.num_elements();
188 for(i = 0; i < nvariables; ++i)
198 ASSERTL0(
false,
"No Continuous Galerkin for Euler equations");
202 ASSERTL0(
false,
"Unknown projection scheme");
225 std::string userDefStr;
226 int nreg =
m_fields[0]->GetBndConditions().num_elements();
228 for (
int n = 0; n < nreg; ++n)
230 userDefStr =
m_fields[0]->GetBndConditions()[n]->GetUserDefined();
231 if(!userDefStr.empty())
233 if(boost::iequals(userDefStr,
"WallViscous"))
235 ASSERTL0(
false,
"WallViscous is a wrong bc for the "
238 else if(boost::iequals(userDefStr,
"IsentropicVortex"))
243 else if (boost::iequals(userDefStr,
"RinglebFlow"))
255 cnt +=
m_fields[0]->GetBndCondExpansions()[n]->GetExpSize();
282 EquationSystem::v_EvaluateExactSolution(field, outfield, time);
296 int nq = x.num_elements();
306 NekDouble fac = 1.0/(16.0*gamma*M_PI*M_PI);
315 for (
int i = 0; i < nq; ++i)
317 xbar = x[i] - u0*time - x0;
318 ybar = y[i] - v0*time - y0;
319 r = sqrt(xbar*xbar + ybar*ybar);
320 tmp = beta*exp(1-r*r);
321 u[0][i+o] = pow(1.0 - (gamma-1.0)*tmp*tmp*fac, 1.0/(gamma-1.0));
322 u[1][i+o] = u[0][i+o]*(u0 - tmp*ybar/(2*M_PI));
323 u[2][i+o] = u[0][i+o]*(v0 + tmp*xbar/(2*M_PI));
324 u[
m_spacedim+1][i+o] = pow(u[0][i+o], gamma)/(gamma-1.0) +
325 0.5*(u[1][i+o]*u[1][i+o] + u[2][i+o]*u[2][i+o]) / u[0][i+o];
376 for(
int i = 0; i <
m_fields.num_elements(); ++i)
394 int nvariables = physarray.num_elements();
400 for (
int i = 0; i < nvariables; ++i)
403 m_fields[i]->ExtractTracePhys(physarray[i], Fwd[i]);
407 e_max =
m_fields[0]->GetBndCondExpansions()[bcRegion]->GetExpSize();
409 for(
int e = 0; e < e_max; ++e)
412 GetBndCondExpansions()[bcRegion]->GetExp(e)->GetTotPoints();
414 GetBndCondExpansions()[bcRegion]->GetPhys_Offset(e);
415 id2 =
m_fields[0]->GetTrace()->GetPhys_Offset(bndTraceMap[cnt++]);
421 m_fields[0]->GetBndCondExpansions()[bcRegion]->
422 GetExp(e)->GetCoords(x, y, z);
426 for (
int i = 0; i < nvariables; ++i)
429 &(
m_fields[i]->GetBndCondExpansions()[bcRegion]->
430 UpdatePhys())[id1], 1);
455 NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
469 NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
471 for (
int i = 0; i < nTotQuadPoints; ++i)
473 while ((abs(errV) > toll) || (abs(errTheta) > toll))
477 c = sqrt(1.0 - gamma_1_2 * VV);
481 J = 1.0 / c + 1.0 / (3.0 * c * c * c) +
482 1.0 / (5.0 * c * c * c * c * c) -
483 0.5 * log((1.0 + c) / (1.0 - c));
485 r = pow(c, 1.0 / gamma_1_2);
486 xi = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
487 yi = phi / (r * V) * sqrt(1.0 - VV * pp);
488 par1 = 25.0 - 5.0 * VV;
494 J11 = 39062.5 / pow(par1, 3.5) * (1.0 / VV - 2.0 / VV * ss) *
495 V + 1562.5 / pow(par1, 2.5) * (-2.0 / (VV * V) + 4.0 /
496 (VV * V) * ss) + 12.5 / pow(par1, 1.5) * V + 312.5 /
497 pow(par1, 2.5) * V + 7812.5 / pow(par1, 3.5) * V -
498 0.25 * (-1.0 / pow(par1, 0.5) * V/(1.0 - 0.2 *
499 pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) /
500 pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) /
501 pow(par1, 0.5) * V) / (1.0 + 0.2 * pow(par1, 0.5)) *
502 (1.0 - 0.2 * pow(par1, 0.5));
504 J12 = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
505 J21 = -6250.0 / (VV * V) * sint /
506 pow(par1, 2.5) * pow((1.0 - ss), 0.5) +
507 78125.0 / V * sint / pow(par1, 3.5) *
508 pow((1.0 - ss), 0.5);
511 if(abs(y[i])<toll && abs(cos(theta))<toll)
513 J22 = -39062.5 / pow(par1, 3.5) / V + 3125 /
514 pow(par1, 2.5) / (VV * V) + 12.5 / pow(par1, 1.5) *
515 V + 312.5 / pow(par1, 2.5) * V + 7812.5 /
516 pow(par1, 3.5) * V - 0.25 * (-1.0 / pow(par1, 0.5) *
517 V / (1.0 - 0.2 * pow(par1, 0.5)) - (1.0 + 0.2 *
518 pow(par1, 0.5)) / pow((1.0 - 0.2 *
519 pow(par1, 0.5)), 2.0) / pow(par1, 0.5) * V) /
520 (1.0 + 0.2 * pow(par1, 0.5)) * (1.0 - 0.2 *
524 dV = -1.0 / J22 * Fx;
530 J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) *
531 pow((1.0 - ss), 0.5) - 3125.0 / VV * ss /
532 pow(par1, 2.5) / pow((1.0 - ss), 0.5) * cos(theta);
534 det = -1.0 / (J11 * J22 - J12 * J21);
537 dV = det * ( J22 * Fx - J12 * Fy);
538 dtheta = det * (-J21 * Fx + J11 * Fy);
542 theta = theta + dtheta;
545 errTheta = abs(dtheta);
549 c = sqrt(1.0 - gamma_1_2 * VV);
550 r = pow(c, 1.0 / gamma_1_2);
553 rhou[i] = rho[i] * V * cos(theta);
554 rhov[i] = rho[i] * V * sin(theta);
555 P = (c * c) * rho[i] / gamma;
556 E[i] = P / (gamma - 1.0) + 0.5 *
557 (rhou[i] * rhou[i] / rho[i] + rhov[i] * rhov[i] / rho[i]);
581 ASSERTL0(
false,
"Error in variable number!");
592 int nbnd =
m_fields[0]->GetBndConditions().num_elements();
595 for(
int bcRegion=0; bcRegion < nbnd; ++bcRegion)
599 GetBndCondExpansions()[bcRegion]->GetNpoints();
610 m_fields[0]->GetBndCondExpansions()[bcRegion]->
611 GetCoords(x0, x1, x2);
614 NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
628 NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
631 for (
int j = 0; j < npoints; j++)
633 while ((abs(errV) > toll) || (abs(errTheta) > toll))
638 c = sqrt(1.0 - gamma_1_2 * VV);
642 J = 1.0 / c + 1.0 / (3.0 * c * c * c) +
643 1.0 / (5.0 * c * c * c * c * c) -
644 0.5 * log((1.0 + c) / (1.0 - c));
646 r = pow(c, 1.0 / gamma_1_2);
647 xi = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
648 yi = phi / (r * V) * sqrt(1.0 - VV * pp);
649 par1 = 25.0 - 5.0 * VV;
655 J11 = 39062.5 / pow(par1, 3.5) *
656 (1.0 / VV - 2.0 / VV * ss) * V +
657 1562.5 / pow(par1, 2.5) * (-2.0 /
658 (VV * V) + 4.0 / (VV * V) * ss) +
659 12.5 / pow(par1, 1.5) * V +
660 312.5 / pow(par1, 2.5) * V +
661 7812.5 / pow(par1, 3.5) * V -
662 0.25 * (-1.0 / pow(par1, 0.5) * V /
663 (1.0 - 0.2 * pow(par1, 0.5)) - (1.0 + 0.2 *
664 pow(par1, 0.5)) / pow((1.0 - 0.2 *
665 pow(par1, 0.5)), 2.0) /
666 pow(par1, 0.5) * V) /
667 (1.0 + 0.2 * pow(par1, 0.5)) *
668 (1.0 - 0.2 * pow(par1, 0.5));
670 J12 = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
671 J21 = -6250.0 / (VV * V) * sint / pow(par1, 2.5) *
672 pow((1.0 - ss), 0.5) + 78125.0 / V * sint /
673 pow(par1, 3.5) * pow((1.0 - ss), 0.5);
676 if (abs(x1[j]) < toll && abs(cos(theta)) < toll)
679 J22 = -39062.5 / pow(par1, 3.5) / V +
680 3125 / pow(par1, 2.5) / (VV * V) + 12.5 /
681 pow(par1, 1.5) * V + 312.5 / pow(par1, 2.5) * V +
682 7812.5 / pow(par1, 3.5) * V -
683 0.25 * (-1.0 / pow(par1, 0.5) * V /
684 (1.0 - 0.2 * pow(par1, 0.5)) -
685 (1.0 + 0.2 * pow(par1, 0.5)) /
686 pow((1.0 - 0.2* pow(par1, 0.5)), 2.0) /
688 (1.0 + 0.2 * pow(par1, 0.5)) *
689 (1.0 - 0.2 * pow(par1, 0.5));
692 dV = -1.0 / J22 * Fx;
699 J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) *
700 pow((1.0 - ss), 0.5) - 3125.0 / VV * ss /
701 pow(par1, 2.5) / pow((1.0 - ss), 0.5) *
704 det = -1.0 / (J11 * J22 - J12 * J21);
707 dV = det * ( J22 * Fx - J12 * Fy);
708 dtheta = det * (-J21 * Fx + J11 * Fy);
712 theta = theta + dtheta;
715 errTheta = abs(dtheta);
719 c = sqrt(1.0 - gamma_1_2 * VV);
720 rho[j] = pow(c, 1.0 / gamma_1_2) * exp(-1.0);
721 rhou[j] = rho[j] * V * cos(theta) * exp(-1.0);
722 rhov[j] = rho[j] * V * sin(theta) * exp(-1.0);
723 P = (c * c) * rho[j] / gamma;
724 E[j] = P / (gamma - 1.0) + 0.5 *
726 rho[j] + rhov[j] * rhov[j] / rho[j]);
730 V = kExt * sin(theta);
735 m_fields[0]->GetBndCondExpansions()[bcRegion]->SetPhys(rho);
736 m_fields[1]->GetBndCondExpansions()[bcRegion]->SetPhys(rhou);
737 m_fields[2]->GetBndCondExpansions()[bcRegion]->SetPhys(rhov);
738 m_fields[3]->GetBndCondExpansions()[bcRegion]->SetPhys(E);
741 for(
int i = 0; i <
m_fields.num_elements(); ++i)
743 m_fields[i]->GetBndCondExpansions()[bcRegion]->
744 FwdTrans_BndConstrained(
745 m_fields[i]->GetBndCondExpansions()[bcRegion]->
747 m_fields[i]->GetBndCondExpansions()[bcRegion]->
765 for(
int j = 0; j < nq; j++)
776 for (
int bcRegion = 0; bcRegion < nbnd; ++bcRegion)
780 GetBndCondExpansions()[bcRegion]->GetNpoints();
786 m_fields[0]->GetBndCondExpansions()[bcRegion]->
787 GetCoords(xb0, xb1, xb2);
789 for (
int k = 0; k < npoints; k++)
791 Dist = sqrt((xb0[k] - x0[j]) * (xb0[k] - x0[j]) +
792 (xb1[k] - x1[j]) * (xb1[k] - x1[j]));
796 GetBndCondExpansions()[bcRegion]->GetPhys())[k];
798 GetBndCondExpansions()[bcRegion]->GetPhys())[k];
800 GetBndCondExpansions()[bcRegion]->GetPhys())[k];
802 GetBndCondExpansions()[bcRegion]->GetPhys())[k];
807 rhou = rhou / SumDist;
808 rhov = rhov / SumDist;
811 (
m_fields[0]->UpdatePhys())[j] = rho;
812 (
m_fields[1]->UpdatePhys())[j] = rhou;
813 (
m_fields[2]->UpdatePhys())[j] = rhov;
818 for (
int i = 0 ; i <
m_fields.num_elements(); i++)
839 int nvariables = physarray.num_elements();
847 int nPointsTot =
m_fields[0]->GetTotPoints();
848 int nPointsTot_plane =
m_fields[0]->GetPlane(0)->GetTotPoints();
849 n_planes = nPointsTot/nPointsTot_plane;
850 nTraceNumPoints = nTraceNumPoints * n_planes;
854 for (
int i = 0; i < nvariables; ++i)
857 m_fields[i]->ExtractTracePhys(physarray[i], Fwd[i]);
860 int id2, id2_plane, e_max;
862 e_max =
m_fields[0]->GetBndCondExpansions()[bcRegion]->GetExpSize();
864 for(
int e = 0; e < e_max; ++e)
867 GetBndCondExpansions()[bcRegion]->GetExp(e)->GetTotPoints();
869 GetBndCondExpansions()[bcRegion]->GetPhys_Offset(e);
874 int cnt_plane = cnt/n_planes;
876 int e_max_plane = e_max/n_planes;
879 int planeID = floor((e + 0.5 )/ e_max_plane );
880 e_plane = e - e_max_plane*planeID;
882 id2_plane =
m_fields[0]->GetTrace()->GetPhys_Offset(
884 GetBndCondCoeffsToGlobalCoeffsMap(
885 cnt_plane + e_plane));
886 id2 = id2_plane + planeID*nTracePts_plane;
891 GetTrace()->GetPhys_Offset(
m_fields[0]->GetTraceMap()->
892 GetBndCondTraceToGlobalTraceMap(cnt++));
899 m_fields[0]->GetBndCondExpansions()[bcRegion]->
900 GetExp(e)->GetCoords(x0, x1, x2);
903 NekDouble c, k, phi, r, J, VV, pp, sint, P, ss;
917 NekDouble gamma_1_2 = (gamma - 1.0) / 2.0;
920 for (
int j = 0; j < npoints; j++)
923 while ((abs(errV) > toll) || (abs(errTheta) > toll))
927 c = sqrt(1.0 - gamma_1_2 * VV);
931 J = 1.0 / c + 1.0 / (3.0 * c * c * c) +
932 1.0 / (5.0 * c * c * c * c * c) -
933 0.5 * log((1.0 + c) / (1.0 - c));
935 r = pow(c, 1.0 / gamma_1_2);
936 xi = 1.0 / (2.0 * r) * (1.0 / VV - 2.0 * pp) + J / 2.0;
937 yi = phi / (r * V) * sqrt(1.0 - VV * pp);
938 par1 = 25.0 - 5.0 * VV;
944 J11 = 39062.5 / pow(par1, 3.5) *
945 (1.0 / VV - 2.0 / VV * ss) * V + 1562.5 /
946 pow(par1, 2.5) * (-2.0 / (VV * V) + 4.0 /
947 (VV * V) * ss) + 12.5 / pow(par1, 1.5) * V +
948 312.5 / pow(par1, 2.5) * V + 7812.5 /
949 pow(par1, 3.5) * V - 0.25 *
950 (-1.0 / pow(par1, 0.5) * V / (1.0 - 0.2 *
951 pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) /
952 pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) /
953 pow(par1, 0.5) * V) / (1.0 + 0.2 * pow(par1, 0.5)) *
954 (1.0 - 0.2 * pow(par1, 0.5));
956 J12 = -6250.0 / pow(par1, 2.5) / VV * sint * cos(theta);
957 J21 = -6250.0 / (VV * V) * sint / pow(par1, 2.5) *
958 pow((1.0 - ss), 0.5) + 78125.0 / V * sint /
959 pow(par1, 3.5) * pow((1.0 - ss), 0.5);
962 if (abs(x1[j]) < toll && abs(cos(theta)) < toll)
964 J22 = -39062.5 / pow(par1, 3.5) / V + 3125 /
965 pow(par1, 2.5) / (VV * V) + 12.5 /
966 pow(par1, 1.5) * V + 312.5 / pow(par1, 2.5) *
967 V + 7812.5 / pow(par1, 3.5) * V - 0.25 *
968 (-1.0 / pow(par1, 0.5) * V / (1.0 - 0.2 *
969 pow(par1, 0.5)) - (1.0 + 0.2 * pow(par1, 0.5)) /
970 pow((1.0 - 0.2 * pow(par1, 0.5)), 2.0) /
971 pow(par1, 0.5) * V) / (1.0 + 0.2 *
972 pow(par1, 0.5)) * (1.0 - 0.2 * pow(par1, 0.5));
975 dV = -1.0 / J22 * Fx;
981 J22 = 3125.0 / VV * cos(theta) / pow(par1, 2.5) *
982 pow((1.0 - ss), 0.5) - 3125.0 / VV * ss /
983 pow(par1, 2.5) / pow((1.0 - ss), 0.5) *
986 det = -1.0 / (J11 * J22 - J12 * J21);
989 dV = det * ( J22 * Fx - J12 * Fy);
990 dtheta = det * (-J21 * Fx + J11 * Fy);
994 theta = theta + dtheta;
997 errTheta = abs(dtheta);
1000 c = sqrt(1.0 - gamma_1_2 * VV);
1003 std::string restartstr =
"RESTART";
1004 if (time<timeramp &&
1005 !(
m_session->DefinesFunction(
"InitialConditions") &&
1006 m_session->GetFunctionType(
"InitialConditions", 0) ==
1009 Fwd[0][kk] = pow(c, 1.0 / gamma_1_2) *
1010 exp(-1.0 + time /timeramp);
1012 Fwd[1][kk] = Fwd[0][kk] * V * cos(theta) *
1013 exp(-1 + time / timeramp);
1015 Fwd[2][kk] = Fwd[0][kk] * V * sin(theta) *
1016 exp(-1 + time / timeramp);
1020 Fwd[0][kk] = pow(c, 1.0 / gamma_1_2);
1021 Fwd[1][kk] = Fwd[0][kk] * V * cos(theta);
1022 Fwd[2][kk] = Fwd[0][kk] * V * sin(theta);
1025 P = (c * c) * Fwd[0][kk] / gamma;
1026 Fwd[3][kk] = P / (gamma - 1.0) + 0.5 *
1027 (Fwd[1][kk] * Fwd[1][kk] / Fwd[0][kk] +
1028 Fwd[2][kk] * Fwd[2][kk] / Fwd[0][kk]);
1033 V = kExt * sin(theta);
1036 for (
int i = 0; i < nvariables; ++i)
1039 &(
m_fields[i]->GetBndCondExpansions()[bcRegion]->
1040 UpdatePhys())[id1],1);
static SolverUtils::EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession)
Creates an instance of this class.
#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.
static std::string className
Name of class.
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.
EulerCFE(const LibUtilities::SessionReaderSharedPtr &pSession)
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.
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.
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 SetCommonBC(const std::string &userDefStr, const int n, const NekDouble time, int &cnt, Array< OneD, Array< OneD, NekDouble > > &inarray)
Set boundary conditions which can be: a) Wall and Symmerty BCs implemented at CompressibleFlowSystem ...
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 SetBoundaryRinglebFlow(int bcRegion, NekDouble time, int cnt, Array< OneD, Array< OneD, NekDouble > > &physarray)
Set the boundary conditions for the Ringleb flow problem.
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.
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 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
void SetBoundaryConditions(Array< OneD, Array< OneD, NekDouble > > &physarray, NekDouble time)
Set boundary conditions which can be: a) Wall and Symmerty BCs implemented at CompressibleFlowSystem ...
void SetBoundaryIsentropicVortex(int bcRegion, NekDouble time, int cnt, Array< OneD, Array< OneD, NekDouble > > &physarray)
Set the boundary conditions for the isentropic vortex problem.
enum HomogeneousType m_HomogeneousType
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory.
const char *const ProblemTypeMap[]