Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Types | Private Attributes | Friends | List of all members
Nektar::LinearisedAdvection Class Reference

#include <LinearisedAdvection.h>

Inheritance diagram for Nektar::LinearisedAdvection:
[legend]

Static Public Member Functions

static SolverUtils::AdvectionSharedPtr create (std::string)
 Creates an instance of this class. More...
 

Static Public Attributes

static std::string className
 Name of class. More...
 

Protected Member Functions

DNekBlkMatSharedPtr GetFloquetBlockMatrix (FloquetMatType mattype, bool UseContCoeffs=false) const
 
DNekBlkMatSharedPtr GenFloquetBlockMatrix (FloquetMatType mattype, bool UseContCoeffs=false) const
 
 LinearisedAdvection ()
 
virtual ~LinearisedAdvection ()
 
virtual void v_InitObject (LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
 Initialises the advection object. More...
 
virtual void v_Advect (const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &advVel, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayofArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayofArray)
 Advects a vector field. More...
 
virtual void v_SetBaseFlow (const Array< OneD, Array< OneD, NekDouble > > &inarray, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
 Overrides the base flow used during linearised advection. More...
 
void UpdateBase (const NekDouble m_slices, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble m_time, const NekDouble m_period)
 
void UpdateGradBase (const int var, const MultiRegions::ExpListSharedPtr &field)
 
void DFT (const std::string file, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const NekDouble m_slices)
 
void ImportFldBase (std::string pInfile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, int slice)
 Import Base flow. More...
 

Protected Attributes

LibUtilities::SessionReaderSharedPtr m_session
 
int m_spacedim
 
int m_expdim
 
Array< OneD, Array< OneD, NekDouble > > m_baseflow
 Storage for base flow. More...
 
Array< OneD, Array< OneD, NekDouble > > m_gradBase
 
int m_slices
 number of slices More...
 
NekDouble m_period
 period length More...
 
Array< OneD, Array< OneD, NekDouble > > m_interp
 interpolation vector More...
 
LibUtilities::NektarFFTSharedPtr m_FFT
 auxiliary variables More...
 
Array< OneD, NekDoublem_tmpIN
 
Array< OneD, NekDoublem_tmpOUT
 
bool m_useFFTW
 
bool m_singleMode
 flag to determine if use single mode or not More...
 
bool m_halfMode
 flag to determine if use half mode or not More...
 
bool m_multipleModes
 flag to determine if use multiple mode or not More...
 
FloquetBlockMatrixMapShPtr m_FloquetBlockMat
 
- Protected Attributes inherited from Nektar::SolverUtils::Advection
AdvectionFluxVecCB m_fluxVector
 Callback function to the flux vector (set when advection is in conservative form). More...
 
RiemannSolverSharedPtr m_riemann
 Riemann solver for DG-type schemes. More...
 
int m_spaceDim
 Storage for space dimension. Used for homogeneous extension. More...
 

Private Types

enum  FloquetMatType { eForwardsCoeff, eForwardsPhys }
 
enum  HomogeneousType { eHomogeneous1D, eHomogeneous2D, eHomogeneous3D, eNotHomogeneous }
 Parameter for homogeneous expansions. More...
 
typedef std::map< FloquetMatType, DNekBlkMatSharedPtrFloquetBlockMatrixMap
 A map between matrix keys and their associated block matrices. More...
 
typedef std::shared_ptr< FloquetBlockMatrixMapFloquetBlockMatrixMapShPtr
 A shared pointer to a BlockMatrixMap. More...
 

Private Attributes

bool m_useFFT
 flag to determine if use or not the FFT for transformations More...
 
enum HomogeneousType m_HomogeneousType
 
NekDouble m_LhomX
 physical length in X direction (if homogeneous) More...
 
NekDouble m_LhomY
 physical length in Y direction (if homogeneous) More...
 
NekDouble m_LhomZ
 physical length in Z direction (if homogeneous) More...
 
int m_npointsX
 number of points in X direction (if homogeneous) More...
 
int m_npointsY
 number of points in Y direction (if homogeneous) More...
 
int m_npointsZ
 number of points in Z direction (if homogeneous) More...
 
int m_HomoDirec
 number of homogenous directions More...
 
int m_NumMode
 Mode to use in case of single mode analysis. More...
 
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
 

Friends

class MemoryManager< LinearisedAdvection >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::SolverUtils::Advection
virtual SOLVER_UTILS_EXPORT ~Advection ()
 
SOLVER_UTILS_EXPORT void InitObject (LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
 Interface function to initialise the advection object. More...
 
SOLVER_UTILS_EXPORT void Advect (const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &advVel, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time, const Array< OneD, Array< OneD, NekDouble > > &pFwd=NullNekDoubleArrayofArray, const Array< OneD, Array< OneD, NekDouble > > &pBwd=NullNekDoubleArrayofArray)
 Interface function to advect the vector field. More...
 
template<typename FuncPointerT , typename ObjectPointerT >
void SetFluxVector (FuncPointerT func, ObjectPointerT obj)
 Set the flux vector callback function. More...
 
void SetRiemannSolver (RiemannSolverSharedPtr riemann)
 Set a Riemann solver object for this advection object. More...
 
void SetFluxVector (AdvectionFluxVecCB fluxVector)
 Set the flux vector callback function. More...
 
void SetBaseFlow (const Array< OneD, Array< OneD, NekDouble > > &inarray, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
 Set the base flow used for linearised advection objects. More...
 

Detailed Description

Definition at line 45 of file LinearisedAdvection.h.

Member Typedef Documentation

◆ FloquetBlockMatrixMap

A map between matrix keys and their associated block matrices.

Definition at line 55 of file LinearisedAdvection.h.

◆ FloquetBlockMatrixMapShPtr

A shared pointer to a BlockMatrixMap.

Definition at line 57 of file LinearisedAdvection.h.

Member Enumeration Documentation

◆ FloquetMatType

Enumerator
eForwardsCoeff 
eForwardsPhys 

Definition at line 47 of file LinearisedAdvection.h.

◆ HomogeneousType

Parameter for homogeneous expansions.

Enumerator
eHomogeneous1D 
eHomogeneous2D 
eHomogeneous3D 
eNotHomogeneous 

Definition at line 153 of file LinearisedAdvection.h.

Constructor & Destructor Documentation

◆ LinearisedAdvection()

Nektar::LinearisedAdvection::LinearisedAdvection ( )
protected

Constructor. Creates ...

Parameters

Definition at line 54 of file LinearisedAdvection.cpp.

54  :
55  Advection()
56 {
57 }

◆ ~LinearisedAdvection()

Nektar::LinearisedAdvection::~LinearisedAdvection ( )
protectedvirtual

Definition at line 241 of file LinearisedAdvection.cpp.

242 {
243 }

Member Function Documentation

◆ create()

static SolverUtils::AdvectionSharedPtr Nektar::LinearisedAdvection::create ( std::string  )
inlinestatic

Creates an instance of this class.

Definition at line 63 of file LinearisedAdvection.h.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

64  {
66  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ DFT()

void Nektar::LinearisedAdvection::DFT ( const std::string  file,
Array< OneD, MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble  m_slices 
)
protected

Definition at line 602 of file LinearisedAdvection.cpp.

References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), eForwardsPhys, Nektar::eWrapper, GetFloquetBlockMatrix(), Nektar::LibUtilities::GetNektarFFTFactory(), ImportFldBase(), m_baseflow, m_FFT, m_interp, m_slices, m_tmpIN, m_tmpOUT, Vmath::Smul(), Vmath::Vcopy(), and Vmath::Zero().

Referenced by v_InitObject().

605 {
606  int ConvectedFields = m_baseflow.num_elements()-1;
607  int npoints = m_baseflow[0].num_elements();
608  m_interp = Array<OneD, Array<OneD, NekDouble> > (ConvectedFields);
609 
610  for (int i = 0; i < ConvectedFields; ++i)
611  {
612  m_interp[i] = Array<OneD,NekDouble>(npoints*m_slices, 0.0);
613  }
614 
615  // Import the slides into auxiliary vector
616  // The base flow should be stored in the form "filename_%d.ext"
617  // A subdirectory can also be included, such as "dir/filename_%d.ext"
618  size_t found = file.find("%d");
619  ASSERTL0(found != string::npos && file.find("%d", found+1) == string::npos,
620  "Since N_slices is specified, the filename provided for function "
621  "'BaseFlow' must include exactly one instance of the format "
622  "specifier '%d', to index the time-slices.");
623  char* buffer = new char[file.length() + 8];
624  for (int i = 0; i < m_slices; ++i)
625  {
626  sprintf(buffer, file.c_str(), i);
627  ImportFldBase(buffer,pFields,i);
628  }
629  delete[] buffer;
630 
631 
632  // Discrete Fourier Transform of the fields
633  for(int k=0; k< ConvectedFields;++k)
634  {
635 #ifdef NEKTAR_USING_FFTW
636 
637  //Discrete Fourier Transform using FFTW
638  Array<OneD, NekDouble> fft_in(npoints*m_slices);
639  Array<OneD, NekDouble> fft_out(npoints*m_slices);
640 
641  Array<OneD, NekDouble> m_tmpIN(m_slices);
642  Array<OneD, NekDouble> m_tmpOUT(m_slices);
643 
644  //Shuffle the data
645  for(int j= 0; j < m_slices; ++j)
646  {
647  Vmath::Vcopy(npoints,&m_interp[k][j*npoints],1,&(fft_in[j]),m_slices);
648  }
649 
650  m_FFT = LibUtilities::GetNektarFFTFactory().CreateInstance("NekFFTW", m_slices);
651 
652  //FFT Transform
653  for(int i=0; i<npoints; i++)
654  {
655  m_FFT->FFTFwdTrans(m_tmpIN =fft_in + i*m_slices, m_tmpOUT =fft_out + i*m_slices);
656 
657  }
658 
659  //Reshuffle data
660  for(int s = 0; s < m_slices; ++s)
661  {
662  Vmath::Vcopy(npoints,&fft_out[s],m_slices,&m_interp[k][s*npoints],1);
663 
664  }
665 
666  Vmath::Zero(fft_in.num_elements(),&fft_in[0],1);
667  Vmath::Zero(fft_out.num_elements(),&fft_out[0],1);
668 #else
669  //Discrete Fourier Transform using MVM
670  DNekBlkMatSharedPtr blkmat;
672 
673  int nrows = blkmat->GetRows();
674  int ncols = blkmat->GetColumns();
675 
676  Array<OneD, NekDouble> sortedinarray(ncols);
677  Array<OneD, NekDouble> sortedoutarray(nrows);
678 
679  //Shuffle the data
680  for(int j= 0; j < m_slices; ++j)
681  {
682  Vmath::Vcopy(npoints,&m_interp[k][j*npoints],1,&(sortedinarray[j]),m_slices);
683  }
684 
685  // Create NekVectors from the given data arrays
686  NekVector<NekDouble> in (ncols,sortedinarray,eWrapper);
687  NekVector<NekDouble> out(nrows,sortedoutarray,eWrapper);
688 
689  // Perform matrix-vector multiply.
690  out = (*blkmat)*in;
691 
692  //Reshuffle data
693  for(int s = 0; s < m_slices; ++s)
694  {
695  Vmath::Vcopy(npoints,&sortedoutarray[s],m_slices,&m_interp[k][s*npoints],1);
696  }
697 
698  for(int r=0; r<sortedinarray.num_elements();++r)
699  {
700  sortedinarray[0]=0;
701  sortedoutarray[0]=0;
702  }
703 
704 #endif
705 
706  //scaling of the Fourier coefficients
707  NekDouble j=-1;
708  for (int i = 2; i < m_slices; i += 2)
709  {
710  Vmath::Smul(2*npoints,j,&m_interp[k][i*npoints],1,&m_interp[k][i*npoints],1);
711  j=-j;
712 
713  }
714 
715  }
716 
717 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
Array< OneD, NekDouble > m_tmpIN
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
LibUtilities::NektarFFTSharedPtr m_FFT
auxiliary variables
DNekBlkMatSharedPtr GetFloquetBlockMatrix(FloquetMatType mattype, bool UseContCoeffs=false) const
void ImportFldBase(std::string pInfile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, int slice)
Import Base flow.
array buffer
Definition: GsLib.hpp:61
int m_slices
number of slices
Array< OneD, NekDouble > m_tmpOUT
NektarFFTFactory & GetNektarFFTFactory()
Definition: NektarFFT.cpp:69
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
Definition: NekTypeDefs.hpp:71
Array< OneD, Array< OneD, NekDouble > > m_interp
interpolation vector
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:144
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Definition: Vmath.cpp:216
double NekDouble
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.cpp:376
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1064

◆ GenFloquetBlockMatrix()

DNekBlkMatSharedPtr Nektar::LinearisedAdvection::GenFloquetBlockMatrix ( FloquetMatType  mattype,
bool  UseContCoeffs = false 
) const
protected

◆ GetFloquetBlockMatrix()

DNekBlkMatSharedPtr Nektar::LinearisedAdvection::GetFloquetBlockMatrix ( FloquetMatType  mattype,
bool  UseContCoeffs = false 
) const
protected

Definition at line 563 of file LinearisedAdvection.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::StdRegions::StdExpansion::DetShapeType(), Nektar::eDIAGONAL, Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierEvenlySpaced, Nektar::StdRegions::eFwdTrans, Nektar::StdRegions::StdExpansion::GetStdMatrix(), m_baseflow, and m_slices.

Referenced by DFT().

564 {
565  DNekMatSharedPtr loc_mat;
566  DNekBlkMatSharedPtr BlkMatrix;
567  int n_exp = 0;
568 
569  n_exp = m_baseflow[0].num_elements(); // will operatore on m_phys
570 
571  Array<OneD,unsigned int> nrows(n_exp);
572  Array<OneD,unsigned int> ncols(n_exp);
573 
574  nrows = Array<OneD, unsigned int>(n_exp,m_slices);
575  ncols = Array<OneD, unsigned int>(n_exp,m_slices);
576 
577  MatrixStorage blkmatStorage = eDIAGONAL;
578  BlkMatrix = MemoryManager<DNekBlkMat>
579  ::AllocateSharedPtr(nrows,ncols,blkmatStorage);
580 
581 
582  const LibUtilities::PointsKey Pkey(m_slices,LibUtilities::eFourierEvenlySpaced);
583  const LibUtilities::BasisKey BK(LibUtilities::eFourier,m_slices,Pkey);
584  StdRegions::StdSegExp StdSeg(BK);
585 
586  StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
587  StdSeg.DetShapeType(),
588  StdSeg);
589 
590  loc_mat = StdSeg.GetStdMatrix(matkey);
591 
592  // set up array of block matrices.
593  for(int i = 0; i < n_exp; ++i)
594  {
595  BlkMatrix->SetBlock(i,i,loc_mat);
596  }
597 
598  return BlkMatrix;
599 }
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
int m_slices
number of slices
Fourier Expansion .
Definition: BasisType.h:53
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:69
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
Definition: NekTypeDefs.hpp:71
1D Evenly-spaced points using Fourier Fit
Definition: PointsType.h:65
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ ImportFldBase()

void Nektar::LinearisedAdvection::ImportFldBase ( std::string  pInfile,
Array< OneD, MultiRegions::ExpListSharedPtr > &  pFields,
int  pSlice 
)
protected

Import Base flow.

Import field from infile and load into m_fields. This routine will also perform a BwdTrans to ensure data is in both the physical and coefficient storage.

Parameters
pInFileFilename to read.
pFieldsArray of expansion lists

Definition at line 396 of file LinearisedAdvection.cpp.

References ASSERTL0, Nektar::LibUtilities::FieldIO::CreateForFile(), Vmath::Fill(), m_baseflow, m_halfMode, m_interp, m_npointsZ, m_session, m_singleMode, Nektar::LibUtilities::NullFieldMetaDataMap, and Vmath::Vcopy().

Referenced by DFT(), and v_InitObject().

400 {
401  std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef;
402  std::vector<std::vector<NekDouble> > FieldData;
403 
404  int nqtot = m_baseflow[0].num_elements();
405  Array<OneD, NekDouble> tmp_coeff(pFields[0]->GetNcoeffs(), 0.0);
406 
407  int numexp = pFields[0]->GetExpSize();
408  Array<OneD,int> ElementGIDs(numexp);
409 
410  // Define list of global element ids
411  for(int i = 0; i < numexp; ++i)
412  {
413  ElementGIDs[i] = pFields[0]->GetExp(i)->GetGeom()->GetGlobalID();
414  }
415 
416  //Get Homogeneous
418  m_session, pInfile);
419  fld->Import(pInfile, FieldDef, FieldData,
421  ElementGIDs);
422 
423  int nSessionVar = m_session->GetVariables().size();
424  int nSessionConvVar = nSessionVar - 1;
425  int nFileVar = FieldDef[0]->m_fields.size();
426  int nFileConvVar = nFileVar - 1; // Ignore pressure
427  if (m_halfMode)
428  {
429  ASSERTL0(nFileVar == 3, "For half mode, expect 2D2C base flow.");
430  nFileConvVar = 2;
431  }
432 
433  for(int j = 0; j < nFileConvVar; ++j)
434  {
435  for(int i = 0; i < FieldDef.size(); ++i)
436  {
437  bool flag = FieldDef[i]->m_fields[j] ==
438  m_session->GetVariable(j);
439 
440  ASSERTL0(flag, (std::string("Order of ") + pInfile
441  + std::string(" data and that defined in "
442  "the session file differs")).c_str());
443 
444  pFields[j]->ExtractDataToCoeffs(
445  FieldDef[i],
446  FieldData[i],
447  FieldDef[i]->m_fields[j],
448  tmp_coeff);
449  }
450 
451  if(m_singleMode || m_halfMode)
452  {
453  pFields[j]->GetPlane(0)->BwdTrans(tmp_coeff, m_baseflow[j]);
454 
455  if(m_singleMode)
456  {
457  //copy the bwd trans into the second plane for single
458  //Mode Analysis
459  int ncplane=(pFields[0]->GetNpoints())/m_npointsZ;
460  Vmath::Vcopy(ncplane,&m_baseflow[j][0],1,&m_baseflow[j][ncplane],1);
461  }
462  }
463  else // fully 3D base flow - put in physical space.
464  {
465  bool oldwavespace = pFields[j]->GetWaveSpace();
466  pFields[j]->SetWaveSpace(false);
467  pFields[j]->BwdTrans(tmp_coeff, m_baseflow[j]);
468  pFields[j]->SetWaveSpace(oldwavespace);
469  }
470  }
471 
472  // Zero unused fields (e.g. w in a 2D2C base flow).
473  for (int j = nFileConvVar; j < nSessionConvVar; ++j)
474  {
475  Vmath::Fill(nqtot, 0.0, m_baseflow[j], 1);
476  }
477 
478  // If time-periodic, put loaded data into the slice storage.
479  if(m_session->DefinesParameter("N_slices"))
480  {
481  for(int i = 0; i < nSessionConvVar; ++i)
482  {
483  Vmath::Vcopy(nqtot, &m_baseflow[i][0], 1, &m_interp[i][pSlice*nqtot], 1);
484  }
485  }
486 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
bool m_singleMode
flag to determine if use single mode or not
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.cpp:45
Array< OneD, Array< OneD, NekDouble > > m_interp
interpolation vector
int m_npointsZ
number of points in Z direction (if homogeneous)
LibUtilities::SessionReaderSharedPtr m_session
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
Definition: FieldIO.cpp:226
bool m_halfMode
flag to determine if use half mode or not
std::shared_ptr< FieldIO > FieldIOSharedPtr
Definition: FieldIO.h:306
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1064
static FieldMetaDataMap NullFieldMetaDataMap
Definition: FieldIO.h:53

◆ UpdateBase()

void Nektar::LinearisedAdvection::UpdateBase ( const NekDouble  m_slices,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const NekDouble  m_time,
const NekDouble  m_period 
)
protected

Definition at line 489 of file LinearisedAdvection.cpp.

References m_baseflow, m_period, m_slices, Vmath::Svtvp(), and Vmath::Vcopy().

Referenced by Nektar::AdjointAdvection::v_Advect(), and v_Advect().

495 {
496  int npoints = m_baseflow[0].num_elements();
497  NekDouble BetaT = 2*M_PI*fmod (m_time, m_period) / m_period;
498  NekDouble phase;
499  Array<OneD, NekDouble> auxiliary(npoints);
500 
501  Vmath::Vcopy(npoints,&inarray[0],1,&outarray[0],1);
502  Vmath::Svtvp(npoints, cos(0.5*m_slices*BetaT),&inarray[npoints],1,&outarray[0],1,&outarray[0],1);
503 
504  for (int i = 2; i < m_slices; i += 2)
505  {
506  phase = (i>>1) * BetaT;
507 
508  Vmath::Svtvp(npoints, cos(phase),&inarray[i*npoints],1,&outarray[0],1,&outarray[0],1);
509  Vmath::Svtvp(npoints, -sin(phase), &inarray[(i+1)*npoints], 1, &outarray[0], 1,&outarray[0],1);
510  }
511 
512 }
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
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
Definition: Vmath.cpp:488
int m_slices
number of slices
double NekDouble
NekDouble m_period
period length
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1064

◆ UpdateGradBase()

void Nektar::LinearisedAdvection::UpdateGradBase ( const int  var,
const MultiRegions::ExpListSharedPtr field 
)
protected

Definition at line 514 of file LinearisedAdvection.cpp.

References m_baseflow, m_gradBase, m_halfMode, m_singleMode, and m_spacedim.

Referenced by Nektar::AdjointAdvection::v_Advect(), v_Advect(), v_InitObject(), and v_SetBaseFlow().

517 {
518  int nBaseDerivs = (m_halfMode || m_singleMode) ? 2 : m_spacedim;
519  switch(m_spacedim)
520  {
521  case 1: // 1D
522  {
523  field->PhysDeriv(m_baseflow[var], m_gradBase[var*nBaseDerivs + 0]);
524  }
525  break;
526  case 2: //2D
527  {
528  field->PhysDeriv(m_baseflow[var], m_gradBase[var*nBaseDerivs + 0],
529  m_gradBase[var*nBaseDerivs + 1]);
530  }
531  break;
532  case 3:
533  {
534  if(m_halfMode) // can assume W = 0 and d/dz == 0
535  {
536  if( var < 2)
537  {
538  field->PhysDeriv(m_baseflow[var],
539  m_gradBase[var*nBaseDerivs + 0],
540  m_gradBase[var*nBaseDerivs + 1]);
541  }
542  }
543  else if(m_singleMode) // single mode where d/dz = 0
544  {
545  field->PhysDeriv(m_baseflow[var], m_gradBase[var*nBaseDerivs + 0],
546  m_gradBase[var*nBaseDerivs + 1]);
547  }
548  else
549  {
550  // Differentiate base flow in physical space
551  bool oldwavespace = field->GetWaveSpace();
552  field->SetWaveSpace(false);
553  field->PhysDeriv(m_baseflow[var], m_gradBase[var*nBaseDerivs + 0],
554  m_gradBase[var*nBaseDerivs + 1],
555  m_gradBase[var*nBaseDerivs + 2]);
556  field->SetWaveSpace(oldwavespace);
557  }
558  }
559  break;
560  }
561 }
bool m_singleMode
flag to determine if use single mode or not
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
bool m_halfMode
flag to determine if use half mode or not
Array< OneD, Array< OneD, NekDouble > > m_gradBase

◆ v_Advect()

void Nektar::LinearisedAdvection::v_Advect ( const int  nConvectiveFields,
const Array< OneD, MultiRegions::ExpListSharedPtr > &  fields,
const Array< OneD, Array< OneD, NekDouble > > &  advVel,
const Array< OneD, Array< OneD, NekDouble > > &  inarray,
Array< OneD, Array< OneD, NekDouble > > &  outarray,
const NekDouble time,
const Array< OneD, Array< OneD, NekDouble > > &  pFwd = NullNekDoubleArrayofArray,
const Array< OneD, Array< OneD, NekDouble > > &  pBwd = NullNekDoubleArrayofArray 
)
protectedvirtual

Advects a vector field.

Implements Nektar::SolverUtils::Advection.

Reimplemented in Nektar::AdjointAdvection.

Definition at line 248 of file LinearisedAdvection.cpp.

References ASSERTL1, m_baseflow, m_gradBase, m_halfMode, m_interp, m_multipleModes, m_period, m_singleMode, m_slices, m_spacedim, Vmath::Neg(), UpdateBase(), UpdateGradBase(), Vmath::Vmul(), and Vmath::Vvtvp().

257 {
258  ASSERTL1(nConvectiveFields == inarray.num_elements(),
259  "Number of convective fields and Inarray are not compatible");
260 
261  int nPointsTot = fields[0]->GetNpoints();
262  int ndim = advVel.num_elements();
263  int nBaseDerivs = (m_halfMode || m_singleMode) ? 2 : m_spacedim;
264  int nDerivs = (m_halfMode) ? 2 : m_spacedim;
265 
266  Array<OneD, Array<OneD, NekDouble> > velocity(ndim);
267  for(int i = 0; i < ndim; ++i)
268  {
269  if(fields[i]->GetWaveSpace() && !m_singleMode && !m_halfMode)
270  {
271  velocity[i] = Array<OneD, NekDouble>(nPointsTot,0.0);
272  fields[i]->HomogeneousBwdTrans(advVel[i],velocity[i]);
273  }
274  else
275  {
276  velocity[i] = advVel[i];
277  }
278  }
279 
280  Array<OneD, Array<OneD, NekDouble> > grad (nDerivs);
281  for( int i = 0; i < nDerivs; ++i)
282  {
283  grad[i] = Array<OneD, NekDouble> (nPointsTot);
284  }
285 
286  // Evaluation of the base flow for periodic cases
287  if (m_slices > 1)
288  {
289  for (int i = 0; i < ndim; ++i)
290  {
292  time, m_period);
293  UpdateGradBase(i, fields[i]);
294  }
295  }
296 
297  //Evaluate the linearised advection term
298  for( int i = 0; i < nConvectiveFields; ++i)
299  {
300  // Calculate gradient
301  switch(nDerivs)
302  {
303  case 1:
304  {
305  fields[i]->PhysDeriv(inarray[i], grad[0]);
306  }
307  break;
308  case 2:
309  {
310  fields[i]->PhysDeriv(inarray[i], grad[0], grad[1]);
311  }
312  break;
313  case 3:
314  {
315  fields[i]->PhysDeriv(inarray[i], grad[0], grad[1], grad[2]);
316  if(m_multipleModes)
317  {
318  // transform gradients into physical Fourier space
319  fields[i]->HomogeneousBwdTrans(grad[0], grad[0]);
320  fields[i]->HomogeneousBwdTrans(grad[1], grad[1]);
321  fields[i]->HomogeneousBwdTrans(grad[2], grad[2]);
322  }
323  }
324  break;
325  }
326 
327  // Calculate U_j du'_i/dx_j
328  Vmath::Vmul(nPointsTot,grad[0], 1, m_baseflow[0], 1, outarray[i], 1);
329  for( int j = 1; j < nDerivs; ++j)
330  {
331  Vmath::Vvtvp(nPointsTot,grad[j], 1,
332  m_baseflow[j], 1,
333  outarray[i], 1,
334  outarray[i], 1);
335  }
336 
337  // Add u'_j dU_i/dx_j
338  int lim = (m_halfMode || m_singleMode) ? 2 : ndim;
339  if (m_halfMode && i==2)
340  {
341  lim = 0;
342  }
343  for( int j = 0; j < lim; ++j)
344  {
345  Vmath::Vvtvp(nPointsTot,m_gradBase[i*nBaseDerivs + j], 1,
346  velocity[j], 1,
347  outarray[i], 1,
348  outarray[i], 1);
349  }
350 
351  if(m_multipleModes)
352  {
353  fields[i]->HomogeneousFwdTrans(outarray[i],outarray[i]);
354  }
355  Vmath::Neg(nPointsTot,outarray[i],1);
356  }
357 }
bool m_singleMode
flag to determine if use single mode or not
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
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
Definition: Vmath.cpp:445
int m_slices
number of slices
Array< OneD, Array< OneD, NekDouble > > m_interp
interpolation vector
void UpdateBase(const NekDouble m_slices, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble m_time, const NekDouble m_period)
void Neg(int n, T *x, const int incx)
Negate x = -x.
Definition: Vmath.cpp:399
NekDouble m_period
period length
bool m_multipleModes
flag to determine if use multiple mode or not
bool m_halfMode
flag to determine if use half mode or not
void UpdateGradBase(const int var, const MultiRegions::ExpListSharedPtr &field)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250
Array< OneD, Array< OneD, NekDouble > > m_gradBase
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.
Definition: Vmath.cpp:186

◆ v_InitObject()

void Nektar::LinearisedAdvection::v_InitObject ( LibUtilities::SessionReaderSharedPtr  pSession,
Array< OneD, MultiRegions::ExpListSharedPtr pFields 
)
protectedvirtual

Initialises the advection object.

This function should be overridden in derived classes to initialise the specific advection data members. However, this base class function should be called as the first statement of the overridden function to ensure the base class is correctly initialised in order.

Parameters
pSessionSession information.
pFieldsExpansion lists for scalar fields.

Reimplemented from Nektar::SolverUtils::Advection.

Definition at line 60 of file LinearisedAdvection.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, DFT(), Nektar::LibUtilities::eFunctionTypeFile, eHomogeneous1D, eHomogeneous2D, eHomogeneous3D, eNotHomogeneous, ImportFldBase(), m_baseflow, m_boundaryConditions, m_expdim, m_gradBase, m_halfMode, m_HomoDirec, m_HomogeneousType, m_LhomX, m_LhomY, m_LhomZ, m_multipleModes, m_npointsX, m_npointsY, m_npointsZ, m_period, m_session, m_singleMode, m_slices, m_spacedim, m_useFFT, UpdateGradBase(), and Nektar::SolverUtils::Advection::v_InitObject().

63 {
64  Advection::v_InitObject(pSession, pFields);
65 
66  m_session = pSession;
68  ::AllocateSharedPtr(m_session, pFields[0]->GetGraph());
69  m_spacedim = pFields[0]->GetGraph()->GetSpaceDimension();
70  m_expdim = pFields[0]->GetGraph()->GetMeshDimension();
71 
72  //Setting parameters for homogeneous problems
73  m_HomoDirec = 0;
74  m_useFFT = false;
76  m_singleMode = false;
77  m_halfMode = false;
78  m_multipleModes = false;
79 
80  if(m_session->DefinesSolverInfo("HOMOGENEOUS"))
81  {
82  std::string HomoStr = m_session->GetSolverInfo("HOMOGENEOUS");
83  m_spacedim = 3;
84 
85  if((HomoStr == "HOMOGENEOUS1D")||(HomoStr == "Homogeneous1D")||
86  (HomoStr == "1D")||(HomoStr == "Homo1D"))
87  {
89  m_LhomZ = m_session->GetParameter("LZ");
90  m_HomoDirec = 1;
91 
92  ASSERTL0(m_session->DefinesSolverInfo("ModeType"),
93  "Need to specify ModeType as HalfMode,SingleMode or "
94  "MultipleModes");
95 
96  m_session->MatchSolverInfo("ModeType", "SingleMode",
97  m_singleMode, false);
98  m_session->MatchSolverInfo("ModeType", "HalfMode",
99  m_halfMode, false);
100  m_session->MatchSolverInfo("ModeType", "MultipleModes",
101  m_multipleModes, false);
102 
103  if(m_singleMode)
104  {
105  m_npointsZ = 2;
106  }
107  else if(m_halfMode)
108  {
109  m_npointsZ = 1;
110  }
111  else if(m_multipleModes)
112  {
113  m_npointsZ = m_session->GetParameter("HomModesZ");
114  }
115  }
116 
117  if((HomoStr == "HOMOGENEOUS2D")||(HomoStr == "Homogeneous2D")||
118  (HomoStr == "2D")||(HomoStr == "Homo2D"))
119  {
121  m_session->LoadParameter("HomModesY", m_npointsY);
122  m_session->LoadParameter("LY", m_LhomY);
123  m_session->LoadParameter("HomModesZ", m_npointsZ);
124  m_session->LoadParameter("LZ", m_LhomZ);
125  m_HomoDirec = 2;
126  }
127 
128  if((HomoStr == "HOMOGENEOUS3D")||(HomoStr == "Homogeneous3D")||
129  (HomoStr == "3D")||(HomoStr == "Homo3D"))
130  {
132  m_session->LoadParameter("HomModesX",m_npointsX);
133  m_session->LoadParameter("LX", m_LhomX );
134  m_session->LoadParameter("HomModesY",m_npointsY);
135  m_session->LoadParameter("LY", m_LhomY );
136  m_session->LoadParameter("HomModesZ",m_npointsZ);
137  m_session->LoadParameter("LZ", m_LhomZ );
138  m_HomoDirec = 3;
139  }
140 
141  if(m_session->DefinesSolverInfo("USEFFT"))
142  {
143  m_useFFT = true;
144  }
145  }
146  else
147  {
148  m_npointsZ = 1; // set to default value so can use to identify 2d or 3D (homogeneous) expansions
149  }
150 
151  int nvar = m_session->GetVariables().size();
152  m_baseflow = Array<OneD, Array<OneD, NekDouble> >(nvar);
153  for (int i = 0; i < nvar; ++i)
154  {
155  m_baseflow[i] = Array<OneD, NekDouble>(pFields[i]->GetTotPoints(), 0.0);
156  }
157 
158  int nBaseDerivs = (m_halfMode || m_singleMode) ? 2 : m_spacedim;
159  m_gradBase = Array<OneD, Array<OneD, NekDouble> >(nvar*nBaseDerivs);
160  for (int i = 0; i < nvar; ++i)
161  {
162  for (int j = 0; j < nBaseDerivs; ++j)
163  {
164  m_gradBase[i*nBaseDerivs + j ] = Array<OneD, NekDouble>
165  (pFields[i]->GetTotPoints(), 0.0);
166  }
167  }
168 
169  ASSERTL0(m_session->DefinesFunction("BaseFlow"),
170  "Base flow must be defined for linearised forms.");
171  string file = m_session->GetFunctionFilename("BaseFlow", 0);
172 
173 
174  //Periodic base flows
175  if(m_session->DefinesParameter("N_slices"))
176  {
177  m_session->LoadParameter("N_slices",m_slices);
178  if(m_slices>1)
179  {
180  ASSERTL0(m_session->GetFunctionType("BaseFlow", 0)
182  "Base flow should be a sequence of files.");
183  DFT(file,pFields,m_slices);
184  }
185  else
186  {
187  ASSERTL0(false, "Number of slices must be a positive number "
188  "greater than 1");
189  }
190  }
191  //Steady base-flow
192  else
193  {
194  m_slices=1;
195 
196  //BaseFlow from file
197  if (m_session->GetFunctionType("BaseFlow", m_session->GetVariable(0))
199  {
200  ImportFldBase(file,pFields,1);
201 
202  }
203  //analytic base flow
204  else
205  {
206  int nq = pFields[0]->GetNpoints();
207  Array<OneD,NekDouble> x0(nq);
208  Array<OneD,NekDouble> x1(nq);
209  Array<OneD,NekDouble> x2(nq);
210 
211  // get the coordinates (assuming all fields have the same
212  // discretisation)
213  pFields[0]->GetCoords(x0,x1,x2);
214 
215  for(unsigned int i = 0 ; i < pFields.num_elements(); i++)
216  {
218  = m_session->GetFunction("BaseFlow", i);
219 
220  ifunc->Evaluate(x0,x1,x2,m_baseflow[i]);
221  }
222  }
223  }
224 
225  for (int i = 0; i < nvar; ++i)
226  {
227  UpdateGradBase(i, pFields[i]);
228  }
229 
230  if(m_session->DefinesParameter("period"))
231  {
232  m_period=m_session->GetParameter("period");
233  }
234  else
235  {
236  m_period=(m_session->GetParameter("TimeStep")*m_slices)/(m_slices-1.);
237  }
238 
239 }
enum HomogeneousType m_HomogeneousType
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
int m_HomoDirec
number of homogenous directions
bool m_singleMode
flag to determine if use single mode or not
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
void ImportFldBase(std::string pInfile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, int slice)
Import Base flow.
int m_slices
number of slices
void DFT(const std::string file, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const NekDouble m_slices)
int m_npointsZ
number of points in Z direction (if homogeneous)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
NekDouble m_period
period length
int m_npointsY
number of points in Y direction (if homogeneous)
bool m_multipleModes
flag to determine if use multiple mode or not
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
std::shared_ptr< Equation > EquationSharedPtr
Definition: Equation.h:131
NekDouble m_LhomY
physical length in Y direction (if homogeneous)
LibUtilities::SessionReaderSharedPtr m_session
int m_npointsX
number of points in X direction (if homogeneous)
NekDouble m_LhomX
physical length in X direction (if homogeneous)
bool m_halfMode
flag to determine if use half mode or not
void UpdateGradBase(const int var, const MultiRegions::ExpListSharedPtr &field)
NekDouble m_LhomZ
physical length in Z direction (if homogeneous)
bool m_useFFT
flag to determine if use or not the FFT for transformations
Array< OneD, Array< OneD, NekDouble > > m_gradBase
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Initialises the advection object.
Definition: Advection.cpp:98

◆ v_SetBaseFlow()

void Nektar::LinearisedAdvection::v_SetBaseFlow ( const Array< OneD, Array< OneD, NekDouble > > &  inarray,
const Array< OneD, MultiRegions::ExpListSharedPtr > &  fields 
)
protectedvirtual

Overrides the base flow used during linearised advection.

Reimplemented from Nektar::SolverUtils::Advection.

Definition at line 359 of file LinearisedAdvection.cpp.

References ASSERTL1, m_baseflow, m_session, UpdateGradBase(), and Vmath::Vcopy().

362 {
363  if (m_session->GetSolverInfo("EqType") == "UnsteadyNavierStokes")
364  {
365  // The SFD method is only applied to the velocity variables in
366  // incompressible
367  ASSERTL1(inarray.num_elements() == (m_baseflow.num_elements() - 1),
368  "Number of base flow variables does not match what is "
369  "expected.");
370  }
371  else
372  {
373  ASSERTL1(inarray.num_elements() == (m_baseflow.num_elements()),
374  "Number of base flow variables does not match what is expected.");
375  }
376 
377  int npts = inarray[0].num_elements();
378 
379  for (int i = 0; i < inarray.num_elements(); ++i)
380  {
381  ASSERTL1(npts == m_baseflow[i].num_elements(),
382  "Size of base flow array does not match expected.");
383  Vmath::Vcopy(npts, inarray[i], 1, m_baseflow[i], 1);
384  UpdateGradBase(i, fields[i]);
385  }
386 }
Array< OneD, Array< OneD, NekDouble > > m_baseflow
Storage for base flow.
LibUtilities::SessionReaderSharedPtr m_session
void UpdateGradBase(const int var, const MultiRegions::ExpListSharedPtr &field)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1064

Friends And Related Function Documentation

◆ MemoryManager< LinearisedAdvection >

friend class MemoryManager< LinearisedAdvection >
friend

Definition at line 60 of file LinearisedAdvection.h.

Member Data Documentation

◆ className

string Nektar::LinearisedAdvection::className
static
Initial value:

Name of class.

Definition at line 68 of file LinearisedAdvection.h.

◆ m_baseflow

Array<OneD, Array<OneD, NekDouble> > Nektar::LinearisedAdvection::m_baseflow
protected

◆ m_boundaryConditions

SpatialDomains::BoundaryConditionsSharedPtr Nektar::LinearisedAdvection::m_boundaryConditions
private

Definition at line 178 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_expdim

int Nektar::LinearisedAdvection::m_expdim
protected

Definition at line 74 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_FFT

LibUtilities::NektarFFTSharedPtr Nektar::LinearisedAdvection::m_FFT
protected

auxiliary variables

Definition at line 87 of file LinearisedAdvection.h.

Referenced by DFT().

◆ m_FloquetBlockMat

FloquetBlockMatrixMapShPtr Nektar::LinearisedAdvection::m_FloquetBlockMat
protected

Definition at line 104 of file LinearisedAdvection.h.

◆ m_gradBase

Array<OneD, Array<OneD, NekDouble> > Nektar::LinearisedAdvection::m_gradBase
protected

◆ m_halfMode

bool Nektar::LinearisedAdvection::m_halfMode
protected

flag to determine if use half mode or not

Definition at line 94 of file LinearisedAdvection.h.

Referenced by ImportFldBase(), UpdateGradBase(), Nektar::AdjointAdvection::v_Advect(), v_Advect(), and v_InitObject().

◆ m_HomoDirec

int Nektar::LinearisedAdvection::m_HomoDirec
private

number of homogenous directions

Definition at line 174 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_HomogeneousType

enum HomogeneousType Nektar::LinearisedAdvection::m_HomogeneousType
private

Definition at line 164 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_interp

Array<OneD, Array<OneD, NekDouble> > Nektar::LinearisedAdvection::m_interp
protected

interpolation vector

Definition at line 85 of file LinearisedAdvection.h.

Referenced by DFT(), ImportFldBase(), Nektar::AdjointAdvection::v_Advect(), and v_Advect().

◆ m_LhomX

NekDouble Nektar::LinearisedAdvection::m_LhomX
private

physical length in X direction (if homogeneous)

Definition at line 166 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_LhomY

NekDouble Nektar::LinearisedAdvection::m_LhomY
private

physical length in Y direction (if homogeneous)

Definition at line 167 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_LhomZ

NekDouble Nektar::LinearisedAdvection::m_LhomZ
private

physical length in Z direction (if homogeneous)

Definition at line 168 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_multipleModes

bool Nektar::LinearisedAdvection::m_multipleModes
protected

flag to determine if use multiple mode or not

Definition at line 96 of file LinearisedAdvection.h.

Referenced by Nektar::AdjointAdvection::v_Advect(), v_Advect(), and v_InitObject().

◆ m_npointsX

int Nektar::LinearisedAdvection::m_npointsX
private

number of points in X direction (if homogeneous)

Definition at line 170 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_npointsY

int Nektar::LinearisedAdvection::m_npointsY
private

number of points in Y direction (if homogeneous)

Definition at line 171 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_npointsZ

int Nektar::LinearisedAdvection::m_npointsZ
private

number of points in Z direction (if homogeneous)

Definition at line 172 of file LinearisedAdvection.h.

Referenced by ImportFldBase(), and v_InitObject().

◆ m_NumMode

int Nektar::LinearisedAdvection::m_NumMode
private

Mode to use in case of single mode analysis.

Definition at line 176 of file LinearisedAdvection.h.

◆ m_period

NekDouble Nektar::LinearisedAdvection::m_period
protected

period length

Definition at line 83 of file LinearisedAdvection.h.

Referenced by UpdateBase(), Nektar::AdjointAdvection::v_Advect(), v_Advect(), and v_InitObject().

◆ m_session

LibUtilities::SessionReaderSharedPtr Nektar::LinearisedAdvection::m_session
protected

Definition at line 71 of file LinearisedAdvection.h.

Referenced by ImportFldBase(), v_InitObject(), and v_SetBaseFlow().

◆ m_singleMode

bool Nektar::LinearisedAdvection::m_singleMode
protected

flag to determine if use single mode or not

Definition at line 92 of file LinearisedAdvection.h.

Referenced by ImportFldBase(), UpdateGradBase(), Nektar::AdjointAdvection::v_Advect(), v_Advect(), and v_InitObject().

◆ m_slices

int Nektar::LinearisedAdvection::m_slices
protected

◆ m_spacedim

int Nektar::LinearisedAdvection::m_spacedim
protected

◆ m_tmpIN

Array<OneD,NekDouble> Nektar::LinearisedAdvection::m_tmpIN
protected

Definition at line 88 of file LinearisedAdvection.h.

Referenced by DFT().

◆ m_tmpOUT

Array<OneD,NekDouble> Nektar::LinearisedAdvection::m_tmpOUT
protected

Definition at line 89 of file LinearisedAdvection.h.

Referenced by DFT().

◆ m_useFFT

bool Nektar::LinearisedAdvection::m_useFFT
private

flag to determine if use or not the FFT for transformations

Definition at line 162 of file LinearisedAdvection.h.

Referenced by v_InitObject().

◆ m_useFFTW

bool Nektar::LinearisedAdvection::m_useFFTW
protected

Definition at line 90 of file LinearisedAdvection.h.