53 int nPts = pFields[0]->GetTotPoints();
60 const std::size_t nConvectiveFields,
67 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
77 const std::size_t nConvectiveFields,
84 v_DiffuseCoeffs(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
88 const std::size_t nConvectiveFields,
96 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
100 const std::size_t nConvectiveFields,
108 v_DiffuseCoeffs(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
112 const int nConvectiveFields,
const int nDim,
const int nPts,
119 boost::ignore_unused(nTracePts);
121 int nCoeffs = outarray[nConvectiveFields - 1].size();
125 for (
int i = 0; i < nDim; i++)
131 for (
int j = 0; j < nonZeroIndex.size(); j++)
133 nv = nonZeroIndex[j];
135 for (
int nd = 0; nd < nDim; nd++)
139 tracelist->MultiplyByQuadratureMetric(Fwdflux[nd][nv],
141 tracelist->MultiplyByQuadratureMetric(Bwdflux[nd][nv],
144 fields[nv]->AddTraceQuadPhysToOffDiag(
145 Fwdflux[nd][nv], Bwdflux[nd][nv], tmpfield[nd]);
146 fields[nv]->DivideByQuadratureMetric(tmpfield[nd], tmpfield[nd]);
148 fields[nv]->IProductWRTDerivBase(tmpfield, tmpCoeff);
149 Vmath::Vadd(nCoeffs, tmpCoeff, 1, outarray[nv], 1, outarray[nv], 1);
154 const std::size_t nConvectiveFields,
161 boost::ignore_unused(nConvectiveFields, fields, inarray, outarray, pFwd,
167 const std::size_t nConvectiveFields,
174 boost::ignore_unused(nConvectiveFields, fields, inarray, outarray, pFwd,
180 const std::size_t nConvectiveFields,
188 boost::ignore_unused(nConvectiveFields, fields, inarray, outarray, vFwd,
189 vBwd, qfield, nonZeroIndex);
211 const std::size_t nConvectiveFields,
const size_t npnts,
217 boost::ignore_unused(nConvectiveFields, npnts, vFwd, vBwd, aver, jump);
228 boost::ignore_unused(fields, inarray, qfields, pFwd, pBwd);
238 boost::ignore_unused(fields, inarray, qfields, VolumeFlux, nonZeroIndex);
251 boost::ignore_unused(fields, inarray, qfields, VolumeFlux, TraceFlux, pFwd,
266 int nDim = fields[0]->GetCoordim(0);
267 int nPts = fields[0]->GetTotPoints();
268 for (
int i = 0; i < nDim; ++i)
271 Vmath::Vdiv(nPts, inarray[i + 1], 1, inarray[0], 1, primVar[i], 1);
285 int nDim = fields[0]->GetCoordim(0);
286 int nPts = fields[0]->GetTotPoints();
297 for (
int j = 0; j < nDim; ++j)
308 Vmath::Vadd(nPts, tmp4, 1, pVarDer[2][1], 1, tmp4, 1);
319 Vmath::Vadd(nPts, tmp4, 1, pVarDer[2][0], 1, tmp4, 1);
330 Vmath::Vadd(nPts, tmp4, 1, pVarDer[0][1], 1, tmp4, 1);
342 Vmath::Vadd(nPts, tmp4, 1, pVarDer[0][1], 1, tmp4, 1);
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Provides a generic Factory class.
Array< OneD, NekDouble > m_divVelSquare
virtual SOLVER_UTILS_EXPORT void v_ConsVarAveJump(const std::size_t nConvectiveFields, const size_t npnts, const Array< OneD, const Array< OneD, NekDouble >> &vFwd, const Array< OneD, const Array< OneD, NekDouble >> &vBwd, Array< OneD, Array< OneD, NekDouble >> &aver, Array< OneD, Array< OneD, NekDouble >> &jump)
virtual SOLVER_UTILS_EXPORT void v_DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Diffusion Flux, calculate the physical derivatives.
SOLVER_UTILS_EXPORT void Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
SOLVER_UTILS_EXPORT void DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
Similar with Diffusion::Diffuse(): calculate diffusion flux The difference is in the outarray: it is ...
SOLVER_UTILS_EXPORT void DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
virtual SOLVER_UTILS_EXPORT void v_DiffuseVolumeFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex)
Diffusion Volume Flux.
virtual SOLVER_UTILS_EXPORT void v_DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Array< OneD, NekDouble > m_divVel
Params for Ducros sensor.
SOLVER_UTILS_EXPORT void GetDivCurl(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const TensorOfArray3D< NekDouble > &pVarDer)
Compute divergence and curl squared.
Array< OneD, NekDouble > m_curlVelSquare
SOLVER_UTILS_EXPORT void InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
virtual SOLVER_UTILS_EXPORT void v_GetPrimVar(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &primVar)
Compute primary derivatives.
SOLVER_UTILS_EXPORT void AddSymmFluxIntegralToOffDiag(const int nConvectiveFields, const int nDim, const int nPts, const int nTracePts, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const int > &nonZeroIndex, TensorOfArray3D< NekDouble > &Fwdflux, TensorOfArray3D< NekDouble > &Bwdflux, Array< OneD, Array< OneD, NekDouble >> &outarray)
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &Qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &TraceFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex)
Diffusion term Trace Flux.
virtual SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
virtual SOLVER_UTILS_EXPORT void v_Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, 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 SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
DiffusionFactory & GetDiffusionFactory()
The above copyright notice and this permission notice shall be included.
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray
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 Neg(int n, T *x, const int incx)
Negate x = -x.
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 Vdiv(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 Zero(int n, T *x, const int incx)
Zero vector.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)