Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
Nektar::SolverUtils::Diffusion3DHomogeneous1D Class Reference

#include <Diffusion3DHomogeneous1D.h>

Inheritance diagram for Nektar::SolverUtils::Diffusion3DHomogeneous1D:
[legend]

Static Public Member Functions

static DiffusionSharedPtr create (std::string diffType)
 

Static Public Attributes

static std::string type []
 

Protected Member Functions

 Diffusion3DHomogeneous1D (std::string diffType)
 Diffusion3DHomogeneous1D uses the 2D WeakDG approach to compute the diffusion term looping on the planes in the z direction and adding the flux in z direction at the end. More...
 
virtual void v_InitObject (LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields) override
 Initiliase Diffusion3DHomogeneous1D objects and store them before starting the time-stepping. More...
 
virtual void v_Diffuse (const std::size_t nConvective, 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) override
 Calculate WeakDG Diffusion for the linear problems using an LDG interface flux and the the flux in the third direction. More...
 
- Protected Member Functions inherited from Nektar::SolverUtils::Diffusion
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)
 
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 >> &vFwd, const Array< OneD, Array< OneD, NekDouble >> &vBwd, TensorOfArray3D< NekDouble > &qfield, Array< OneD, int > &nonZeroIndex)
 
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. More...
 
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. More...
 
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. More...
 
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceSymmFlux (const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver, Array< OneD, Array< OneD, NekDouble >> &solution_jump)
 
