36 #include <boost/algorithm/string.hpp> 
   63 std::string IncNavierStokes::eqTypeLookupIds[6] = {
 
   64     LibUtilities::SessionReader::RegisterEnumValue(
"EqType", 
"SteadyStokes",
 
   66     LibUtilities::SessionReader::RegisterEnumValue(
"EqType", 
"SteadyOseen",
 
   68     LibUtilities::SessionReader::RegisterEnumValue(
 
   70     LibUtilities::SessionReader::RegisterEnumValue(
 
   72     LibUtilities::SessionReader::RegisterEnumValue(
 
   74     LibUtilities::SessionReader::RegisterEnumValue(
"EqType", 
"UnsteadyStokes",
 
   83 IncNavierStokes::IncNavierStokes(
 
   87       m_SmoothAdvection(false)
 
   97     std::string velids[] = {
"u", 
"v", 
"w"};
 
  104         for (j = 0; j < numfields; ++j)
 
  107             if (boost::iequals(velids[i], var))
 
  113             ASSERTL0(j != numfields, 
"Failed to find field: " + var);
 
  133     std::string vConvectiveType;
 
  138             vConvectiveType = 
"NoAdvection";
 
  142             vConvectiveType = 
"Convective";
 
  145             vConvectiveType = 
"Linearised";
 
  152     if (
m_session->DefinesTag(
"AdvectiveType") &&
 
  156         vConvectiveType = 
m_session->GetTag(
"AdvectiveType");
 
  161         vConvectiveType, vConvectiveType);
 
  185     for (i = 0; i < 
m_fields.size(); ++i)
 
  193         BndConds = 
m_fields[i]->GetBndConditions();
 
  194         BndExp   = 
m_fields[i]->GetBndCondExpansions();
 
  195         for (
int n = 0; n < BndConds.size(); ++n)
 
  197             if (boost::iequals(BndConds[n]->GetUserDefined(), 
"Radiation"))
 
  200                     BndConds[n]->GetBoundaryConditionType() ==
 
  202                     "Radiation boundary condition must be of type Robin <R>");
 
  210                 radpts += BndExp[n]->GetTotPoints();
 
  212             if (boost::iequals(BndConds[n]->GetUserDefined(),
 
  213                                "ZeroNormalComponent"))
 
  215                 ASSERTL0(BndConds[n]->GetBoundaryConditionType() ==
 
  217                          "Zero Normal Component boundary condition option must " 
  218                          "be of type Dirichlet <D>");
 
  233         for (
int n = 0; n < BndConds.size(); ++n)
 
  235             if (boost::iequals(BndConds[n]->GetUserDefined(), 
"Radiation"))
 
  238                 int npoints = BndExp[n]->GetNpoints();
 
  244                 BndExp[n]->GetCoords(x0, x1, x2);
 
  247                     std::static_pointer_cast<
 
  249                         ->m_robinPrimitiveCoeff;
 
  261     for (
int i = 0; i < 
m_fields.size(); ++i)
 
  263         for (
int n = 0; n < 
m_fields[i]->GetBndConditions().size(); ++n)
 
  265             if (boost::istarts_with(
 
  266                     m_fields[i]->GetBndConditions()[n]->GetUserDefined(),
 
  277                     i, n, 
m_fields[i]->GetBndConditions()[n]->GetUserDefined());
 
  288     for (
int n = 0; n < 
m_fields[0]->GetBndConditions().size(); ++n)
 
  294                     m_fields[i]->GetBndConditions()[n]->GetUserDefined(),
 
  302                                      ->GetBndConditions()[n]
 
  303                                      ->GetBoundaryConditionType() ==
 
  305                              "All velocities with userdefined tag: " 
  306                              "\"MovingFrameWall\" must be Dirichlet boundary " 
  309                                                 ->GetBndConditions()[n]
 
  312                              "If any of the velocity components at a " 
  313                              "boundary is defined as \"MovingFrameWall\", " 
  314                              "the rest of velocity components are also " 
  315                              "must be defined as \"MovingFrameWall\" ");
 
  320                     m_fields[i]->GetBndConditions()[n]->GetUserDefined(),
 
  321                     "MovingFrameDomainVel"))
 
  329                                 ->GetBndConditions()[n]
 
  330                                 ->GetBoundaryConditionType() ==
 
  332                         "All velocities with userdefined tag: " 
  333                         "\"MovingFrameDomainVel\" must be Dirichlet boundary " 
  336                                                 ->GetBndConditions()[n]
 
  338                                             "MovingFrameDomainVel"),
 
  339                              "If any of the velocity components at a " 
  340                              "boundary is defined as \"MovingFrameDomainVel\", " 
  341                              "the rest of velocity components are also " 
  342                              "must be defined as \"MovingFrameDomainVel\" ");
 
  358             std::vector<std::string> vSuffix = {
"_x", 
"_y", 
"_z"};
 
  359             for (
int i = 0; i < 3; ++i)
 
  362                 std::string sTheta = 
"Theta" + vSuffix[i];
 
  366                     dTheta = boost::lexical_cast<NekDouble>(it->second);
 
  378             std::vector<std::string> vSuffix = {
"_x", 
"_y", 
"_z"};
 
  379             for (
int i = 0; i < 3; ++i)
 
  381                 std::string sTheta = 
"Theta" + vSuffix[i];
 
  407     int npoints = 
m_fields[0]->GetNpoints();
 
  408     for (i = 0; i < VelDim; ++i)
 
  415         x->PreApply(
m_fields, velocity, velocity, time);
 
  431     for (i = 0; i < nvariables; ++i)
 
  433         for (n = 0; n < 
m_fields[i]->GetBndConditions().size(); ++n)
 
  435             if (
m_fields[i]->GetBndConditions()[n]->IsTimeDependent())
 
  438                 m_fields[i]->EvaluateBoundaryConditions(time, varName);
 
  440             else if (boost::istarts_with(
 
  441                          m_fields[i]->GetBndConditions()[n]->GetUserDefined(),
 
  468     BndConds = 
m_fields[fieldid]->GetBndConditions();
 
  469     BndExp   = 
m_fields[fieldid]->GetBndCondExpansions();
 
  475     int elmtid, nq, offset, boundary;
 
  479     for (cnt = n = 0; n < BndConds.size(); ++n)
 
  481         std::string type = BndConds[n]->GetUserDefined();
 
  483         if ((BndConds[n]->GetBoundaryConditionType() ==
 
  485             (boost::iequals(type, 
"Radiation")))
 
  487             for (i = 0; i < BndExp[n]->GetExpSize(); ++i, cnt++)
 
  490                 elmt   = 
m_fields[fieldid]->GetExp(elmtid);
 
  491                 offset = 
m_fields[fieldid]->GetPhys_Offset(elmtid);
 
  493                 U  = 
m_fields[fieldid]->UpdatePhys() + offset;
 
  494                 Bc = BndExp[n]->GetExp(i);
 
  499                 nq = Bc->GetTotPoints();
 
  501                 elmt->GetTracePhysVals(boundary, Bc, U, ubc);
 
  506                             1, &ubc[0], 1, &ubc[0], 1);
 
  509                     BndExp[n]->UpdateCoeffs() + BndExp[n]->GetCoeff_Offset(i);
 
  511                 Bc->IProductWRTBase(ubc, Bvals);
 
  513             cnt1 += BndExp[n]->GetTotPoints();
 
  517             cnt += BndExp[n]->GetExpSize();
 
  526     static bool Setup = 
false;
 
  549     int elmtid, nq, boundary;
 
  556     for (cnt = n = 0; n < BndConds[0].size(); ++n)
 
  558         if ((BndConds[0][n]->GetBoundaryConditionType() ==
 
  560             (boost::iequals(BndConds[0][n]->GetUserDefined(),
 
  561                             "ZeroNormalComponent")))
 
  563             for (i = 0; i < BndExp[0][n]->GetExpSize(); ++i, cnt++)
 
  569                 normals = elmt->GetTraceNormal(boundary);
 
  571                 nq = BndExp[0][n]->GetExp(i)->GetTotPoints();
 
  576                     Bphys = BndExp[k][n]->UpdatePhys() +
 
  577                             BndExp[k][n]->GetPhys_Offset(i);
 
  578                     Bc = BndExp[k][n]->GetExp(i);
 
  588                     Bphys = BndExp[k][n]->UpdatePhys() +
 
  589                             BndExp[k][n]->GetPhys_Offset(i);
 
  590                     Bcoeffs = BndExp[k][n]->UpdateCoeffs() +
 
  591                               BndExp[k][n]->GetCoeff_Offset(i);
 
  592                     Bc = BndExp[k][n]->GetExp(i);
 
  593                     Vmath::Vvtvp(nq, normvel, 1, normals[k], 1, Bphys, 1, Bphys,
 
  595                     Bc->FwdTransBndConstrained(Bphys, Bcoeffs);
 
  601             cnt += BndExp[0][n]->GetExpSize();
 
  612              "Womersley parameters for this boundary have not been set up");
 
  618     int M_coeffs = WomParam->m_wom_vel.size();
 
  621     NekDouble axis_normal = WomParam->m_axisnormal[fldid];
 
  631     BndCondExp = 
m_fields[fldid]->GetBndCondExpansions()[bndid];
 
  637     int exp_npts = BndCondExp->GetExpSize();
 
  643     for (k = 1; k < M_coeffs; k++)
 
  646         zt[k] = std::exp(zi * omega_c * k_c * m_time_c);
 
  650     for (i = 0; i < exp_npts; ++i, cnt++)
 
  653         bc  = BndCondExp->GetExp(i);
 
  654         nfq = bc->GetTotPoints();
 
  658         for (j = 0; j < nfq; j++)
 
  660             wbc[j] = WomParam->m_poiseuille[i][j];
 
  661             for (k = 1; k < M_coeffs; k++)
 
  663                 zvel   = WomParam->m_zvel[i][j][k] * zt[k];
 
  664                 wbc[j] = wbc[j] + zvel.real();
 
  671         Bvals = BndCondExp->UpdateCoeffs() + BndCondExp->GetCoeff_Offset(i);
 
  674         bc->FwdTrans(wbc, Bvals);
 
  681     std::string::size_type indxBeg = womStr.find_first_of(
':') + 1;
 
  682     string filename                = womStr.substr(indxBeg, string::npos);
 
  684     TiXmlDocument doc(filename);
 
  686     bool loadOkay = doc.LoadFile();
 
  688              (std::string(
"Failed to load file: ") + filename).c_str());
 
  690     TiXmlHandle docHandle(&doc);
 
  694     TiXmlElement *nektar = doc.FirstChildElement(
"NEKTAR");
 
  695     ASSERTL0(nektar, 
"Unable to find NEKTAR tag in file.");
 
  697     TiXmlElement *wombc = nektar->FirstChildElement(
"WOMERSLEYBC");
 
  698     ASSERTL0(wombc, 
"Unable to find WOMERSLEYBC tag in file.");
 
  701     TiXmlElement *womparam = wombc->FirstChildElement(
"WOMPARAMS");
 
  702     ASSERTL0(womparam, 
"Unable to find WOMPARAMS tag in file.");
 
  705     TiXmlElement *params = womparam->FirstChildElement(
"W");
 
  706     map<std::string, std::string> Wparams;
 
  713         propstr = params->Attribute(
"PROPERTY");
 
  716                  "Failed to read PROPERTY value Womersley BC Parameter");
 
  719         valstr = params->Attribute(
"VALUE");
 
  722                  "Failed to read VALUE value Womersley BC Parameter");
 
  724         std::transform(propstr.begin(), propstr.end(), propstr.begin(),
 
  726         Wparams[propstr] = valstr;
 
  728         params = params->NextSiblingElement(
"W");
 
  735         Wparams.count(
"RADIUS") == 1,
 
  736         "Failed to find Radius parameter in Womersley boundary conditions");
 
  737     std::vector<NekDouble> 
rad;
 
  742         Wparams.count(
"PERIOD") == 1,
 
  743         "Failed to find period parameter in Womersley boundary conditions");
 
  744     std::vector<NekDouble> period;
 
  749         Wparams.count(
"AXISNORMAL") == 1,
 
  750         "Failed to find axisnormal parameter in Womersley boundary conditions");
 
  751     std::vector<NekDouble> anorm;
 
  758         Wparams.count(
"AXISPOINT") == 1,
 
  759         "Failed to find axispoint parameter in Womersley boundary conditions");
 
  760     std::vector<NekDouble> apt;
 
  769     TiXmlElement *coeff = wombc->FirstChildElement(
"FOURIERCOEFFS");
 
  772     TiXmlElement *fval = coeff->FirstChildElement(
"F");
 
  775     int nextFourierCoeff = -1;
 
  781         TiXmlAttribute *fvalAttr = fval->FirstAttribute();
 
  782         std::string attrName(fvalAttr->Name());
 
  785                  (std::string(
"Unknown attribute name: ") + attrName).c_str());
 
  787         err = fvalAttr->QueryIntValue(&indx);
 
  788         ASSERTL0(err == TIXML_SUCCESS, 
"Unable to read attribute ID.");
 
  790         std::string coeffStr = fval->FirstChild()->ToText()->ValueStr();
 
  791         vector<NekDouble> coeffvals;
 
  796             (std::string(
"Problem reading value of fourier coefficient, ID=") +
 
  797              boost::lexical_cast<string>(indx))
 
  800             coeffvals.size() == 2,
 
  802                  "Have not read two entries of Fourier coefficicent from ID=" +
 
  803                  boost::lexical_cast<string>(indx))
 
  809         fval = fval->NextSiblingElement(
"F");
 
  828     BndCondExp = 
