41 string NavierStokesCFE::className =
43 "NavierStokesCFE", NavierStokesCFE::create,
44 "NavierStokes equations in conservative variables.");
46 NavierStokesCFE::NavierStokesCFE(
68 m_session->LoadParameter (
"GasConstant", gasConstant, 287.058);
72 int nPts =
m_fields[0]->GetNpoints();
78 if(
m_session->DefinesParameter(
"thermalConductivity"))
81 "Cannot define both Pr and thermalConductivity.");
83 m_session->LoadParameter (
"thermalConductivity",
96 m_session->LoadSolverInfo(
"DiffusionType", diffName,
"LDGNS");
128 int nvariables = inarray.num_elements();
138 for (i = 0; i < nvariables; ++i)
143 for (i = 0; i < nvariables-1; ++i)
152 m_varConv->GetPressure(inarray, inarrayDiff[0]);
155 m_varConv->GetTemperature(inarray, inarrayDiff[nvariables-2]);
158 m_varConv->GetVelocityVector(inarray, inarrayDiff);
172 m_varConv->GetTemperature(pFwd, inFwd[nvariables-2]);
173 m_varConv->GetTemperature(pBwd, inBwd[nvariables-2]);
175 m_varConv->GetVelocityVector(pFwd, inFwd);
176 m_varConv->GetVelocityVector(pBwd, inBwd);
183 for (i = 0; i < nvariables; ++i)
202 int nScalar = physfield.num_elements();
203 int nPts = physfield[0].num_elements();
216 Vmath::Vadd(nPts, divVel, 1, derivativesO1[j][j], 1,
236 derivativesO1[j][i], 1,
237 viscousTensor[i][j+1], 1);
240 viscousTensor[i][j+1], 1,
241 viscousTensor[i][j+1], 1);
248 viscousTensor[i][j+1], 1);
254 viscousTensor[j][i+1], 1);
262 Vmath::Zero(nPts, viscousTensor[i][m_spacedim+1], 1);
267 viscousTensor[i][j+1], 1,
268 viscousTensor[i][m_spacedim+1], 1,
269 viscousTensor[i][m_spacedim+1], 1);
273 derivativesO1[i][m_spacedim], 1,
274 viscousTensor[i][m_spacedim+1], 1,
275 viscousTensor[i][m_spacedim+1], 1);
291 int nScalar = physfield.num_elements();
292 int nPts =
m_fields[0]->Get1DScaledTotPoints(OneDptscale);
293 int nPts_orig = physfield[0].num_elements();
316 OneDptscale, physfield[i], vel_interp[i]);
320 for (
int j = 0; j < m_spacedim+1; ++j)
324 OneDptscale, derivativesO1[i][j], deriv_interp[i][j]);
329 for (
int j = 1; j < m_spacedim+2; ++j)
338 Vmath::Vadd(nPts, divVel, 1, deriv_interp[j][j], 1,
358 deriv_interp[j][i], 1,
359 out_interp[i][j+1], 1);
362 out_interp[i][j+1], 1,
363 out_interp[i][j+1], 1);
370 out_interp[i][j+1], 1);
375 out_interp[j][i+1] = out_interp[i][j+1];
388 out_interp[i][j+1], 1,
389 out_interp[i][m_spacedim+1], 1,
390 out_interp[i][m_spacedim+1], 1);
394 deriv_interp[i][m_spacedim], 1,
395 out_interp[i][m_spacedim+1], 1,
396 out_interp[i][m_spacedim+1], 1);
402 for (
int j = 1; j < m_spacedim+2; ++j)
404 m_fields[0]->PhysGalerkinProjection1DScaled(
407 viscousTensor[i][j]);
420 unsigned int nTracePts = uFwd[0].num_elements();
423 unsigned int nVariables = uFwd.num_elements();
426 0.5, uBwd[nVariables-1], 1, tAve, 1);
435 for (
int i = 0; i < nVariables; ++i)
438 Vmath::Vsub(nTracePts, uFwd[i], 1, uBwd[i], 1, penaltyCoeff[i], 1);
440 if ( i < nVariables-1 )
442 Vmath::Vmul(nTracePts, muAve, 1, penaltyCoeff[i], 1,
447 Vmath::Vmul(nTracePts, tcAve, 1, penaltyCoeff[i], 1,
463 int nPts = temperature.num_elements();
468 m_varConv->GetDynamicViscosity(temperature, mu);
virtual void v_InitObject()
Initialization object for CompressibleFlowSystem class.
#define ASSERTL0(condition, msg)
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
virtual void v_InitObject()
Initialization object for CompressibleFlowSystem class.
Array< OneD, NekDouble > m_thermalConductivity
NekDouble m_thermalConductivityRef
VariableConverterSharedPtr m_varConv
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
DiffusionFactory & GetDiffusionFactory()
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
bool m_specHP_dealiasing
Flag to determine if dealisising is usde for the Spectral/hp element discretisation.
virtual void v_GetFluxPenalty(const Array< OneD, Array< OneD, NekDouble > > &uFwd, const Array< OneD, Array< OneD, NekDouble > > &uBwd, Array< OneD, Array< OneD, NekDouble > > &penaltyCoeff)
Return the penalty vector for the LDGNS diffusion problem.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Base class for unsteady solvers.
int m_spacedim
Spatial dimension (>= expansion dim).
std::string m_ViscosityType
EquationSystemFactory & GetEquationSystemFactory()
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.
SolverUtils::DiffusionSharedPtr m_diffusion
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
void GetViscosityAndThermalCondFromTemp(const Array< OneD, NekDouble > &temperature, Array< OneD, NekDouble > &mu, Array< OneD, NekDouble > &thermalCond)
Update viscosity todo: add artificial viscosity here.
virtual void v_GetViscousFluxVector(const Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &derivatives, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &viscousTensor)
Return the flux vector for the LDG diffusion problem.
SOLVER_UTILS_EXPORT int GetNpoints()
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
virtual void v_GetViscousFluxVectorDeAlias(const Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &derivatives, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &viscousTensor)
Return the flux vector for the LDG diffusion problem.
Array< OneD, NekDouble > m_mu
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):
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
virtual void v_DoDiffusion(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const Array< OneD, Array< OneD, NekDouble > > &pFwd, const Array< OneD, Array< OneD, NekDouble > > &pBwd)
virtual ~NavierStokesCFE()
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayofArray
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::shared_ptr< SessionReader > SessionReaderSharedPtr
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
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.