virtual SOLVER_UTILS_EXPORT void v_AddDiffusionSymmFluxToCoeff (const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, 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_AddDiffusionSymmFluxToPhys (const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
 
virtual void v_SetHomoDerivs (Array< OneD, Array< OneD, NekDouble >> &deriv)
 
virtual TensorOfArray3D< NekDouble > & v_GetFluxTensor ()
 
virtual SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal ()
 
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. More...
 
SOLVER_UTILS_EXPORT void GetDivCurl (const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const TensorOfArray3D< NekDouble > &pVarDer)
 Compute divergence and curl squared. More...
 

Protected Attributes

LibUtilities::TranspositionSharedPtr m_trans
 
std::string m_diffType
 
SolverUtils::DiffusionSharedPtr m_planeDiff
 
NekDouble m_homoLen
 
std::size_t m_numPoints
 
std::size_t m_numPointsPlane
 
std::size_t m_numPlanes
 
std::size_t m_planeCounter
 
Array< OneD, unsigned int > m_planes
 
Array< OneD, unsigned int > m_planePos
 
Array< OneD, Array< OneD, NekDouble > > m_homoDerivStore
 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_homoDerivPlane
 
Array< OneD, Array< OneD, NekDouble > > m_inarrayPlane
 
Array< OneD, Array< OneD, NekDouble > > m_outarrayPlane
 
Array< OneD, MultiRegions::ExpListSharedPtrm_fieldsPlane
 
Array< OneD, Array< OneD, NekDouble > > m_advVelPlane
 
- Protected Attributes inherited from Nektar::SolverUtils::Diffusion
DiffusionFluxVecCB m_fluxVector
 
DiffusionFluxVecCBNS m_fluxVectorNS
 
DiffusionFluxPenaltyNS m_fluxPenaltyNS
 
DiffusionFluxCons m_FunctorDiffusionfluxCons
 
DiffusionFluxCons m_FunctorDiffusionfluxConsTrace
 
SpecialBndTreat m_SpecialBndTreat
 
DiffusionSymmFluxCons m_FunctorSymmetricfluxCons
 
NekDouble m_time = 0.0
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::SolverUtils::Diffusion
virtual SOLVER_UTILS_EXPORT ~Diffusion ()
 
SOLVER_UTILS_EXPORT void InitObject (LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
 
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 the coefficients of basis for DiffuseCoeffs() it is the physics on quadrature points for Diffuse() More...
 
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, NekDouble time, 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, const Array< OneD, Array< OneD, NekDouble >> &pBwd, TensorOfArray3D< NekDouble > &qfield, Array< OneD, int > &nonZeroIndex)
 
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, NekDouble time, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
 
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)
 
SOLVER_UTILS_EXPORT void DiffuseVolumeFlux (const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
 Diffusion Volume FLux. More...
 
SOLVER_UTILS_EXPORT void 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=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
 Diffusion term Trace Flux. More...
 
SOLVER_UTILS_EXPORT void DiffuseTraceSymmFlux (const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver=NullNekDoubleArrayOfArray, Array< OneD, Array< OneD, NekDouble >> &solution_jump=NullNekDoubleArrayOfArray)
 
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToCoeff (const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
 Add symmetric flux to field in coeff space. More...
 
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToPhys (const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
 Add symmetric flux to field in coeff physical space. More...
 
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)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetFluxVector (FuncPointerT func, ObjectPointerT obj)
 
SOLVER_UTILS_EXPORT void SetFluxVector (DiffusionFluxVecCB fluxVector)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetFluxVectorNS (FuncPointerT func, ObjectPointerT obj)
 
void SetFluxVectorNS (DiffusionFluxVecCBNS fluxVector)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetFluxPenaltyNS (FuncPointerT func, ObjectPointerT obj)
 
void SetFluxPenaltyNS (DiffusionFluxPenaltyNS flux)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetDiffusionFluxCons (FuncPointerT func, ObjectPointerT obj)
 
void SetDiffusionFluxCons (DiffusionFluxCons flux)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetDiffusionFluxConsTrace (FuncPointerT func, ObjectPointerT obj)
 
void SetDiffusionFluxConsTrace (DiffusionFluxCons flux)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetSpecialBndTreat (FuncPointerT func, ObjectPointerT obj)
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetDiffusionSymmFluxCons (FuncPointerT func, ObjectPointerT obj)
 
void SetHomoDerivs (Array< OneD, Array< OneD, NekDouble >> &deriv)
 
virtual TensorOfArray3D< NekDouble > & GetFluxTensor ()
 
SOLVER_UTILS_EXPORT void 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)
 Get the average and jump value of conservative variables on trace. More...
 
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetTraceNormal ()
 Get trace normal. More...
 
- Public Attributes inherited from Nektar::SolverUtils::Diffusion
Array< OneD, NekDoublem_divVel
 Params for Ducros sensor. More...
 
Array< OneD, NekDoublem_divVelSquare
 
Array< OneD, NekDoublem_curlVelSquare
 

Detailed Description

Definition at line 45 of file Diffusion3DHomogeneous1D.h.

Constructor & Destructor Documentation

◆ Diffusion3DHomogeneous1D()

Nektar::SolverUtils::Diffusion3DHomogeneous1D::Diffusion3DHomogeneous1D ( std::string  diffType)
protected

Diffusion3DHomogeneous1D uses the 2D WeakDG approach to compute the diffusion term looping on the planes in the z direction and adding the flux in z direction at the end.

Definition at line 78 of file Diffusion3DHomogeneous1D.cpp.

79 {
80  // Strip trailing string "3DHomogeneous1D" to determine 2D diffusion
81  // type, and create a diffusion object for the plane.
82  m_diffType = diffType.substr(0, diffType.length() - 15);
84 }
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:144
DiffusionFactory & GetDiffusionFactory()
Definition: Diffusion.cpp:41

References Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), and Nektar::SolverUtils::GetDiffusionFactory().

Referenced by create().

Member Function Documentation

◆ create()

static DiffusionSharedPtr Nektar::SolverUtils::Diffusion3DHomogeneous1D::create ( std::string  diffType)
inlinestatic

Definition at line 48 of file Diffusion3DHomogeneous1D.h.

49  {
50  return DiffusionSharedPtr(new Diffusion3DHomogeneous1D(diffType));
51  }
Diffusion3DHomogeneous1D(std::string diffType)
Diffusion3DHomogeneous1D uses the 2D WeakDG approach to compute the diffusion term looping on the pla...
std::shared_ptr< SolverUtils::Diffusion > DiffusionSharedPtr
A shared pointer to an EquationSystem object.
Definition: Diffusion.h:550

References Diffusion3DHomogeneous1D().

◆ v_Diffuse()

void Nektar::SolverUtils::Diffusion3DHomogeneous1D::v_Diffuse ( const std::size_t  nConvective,
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 
)
overrideprotectedvirtual

Calculate WeakDG Diffusion for the linear problems using an LDG interface flux and the the flux in the third direction.

Reimplemented from Nektar::SolverUtils::Diffusion.

Definition at line 186 of file Diffusion3DHomogeneous1D.cpp.

193 {
194  boost::ignore_unused(pFwd, pBwd);
195 
196  Array<OneD, NekDouble> tmp(m_numPoints), tmp2;
197  Array<OneD, Array<OneD, NekDouble>> viscHComp;
198  const int nPointsTot = fields[0]->GetNpoints();
199  NekDouble beta;
200 
201  if (m_fluxVectorNS)
202  {
203  viscHComp = Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
204  for (int i = 0; i < nConvectiveFields - 1; ++i)
205  {
206  fields[0]->PhysDeriv(2, inarray[i], m_homoDerivStore[i]);
207  viscHComp[i] = Array<OneD, NekDouble>(m_numPoints);
208  }
209  }
210 
211  for (int i = 0; i < m_numPlanes; ++i)
212  {
213  // Set up memory references for fields, inarray and outarray for
214  // this plane.
215  for (int j = 0; j < inarray.size(); ++j)
216  {
217  m_inarrayPlane[j] = Array<OneD, NekDouble>(
218  m_numPointsPlane, tmp2 = inarray[j] + m_planePos[i]);
219  }
220 
221  for (int j = 0; j < nConvectiveFields; ++j)
222  {
223  m_fieldsPlane[j] = fields[j]->GetPlane(i);
224  m_outarrayPlane[j] = Array<OneD, NekDouble>(
225  m_numPointsPlane, tmp2 = outarray[j] + m_planePos[i]);
226  }
227 
228  if (m_fluxVectorNS)
229  {
230  m_planeDiff->SetHomoDerivs(m_homoDerivPlane[i]);
231  }
232 
233  if (m_diffType == "LDGNS")
234  {
235  // Store plane Fwd/Bwd traces
236  std::size_t nTracePts =
237  m_fieldsPlane[0]->GetTrace()->GetTotPoints();
238  std::size_t nScalar = m_inarrayPlane.size();
239  Array<OneD, Array<OneD, NekDouble>> Fwd(nScalar);
240  Array<OneD, Array<OneD, NekDouble>> Bwd(nScalar);
241  {
242  for (std::size_t k = 0; k < nScalar; ++k)
243  {
244  Fwd[k] = Array<OneD, NekDouble>(nTracePts, 0.0);
245  Bwd[k] = Array<OneD, NekDouble>(nTracePts, 0.0);
246  m_fieldsPlane[k]->GetFwdBwdTracePhys(m_inarrayPlane[k],
247  Fwd[k], Bwd[k]);
248  }
249  }
250 
251  m_planeDiff->Diffuse(nConvectiveFields, m_fieldsPlane,
252  m_inarrayPlane, m_outarrayPlane, Fwd, Bwd);
253  }
254  else
255  {
256  m_planeDiff->Diffuse(nConvectiveFields, m_fieldsPlane,
258  }
259 
260  if (m_fluxVectorNS)
261  {
262  Array<OneD, Array<OneD, Array<OneD, NekDouble>>> &viscTensor =
263  m_planeDiff->GetFluxTensor();
264 
265  // Extract H (viscTensor[2])
266  for (int j = 0; j < nConvectiveFields - 1; ++j)
267  {
268  Vmath::Vcopy(m_numPointsPlane, viscTensor[2][j + 1], 1,
269  tmp2 = viscHComp[j] + m_planePos[i], 1);
270  }
271  }
272  }
273 
274  if (m_fluxVectorNS)
275  {
276  for (int j = 0; j < nConvectiveFields - 1; ++j)
277  {
278  fields[j + 1]->PhysDeriv(2, viscHComp[j], tmp);
279  Vmath::Vadd(nPointsTot, outarray[j + 1], 1, tmp, 1, outarray[j + 1],
280  1);
281  }
282  }
283  else
284  {
285  for (int j = 0; j < nConvectiveFields; ++j)
286  {
287  fields[j]->HomogeneousFwdTrans(m_numPoints, inarray[j], tmp);
288 
289  for (int i = 0; i < m_numPlanes; ++i)
290  {
291  beta = 2 * M_PI * m_trans->GetK(i) / m_homoLen;
292  beta *= beta;
293 
295  &tmp[0] + i * m_numPointsPlane, 1,
296  &tmp[0] + i * m_numPointsPlane, 1);
297  }
298 
299  fields[0]->HomogeneousBwdTrans(m_numPoints, tmp, tmp);
300 
301  Vmath::Vsub(nPointsTot, outarray[j], 1, tmp, 1, outarray[j], 1);
302  }
303  }
304 }
LibUtilities::TranspositionSharedPtr m_trans
Array< OneD, MultiRegions::ExpListSharedPtr > m_fieldsPlane
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_homoDerivPlane
Array< OneD, Array< OneD, NekDouble > > m_outarrayPlane
Array< OneD, Array< OneD, NekDouble > > m_homoDerivStore
Array< OneD, Array< OneD, NekDouble > > m_inarrayPlane
DiffusionFluxVecCBNS m_fluxVectorNS
Definition: Diffusion.h:403
@ beta
Gauss Radau pinned at x=-1,.
Definition: PointsType.h:61
double NekDouble
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.
Definition: Vmath.cpp:359
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Definition: Vmath.cpp:248
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1255
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.
Definition: Vmath.cpp:419

References Nektar::LibUtilities::beta, Vmath::Smul(), Vmath::Vadd(), Vmath::Vcopy(), and Vmath::Vsub().

◆ v_InitObject()

void Nektar::SolverUtils::Diffusion3DHomogeneous1D::v_InitObject ( LibUtilities::SessionReaderSharedPtr  pSession,
Array< OneD, MultiRegions::ExpListSharedPtr pFields 
)
overrideprotectedvirtual

Initiliase Diffusion3DHomogeneous1D objects and store them before starting the time-stepping.

Parameters
pSessionPointer to session reader.
pFieldsPointer to fields.

Reimplemented from Nektar::SolverUtils::Diffusion.

Definition at line 93 of file Diffusion3DHomogeneous1D.cpp.

96 {
97  int nConvectiveFields = pFields.size();
98 
99  Array<OneD, MultiRegions::ExpListSharedPtr> pFields_plane0(
100  nConvectiveFields);
101 
102  // Initialise the plane advection object.
103  for (int i = 0; i < nConvectiveFields; ++i)
104  {
105  pFields_plane0[i] = pFields[i]->GetPlane(0);
106  }
107  m_planeDiff->InitObject(pSession, pFields_plane0);
108 
109  m_numPoints = pFields[0]->GetTotPoints();
110  m_planes = pFields[0]->GetZIDs();
111  m_numPlanes = m_planes.size();
113  m_homoLen = pFields[0]->GetHomoLen();
114  m_trans = pFields[0]->GetTransposition();
115  m_planeCounter = 0;
116 
117  if (m_diffType == "LDG")
118  {
119  // Set viscous flux for LDG
120  m_planeDiff->SetFluxVector(m_fluxVector);
121  }
122  else if (m_diffType == "LDGNS")
123  {
124  // Set viscous flux for LDGNS
125  m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
126  // Set penalty flux
127  m_planeDiff->SetFluxPenaltyNS(m_fluxPenaltyNS);
128  }
129  else if (m_diffType == "LFRDGNS" || m_diffType == "LFRHUNS" ||
130  m_diffType == "LFRSDNS")
131  {
132  // Set viscous flux for FR cases
133  m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
134  }
135 
136  m_fieldsPlane =
137  Array<OneD, MultiRegions::ExpListSharedPtr>(nConvectiveFields);
138 
139  if (m_fluxVectorNS)
140  {
142  Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields - 1);
143  }
144  else
145  {
146  m_inarrayPlane = Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
147  }
148  m_outarrayPlane = Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
149  m_planePos = Array<OneD, unsigned int>(m_numPlanes);
150 
151  for (int i = 0; i < m_numPlanes; ++i)
152  {
153  m_planePos[i] = i * m_numPointsPlane;
154  }
155 
156  if (m_fluxVectorNS)
157  {
159  Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
161  Array<OneD, Array<OneD, Array<OneD, NekDouble>>>(m_numPlanes);
162 
163  for (int i = 0; i < nConvectiveFields; ++i)
164  {
165  m_homoDerivStore[i] = Array<OneD, NekDouble>(m_numPoints);
166  }
167 
168  for (int i = 0; i < m_numPlanes; ++i)
169  {
170  m_homoDerivPlane[i] =
171  Array<OneD, Array<OneD, NekDouble>>(nConvectiveFields);
172 
173  for (int j = 0; j < nConvectiveFields; ++j)
174  {
175  m_homoDerivPlane[i][j] = Array<OneD, NekDouble>(
177  }
178  }
179  }
180 }
DiffusionFluxPenaltyNS m_fluxPenaltyNS
Definition: Diffusion.h:404
DiffusionFluxVecCB m_fluxVector
Definition: Diffusion.h:402

Member Data Documentation

◆ m_advVelPlane

Array<OneD, Array<OneD, NekDouble> > Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_advVelPlane
protected

Definition at line 72 of file Diffusion3DHomogeneous1D.h.

◆ m_diffType

std::string Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_diffType
protected

Definition at line 58 of file Diffusion3DHomogeneous1D.h.

◆ m_fieldsPlane

Array<OneD, MultiRegions::ExpListSharedPtr> Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_fieldsPlane
protected

Definition at line 71 of file Diffusion3DHomogeneous1D.h.

◆ m_homoDerivPlane

Array<OneD, Array<OneD, Array<OneD, NekDouble> > > Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_homoDerivPlane
protected

Definition at line 68 of file Diffusion3DHomogeneous1D.h.

◆ m_homoDerivStore

Array<OneD, Array<OneD, NekDouble> > Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_homoDerivStore
protected

Definition at line 67 of file Diffusion3DHomogeneous1D.h.

◆ m_homoLen

NekDouble Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_homoLen
protected

Definition at line 60 of file Diffusion3DHomogeneous1D.h.

◆ m_inarrayPlane

Array<OneD, Array<OneD, NekDouble> > Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_inarrayPlane
protected

Definition at line 69 of file Diffusion3DHomogeneous1D.h.

◆ m_numPlanes

std::size_t Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_numPlanes
protected

Definition at line 63 of file Diffusion3DHomogeneous1D.h.

◆ m_numPoints

std::size_t Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_numPoints
protected

Definition at line 61 of file Diffusion3DHomogeneous1D.h.

◆ m_numPointsPlane

std::size_t Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_numPointsPlane
protected

Definition at line 62 of file Diffusion3DHomogeneous1D.h.

◆ m_outarrayPlane

Array<OneD, Array<OneD, NekDouble> > Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_outarrayPlane
protected

Definition at line 70 of file Diffusion3DHomogeneous1D.h.

◆ m_planeCounter

std::size_t Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_planeCounter
protected

Definition at line 64 of file Diffusion3DHomogeneous1D.h.

◆ m_planeDiff

SolverUtils::DiffusionSharedPtr Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_planeDiff
protected

Definition at line 59 of file Diffusion3DHomogeneous1D.h.

◆ m_planePos

Array<OneD, unsigned int> Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_planePos
protected

Definition at line 66 of file Diffusion3DHomogeneous1D.h.

◆ m_planes

Array<OneD, unsigned int> Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_planes
protected

Definition at line 65 of file Diffusion3DHomogeneous1D.h.

◆ m_trans

LibUtilities::TranspositionSharedPtr Nektar::SolverUtils::Diffusion3DHomogeneous1D::m_trans
protected

Definition at line 57 of file Diffusion3DHomogeneous1D.h.

◆ type

std::string Nektar::SolverUtils::Diffusion3DHomogeneous1D::type
static
Initial value:
= {
"LDG3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRDG3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRSD3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRHU3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRcmin3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRcinf3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LDGNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRDGNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRSDNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRHUNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRcminNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
"LFRcinfNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create)}
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:198
static DiffusionSharedPtr create(std::string diffType)

Definition at line 52 of file Diffusion3DHomogeneous1D.h.