m_fields[fldid]->GetBndCondExpansions()[bndid];
 
  835     int exp_npts = BndCondExp->GetExpSize();
 
  849     for (k = 1; k < M_coeffs; k++)
 
  852         lamda_n[k] = i_pow_3q2 * alpha_c * 
sqrt(k_c[k]);
 
  857     for (i = 0; i < exp_npts; ++i, cnt++)
 
  860         bc  = BndCondExp->GetExp(i);
 
  861         nfq = bc->GetTotPoints();
 
  866         bc->GetCoords(x, y, z);
 
  874         for (j = 0; j < nfq; j++)
 
  877                                         (y[j] - x0[1]) * (y[j] - x0[1]) +
 
  878                                         (z[j] - x0[2]) * (z[j] - x0[2])) /
 
  885                 (1. - rqR.real() * rqR.real());
 
  891             for (k = 1; k < M_coeffs; k++)
 
  896                     (z1 - (zJ0r / zJ0[k]));
 
  937     for (
int n = 0; n < BndExp[0].size(); ++n)
 
  939         if (BndConds[0][n]->GetBoundaryConditionType() ==
 
  941             (boost::iequals(BndConds[0][n]->GetUserDefined(),
 
  944             npoints = BndExp[0][n]->GetNpoints();
 
  957             for (
int k = 0; k < 3; ++k)
 
  961             BndExp[0][n]->GetCoords(coords[0], coords[1], coords[2]);
 
  990                              velocities[0], 1, velocities[0], 1);
 
  993                              1, velocities[1], 1, velocities[1], 1);
 
 1011                 Vmath::Vmul(npoints, unitArray[k], 1, velocities[k], 1,
 
 1012                             BndExp[k][n]->UpdatePhys(), 1);
 
 1019                     BndExp[k][n]->SetWaveSpace(
false);
 
 1021                 BndExp[k][n]->FwdTransBndConstrained(
 
 1022                     BndExp[k][n]->GetPhys(), BndExp[k][n]->UpdateCoeffs());
 
 1059     for (
int n = 0; n < BndExp[0].size(); ++n)
 
 1061         if (BndConds[0][n]->GetBoundaryConditionType() ==
 
 1063             (boost::iequals(BndConds[0][n]->GetUserDefined(),
 
 1064                             "MovingFrameDomainVel")))
 
 1066             npoints = BndExp[0][n]->GetNpoints();
 
 1074             for (
int k = 0; k < 3; ++k)
 
 1078             BndExp[0][n]->GetCoords(coords[0], coords[1], coords[2]);
 
 1085                     std::static_pointer_cast<
 
 1088                         ->m_dirichletCondition;
 
 1090                 condition.
Evaluate(coords[0], coords[1], coords[2], time,
 
 1104                                  tmp0 = definedVels[m], 1, tmp1 = velocities[l],
 
 1105                                  1, tmp2 = velocities[l], 1);
 
 1112                 Vmath::Vmul(npoints, unitArray[k], 1, velocities[k], 1,
 
 1113                             BndExp[k][n]->UpdatePhys(), 1);
 
 1120                     BndExp[k][n]->SetWaveSpace(
false);
 
 1122                 BndExp[k][n]->FwdTransBndConstrained(
 
 1123                     BndExp[k][n]->GetPhys(), BndExp[k][n]->UpdateCoeffs());
 
 1143     boost::ignore_unused(SpeedSoundFactor);
 
 1145     int nelmt = 
m_fields[0]->GetExpSize();
 
 1154         for (
int i = 0; i < 2; ++i)
 
 1163         for (
int i = 0; i < nvel; ++i)
 
 1191     int nPts = physfield[0].size();
 
 1204         velocity[i] = physfield[i];
 
 1218              "Arrays have different dimensions, cannot set moving frame " 
 1227              "Arrays have different dimensions, cannot get moving frame " 
 1240     const bnu::matrix<NekDouble> &vProjMat)
 
 1243              "Matrices have different numbers of rows, cannot Set the " 
 1244              "moving frame projection matrix");
 
 1246              "Matrices have different numbers of columns, cannot Set the " 
 1247              "moving frame projection matrix");
 
 1248     for (
int i = 0; i < vProjMat.size1(); ++i)
 
 1250         for (
int j = 0; j < vProjMat.size2(); ++j)
 
 1258     bnu::matrix<NekDouble> &vProjMat)
 
 1261              "Matrices have different numbers of rows, cannot Get the " 
 1262              "moving frame projection matrix");
 
 1264              "Matrices have different numbers of columns, cannot Get the " 
 1265              "moving frame projection matrix");
 
 1267     for (
int i = 0; i < vProjMat.size1(); ++i)
 
 1269         for (
int j = 0; j < vProjMat.size2(); ++j)
 
 1284              "Arrays have different size, cannot set moving frame angles");
 
 1285     for (
int i = 0; i < vFrameTheta.size(); ++i)
 
 1298              "Arrays have different size, cannot get moving frame angles");
 
 1310     vector<std::string> vForceList;
 
 1311     bool hasForce{
false};
 
 1313     if (!
m_session->DefinesElement(
"Nektar/Forcing"))
 
 1318     TiXmlElement *vForcing = 
