54 int nPts = pFields[0]->GetTotPoints();
61 const std::size_t nConvectiveFields,
68 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
78 const std::size_t nConvectiveFields,
86 outarray, pFwd, pBwd);
90 const std::size_t nConvectiveFields,
99 v_Diffuse(nConvectiveFields, fields, inarray, outarray, pFwd, pBwd);
103 const std::size_t nConvectiveFields,
121 size_t nTracePts = fields[0]->GetTrace()->GetTotPoints();
129 fields[0]->GetFwdBwdTracePhys(muvar, Fwd, Bwd,
false);
131 for (
int k = 0; k < nTracePts; ++k)
133 MuVarTrace[k] = 0.5 * (Fwd[k] + Bwd[k]) ;
138 const int nConvectiveFields,
148 boost::ignore_unused(nTracePts);
150 int nCoeffs = outarray[nConvectiveFields-1].size();
154 for(
int i = 0;i<nDim;i++)
160 for(
int j=0;j<nonZeroIndex.size();j++)
162 nv = nonZeroIndex[j];
164 for(
int nd=0;nd<nDim;nd++)
168 tracelist->MultiplyByQuadratureMetric(Fwdflux[nd][nv],
170 tracelist->MultiplyByQuadratureMetric(Bwdflux[nd][nv],
173 fields[nv]->AddTraceQuadPhysToOffDiag(Fwdflux[nd][nv],
174 Bwdflux[nd][nv],tmpfield[nd]);
175 fields[nv]->DivideByQuadratureMetric(tmpfield[nd],tmpfield[nd]);
177 fields[nv]->IProductWRTDerivBase(tmpfield,tmpCoeff);
178 Vmath::Vadd(nCoeffs,tmpCoeff,1,outarray[nv],1,outarray[nv],1);
183 const std::size_t nConvectiveFields,
190 boost::ignore_unused(nConvectiveFields, fields, inarray, outarray,
196 const std::size_t nConvectiveFields,
203 boost::ignore_unused(nConvectiveFields, fields, inarray,
204 outarray, pFwd, pBwd);
209 const std::size_t nConvectiveFields,
218 boost::ignore_unused(nConvectiveFields, fields, inarray,
219 outarray, vFwd, vBwd,qfield,nonZeroIndex);
243 const std::size_t nConvectiveFields,
250 boost::ignore_unused(nConvectiveFields, npnts, vFwd, vBwd,
262 boost::ignore_unused(fields, inarray, qfields,
274 boost::ignore_unused(fields, inarray, qfields, VolumeFlux,
289 boost::ignore_unused(fields, inarray, qfields, VolumeFlux,
290 TraceFlux, pFwd, pBwd, nonZeroIndex);
304 int nDim = fields[0]->GetCoordim(0);
305 int nPts = fields[0]->GetTotPoints();
306 for(
int i = 0; i < nDim; ++i)
309 Vmath::Vdiv(nPts, inarray[i+1], 1, inarray[0], 1, primVar[i], 1);
323 int nDim = fields[0]->GetCoordim(0);
324 int nPts = fields[0]->GetTotPoints();
335 for (
int j = 0; j < nDim; ++j)
346 Vmath::Vadd(nPts, tmp4, 1, pVarDer[2][1], 1, tmp4, 1);
357 Vmath::Vadd(nPts, tmp4, 1, pVarDer[2][0], 1, tmp4, 1);
368 Vmath::Vadd(nPts, tmp4, 1, pVarDer[0][1], 1, tmp4, 1);
381 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.
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)
Array< OneD, NekDouble > m_divVelSquare
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 GetAVmu(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &muvar, Array< OneD, NekDouble > &MuVarTrace)
Get the mu of artifical viscosity(AV)
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)
DiffusionArtificialDiffusion m_ArtificialDiffusionVector
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.
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.
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 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 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_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_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 const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
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)