m_session->GetElement(
"Nektar/Forcing");
 
 1321         TiXmlElement *vForce = vForcing->FirstChildElement(
"FORCE");
 
 1324             string vType = vForce->Attribute(
"TYPE");
 
 1326             vForceList.push_back(vType);
 
 1327             vForce = vForce->NextSiblingElement(
"FORCE");
 
 1331     for (
auto &f : vForceList)
 
 1333         if (boost::iequals(f, sForce))
 
 1347     std::string sMRFForcingType = 
"MovingReferenceFrame";
 
 1355     TiXmlElement *vMRFForcing;
 
 1357     TiXmlElement *vForcing = 
m_session->GetElement(
"Nektar/Forcing");
 
 1360         TiXmlElement *vForce = vForcing->FirstChildElement(
"FORCE");
 
 1363             string vType = vForce->Attribute(
"TYPE");
 
 1366             if (boost::iequals(vType, sMRFForcingType))
 
 1368                 TiXmlElement *pivotElmt =
 
 1369                     vForce->FirstChildElement(
"PivotPoint");
 
 1374                     std::stringstream pivotPointStream;
 
 1375                     std::string pivotPointStr = pivotElmt->GetText();
 
 1376                     pivotPointStream.str(pivotPointStr);
 
 1380                         pivotPointStream >> pivotPointStr;
 
 1381                         if (!pivotPointStr.empty())
 
 1384                                 m_session->GetInterpreter(), pivotPointStr);
 
#define ASSERTL0(condition, msg)
 
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
 
Array< OneD, int > & GetVelocity(void)
 
Array< OneD, Array< OneD, int > > m_fieldsBCToTraceID
Mapping from BCs to Elmt Edge IDs.
 
Array< OneD, NekDouble > m_pivotPoint
 
virtual Array< OneD, NekDouble > v_GetMaxStdVelocity(const NekDouble SpeedSoundFactor) override
 
virtual void SetMovingFrameAngles(const Array< OneD, NekDouble > &vFrameTheta) override
 
std::map< int, std::map< int, WomersleyParamsSharedPtr > > m_womersleyParams
Womersley parameters if required.
 
virtual void GetMovingFrameAngles(Array< OneD, NekDouble > &vFrameTheta) override
 
virtual int v_GetForceDimension()=0
 
void SetWomersleyBoundary(const int fldid, const int bndid)
Set Womersley Profile if specified.
 
void SetZeroNormalVelocity()
Set Normal Velocity Component to Zero.
 
virtual void SetMovingFrameVelocities(const Array< OneD, NekDouble > &vFrameVels) override
 
void SetBoundaryConditions(NekDouble time)
time dependent boundary conditions updating
 
virtual void GetMovingFrameVelocities(Array< OneD, NekDouble > &vFrameVels) override
 
virtual void GetMovingFrameProjectionMat(bnu::matrix< NekDouble > &vProjMat) override
 
void SetMRFDomainVelBCs(const NekDouble &time)
 
NekDouble m_kinvis
Kinematic viscosity.
 
virtual ~IncNavierStokes()
 
void SetRadiationBoundaryForcing(int fieldid)
Set Radiation forcing term.
 
Array< OneD, Array< OneD, NekDouble > > m_fieldsRadiationFactor
RHS Factor for Radiation Condition.
 
virtual bool DefinedForcing(const std::string &sForce)
 
void SetMRFWallBCs(const NekDouble &time)
 
virtual void GetPivotPoint(Array< OneD, NekDouble > &vPivotPoint)
 
virtual bool v_PreIntegrate(int step) override
 
void SetUpWomersley(const int fldid, const int bndid, std::string womstr)
Set Up Womersley details.
 
virtual void v_InitObject(bool DeclareField=true) override
Init object for UnsteadySystem class.
 
ExtrapolateSharedPtr m_extrapolation
 
Array< OneD, int > m_velocity
int which identifies which components of m_fields contains the velocity (u,v,w);
 
virtual void GetDensity(const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, NekDouble > &density) override
Extract array with density from physfield.
 
void EvaluateAdvectionTerms(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
 
Array< OneD, Array< OneD, int > > m_fieldsBCToElmtID
Mapping from BCs to Elmt IDs.
 
EquationType m_equationType
equation type;
 
int m_nConvectiveFields
Number of fields to be convected;.
 
void AddForcing(const SolverUtils::ForcingSharedPtr &pForce)
 
std::vector< SolverUtils::ForcingSharedPtr > m_forcing
Forcing terms.
 
virtual void SetMovingFrameProjectionMat(const bnu::matrix< NekDouble > &vProjMat) override
 
void SetMovingReferenceFrameBCs(const NekDouble &time)
Set the moving reference frame boundary conditions.
 
NekDouble Evaluate() const
 
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
 
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
 
static bool GenerateVector(const std::string &str, std::vector< T > &out)
Takes a comma-separated string and converts it to entries in a vector.
 
A base class for PDEs which include an advection component.
 
SolverUtils::AdvectionSharedPtr m_advObject
Advection term.
 
virtual SOLVER_UTILS_EXPORT void v_InitObject(bool DeclareField=true)
Init object for UnsteadySystem class.
 
int m_spacedim
Spatial dimension (>= expansion dim).
 
boost::numeric::ublas::matrix< NekDouble > m_movingFrameProjMat
Projection matrix for transformation between inertial and moving.
 
NekDouble m_timestep
Time step size.
 
NekDouble m_time
Current time of simulation.
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
 
Array< OneD, NekDouble > m_movingFrameVelsxyz
Moving frame of reference velocities.
 
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
 
enum HomogeneousType m_HomogeneousType
 
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr GetPressure()
Get pressure field if available.
 
SOLVER_UTILS_EXPORT int GetPhys_Offset(int n)
 
Array< OneD, NekDouble > m_movingFrameTheta
Moving frame of reference angles with respect to the.
 
LibUtilities::FieldMetaDataMap m_fieldMetaDataMap
Map to identify relevant solver info to dump in output fields.
 
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
Pointer to boundary conditions object.
 
static SOLVER_UTILS_EXPORT std::vector< ForcingSharedPtr > Load(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields=0)
 
Base class for unsteady solvers.
 
static NekDouble rad(NekDouble x, NekDouble y)
 
std::shared_ptr< SessionReader > SessionReaderSharedPtr
 
static FieldMetaDataMap NullFieldMetaDataMap
 
std::shared_ptr< Expansion > ExpansionSharedPtr
 
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
 
AdvectionFactory & GetAdvectionFactory()
Gets the factory for initialising advection objects.
 
SOLVER_UTILS_EXPORT typedef std::shared_ptr< Forcing > ForcingSharedPtr
A shared pointer to an EquationSystem object.
 
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
 
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
 
The above copyright notice and this permission notice shall be included.
 
std::complex< double > NekComplexDouble
 
std::shared_ptr< WomersleyParams > WomersleyParamsSharedPtr
 
const std::string kEquationTypeStr[]
 
std::complex< Nektar::NekDouble > ImagBesselComp(int n, std::complex< Nektar::NekDouble > y)
Calcualte the bessel function of the first kind with complex double input y. Taken from Numerical Rec...
 
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
vvtvvtp (scalar times vector plus scalar times vector):
 
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
 
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
 
void Neg(int n, T *x, const int incx)
Negate x = -x.
 
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
 
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
 
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
 
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha - x.
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
 
scalarT< T > sqrt(scalarT< T > in)