Nektar++
Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
Nektar::MultiRegions::ExpListHomogeneous1D Class Reference

Abstraction of a two-dimensional multi-elemental expansion which is merely a collection of local expansions. More...

#include <ExpListHomogeneous1D.h>

Inheritance diagram for Nektar::MultiRegions::ExpListHomogeneous1D:
[legend]

Public Member Functions

 ExpListHomogeneous1D (const ExpansionType type)
 Default constructor. More...
 
 ExpListHomogeneous1D (const ExpansionType type, const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::BasisKey &HomoBasis, const NekDouble lz, const bool useFFT, const bool dealiasing)
 
 ExpListHomogeneous1D (const ExpListHomogeneous1D &In)
 Copy constructor. More...
 
 ExpListHomogeneous1D (const ExpListHomogeneous1D &In, const std::vector< unsigned int > &eIDs, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 
 ~ExpListHomogeneous1D () override
 Destructor. More...
 
void Homogeneous1DTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, bool Shuff=true, bool UnShuff=true)
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
void PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
 
void PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
ExpListSharedPtrGetPlane (int n)
 
- Public Member Functions inherited from Nektar::MultiRegions::ExpList
 ExpList (const ExpansionType Type=eNoType)
 The default constructor using a type. More...
 
 ExpList (const ExpList &in, const bool DeclareCoeffPhysArrays=true)
 The copy constructor. More...
 
 ExpList (const ExpList &in, const std::vector< unsigned int > &eIDs, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor copying only elements defined in eIds. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays=true, const std::string &var="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate an ExpList from a meshgraph graph and session file. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::ExpansionInfoMap &expansions, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Sets up a list of local expansions based on an expansion Map. More...
 
 ExpList (const SpatialDomains::PointGeomSharedPtr &geom)
 Specialised constructors for 0D Expansions Wrapper around LocalRegion::PointExp - used in PrePacing.cpp. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, const ExpListSharedPtr > &bndConstraint, const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > &bndCond, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph, const LibUtilities::CommSharedPtr &comm, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate expansions for the trace space expansions used in DisContField. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays, const std::string variable, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate an trace ExpList from a meshgraph graph and session file. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::CompositeMap &domain, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", bool SetToOneSpaceDimension=false, const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr(), const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor based on domain information only for 1D & 2D boundary conditions. More...
 
virtual ~ExpList ()
 The default destructor. More...
 
int GetNcoeffs (void) const
 Returns the total number of local degrees of freedom \(N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_m\). More...
 
int GetNcoeffs (const int eid) const
 Returns the total number of local degrees of freedom for element eid. More...
 
ExpansionType GetExpType (void)
 Returns the type of the expansion. More...
 
void SetExpType (ExpansionType Type)
 Returns the type of the expansion. More...
 
int EvalBasisNumModesMax (void) const
 Evaulates the maximum number of modes in the elemental basis order over all elements. More...
 
const Array< OneD, int > EvalBasisNumModesMaxPerExp (void) const
 Returns the vector of the number of modes in the elemental basis order over all elements. More...
 
int GetTotPoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int GetTotPoints (const int eid) const
 Returns the total number of quadrature points for eid's element \(=Q_{\mathrm{tot}}\). More...
 
int GetNpoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int Get1DScaledTotPoints (const NekDouble scale) const
 Returns the total number of qudature points scaled by the factor scale on each 1D direction. More...
 
void SetWaveSpace (const bool wavespace)
 Sets the wave space to the one of the possible configuration true or false. More...
 
void SetModifiedBasis (const bool modbasis)
 Set Modified Basis for the stability analysis. More...
 
bool GetWaveSpace (void) const
 This function returns the third direction expansion condition, which can be in wave space (coefficient) or not It is stored in the variable m_WaveSpace. More...
 
void SetPhys (int i, NekDouble val)
 Set the i th value of m_phys to value val. More...
 
void SetPhys (const Array< OneD, const NekDouble > &inarray)
 Fills the array m_phys. More...
 
void SetPhysArray (Array< OneD, NekDouble > &inarray)
 Sets the array m_phys. More...
 
void SetPhysState (const bool physState)
 This function manually sets whether the array of physical values \(\boldsymbol{u}_l\) (implemented as m_phys) is filled or not. More...
 
bool GetPhysState (void) const
 This function indicates whether the array of physical values \(\boldsymbol{u}_l\) (implemented as m_phys) is filled or not. More...
 
void MultiplyByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 multiply the metric jacobi and quadrature weights More...
 
void DivideByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Divided by the metric jacobi and quadrature weights. More...
 
void IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to all local expansion modes \(\phi_n^e(\boldsymbol{x})\). More...
 
void IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative (in direction. More...
 
void IProductWRTDirectionalDerivBase (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Directional derivative along a given direction. More...
 
void IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative of all local expansion modes \(\phi_n^e(\boldsymbol{x})\). More...
 
void FwdTransLocalElmt (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the forward transformation of a function \(u(\boldsymbol{x})\) onto the global spectral/hp expansion. More...
 
void FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void ExponentialFilter (Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff)
 
void MultiplyByElmtInvMass (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally mulplies the coefficient space of Sin my the elemental inverse of the mass matrix. More...
 
void MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void MultiplyByMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void SmoothField (Array< OneD, NekDouble > &field)
 Smooth a field across elements. More...
 
GlobalLinSysKey HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const MultiRegions::VarFactorsMap &varfactors=MultiRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve helmholtz problem. More...
 
GlobalLinSysKey LinearAdvectionDiffusionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const MultiRegions::VarFactorsMap &varfactors=MultiRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve Advection Diffusion Reaction. More...
 
void LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void FwdTransBndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the backward transformation of the global spectral/hp element expansion. More...
 
void GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 This function calculates the coordinates of all the elemental quadrature points \(\boldsymbol{x}_i\). More...
 
void GetCoords (const int eid, Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
void HomogeneousFwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
void DealiasedProd (const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
void DealiasedDotProd (const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
void GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
void ApplyGeomInfo ()
 Apply geometry information to each expansion. More...
 
void Reset ()
 Reset geometry information and reset matrices. More...
 
void WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
void WriteTecplotZone (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotField (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotConnectivity (std::ostream &outfile, int expansion=-1)
 
void WriteVtkHeader (std::ostream &outfile)
 
void WriteVtkFooter (std::ostream &outfile)
 
void WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip=0)
 
void WriteVtkPieceFooter (std::ostream &outfile, int expansion)
 
void WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var="v")
 
int GetCoordim (int eid)
 This function returns the dimension of the coordinates of the element eid. More...
 
void SetCoeff (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffs (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffsArray (Array< OneD, NekDouble > &inarray)
 Set the m_coeffs array to inarray. More...
 
int GetShapeDimension ()
 This function returns the dimension of the shape of the element eid. More...
 
const Array< OneD, const NekDouble > & GetCoeffs () const
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
void ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 Impose Dirichlet Boundary Conditions onto Array. More...
 
void FillBndCondFromField (const Array< OneD, NekDouble > coeffs)
 Fill Bnd Condition expansion from the values stored in expansion. More...
 
void FillBndCondFromField (const int nreg, const Array< OneD, NekDouble > coeffs)
 Fill Bnd Condition expansion in nreg from the values stored in expansion. More...
 
void LocalToGlobal (bool useComm=true)
 Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
void LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm=true)
 
void GlobalToLocal (void)
 Scatters from the global coefficients \(\boldsymbol{\hat{u}}_g\) to the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
void GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
NekDouble GetCoeff (int i)
 Get the i th value (coefficient) of m_coeffs. More...
 
NekDouble GetCoeffs (int i)
 Get the i th value (coefficient) of m_coeffs. More...
 
const Array< OneD, const NekDouble > & GetPhys () const
 This function returns (a reference to) the array \(\boldsymbol{u}_l\) (implemented as m_phys) containing the function \(u^{\delta}(\boldsymbol{x})\) evaluated at the quadrature points. More...
 
NekDouble Linf (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 This function calculates the \(L_\infty\) error of the global spectral/hp element approximation. More...
 
NekDouble L2 (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 This function calculates the \(L_\infty\) error of the global This function calculates the \(L_2\) error with respect to soln of the global spectral/hp element approximation. More...
 
NekDouble H1 (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 Calculates the \(H^1\) error of the global spectral/hp element approximation. More...
 
NekDouble Integral ()
 Calculates the \(H^1\) error of the global spectral/hp element approximation. More...
 
NekDouble Integral (const Array< OneD, const NekDouble > &inarray)
 
NekDouble VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
Array< OneD, const NekDoubleHomogeneousEnergy (void)
 This function calculates the energy associated with each one of the modesof a 3D homogeneous nD expansion. More...
 
void SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 This function sets the Spectral Vanishing Viscosity in homogeneous1D expansion. More...
 
Array< OneD, const unsigned int > GetZIDs (void)
 This function returns a vector containing the wave numbers in z-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
LibUtilities::TranspositionSharedPtr GetTransposition (void)
 This function returns the transposition class associated with the homogeneous expansion. More...
 
NekDouble GetHomoLen (void)
 This function returns the Width of homogeneous direction associated with the homogeneous expansion. More...
 
void SetHomoLen (const NekDouble lhom)
 This function sets the Width of homogeneous direction associated with the homogeneous expansion. More...
 
Array< OneD, const unsigned int > GetYIDs (void)
 This function returns a vector containing the wave numbers in y-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
void PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function interpolates the physical space points in inarray to outarray using the same points defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
void PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function Galerkin projects the physical space points in inarray to outarray where inarray is assumed to be defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
int GetExpSize (void)
 This function returns the number of elements in the expansion. More...
 
size_t GetNumElmts (void)
 This function returns the number of elements in the expansion which may be different for a homogeoenous extended expansionp. More...
 
const std::shared_ptr< LocalRegions::ExpansionVectorGetExp () const
 This function returns the vector of elements in the expansion. More...
 
LocalRegions::ExpansionSharedPtrGetExp (int n) const
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element. More...
 
LocalRegions::ExpansionSharedPtrGetExpFromGeomId (int n)
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element given a global geometry ID. More...
 
LocalRegions::ExpansionSharedPtrGetExp (const Array< OneD, const NekDouble > &gloCoord)
 This function returns (a shared pointer to) the local elemental expansion containing the arbitrary point given by gloCoord. More...
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoord, NekDouble tol=0.0, bool returnNearestElmt=false, int cachedId=-1, NekDouble maxDistance=1e6)
 This function returns the index of the local elemental expansion containing the arbitrary point given by gloCoord, within a distance tolerance of tol. More...
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoords, Array< OneD, NekDouble > &locCoords, NekDouble tol=0.0, bool returnNearestElmt=false, int cachedId=-1, NekDouble maxDistance=1e6)
 
NekDouble PhysEvaluate (const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &phys)
 
int GetCoeff_Offset (int n) const
 Get the start offset position for a local contiguous list of coeffs correspoinding to element n. More...
 
int GetPhys_Offset (int n) const
 Get the start offset position for a local contiguous list of quadrature points in a full array correspoinding to element n. More...
 
Array< OneD, NekDouble > & UpdateCoeffs ()
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
Array< OneD, NekDouble > & UpdatePhys ()
 This function returns (a reference to) the array \(\boldsymbol{u}_l\) (implemented as m_phys) containing the function \(u^{\delta}(\boldsymbol{x})\) evaluated at the quadrature points. More...
 
void PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
 This function discretely evaluates the derivative of a function \(f(\boldsymbol{x})\) on the domain consisting of all elements of the expansion. More...
 
void PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void Curl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
void CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
void PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
const Array< OneD, const std::shared_ptr< ExpList > > & GetBndCondExpansions ()
 
const Array< OneD, const NekDouble > & GetBndCondBwdWeight ()
 Get the weight value for boundary conditions. More...
 
void SetBndCondBwdWeight (const int index, const NekDouble value)
 Set the weight value for boundary conditions. More...
 
std::shared_ptr< ExpList > & UpdateBndCondExpansion (int i)
 
void Upwind (const Array< OneD, const NekDouble > &Vn, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
void Upwind (const Array< OneD, const Array< OneD, NekDouble > > &Vec, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
std::shared_ptr< ExpList > & GetTrace ()
 
std::shared_ptr< AssemblyMapDG > & GetTraceMap (void)
 
const Array< OneD, const int > & GetTraceBndMap (void)
 
void GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 
void GetElmtNormalLength (Array< OneD, NekDouble > &lengthsFwd, Array< OneD, NekDouble > &lengthsBwd)
 Get the length of elements in boundary normal direction. More...
 
void GetBwdWeight (Array< OneD, NekDouble > &weightAver, Array< OneD, NekDouble > &weightJump)
 Get the weight value for boundary conditions for boundary average and jump calculations. More...
 
void AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
 
void AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
 
void GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
void GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool FillBnd=true, bool PutFwdInBwdOnBCs=false, bool DoExchange=true)
 
void FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool PutFwdInBwdOnBCs=false)
 
void AddTraceQuadPhysToField (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 Add Fwd and Bwd value to field, a reverse procedure of GetFwdBwdTracePhys. More...
 
void AddTraceQuadPhysToOffDiag (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
void GetLocTraceFromTracePts (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &locTraceFwd, Array< OneD, NekDouble > &locTraceBwd)
 
void FillBwdWithBwdWeight (Array< OneD, NekDouble > &weightave, Array< OneD, NekDouble > &weightjmp)
 Fill Bwd with boundary conditions. More...
 
void PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 Copy and fill the Periodic boundaries. More...
 
const std::vector< bool > & GetLeftAdjacentFaces (void) const
 
void ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
void ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions ()
 
Array< OneD, SpatialDomains::BoundaryConditionShPtr > & UpdateBndConditions ()
 
void EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
 
void GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the result of the multiplication of a matrix of type specified by mkey with a vector given by inarray. More...
 
void SetUpPhysNormals ()
 
void GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
virtual void GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays=true)
 
void ExtractElmtToBndPhys (int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
void ExtractPhysToBndElmt (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
void ExtractPhysToBnd (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
void GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
void GeneralGetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef, int NumHomoDir=0, Array< OneD, LibUtilities::BasisSharedPtr > &HomoBasis=LibUtilities::NullBasisSharedPtr1DArray, std::vector< NekDouble > &HomoLen=LibUtilities::NullNekDoubleVector, bool homoStrips=false, std::vector< unsigned int > &HomoSIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoZIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoYIDs=LibUtilities::NullUnsignedIntVector)
 
std::map< int, RobinBCInfoSharedPtrGetRobinBCInfo ()
 
void GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces=NullPeriodicMap)
 
std::vector< LibUtilities::FieldDefinitionsSharedPtrGetFieldDefinitions ()
 
void GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 Append the element data listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 Append the data in coeffs listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void ExtractElmtDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract the data in fielddata into the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 Extract the data from fromField using fromExpList the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane=std::unordered_map< int, int >())
 Extract the data in fielddata into the coeffs. More...
 
void ExtractCoeffsFromFile (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, Array< OneD, NekDouble > &coeffs)
 
void GenerateElementVector (const int ElementID, const NekDouble scalar1, const NekDouble scalar2, Array< OneD, NekDouble > &outarray)
 Generate vector v such that v[i] = scalar1 if i is in the element < ElementID. Otherwise, v[i] = scalar2. More...
 
std::shared_ptr< ExpListGetSharedThisPtr ()
 Returns a shared pointer to the current object. More...
 
std::shared_ptr< LibUtilities::SessionReaderGetSession () const
 Returns the session object. More...
 
std::shared_ptr< LibUtilities::CommGetComm () const
 Returns the comm object. More...
 
SpatialDomains::MeshGraphSharedPtr GetGraph ()
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
std::shared_ptr< ExpList > & GetPlane (int n)
 
void CreateCollections (Collections::ImplementationType ImpType=Collections::eNoImpType)
 Construct collections of elements containing a single element type and polynomial order from the list of expansions. More...
 
void ClearGlobalLinSysManager (void)
 
int GetPoolCount (std::string)
 
void UnsetGlobalLinSys (GlobalLinSysKey, bool)
 
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > & GetGlobalLinSysManager (void)
 
const Array< OneD, const std::pair< int, int > > & GetCoeffsToElmt () const
 Get m_coeffs to elemental value map. More...
 
void AddTraceJacToElmtJac (const Array< OneD, const DNekMatSharedPtr > &FwdMat, const Array< OneD, const DNekMatSharedPtr > &BwdMat, Array< OneD, DNekMatSharedPtr > &fieldMat)
 inverse process of v_GetFwdBwdTracePhys. Given Trace integration of Fwd and Bwd Jacobian, with dimension NtotalTrace*TraceCoef*TracePhys. return Elemental Jacobian matrix with dimension NtotalElement*ElementCoef*ElementPhys. More...
 
void GetMatIpwrtDeriveBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, const int nDirctn, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetMatIpwrtDeriveBase (const TensorOfArray3D< NekDouble > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetDiagMatIpwrtBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void AddTraceIntegralToOffDiag (const Array< OneD, const NekDouble > &FwdFlux, const Array< OneD, const NekDouble > &BwdFlux, Array< OneD, NekDouble > &outarray)
 
void AddRightIPTPhysDerivBase (const int dir, const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
void AddRightIPTBaseMatrix (const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
const LocTraceToTraceMapSharedPtrGetLocTraceToTraceMap () const
 
std::vector< bool > & GetLeftAdjacentTraces (void)
 
const std::unordered_map< int, int > & GetElmtToExpId (void)
 This function returns the map of index inside m_exp to geom id. More...
 
int GetElmtToExpId (int elmtId)
 This function returns the index inside m_exp for a given geom id. More...
 

Public Attributes

LibUtilities::TranspositionSharedPtr m_transposition
 
LibUtilities::CommSharedPtr m_StripZcomm
 

Protected Member Functions

DNekBlkMatSharedPtr GenHomogeneous1DBlockMatrix (Homogeneous1DMatType mattype) const
 
DNekBlkMatSharedPtr GetHomogeneous1DBlockMatrix (Homogeneous1DMatType mattype) const
 
NekDouble GetSpecVanVisc (const int k)
 
void v_SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc) override
 
size_t v_GetNumElmts (void) override
 
LibUtilities::BasisSharedPtr v_GetHomogeneousBasis (void) override
 
void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_FwdTransLocalElmt (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_FwdTransBndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray) override
 
std::vector< LibUtilities::FieldDefinitionsSharedPtrv_GetFieldDefinitions (void) override
 
void v_GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef) override
 
void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata) override
 
void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs) override
 
void v_ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane) override
 Extract data from raw field data into expansion list. More...
 
void v_ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs) override
 
void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var) override
 
void v_PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 
void v_HomogeneousFwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true) override
 
void v_HomogeneousBwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true) override
 
void v_DealiasedProd (const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray) override
 
void v_DealiasedDotProd (const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray) override
 
void v_PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2) override
 
void v_PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d) override
 
LibUtilities::TranspositionSharedPtr v_GetTransposition (void) override
 
Array< OneD, const unsigned int > v_GetZIDs (void) override
 
ExpListSharedPtrv_GetPlane (int n) override
 
NekDouble v_GetHomoLen (void) override
 
void v_SetHomoLen (const NekDouble lhom) override
 
NekDouble v_Integral (const Array< OneD, const NekDouble > &inarray) override
 
- Protected Member Functions inherited from Nektar::MultiRegions::ExpList
std::shared_ptr< DNekMatGenGlobalMatrixFull (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 
const DNekScalBlkMatSharedPtr GenBlockMatrix (const GlobalMatrixKey &gkey)
 This function assembles the block diagonal matrix of local matrices of the type mtype. More...
 
const DNekScalBlkMatSharedPtrGetBlockMatrix (const GlobalMatrixKey &gkey)
 
void MultiplyByBlockMatrix (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
std::shared_ptr< GlobalMatrixGenGlobalMatrix (const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 Generates a global matrix from the given key and map. More...
 
void GlobalEigenSystem (const std::shared_ptr< DNekMat > &Gmat, Array< OneD, NekDouble > &EigValsReal, Array< OneD, NekDouble > &EigValsImag, Array< OneD, NekDouble > &EigVecs=NullNekDouble1DArray)
 
std::shared_ptr< GlobalLinSysGenGlobalLinSys (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 This operation constructs the global linear system of type mkey. More...
 
std::shared_ptr< GlobalLinSysGenGlobalBndLinSys (const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
 Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocToGloBaseMap. More...
 
virtual size_t v_GetNumElmts (void)
 
virtual const Array< OneD, const std::shared_ptr< ExpList > > & v_GetBndCondExpansions (void)
 
virtual const Array< OneD, const NekDouble > & v_GetBndCondBwdWeight ()
 
virtual void v_SetBndCondBwdWeight (const int index, const NekDouble value)
 
virtual std::shared_ptr< ExpList > & v_UpdateBndCondExpansion (int i)
 
virtual void v_Upwind (const Array< OneD, const Array< OneD, NekDouble > > &Vec, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
virtual void v_Upwind (const Array< OneD, const NekDouble > &Vn, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
virtual std::shared_ptr< ExpList > & v_GetTrace ()
 
virtual std::shared_ptr< AssemblyMapDG > & v_GetTraceMap ()
 
virtual const Array< OneD, const int > & v_GetTraceBndMap ()
 
virtual const std::shared_ptr< LocTraceToTraceMap > & v_GetLocTraceToTraceMap (void) const
 
virtual std::vector< bool > & v_GetLeftAdjacentTraces (void)
 
virtual void v_GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 Populate normals with the normals of all expansions. More...
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
 
virtual void v_AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
virtual void v_GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool FillBnd=true, bool PutFwdInBwdOnBCs=false, bool DoExchange=true)
 
virtual void v_FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool PutFwdInBwdOnBCs)
 
virtual void v_AddTraceQuadPhysToField (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
virtual void v_AddTraceQuadPhysToOffDiag (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
virtual void v_GetLocTraceFromTracePts (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &locTraceFwd, Array< OneD, NekDouble > &locTraceBwd)
 
virtual void v_FillBwdWithBwdWeight (Array< OneD, NekDouble > &weightave, Array< OneD, NekDouble > &weightjmp)
 
virtual void v_PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
virtual const std::vector< bool > & v_GetLeftAdjacentFaces (void) const
 
virtual void v_ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
virtual void v_ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual GlobalLinSysKey v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const MultiRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
 
virtual GlobalLinSysKey v_LinearAdvectionDiffusionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const MultiRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
 
virtual void v_LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual void v_ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 
virtual void v_FillBndCondFromField (const Array< OneD, NekDouble > coeffs)
 
virtual void v_FillBndCondFromField (const int nreg, const Array< OneD, NekDouble > coeffs)
 
virtual void v_Reset ()
 Reset geometry information, metrics, matrix managers and geometry information. More...
 
virtual void v_LocalToGlobal (bool UseComm)
 
virtual void v_LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool UseComm)
 
virtual void v_GlobalToLocal (void)
 
virtual void v_GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTransLocalElmt (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTransBndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_SmoothField (Array< OneD, NekDouble > &field)
 
virtual void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
virtual void v_GetCoords (const int eid, Array< OneD, NekDouble > &xc0, Array< OneD, NekDouble > &xc1, Array< OneD, NekDouble > &xc2)
 
virtual void v_PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
 
virtual void v_PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_Curl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_HomogeneousFwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_HomogeneousBwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_DealiasedProd (const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
virtual void v_DealiasedDotProd (const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
virtual void v_SetUpPhysNormals ()
 : Set up a normal along the trace elements between two elements at elemental level More...
 
virtual void v_GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
virtual void v_GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays)
 
virtual void v_ExtractElmtToBndPhys (const int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
virtual void v_ExtractPhysToBndElmt (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
virtual void v_ExtractPhysToBnd (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
virtual void v_GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
virtual std::vector< LibUtilities::FieldDefinitionsSharedPtrv_GetFieldDefinitions (void)
 
virtual void v_GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 
virtual void v_ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane)
 Extract data from raw field data into expansion list. More...
 
virtual void v_ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 
virtual void v_WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
virtual void v_WriteTecplotZone (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotField (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotConnectivity (std::ostream &outfile, int expansion)
 
virtual void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var)
 
virtual void v_WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip)
 
virtual NekDouble v_L2 (const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 
virtual NekDouble v_Integral (const Array< OneD, const NekDouble > &inarray)
 
virtual NekDouble v_VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
virtual Array< OneD, const NekDoublev_HomogeneousEnergy (void)
 
virtual LibUtilities::TranspositionSharedPtr v_GetTransposition (void)
 
virtual NekDouble v_GetHomoLen (void)
 
virtual void v_SetHomoLen (const NekDouble lhom)
 
virtual Array< OneD, const unsigned int > v_GetZIDs (void)
 
virtual Array< OneD, const unsigned int > v_GetYIDs (void)
 
virtual void v_PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_ClearGlobalLinSysManager (void)
 
virtual int v_GetPoolCount (std::string)
 
virtual void v_UnsetGlobalLinSys (GlobalLinSysKey, bool)
 
virtual LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > & v_GetGlobalLinSysManager (void)
 
void ExtractFileBCs (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, const std::shared_ptr< ExpList > locExpList)
 
virtual const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & v_GetBndConditions ()
 
virtual Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions ()
 
virtual void v_EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
 
virtual std::map< int, RobinBCInfoSharedPtrv_GetRobinBCInfo (void)
 
virtual void v_GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces)
 
virtual LibUtilities::BasisSharedPtr v_GetHomogeneousBasis (void)
 
virtual void v_SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 
virtual std::shared_ptr< ExpList > & v_GetPlane (int n)
 
virtual void v_AddTraceIntegralToOffDiag (const Array< OneD, const NekDouble > &FwdFlux, const Array< OneD, const NekDouble > &BwdFlux, Array< OneD, NekDouble > &outarray)
 

Protected Attributes

bool m_useFFT
 FFT variables. More...
 
LibUtilities::NektarFFTSharedPtr m_FFT
 
LibUtilities::NektarFFTSharedPtr m_FFT_deal
 
Array< OneD, NekDoublem_tmpIN
 
Array< OneD, NekDoublem_tmpOUT
 
LibUtilities::BasisSharedPtr m_homogeneousBasis
 Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m_coeff and m_phys. More...
 
NekDouble m_lhom
 Width of homogeneous direction. More...
 
Homo1DBlockMatrixMapShPtr m_homogeneous1DBlockMat
 
Array< OneD, ExpListSharedPtrm_planes
 
- Protected Attributes inherited from Nektar::MultiRegions::ExpList
ExpansionType m_expType
 Exapnsion type. More...
 
LibUtilities::CommSharedPtr m_comm
 Communicator. More...
 
LibUtilities::SessionReaderSharedPtr m_session
 Session. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Mesh associated with this expansion list. More...
 
int m_ncoeffs
 The total number of local degrees of freedom. m_ncoeffs \(=N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_l\). More...
 
int m_npoints
 
Array< OneD, NekDoublem_coeffs
 Concatenation of all local expansion coefficients. More...
 
Array< OneD, NekDoublem_phys
 The global expansion evaluated at the quadrature points. More...
 
bool m_physState
 The state of the array m_phys. More...
 
std::shared_ptr< LocalRegions::ExpansionVectorm_exp
 The list of local expansions. More...
 
Collections::CollectionVector m_collections
 
std::vector< bool > m_collectionsDoInit
 Vector of bools to act as an initialise on first call flag. More...
 
std::vector< int > m_coll_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
std::vector< int > m_coll_phys_offset
 Offset of elemental data into the array m_phys. More...
 
Array< OneD, int > m_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
Array< OneD, int > m_phys_offset
 Offset of elemental data into the array m_phys. More...
 
Array< OneD, std::pair< int, int > > m_coeffsToElmt
 m_coeffs to elemental value map More...
 
BlockMatrixMapShPtr m_blockMat
 
bool m_WaveSpace
 
std::unordered_map< int, int > m_elmtToExpId
 Mapping from geometry ID of element to index inside m_exp. More...
 

Private Attributes

bool m_dealiasing
 
int m_padsize
 
Array< OneD, NekDoublem_specVanVisc
 Spectral vanishing Viscosity coefficient for stabilisation. More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from Nektar::MultiRegions::ExpList
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition (const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
 

Detailed Description

Abstraction of a two-dimensional multi-elemental expansion which is merely a collection of local expansions.

Definition at line 73 of file ExpListHomogeneous1D.h.

Constructor & Destructor Documentation

◆ ExpListHomogeneous1D() [1/4]

Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpansionType  type)

Default constructor.

Definition at line 47 of file ExpListHomogeneous1D.cpp.

51{
52}
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
NekDouble m_lhom
Width of homogeneous direction.
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
ExpList(const ExpansionType Type=eNoType)
The default constructor using a type.
Definition: ExpList.cpp:90
static BasisSharedPtr NullBasisSharedPtr
Definition: Basis.h:350

◆ ExpListHomogeneous1D() [2/4]

Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpansionType  type,
const LibUtilities::SessionReaderSharedPtr pSession,
const LibUtilities::BasisKey HomoBasis,
const NekDouble  lz,
const bool  useFFT,
const bool  dealiasing 
)

Definition at line 54 of file ExpListHomogeneous1D.cpp.

59 : ExpList(type), m_useFFT(useFFT), m_lhom(lhom),
62 m_dealiasing(dealiasing)
63{
64 m_session = pSession;
65 m_comm = pSession->GetComm();
66
68 "Homogeneous Basis is a null basis");
69
71
72 m_StripZcomm = m_session->DefinesSolverInfo("HomoStrip")
73 ? m_comm->GetColumnComm()->GetColumnComm()
74 : m_comm->GetColumnComm();
75
76 ASSERTL0(m_homogeneousBasis->GetNumPoints() % m_StripZcomm->GetSize() == 0,
77 "HomModesZ should be a multiple of npz.");
78
79 if ((m_homogeneousBasis->GetBasisType() !=
81 (m_homogeneousBasis->GetBasisType() !=
83 {
85 (m_homogeneousBasis->GetNumPoints() / m_StripZcomm->GetSize()) %
86 2 ==
87 0,
88 "HomModesZ/npz should be an even integer.");
89 }
90
93 HomoBasis, m_comm, m_StripZcomm);
94
95 m_planes = Array<OneD, ExpListSharedPtr>(
96 m_homogeneousBasis->GetNumPoints() / m_StripZcomm->GetSize());
97
98 if (m_useFFT)
99 {
101 "NekFFTW", m_homogeneousBasis->GetNumPoints());
102 }
103
104 if (m_dealiasing)
105 {
106 if (m_useFFT)
107 {
108 int size = m_homogeneousBasis->GetNumPoints() +
109 m_homogeneousBasis->GetNumPoints() / 2;
110 m_padsize = size + (size % 2);
112 "NekFFTW", m_padsize);
113 }
114 else
115 {
116 ASSERTL0(false, "Dealiasing available just in combination "
117 "with FFTW");
118 }
119 }
120}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
Definition: ErrorUtil.hpp:265
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:143
LibUtilities::TranspositionSharedPtr m_transposition
Array< OneD, ExpListSharedPtr > m_planes
LibUtilities::NektarFFTSharedPtr m_FFT_deal
LibUtilities::NektarFFTSharedPtr m_FFT
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:1053
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1055
BasisManagerT & BasisManager(void)
NektarFFTFactory & GetNektarFFTFactory()
Definition: NektarFFT.cpp:65
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
@ eFourierHalfModeIm
Fourier Modified expansions with just the imaginary part of the first mode .
Definition: BasisType.h:68
@ eFourierHalfModeRe
Fourier Modified expansions with just the real part of the first mode .
Definition: BasisType.h:66

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, ASSERTL2, Nektar::LibUtilities::BasisManager(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::LibUtilities::GetNektarFFTFactory(), Nektar::MultiRegions::ExpList::m_comm, m_dealiasing, m_FFT, m_FFT_deal, m_homogeneousBasis, m_padsize, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_transposition, m_useFFT, and Nektar::LibUtilities::NullBasisKey().

◆ ExpListHomogeneous1D() [3/4]

Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpListHomogeneous1D In)

Copy constructor.

Parameters
InExpListHomogeneous1D object to copy.

Definition at line 125 of file ExpListHomogeneous1D.cpp.

126 : ExpList(In, false), m_transposition(In.m_transposition),
127 m_StripZcomm(In.m_StripZcomm), m_useFFT(In.m_useFFT), m_FFT(In.m_FFT),
128 m_tmpIN(In.m_tmpIN), m_tmpOUT(In.m_tmpOUT),
129 m_homogeneousBasis(In.m_homogeneousBasis), m_lhom(In.m_lhom),
130 m_homogeneous1DBlockMat(In.m_homogeneous1DBlockMat),
131 m_dealiasing(In.m_dealiasing), m_padsize(In.m_padsize)
132{
133 m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.size());
134}

References m_planes.

◆ ExpListHomogeneous1D() [4/4]

Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpListHomogeneous1D In,
const std::vector< unsigned int > &  eIDs,
const Collections::ImplementationType  ImpType = Collections::eNoImpType 
)

Definition at line 136 of file ExpListHomogeneous1D.cpp.

139 : ExpList(In, eIDs, false, ImpType), m_transposition(In.m_transposition),
140 m_useFFT(In.m_useFFT), m_FFT(In.m_FFT), m_tmpIN(In.m_tmpIN),
141 m_tmpOUT(In.m_tmpOUT), m_homogeneousBasis(In.m_homogeneousBasis),
142 m_lhom(In.m_lhom),
145 m_dealiasing(In.m_dealiasing), m_padsize(In.m_padsize)
146{
147 m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.size());
148}

References m_planes.

◆ ~ExpListHomogeneous1D()

Nektar::MultiRegions::ExpListHomogeneous1D::~ExpListHomogeneous1D ( )
override

Destructor.

Destructor

Definition at line 153 of file ExpListHomogeneous1D.cpp.

154{
155}

Member Function Documentation

◆ GenHomogeneous1DBlockMatrix()

DNekBlkMatSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GenHomogeneous1DBlockMatrix ( Homogeneous1DMatType  mattype) const
protected

Definition at line 880 of file ExpListHomogeneous1D.cpp.

882{
883 DNekMatSharedPtr loc_mat;
884 DNekBlkMatSharedPtr BlkMatrix;
885 int n_exp = 0;
886 int num_trans_per_proc = 0;
887
888 if ((mattype == eForwardsCoeffSpace1D) ||
889 (mattype == eBackwardsCoeffSpace1D)) // will operate on coeffs
890 {
891 n_exp = m_planes[0]->GetNcoeffs();
892 }
893 else
894 {
895 n_exp = m_planes[0]->GetTotPoints(); // will operatore on phys
896 }
897
898 num_trans_per_proc = n_exp / m_comm->GetColumnComm()->GetSize() +
899 (n_exp % m_comm->GetColumnComm()->GetSize() > 0);
900
901 Array<OneD, unsigned int> nrows(num_trans_per_proc);
902 Array<OneD, unsigned int> ncols(num_trans_per_proc);
903
904 if ((mattype == eForwardsCoeffSpace1D) || (mattype == eForwardsPhysSpace1D))
905 {
906 nrows = Array<OneD, unsigned int>(num_trans_per_proc,
907 m_homogeneousBasis->GetNumModes());
908 ncols = Array<OneD, unsigned int>(num_trans_per_proc,
909 m_homogeneousBasis->GetNumPoints());
910 }
911 else
912 {
913 nrows = Array<OneD, unsigned int>(num_trans_per_proc,
914 m_homogeneousBasis->GetNumPoints());
915 ncols = Array<OneD, unsigned int>(num_trans_per_proc,
916 m_homogeneousBasis->GetNumModes());
917 }
918
919 MatrixStorage blkmatStorage = eDIAGONAL;
920 BlkMatrix = MemoryManager<DNekBlkMat>::AllocateSharedPtr(nrows, ncols,
921 blkmatStorage);
922
923 // Half Mode
924 if (m_homogeneousBasis->GetBasisType() ==
927 {
928 StdRegions::StdPointExp StdPoint(m_homogeneousBasis->GetBasisKey());
929
930 if ((mattype == eForwardsCoeffSpace1D) ||
931 (mattype == eForwardsPhysSpace1D))
932 {
933 StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
934 StdPoint.DetShapeType(), StdPoint);
935
936 loc_mat = StdPoint.GetStdMatrix(matkey);
937 }
938 else
939 {
940 StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
941 StdPoint.DetShapeType(), StdPoint);
942
943 loc_mat = StdPoint.GetStdMatrix(matkey);
944 }
945 }
946 // other cases
947 else
948 {
949 StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
950
951 if ((mattype == eForwardsCoeffSpace1D) ||
952 (mattype == eForwardsPhysSpace1D))
953 {
954 StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
955 StdSeg.DetShapeType(), StdSeg);
956
957 loc_mat = StdSeg.GetStdMatrix(matkey);
958 }
959 else
960 {
961 StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
962 StdSeg.DetShapeType(), StdSeg);
963
964 loc_mat = StdSeg.GetStdMatrix(matkey);
965 }
966 }
967
968 // set up array of block matrices.
969 for (int i = 0; i < num_trans_per_proc; ++i)
970 {
971 BlkMatrix->SetBlock(i, i, loc_mat);
972 }
973
974 return BlkMatrix;
975}
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
Definition: NekTypeDefs.hpp:77
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:75

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::StdRegions::StdExpansion::DetShapeType(), Nektar::MultiRegions::eBackwardsCoeffSpace1D, Nektar::StdRegions::eBwdTrans, Nektar::eDIAGONAL, Nektar::MultiRegions::eForwardsCoeffSpace1D, Nektar::MultiRegions::eForwardsPhysSpace1D, Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::StdRegions::eFwdTrans, Nektar::StdRegions::StdExpansion::GetStdMatrix(), Nektar::MultiRegions::ExpList::m_comm, m_homogeneousBasis, and m_planes.

Referenced by GetHomogeneous1DBlockMatrix().

◆ GetHomogeneous1DBlockMatrix()

DNekBlkMatSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GetHomogeneous1DBlockMatrix ( Homogeneous1DMatType  mattype) const
protected

Definition at line 864 of file ExpListHomogeneous1D.cpp.

866{
867 auto matrixIter = m_homogeneous1DBlockMat->find(mattype);
868
869 if (matrixIter == m_homogeneous1DBlockMat->end())
870 {
871 return ((*m_homogeneous1DBlockMat)[mattype] =
873 }
874 else
875 {
876 return matrixIter->second;
877 }
878}
DNekBlkMatSharedPtr GenHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype) const

References GenHomogeneous1DBlockMatrix(), and m_homogeneous1DBlockMat.

Referenced by Homogeneous1DTrans().

◆ GetHomogeneousBasis()

LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GetHomogeneousBasis ( void  )
inline

Definition at line 101 of file ExpListHomogeneous1D.h.

102 {
103 return m_homogeneousBasis;
104 }

References m_homogeneousBasis.

Referenced by v_GetHomogeneousBasis().

◆ GetPlane()

ExpListSharedPtr & Nektar::MultiRegions::ExpListHomogeneous1D::GetPlane ( int  n)
inline

Definition at line 115 of file ExpListHomogeneous1D.h.

116 {
117 return m_planes[n];
118 }

References m_planes.

Referenced by v_GetPlane().

◆ GetSpecVanVisc()

NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::GetSpecVanVisc ( const int  k)
inlineprotected

Definition at line 147 of file ExpListHomogeneous1D.h.

148 {
149 NekDouble returnval = 0.0;
150
151 if (m_specVanVisc.size())
152 {
153 returnval = m_specVanVisc[k];
154 }
155
156 return returnval;
157 }
Array< OneD, NekDouble > m_specVanVisc
Spectral vanishing Viscosity coefficient for stabilisation.
double NekDouble

References m_specVanVisc.

Referenced by Nektar::MultiRegions::ContField3DHomogeneous1D::v_HelmSolve(), and Nektar::MultiRegions::DisContField3DHomogeneous1D::v_HelmSolve().

◆ Homogeneous1DTrans()

void Nektar::MultiRegions::ExpListHomogeneous1D::Homogeneous1DTrans ( const int  num_dofs,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
bool  IsForwards,
bool  Shuff = true,
bool  UnShuff = true 
)

Homogeneous transform Bwd/Fwd (MVM and FFT)

Definition at line 732 of file ExpListHomogeneous1D.cpp.

735{
736
737 if (m_useFFT)
738 {
739 int num_points_per_plane = num_dofs / m_planes.size();
740 int num_dfts_per_proc;
741 if (!m_session->DefinesSolverInfo("HomoStrip"))
742 {
743 int nP = m_comm->GetColumnComm()->GetSize();
744 num_dfts_per_proc =
745 num_points_per_plane / nP + (num_points_per_plane % nP > 0);
746 }
747 else
748 {
749 int nP = m_StripZcomm->GetSize();
750 num_dfts_per_proc =
751 num_points_per_plane / nP + (num_points_per_plane % nP > 0);
752 }
753
754 Array<OneD, NekDouble> fft_in(
755 num_dfts_per_proc * m_homogeneousBasis->GetNumPoints(), 0.0);
756 Array<OneD, NekDouble> fft_out(
757 num_dfts_per_proc * m_homogeneousBasis->GetNumPoints(), 0.0);
758
759 if (Shuff)
760 {
761 m_transposition->Transpose(num_dofs, inarray, fft_in, false,
763 }
764 else
765 {
766 Vmath::Vcopy(num_dfts_per_proc * m_homogeneousBasis->GetNumPoints(),
767 inarray, 1, fft_in, 1);
768 }
769
770 if (IsForwards)
771 {
772 for (int i = 0; i < num_dfts_per_proc; i++)
773 {
774 m_FFT->FFTFwdTrans(
775 m_tmpIN = fft_in + i * m_homogeneousBasis->GetNumPoints(),
776 m_tmpOUT =
777 fft_out + i * m_homogeneousBasis->GetNumPoints());
778 }
779 }
780 else
781 {
782 for (int i = 0; i < num_dfts_per_proc; i++)
783 {
784 m_FFT->FFTBwdTrans(
785 m_tmpIN = fft_in + i * m_homogeneousBasis->GetNumPoints(),
786 m_tmpOUT =
787 fft_out + i * m_homogeneousBasis->GetNumPoints());
788 }
789 }
790
791 if (UnShuff)
792 {
793 m_transposition->Transpose(num_dofs, fft_out, outarray, false,
795 }
796 else
797 {
798 Vmath::Vcopy(num_dfts_per_proc * m_homogeneousBasis->GetNumPoints(),
799 fft_out, 1, outarray, 1);
800 }
801 }
802 else
803 {
804 DNekBlkMatSharedPtr blkmat;
805
806 if (num_dofs == m_npoints) // transform phys space
807 {
808 if (IsForwards)
809 {
811 }
812 else
813 {
815 }
816 }
817 else
818 {
819 if (IsForwards)
820 {
822 }
823 else
824 {
826 }
827 }
828
829 int nrows = blkmat->GetRows();
830 int ncols = blkmat->GetColumns();
831
832 Array<OneD, NekDouble> sortedinarray(ncols, 0.0);
833 Array<OneD, NekDouble> sortedoutarray(nrows, 0.0);
834
835 if (Shuff)
836 {
837 m_transposition->Transpose(num_dofs, inarray, sortedinarray,
838 !IsForwards, LibUtilities::eXYtoZ);
839 }
840 else
841 {
842 Vmath::Vcopy(ncols, inarray, 1, sortedinarray, 1);
843 }
844
845 // Create NekVectors from the given data arrays
846 NekVector<NekDouble> in(ncols, sortedinarray, eWrapper);
847 NekVector<NekDouble> out(nrows, sortedoutarray, eWrapper);
848
849 // Perform matrix-vector multiply.
850 out = (*blkmat) * in;
851
852 if (UnShuff)
853 {
854 m_transposition->Transpose(num_dofs, sortedoutarray, outarray,
855 IsForwards, LibUtilities::eZtoXY);
856 }
857 else
858 {
859 Vmath::Vcopy(nrows, sortedoutarray, 1, outarray, 1);
860 }
861 }
862}
DNekBlkMatSharedPtr GetHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype) const
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.hpp:825

References Nektar::MultiRegions::eBackwardsCoeffSpace1D, Nektar::MultiRegions::eBackwardsPhysSpace1D, Nektar::MultiRegions::eForwardsCoeffSpace1D, Nektar::MultiRegions::eForwardsPhysSpace1D, Nektar::eWrapper, Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, GetHomogeneous1DBlockMatrix(), Nektar::MultiRegions::ExpList::m_comm, m_FFT, m_homogeneousBasis, Nektar::MultiRegions::ExpList::m_npoints, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_tmpIN, m_tmpOUT, m_transposition, m_useFFT, and Vmath::Vcopy().

Referenced by v_HomogeneousBwdTrans(), and v_HomogeneousFwdTrans().

◆ PhysDeriv() [1/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::PhysDeriv ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d0,
Array< OneD, NekDouble > &  out_d1,
Array< OneD, NekDouble > &  out_d2 
)

Definition at line 1617 of file ExpListHomogeneous1D.cpp.

1621{
1622 v_PhysDeriv(inarray, out_d0, out_d1, out_d2);
1623}
void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2) override

References v_PhysDeriv().

◆ PhysDeriv() [2/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::PhysDeriv ( Direction  edir,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d 
)

Definition at line 1625 of file ExpListHomogeneous1D.cpp.

1628{
1629 v_PhysDeriv(edir, inarray, out_d);
1630}

References v_PhysDeriv().

◆ v_AppendFieldData() [1/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_AppendFieldData ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1091 of file ExpListHomogeneous1D.cpp.

1094{
1095 v_AppendFieldData(fielddef, fielddata, m_coeffs);
1096}
void v_AppendFieldData(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata) override
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
Definition: ExpList.h:1080

References Nektar::MultiRegions::ExpList::m_coeffs, and v_AppendFieldData().

Referenced by v_AppendFieldData().

◆ v_AppendFieldData() [2/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_AppendFieldData ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata,
Array< OneD, NekDouble > &  coeffs 
)
overrideprotectedvirtual

This routine appends the data from the expansion list into the output format where each element is given by looping over its Fourier modes where as data in the expandion is stored with all consecutive elements and then the Fourier modes

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1059 of file ExpListHomogeneous1D.cpp.

1062{
1063 int i, n;
1064 int ncoeffs_per_plane = m_planes[0]->GetNcoeffs();
1065
1066 // Determine mapping from element ids to location in
1067 // expansion list
1068 if (m_elmtToExpId.size() == 0)
1069 {
1070 for (i = 0; i < m_planes[0]->GetExpSize(); ++i)
1071 {
1072 m_elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
1073 }
1074 }
1075
1076 for (i = 0; i < fielddef->m_elementIDs.size(); ++i)
1077 {
1078 int eid = m_elmtToExpId[fielddef->m_elementIDs[i]];
1079 int datalen = (*m_exp)[eid]->GetNcoeffs();
1080
1081 for (n = 0; n < m_planes.size(); ++n)
1082 {
1083 fielddata.insert(
1084 fielddata.end(),
1085 &coeffs[m_coeff_offset[eid] + n * ncoeffs_per_plane],
1086 &coeffs[m_coeff_offset[eid] + n * ncoeffs_per_plane] + datalen);
1087 }
1088 }
1089}
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
Definition: ExpList.h:1124
std::unordered_map< int, int > m_elmtToExpId
Mapping from geometry ID of element to index inside m_exp.
Definition: ExpList.h:1136

References Nektar::MultiRegions::ExpList::m_coeff_offset, Nektar::MultiRegions::ExpList::m_elmtToExpId, and m_planes.

◆ v_BwdTrans()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_BwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Backward transform

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 506 of file ExpListHomogeneous1D.cpp.

509{
510 int cnt = 0, cnt1 = 0;
511 Array<OneD, NekDouble> tmparray;
512
513 for (int n = 0; n < m_planes.size(); ++n)
514 {
515 m_planes[n]->BwdTrans(inarray + cnt, tmparray = outarray + cnt1);
516 cnt += m_planes[n]->GetNcoeffs();
517 cnt1 += m_planes[n]->GetTotPoints();
518 }
519 if (!m_WaveSpace)
520 {
521 HomogeneousBwdTrans(cnt1, outarray, outarray);
522 }
523}
void HomogeneousBwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
Definition: ExpList.h:1857

References Nektar::MultiRegions::ExpList::HomogeneousBwdTrans(), m_planes, and Nektar::MultiRegions::ExpList::m_WaveSpace.

◆ v_DealiasedDotProd()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_DealiasedDotProd ( const int  num_dofs,
const Array< OneD, Array< OneD, NekDouble > > &  inarray1,
const Array< OneD, Array< OneD, NekDouble > > &  inarray2,
Array< OneD, Array< OneD, NekDouble > > &  outarray 
)
overrideprotectedvirtual

Dealiasing routine for dot product

Parameters
inarray1First term of the product with dimension ndim (e.g. U)
inarray2Second term of the product with dimension ndim*nvec (e.g. grad U)
outarrayDealiased product with dimension nvec

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 281 of file ExpListHomogeneous1D.cpp.

285{
286 int ndim = inarray1.size();
287 ASSERTL1(inarray2.size() % ndim == 0,
288 "Wrong dimensions for DealiasedDotProd.");
289 int nvec = inarray2.size() / ndim;
290
291 // int num_dofs = inarray1[0].size();
292 int N = m_homogeneousBasis->GetNumPoints();
293
294 int num_points_per_plane = num_dofs / m_planes.size();
295 int num_proc;
296 if (!m_session->DefinesSolverInfo("HomoStrip"))
297 {
298 num_proc = m_comm->GetColumnComm()->GetSize();
299 }
300 else
301 {
302 num_proc = m_StripZcomm->GetSize();
303 }
304 int num_dfts_per_proc =
305 num_points_per_plane / num_proc + (num_points_per_plane % num_proc > 0);
306
307 // Get inputs in Fourier space
308 Array<OneD, Array<OneD, NekDouble>> V1(ndim);
309 Array<OneD, Array<OneD, NekDouble>> V2(ndim * nvec);
310 if (m_WaveSpace)
311 {
312 for (int i = 0; i < ndim; i++)
313 {
314 V1[i] = inarray1[i];
315 }
316 for (int i = 0; i < ndim * nvec; i++)
317 {
318 V2[i] = inarray2[i];
319 }
320 }
321 else
322 {
323 for (int i = 0; i < ndim; i++)
324 {
325 V1[i] = Array<OneD, NekDouble>(num_dofs);
326 HomogeneousFwdTrans(num_dofs, inarray1[i], V1[i]);
327 }
328 for (int i = 0; i < ndim * nvec; i++)
329 {
330 V2[i] = Array<OneD, NekDouble>(num_dofs);
331 HomogeneousFwdTrans(num_dofs, inarray2[i], V2[i]);
332 }
333 }
334
335 // Allocate variables for ffts
336 Array<OneD, Array<OneD, NekDouble>> ShufV1(ndim);
337 Array<OneD, NekDouble> ShufV1_PAD_coef(m_padsize, 0.0);
338 Array<OneD, Array<OneD, NekDouble>> ShufV1_PAD_phys(ndim);
339 for (int i = 0; i < ndim; i++)
340 {
341 ShufV1[i] = Array<OneD, NekDouble>(num_dfts_per_proc * N, 0.0);
342 ShufV1_PAD_phys[i] = Array<OneD, NekDouble>(m_padsize, 0.0);
343 }
344
345 Array<OneD, Array<OneD, NekDouble>> ShufV2(ndim * nvec);
346 Array<OneD, NekDouble> ShufV2_PAD_coef(m_padsize, 0.0);
347 Array<OneD, Array<OneD, NekDouble>> ShufV2_PAD_phys(ndim * nvec);
348 for (int i = 0; i < ndim * nvec; i++)
349 {
350 ShufV2[i] = Array<OneD, NekDouble>(num_dfts_per_proc * N, 0.0);
351 ShufV2_PAD_phys[i] = Array<OneD, NekDouble>(m_padsize, 0.0);
352 }
353
354 Array<OneD, Array<OneD, NekDouble>> ShufV1V2(nvec);
355 Array<OneD, NekDouble> ShufV1V2_PAD_coef(m_padsize, 0.0);
356 Array<OneD, NekDouble> ShufV1V2_PAD_phys(m_padsize, 0.0);
357 for (int i = 0; i < nvec; i++)
358 {
359 ShufV1V2[i] = Array<OneD, NekDouble>(num_dfts_per_proc * N, 0.0);
360 }
361
362 for (int i = 0; i < ndim; i++)
363 {
364 m_transposition->Transpose(num_dofs, V1[i], ShufV1[i], false,
366 }
367 for (int i = 0; i < ndim * nvec; i++)
368 {
369 m_transposition->Transpose(num_dofs, V2[i], ShufV2[i], false,
371 }
372
373 // Looping on the pencils
374 for (int i = 0; i < num_dfts_per_proc; i++)
375 {
376 for (int j = 0; j < ndim; j++)
377 {
378 // Copying the i-th pencil pf lenght N into a bigger
379 // pencil of lenght 1.5N We are in Fourier space
380 Vmath::Vcopy(N, &(ShufV1[j][i * N]), 1, &(ShufV1_PAD_coef[0]), 1);
381 // Moving to physical space using the padded system
382 m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys[j]);
383 }
384 for (int j = 0; j < ndim * nvec; j++)
385 {
386 Vmath::Vcopy(N, &(ShufV2[j][i * N]), 1, &(ShufV2_PAD_coef[0]), 1);
387 m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys[j]);
388 }
389
390 // Performing the vectors multiplication in physical space on
391 // the padded system
392 for (int j = 0; j < nvec; j++)
393 {
394 Vmath::Zero(m_padsize, ShufV1V2_PAD_phys, 1);
395 for (int k = 0; k < ndim; k++)
396 {
397 Vmath::Vvtvp(m_padsize, ShufV1_PAD_phys[k], 1,
398 ShufV2_PAD_phys[j * ndim + k], 1,
399 ShufV1V2_PAD_phys, 1, ShufV1V2_PAD_phys, 1);
400 }
401 // Moving back the result (V1*V2)_phys in Fourier space,
402 // padded system
403 m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
404 // Copying the first half of the padded pencil in the full
405 // vector (Fourier space)
406 Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1, &(ShufV1V2[j][i * N]),
407 1);
408 }
409 }
410
411 // Moving the results to the output
412 if (m_WaveSpace)
413 {
414 for (int j = 0; j < nvec; j++)
415 {
416 m_transposition->Transpose(num_dofs, ShufV1V2[j], outarray[j],
417 false, LibUtilities::eZtoXY);
418 }
419 }
420 else
421 {
422 Array<OneD, NekDouble> V1V2(num_dofs);
423 for (int j = 0; j < nvec; j++)
424 {
425 m_transposition->Transpose(num_dofs, ShufV1V2[j], V1V2, false,
427 HomogeneousBwdTrans(num_dofs, V1V2, outarray[j]);
428 }
429 }
430}
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:242
void HomogeneousFwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
Definition: ExpList.h:1848
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.hpp:366
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.hpp:273

References ASSERTL1, Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, Nektar::MultiRegions::ExpList::HomogeneousBwdTrans(), Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), Nektar::MultiRegions::ExpList::m_comm, m_FFT_deal, m_homogeneousBasis, m_padsize, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_transposition, Nektar::MultiRegions::ExpList::m_WaveSpace, Vmath::Vcopy(), Vmath::Vvtvp(), and Vmath::Zero().

◆ v_DealiasedProd()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_DealiasedProd ( const int  num_dofs,
const Array< OneD, NekDouble > &  inarray1,
const Array< OneD, NekDouble > &  inarray2,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Dealiasing routine

Parameters
inarray1First term of the product
inarray2Second term of the product
outarrayDealiased product

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 180 of file ExpListHomogeneous1D.cpp.

183{
184 // int num_dofs = inarray1.size();
185 int N = m_homogeneousBasis->GetNumPoints();
186
187 Array<OneD, NekDouble> V1(num_dofs);
188 Array<OneD, NekDouble> V2(num_dofs);
189 Array<OneD, NekDouble> V1V2(num_dofs);
190
191 if (m_WaveSpace)
192 {
193 V1 = inarray1;
194 V2 = inarray2;
195 }
196 else
197 {
198 HomogeneousFwdTrans(num_dofs, inarray1, V1);
199 HomogeneousFwdTrans(num_dofs, inarray2, V2);
200 }
201
202 int num_points_per_plane = num_dofs / m_planes.size();
203 int num_proc;
204 if (!m_session->DefinesSolverInfo("HomoStrip"))
205 {
206 num_proc = m_comm->GetColumnComm()->GetSize();
207 }
208 else
209 {
210 num_proc = m_StripZcomm->GetSize();
211 }
212 int num_dfts_per_proc =
213 num_points_per_plane / num_proc + (num_points_per_plane % num_proc > 0);
214
215 Array<OneD, NekDouble> ShufV1(num_dfts_per_proc * N, 0.0);
216 Array<OneD, NekDouble> ShufV2(num_dfts_per_proc * N, 0.0);
217 Array<OneD, NekDouble> ShufV1V2(num_dfts_per_proc * N, 0.0);
218
219 Array<OneD, NekDouble> ShufV1_PAD_coef(m_padsize, 0.0);
220 Array<OneD, NekDouble> ShufV2_PAD_coef(m_padsize, 0.0);
221 Array<OneD, NekDouble> ShufV1_PAD_phys(m_padsize, 0.0);
222 Array<OneD, NekDouble> ShufV2_PAD_phys(m_padsize, 0.0);
223
224 Array<OneD, NekDouble> ShufV1V2_PAD_coef(m_padsize, 0.0);
225 Array<OneD, NekDouble> ShufV1V2_PAD_phys(m_padsize, 0.0);
226
227 m_transposition->Transpose(num_dofs, V1, ShufV1, false,
229 m_transposition->Transpose(num_dofs, V2, ShufV2, false,
231
232 // Looping on the pencils
233 for (int i = 0; i < num_dfts_per_proc; i++)
234 {
235 // Copying the i-th pencil pf lenght N into a bigger
236 // pencil of lenght 3/2N We are in Fourier space
237 Vmath::Vcopy(N, &(ShufV1[i * N]), 1, &(ShufV1_PAD_coef[0]), 1);
238 Vmath::Vcopy(N, &(ShufV2[i * N]), 1, &(ShufV2_PAD_coef[0]), 1);
239
240 // Moving to physical space using the padded system
241 m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys);
242 m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys);
243
244 // Perfroming the vectors multiplication in physical space on
245 // the padded system
246 Vmath::Vmul(m_padsize, ShufV1_PAD_phys, 1, ShufV2_PAD_phys, 1,
247 ShufV1V2_PAD_phys, 1);
248
249 // Moving back the result (V1*V2)_phys in Fourier space, padded
250 // system
251 m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
252
253 // Copying the first half of the padded pencil in the full
254 // vector (Fourier space)
255 Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1, &(ShufV1V2[i * N]), 1);
256 }
257
258 // Moving the results to the output
259 if (m_WaveSpace)
260 {
261 m_transposition->Transpose(num_dofs, ShufV1V2, outarray, false,
263 }
264 else
265 {
266 m_transposition->Transpose(num_dofs, ShufV1V2, V1V2, false,
268 HomogeneousBwdTrans(num_dofs, V1V2, outarray);
269 }
270}
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.hpp:72

References Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, Nektar::MultiRegions::ExpList::HomogeneousBwdTrans(), Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), Nektar::MultiRegions::ExpList::m_comm, m_FFT_deal, m_homogeneousBasis, m_padsize, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_transposition, Nektar::MultiRegions::ExpList::m_WaveSpace, Vmath::Vcopy(), and Vmath::Vmul().

◆ v_ExtractCoeffsToCoeffs()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_ExtractCoeffsToCoeffs ( const std::shared_ptr< ExpList > &  fromExpList,
const Array< OneD, const NekDouble > &  fromCoeffs,
Array< OneD, NekDouble > &  toCoeffs 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1235 of file ExpListHomogeneous1D.cpp.

1239{
1240 int i;
1241 int fromNcoeffs_per_plane = fromExpList->GetPlane(0)->GetNcoeffs();
1242 int toNcoeffs_per_plane = m_planes[0]->GetNcoeffs();
1243 Array<OneD, NekDouble> tocoeffs_tmp, fromcoeffs_tmp;
1244
1245 for (i = 0; i < m_planes.size(); ++i)
1246 {
1247 m_planes[i]->ExtractCoeffsToCoeffs(
1248 fromExpList->GetPlane(i),
1249 fromcoeffs_tmp = fromCoeffs + fromNcoeffs_per_plane * i,
1250 tocoeffs_tmp = toCoeffs + toNcoeffs_per_plane * i);
1251 }
1252}

References m_planes.

◆ v_ExtractDataToCoeffs()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_ExtractDataToCoeffs ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata,
std::string &  field,
Array< OneD, NekDouble > &  coeffs,
std::unordered_map< int, int >  zIdToPlane 
)
overrideprotectedvirtual

Extract data from raw field data into expansion list.

Parameters
fielddefField definitions.
fielddataData for associated field.
fieldField variable name.
coeffsResulting coefficient array.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1099 of file ExpListHomogeneous1D.cpp.

1103{
1104 int i, n;
1105 int offset = 0;
1106 int nzmodes = 1;
1107 int datalen = fielddata.size() / fielddef->m_fields.size();
1108 std::vector<unsigned int> fieldDefHomoZids;
1109
1110 // Find data location according to field definition
1111 for (i = 0; i < fielddef->m_fields.size(); ++i)
1112 {
1113 if (fielddef->m_fields[i] == field)
1114 {
1115 break;
1116 }
1117 offset += datalen;
1118 }
1119
1120 if (i == fielddef->m_fields.size())
1121 {
1122 cout << "Field " << field << "not found in data file. " << endl;
1123 }
1124 else
1125 {
1126
1127 int modes_offset = 0;
1128 int planes_offset = 0;
1129 Array<OneD, NekDouble> coeff_tmp;
1130
1131 // Build map of plane IDs lying on this processor and determine
1132 // mapping from element ids to location in expansion list.
1133 if (zIdToPlane.size() == 0)
1134 {
1135 int IDoffset = m_homogeneousBasis->GetBasisType() ==
1137 ? 2
1138 : 0;
1139 for (i = 0; i < m_planes.size(); ++i)
1140 {
1141 zIdToPlane[m_transposition->GetPlaneID(i) + IDoffset] = i;
1142 }
1143 }
1144
1145 if (m_elmtToExpId.size() == 0)
1146 {
1147 for (i = 0; i < m_planes[0]->GetExpSize(); ++i)
1148 {
1149 m_elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
1150 }
1151 }
1152
1153 if (fielddef->m_numHomogeneousDir)
1154 {
1155 nzmodes = fielddef->m_homogeneousZIDs.size();
1156 fieldDefHomoZids = fielddef->m_homogeneousZIDs;
1157 }
1158 else // input file is 2D and so set nzmodes to 1
1159 {
1160 nzmodes = 1;
1161 fieldDefHomoZids.push_back(0);
1162 }
1163
1164 // calculate number of modes in the current partition
1165 int ncoeffs_per_plane = m_planes[0]->GetNcoeffs();
1166
1167 for (i = 0; i < fielddef->m_elementIDs.size(); ++i)
1168 {
1169 if (fielddef->m_uniOrder == true) // reset modes_offset to zero
1170 {
1171 modes_offset = 0;
1172 }
1173
1175 fielddef->m_shapeType, fielddef->m_numModes, modes_offset);
1176
1177 auto it = m_elmtToExpId.find(fielddef->m_elementIDs[i]);
1178
1179 // ensure element is on this partition for parallel case.
1180 if (it == m_elmtToExpId.end())
1181 {
1182 // increase offset for correct FieldData access
1183 offset += datalen * nzmodes;
1184 modes_offset +=
1185 (*m_exp)[0]->GetNumBases() + fielddef->m_numHomogeneousDir;
1186 continue;
1187 }
1188
1189 int eid = it->second;
1190 bool sameBasis = true;
1191 for (int j = 0; j < fielddef->m_basis.size() - 1; ++j)
1192 {
1193 if (fielddef->m_basis[j] != (*m_exp)[eid]->GetBasisType(j))
1194 {
1195 sameBasis = false;
1196 break;
1197 }
1198 }
1199
1200 for (n = 0; n < nzmodes; ++n, offset += datalen)
1201 {
1202
1203 it = zIdToPlane.find(fieldDefHomoZids[n]);
1204
1205 // Check to make sure this mode number lies in this field.
1206 if (it == zIdToPlane.end())
1207 {
1208 continue;
1209 }
1210
1211 planes_offset = it->second;
1212 if (datalen == (*m_exp)[eid]->GetNcoeffs() && sameBasis)
1213 {
1214 Vmath::Vcopy(datalen, &fielddata[offset], 1,
1215 &coeffs[m_coeff_offset[eid] +
1216 planes_offset * ncoeffs_per_plane],
1217 1);
1218 }
1219 else // unpack data to new order
1220 {
1221 (*m_exp)[eid]->ExtractDataToCoeffs(
1222 &fielddata[offset], fielddef->m_numModes, modes_offset,
1223 &coeffs[m_coeff_offset[eid] +
1224 planes_offset * ncoeffs_per_plane],
1225 fielddef->m_basis);
1226 }
1227 }
1228 modes_offset +=
1229 (*m_exp)[0]->GetNumBases() + fielddef->m_numHomogeneousDir;
1230 }
1231 }
1232}
int GetNcoeffs(void) const
Returns the total number of local degrees of freedom .
Definition: ExpList.h:1512
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition: ExpList.h:1115
int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset=0)
Definition: ShapeType.hpp:305
@ eFourierSingleMode
Fourier ModifiedExpansion with just the first mode .
Definition: BasisType.h:64

References Nektar::LibUtilities::eFourierSingleMode, Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::LibUtilities::GetNumberOfCoefficients(), Nektar::MultiRegions::ExpList::m_coeff_offset, Nektar::MultiRegions::ExpList::m_elmtToExpId, Nektar::MultiRegions::ExpList::m_exp, m_homogeneousBasis, m_planes, m_transposition, and Vmath::Vcopy().

◆ v_FwdTrans()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_FwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Forward transform

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 435 of file ExpListHomogeneous1D.cpp.

438{
439 int cnt = 0, cnt1 = 0;
440 Array<OneD, NekDouble> tmparray;
441
442 for (int n = 0; n < m_planes.size(); ++n)
443 {
444 m_planes[n]->FwdTrans(inarray + cnt, tmparray = outarray + cnt1);
445 cnt += m_planes[n]->GetTotPoints();
446
447 cnt1 += m_planes[n]->GetNcoeffs(); // need to skip ncoeffs
448 }
449 if (!m_WaveSpace)
450 {
451 HomogeneousFwdTrans(cnt1, outarray, outarray);
452 }
453}

References Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), m_planes, and Nektar::MultiRegions::ExpList::m_WaveSpace.

◆ v_FwdTransBndConstrained()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_FwdTransBndConstrained ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Forward transform element by element with boundaries constrained

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 482 of file ExpListHomogeneous1D.cpp.

485{
486 int cnt = 0, cnt1 = 0;
487 Array<OneD, NekDouble> tmparray;
488
489 // spectral element FwdTrans plane by plane
490 for (int n = 0; n < m_planes.size(); ++n)
491 {
492 m_planes[n]->FwdTransBndConstrained(inarray + cnt,
493 tmparray = outarray + cnt1);
494 cnt += m_planes[n]->GetTotPoints();
495 cnt1 += m_planes[n]->GetNcoeffs();
496 }
497 if (!m_WaveSpace)
498 {
499 HomogeneousFwdTrans(cnt1, outarray, outarray);
500 }
501}

References Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), m_planes, and Nektar::MultiRegions::ExpList::m_WaveSpace.

◆ v_FwdTransLocalElmt()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_FwdTransLocalElmt ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Forward transform element by element

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 458 of file ExpListHomogeneous1D.cpp.

461{
462 int cnt = 0, cnt1 = 0;
463 Array<OneD, NekDouble> tmparray;
464
465 // spectral element FwdTrans plane by plane
466 for (int n = 0; n < m_planes.size(); ++n)
467 {
468 m_planes[n]->FwdTransLocalElmt(inarray + cnt,
469 tmparray = outarray + cnt1);
470 cnt += m_planes[n]->GetTotPoints();
471 cnt1 += m_planes[n]->GetNcoeffs();
472 }
473 if (!m_WaveSpace)
474 {
475 HomogeneousFwdTrans(cnt1, outarray, outarray);
476 }
477}

References Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), m_planes, and Nektar::MultiRegions::ExpList::m_WaveSpace.

◆ v_GetFieldDefinitions() [1/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_GetFieldDefinitions ( std::vector< LibUtilities::FieldDefinitionsSharedPtr > &  fielddef)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1017 of file ExpListHomogeneous1D.cpp.

1019{
1020 // Set up Homogeneous length details.
1021 Array<OneD, LibUtilities::BasisSharedPtr> HomoBasis(1, m_homogeneousBasis);
1022
1023 std::vector<NekDouble> HomoLen;
1024 HomoLen.push_back(m_lhom);
1025
1026 std::vector<unsigned int> StripsIDs;
1027
1028 bool strips;
1029 m_session->MatchSolverInfo("HomoStrip", "True", strips, false);
1030 if (strips)
1031 {
1032 StripsIDs.push_back(m_transposition->GetStripID());
1033 }
1034
1035 std::vector<unsigned int> PlanesIDs;
1036 int IDoffset = 0;
1037
1039 {
1040 IDoffset = 2;
1041 }
1042
1043 for (int i = 0; i < m_planes.size(); i++)
1044 {
1045 PlanesIDs.push_back(m_transposition->GetPlaneID(i) + IDoffset);
1046 }
1047
1048 // enforce NumHomoDir == 1 by direct call
1049 m_planes[0]->GeneralGetFieldDefinitions(fielddef, 1, HomoBasis, HomoLen,
1050 strips, StripsIDs, PlanesIDs);
1051}

References Nektar::LibUtilities::eFourierSingleMode, m_homogeneousBasis, m_lhom, m_planes, Nektar::MultiRegions::ExpList::m_session, and m_transposition.

◆ v_GetFieldDefinitions() [2/2]

std::vector< LibUtilities::FieldDefinitionsSharedPtr > Nektar::MultiRegions::ExpListHomogeneous1D::v_GetFieldDefinitions ( void  )
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 977 of file ExpListHomogeneous1D.cpp.

979{
980 std::vector<LibUtilities::FieldDefinitionsSharedPtr> returnval;
981
982 // Set up Homogeneous length details.
983 Array<OneD, LibUtilities::BasisSharedPtr> HomoBasis(1, m_homogeneousBasis);
984
985 std::vector<NekDouble> HomoLen;
986 HomoLen.push_back(m_lhom);
987
988 std::vector<unsigned int> StripsIDs;
989
990 bool strips;
991 m_session->MatchSolverInfo("HomoStrip", "True", strips, false);
992 if (strips)
993 {
994 StripsIDs.push_back(m_transposition->GetStripID());
995 }
996
997 std::vector<unsigned int> PlanesIDs;
998 int IDoffset = 0;
999
1000 // introduce a 2 plane offset for single mode case so can
1001 // be post-processed or used in MultiMode expansion.
1003 {
1004 IDoffset = 2;
1005 }
1006
1007 for (int i = 0; i < m_planes.size(); i++)
1008 {
1009 PlanesIDs.push_back(m_transposition->GetPlaneID(i) + IDoffset);
1010 }
1011
1012 m_planes[0]->GeneralGetFieldDefinitions(returnval, 1, HomoBasis, HomoLen,
1013 strips, StripsIDs, PlanesIDs);
1014 return returnval;
1015}

References Nektar::LibUtilities::eFourierSingleMode, m_homogeneousBasis, m_lhom, m_planes, Nektar::MultiRegions::ExpList::m_session, and m_transposition.

◆ v_GetHomogeneousBasis()

LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::v_GetHomogeneousBasis ( void  )
inlineoverrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 170 of file ExpListHomogeneous1D.h.

171 {
172 return GetHomogeneousBasis();
173 }
LibUtilities::BasisSharedPtr GetHomogeneousBasis(void)

References GetHomogeneousBasis().

◆ v_GetHomoLen()

NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::v_GetHomoLen ( void  )
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1638 of file ExpListHomogeneous1D.cpp.

1639{
1640 return m_lhom;
1641}

References m_lhom.

◆ v_GetNumElmts()

size_t Nektar::MultiRegions::ExpListHomogeneous1D::v_GetNumElmts ( void  )
inlineoverrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 165 of file ExpListHomogeneous1D.h.

166 {
167 return m_planes[0]->GetExpSize();
168 }

References m_planes.

◆ v_GetPlane()

ExpListSharedPtr & Nektar::MultiRegions::ExpListHomogeneous1D::v_GetPlane ( int  n)
inlineoverrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 266 of file ExpListHomogeneous1D.h.

267 {
268 return GetPlane(n);
269 }

References GetPlane().

◆ v_GetTransposition()

LibUtilities::TranspositionSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::v_GetTransposition ( void  )
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1632 of file ExpListHomogeneous1D.cpp.

1634{
1635 return m_transposition;
1636}

References m_transposition.

◆ v_GetZIDs()

Array< OneD, const unsigned int > Nektar::MultiRegions::ExpListHomogeneous1D::v_GetZIDs ( void  )
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1648 of file ExpListHomogeneous1D.cpp.

1649{
1650 return m_transposition->GetPlanesIDs();
1651}

References m_transposition.

◆ v_HomogeneousBwdTrans()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_HomogeneousBwdTrans ( const int  npts,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
bool  Shuff = true,
bool  UnShuff = true 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 165 of file ExpListHomogeneous1D.cpp.

168{
169 // Backwards trans
170 Homogeneous1DTrans(npts, inarray, outarray, false, Shuff, UnShuff);
171}
void Homogeneous1DTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, bool Shuff=true, bool UnShuff=true)

References Homogeneous1DTrans().

◆ v_HomogeneousFwdTrans()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_HomogeneousFwdTrans ( const int  npts,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
bool  Shuff = true,
bool  UnShuff = true 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 157 of file ExpListHomogeneous1D.cpp.

160{
161 // Forwards trans
162 Homogeneous1DTrans(npts, inarray, outarray, true, Shuff, UnShuff);
163}

References Homogeneous1DTrans().

◆ v_Integral()

NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::v_Integral ( const Array< OneD, const NekDouble > &  inarray)
overrideprotectedvirtual

The integration is evaluated locally, that is

\[\int f(\boldsymbol{x})d\boldsymbol{x}=\sum_{e=1}^{{N_{\mathrm{el}}}} \left\{\int_{\Omega_e}f(\boldsymbol{x})d\boldsymbol{x}\right\}, \]

where the integration over the separate elements is done by the function StdRegions::StdExpansion::Integral, which discretely evaluates the integral using Gaussian quadrature.

Parameters
inarrayAn array of size \(Q_{\mathrm{tot}}\) containing the values of the function \(f(\boldsymbol{x})\) at the quadrature points \(\boldsymbol{x}_i\).
Returns
The value of the discretely evaluated integral \(\int f(\boldsymbol{x})d\boldsymbol{x}\).

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1653 of file ExpListHomogeneous1D.cpp.

1655{
1656 NekDouble val = 0.0;
1657 int i = 0;
1658
1659 for (i = 0; i < (*m_exp).size(); ++i)
1660 {
1661 val += (*m_exp)[i]->Integral(inarray + m_phys_offset[i]);
1662 }
1663 val *= m_lhom / m_homogeneousBasis->GetNumModes();
1664
1665 m_comm->AllReduce(val, LibUtilities::ReduceSum);
1666
1667 return val;
1668}
Array< OneD, int > m_phys_offset
Offset of elemental data into the array m_phys.
Definition: ExpList.h:1126

References Nektar::MultiRegions::ExpList::m_comm, m_homogeneousBasis, m_lhom, Nektar::MultiRegions::ExpList::m_phys_offset, and Nektar::LibUtilities::ReduceSum.

◆ v_IProductWRTBase()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_IProductWRTBase ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Inner product

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 528 of file ExpListHomogeneous1D.cpp.

531{
532 ASSERTL1(inarray.size() >= m_npoints,
533 "Inarray is not of sufficient length");
534 int cnt = 0, cnt1 = 0;
535 Array<OneD, NekDouble> tmparray, tmpIn;
536
537 if (m_WaveSpace)
538 {
539 tmpIn = inarray;
540 }
541 else
542 {
543 tmpIn = Array<OneD, NekDouble>(m_npoints, 0.0);
544 HomogeneousFwdTrans(m_npoints, inarray, tmpIn);
545 }
546
547 for (int n = 0; n < m_planes.size(); ++n)
548 {
549 m_planes[n]->IProductWRTBase(tmpIn + cnt, tmparray = outarray + cnt1);
550
551 cnt1 += m_planes[n]->GetNcoeffs();
552 cnt += m_planes[n]->GetTotPoints();
553 }
554}

References ASSERTL1, Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), Nektar::MultiRegions::ExpList::m_npoints, m_planes, and Nektar::MultiRegions::ExpList::m_WaveSpace.

◆ v_IProductWRTDerivBase() [1/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_IProductWRTDerivBase ( const Array< OneD, const Array< OneD, NekDouble > > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Inner product with respect to the derivative of the Basis including one homogeneous direction.

This function evaluates

\[\int_\Omega \nabla \phi \cdot \mathbf{a}\]

, where \(\phi\) are the basis functions (including a homogeneous basis) and \(\mathbf{a}\) is a generic vector \(\mathbf{a}\), which is fourier decomposed into modes of wavenumber \(k\).

Assuming a 3DH1D basis the generic vector \(\mathbf{a}\) is defined as

\[\mathbf{a}=\sum_k\begin{bmatrix}a_x^k(x,y)\\a_y^k(x,y)\\a_z^k(x,y)\end{bmatrix}e^{i \beta k z}\]

.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 708 of file ExpListHomogeneous1D.cpp.

711{
712 int ndim = inarray.size(); // Dimension including homogeneous direction
713 // (e.g. 3DH1D, ndim=3D)
714 int nT_coeffs = m_planes[0]->GetNcoeffs() * m_planes.size();
715
716 // Write x-direction into outarray
717 v_IProductWRTDerivBase(0, inarray[0], outarray);
718
719 // Add other directions on top
720 // requires temporary array
721 Array<OneD, NekDouble> tmp(nT_coeffs, 0.0);
722 for (int dir = 1; dir < ndim; dir++)
723 {
724 v_IProductWRTDerivBase(dir, inarray[dir], tmp);
725 Vmath::Vadd(nT_coeffs, tmp, 1, outarray, 1, outarray, 1);
726 }
727}
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
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.hpp:180

References m_planes, v_IProductWRTDerivBase(), and Vmath::Vadd().

◆ v_IProductWRTDerivBase() [2/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_IProductWRTDerivBase ( const int  dir,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Inner product with respect to the derivative of the Basis including one homogeneous direction.

This function evaluates

\[\int_\Omega \partial_d \phi \mathbf{a}_d\]

, where \(\partial_d \phi\) is the derivative of the basis function (including a homogeneous basis) in direction \(d\) and \(\mathbf{a}_d\) is the \(d\)-th component of a generic vector \(\mathbf{a}\), which is fourier decomposed into modes of wavenumber \(k\).

Assuming a 3DH1D basis, the generic vector \(\mathbf{a}\) is defined as

\[\mathbf{a}=\sum_k\begin{bmatrix}a_x^k(x,y)\\a_y^k(x,y)\\a_z^k(x,y)\end{bmatrix}e^{i \beta k z}\]

.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 571 of file ExpListHomogeneous1D.cpp.

574{
575 int nT_pts = m_npoints; // number of total points = n. of Fourier
576 // points * n. of points per plane (nT_pts)
577 int nP_pts =
578 nT_pts / m_planes.size(); // number of points per plane = n of
579 // Fourier transform required (nP_pts)
580 int nT_coeffs = m_planes[0]->GetNcoeffs() * m_planes.size();
581 int nP_coeffs = nT_coeffs / m_planes.size();
582
583 Array<OneD, NekDouble> tmpIn(nT_pts);
584 Array<OneD, NekDouble> tmp1, tmp2;
585
586 // Check: input in Fourier space
587 if (m_WaveSpace)
588 {
589 tmpIn = inarray;
590 }
591 else
592 {
593 HomogeneousFwdTrans(m_npoints, inarray, tmpIn);
594 }
595
596 // Do 2D-IProductWRTDerivBase on each plane
597 if (dir == 0 || dir == 1)
598 {
599 for (int i = 0; i < m_planes.size(); i++)
600 {
601 // Call 2D routine on each plane
602 m_planes[i]->IProductWRTDerivBase(dir, tmpIn + i * nP_pts,
603 tmp1 = outarray + i * nP_coeffs);
604 }
605 }
606 // Do homogeneous derivative
607 else if (dir == 2)
608 {
609 if (m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier ||
610 m_homogeneousBasis->GetBasisType() ==
612 m_homogeneousBasis->GetBasisType() ==
614 m_homogeneousBasis->GetBasisType() ==
616 {
617 // TODO Check that nT_coeffs is correct for HalfMode
618 Array<OneD, NekDouble> tmpHom(nT_coeffs, 0.0);
619
620 NekDouble sign = -1.0;
622
623 // Half Modes
624 if (m_homogeneousBasis->GetBasisType() ==
626 {
627 // Do IProduct with 2D basis
628 m_planes[0]->IProductWRTBase(tmpIn, tmpHom);
629
630 // Add fourier coefficient
631 beta = sign * 2 * M_PI * (m_transposition->GetK(0)) / m_lhom;
632 Vmath::Smul(nT_coeffs, beta, tmpHom, 1, tmpHom, 1);
633 }
634 else if (m_homogeneousBasis->GetBasisType() ==
636 {
637 // Do IProduct with 2D basis
638 m_planes[0]->IProductWRTBase(tmpIn, tmpHom);
639
640 // Add fourier coefficient
641 beta = -sign * 2 * M_PI * (m_transposition->GetK(0)) / m_lhom;
642 Vmath::Smul(nT_coeffs, beta, tmpHom, 1, tmpHom, 1);
643 }
644 // Fully complex (Fourier or FourierSingleMode)
645 else
646 {
647 Array<OneD, NekDouble> tmpHomTwo(nT_coeffs, 0.0);
648 for (int i = 0; i < m_planes.size(); i++)
649 {
650 if (i != 1 || m_transposition->GetK(i) !=
651 0) // Mean + Null mode unchanged
652 {
653
654 // Do IProduct with 2D basis ie \int_\Omega \phi_{pq}
655 // inarray[ndim]
656 m_planes[i]->IProductWRTBase(tmpIn + i * nP_pts,
657 tmp1 = tmpHomTwo +
658 i * nP_coeffs);
659
660 // Add fourier coefficient (switch Real and Imaginary
661 // parts ie planes) Multiply by i changes real and
662 // imaginary parts
663 beta = sign * 2 * M_PI * (m_transposition->GetK(i)) /
664 m_lhom;
666 nP_coeffs, beta, tmp1 = tmpHomTwo + i * nP_coeffs,
667 1, tmp2 = tmpHom + (i - int(sign)) * nP_coeffs, 1);
668 }
669 sign = -1.0 * sign;
670 }
671 }
672
673 // Add last term to innerproduct
674 Vmath::Vcopy(nT_coeffs, tmpHom, 1, outarray, 1);
675 }
676 else
677 {
679 "The IProductWRTDerivBase routine with one homogeneous "
680 "direction is not implemented for the homogeneous basis "
681 "if it is is not of type Fourier "
682 "or FourierSingleMode/HalfModeRe/HalfModeIm");
683 }
684 }
685 else
686 {
687 NEKERROR(
689 "cannot handle direction give to IProductWRTDerivBase operator."
690 "dir != 0, 1 or 2.");
691 }
692}
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:202
#define sign(a, b)
return the sign(b)*a
Definition: Polylib.cpp:47
@ beta
Gauss Radau pinned at x=-1,.
Definition: PointsType.h:59
@ eFourier
Fourier Expansion .
Definition: BasisType.h:55
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.hpp:100

References Nektar::LibUtilities::beta, Nektar::ErrorUtil::efatal, Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::LibUtilities::eFourierSingleMode, Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), m_homogeneousBasis, m_lhom, Nektar::MultiRegions::ExpList::m_npoints, m_planes, m_transposition, Nektar::MultiRegions::ExpList::m_WaveSpace, NEKERROR, sign, Vmath::Smul(), and Vmath::Vcopy().

Referenced by v_IProductWRTDerivBase().

◆ v_PhysDeriv() [1/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysDeriv ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d0,
Array< OneD, NekDouble > &  out_d1,
Array< OneD, NekDouble > &  out_d2 
)
overrideprotectedvirtual

Given a function \(f(\boldsymbol{x})\) evaluated at the quadrature points, this function calculates the derivatives \(\frac{d}{dx_1}\), \(\frac{d}{dx_2}\) and \(\frac{d}{dx_3}\) of the function \(f(\boldsymbol{x})\) at the same quadrature points. The local distribution of the quadrature points allows an elemental evaluation of the derivative. This is done by a call to the function StdRegions::StdExpansion::PhysDeriv.

Parameters
inarrayAn array of size \(Q_{\mathrm{tot}}\) containing the values of the function \(f(\boldsymbol{x})\) at the quadrature points \(\boldsymbol{x}_i\).
out_d0The discrete evaluation of the derivative \(\frac{d}{dx_1}\) will be stored in this array of size \(Q_{\mathrm{tot}}\).
out_d1The discrete evaluation of the derivative \(\frac{d}{dx_2}\) will be stored in this array of size \(Q_{\mathrm{tot}}\). Note that if no memory is allocated for out_d1, the derivative \(\frac{d}{dx_2}\) will not be calculated.
out_d2The discrete evaluation of the derivative \(\frac{d}{dx_3}\) will be stored in this array of size \(Q_{\mathrm{tot}}\). Note that if no memory is allocated for out_d2, the derivative \(\frac{d}{dx_3}\) will not be calculated.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1362 of file ExpListHomogeneous1D.cpp.

1365{
1366 int nT_pts = m_npoints; // number of total points = n. of
1367 // Fourier points * n. of points per plane (nT_pts)
1368 int nP_pts =
1369 nT_pts / m_planes.size(); // number of points per plane = n of
1370 // Fourier transform required (nP_pts)
1371
1372 Array<OneD, NekDouble> temparray(nT_pts);
1373 Array<OneD, NekDouble> outarray(nT_pts);
1374 Array<OneD, NekDouble> tmp1;
1375 Array<OneD, NekDouble> tmp2;
1376 Array<OneD, NekDouble> tmp3;
1377
1378 for (int i = 0; i < m_planes.size(); i++)
1379 {
1380 m_planes[i]->PhysDeriv(inarray + i * nP_pts, tmp2 = out_d0 + i * nP_pts,
1381 tmp3 = out_d1 + i * nP_pts);
1382 }
1383
1384 if (out_d2 != NullNekDouble1DArray)
1385 {
1386 if (m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier ||
1387 m_homogeneousBasis->GetBasisType() ==
1389 m_homogeneousBasis->GetBasisType() ==
1391 m_homogeneousBasis->GetBasisType() ==
1393 {
1394 if (m_WaveSpace)
1395 {
1396 temparray = inarray;
1397 }
1398 else
1399 {
1400 HomogeneousFwdTrans(nT_pts, inarray, temparray);
1401 }
1402
1403 NekDouble sign = -1.0;
1405
1406 // Half Mode
1407 if (m_homogeneousBasis->GetBasisType() ==
1409 {
1410 beta = sign * 2 * M_PI * (m_transposition->GetK(0)) / m_lhom;
1411
1412 Vmath::Smul(nP_pts, beta, temparray, 1, outarray, 1);
1413 }
1414 else if (m_homogeneousBasis->GetBasisType() ==
1416 {
1417 beta = -sign * 2 * M_PI * (m_transposition->GetK(0)) / m_lhom;
1418
1419 Vmath::Smul(nP_pts, beta, temparray, 1, outarray, 1);
1420 }
1421
1422 // Fully complex
1423 else
1424 {
1425 for (int i = 0; i < m_planes.size(); i++)
1426 {
1427 beta =
1428 -sign * 2 * M_PI * (m_transposition->GetK(i)) / m_lhom;
1429
1430 Vmath::Smul(nP_pts, beta, tmp1 = temparray + i * nP_pts, 1,
1431 tmp2 = outarray + (i - int(sign)) * nP_pts, 1);
1432
1433 sign = -1.0 * sign;
1434 }
1435 }
1436
1437 if (m_WaveSpace)
1438 {
1439 out_d2 = outarray;
1440 }
1441 else
1442 {
1443 HomogeneousBwdTrans(nT_pts, outarray, out_d2);
1444 }
1445 }
1446 else
1447 {
1448 if (!m_session->DefinesSolverInfo("HomoStrip"))
1449 {
1450 ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1451 "Parallelisation in the homogeneous direction "
1452 "implemented just for Fourier basis");
1453 }
1454 else
1455 {
1456 ASSERTL0(m_StripZcomm->GetSize() == 1,
1457 "Parallelisation in the homogeneous direction "
1458 "implemented just for Fourier basis");
1459 }
1460
1461 if (m_WaveSpace)
1462 {
1463 ASSERTL0(false, "Semi-phyisical time-stepping not "
1464 "implemented yet for non-Fourier "
1465 "basis");
1466 }
1467 else
1468 {
1469 StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1470
1471 m_transposition->Transpose(nT_pts, inarray, temparray, false,
1473
1474 for (int i = 0; i < nP_pts; i++)
1475 {
1476 StdSeg.PhysDeriv(temparray + i * m_planes.size(),
1477 tmp2 = outarray + i * m_planes.size());
1478 }
1479
1480 m_transposition->Transpose(nT_pts, outarray, out_d2, false,
1482
1483 Vmath::Smul(nT_pts, 2.0 / m_lhom, out_d2, 1, out_d2, 1);
1484 }
1485 }
1486 }
1487}
static Array< OneD, NekDouble > NullNekDouble1DArray

References ASSERTL0, Nektar::LibUtilities::beta, Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::LibUtilities::eFourierSingleMode, Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, Nektar::MultiRegions::ExpList::HomogeneousBwdTrans(), Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), Nektar::MultiRegions::ExpList::m_comm, m_homogeneousBasis, m_lhom, Nektar::MultiRegions::ExpList::m_npoints, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_transposition, Nektar::MultiRegions::ExpList::m_WaveSpace, Nektar::NullNekDouble1DArray, Nektar::StdRegions::StdExpansion::PhysDeriv(), sign, and Vmath::Smul().

Referenced by PhysDeriv().

◆ v_PhysDeriv() [2/2]

void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysDeriv ( Direction  edir,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1489 of file ExpListHomogeneous1D.cpp.

1493{
1494 int nT_pts = m_npoints; // number of total points = n. of Fourier
1495 // points * n. of points per plane (nT_pts)
1496 int nP_pts =
1497 nT_pts / m_planes.size(); // number of points per plane = n of
1498 // Fourier transform required (nP_pts)
1499
1500 int dir = (int)edir;
1501
1502 Array<OneD, NekDouble> temparray(nT_pts);
1503 Array<OneD, NekDouble> outarray(nT_pts);
1504 Array<OneD, NekDouble> tmp1;
1505 Array<OneD, NekDouble> tmp2;
1506
1507 if (dir < 2)
1508 {
1509 for (int i = 0; i < m_planes.size(); i++)
1510 {
1511 m_planes[i]->PhysDeriv(edir, inarray + i * nP_pts,
1512 tmp2 = out_d + i * nP_pts);
1513 }
1514 }
1515 else
1516 {
1517 if (m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier ||
1518 m_homogeneousBasis->GetBasisType() ==
1520 m_homogeneousBasis->GetBasisType() ==
1522 m_homogeneousBasis->GetBasisType() ==
1524 {
1525 if (m_WaveSpace)
1526 {
1527 temparray = inarray;
1528 }
1529 else
1530 {
1531 HomogeneousFwdTrans(nT_pts, inarray, temparray);
1532 }
1533
1534 NekDouble sign = -1.0;
1536
1537 // HalfMode
1538 if (m_homogeneousBasis->GetBasisType() ==
1540 {
1541 beta = 2 * sign * M_PI * (m_transposition->GetK(0)) / m_lhom;
1542
1543 Vmath::Smul(nP_pts, beta, temparray, 1, outarray, 1);
1544 }
1545 else if (m_homogeneousBasis->GetBasisType() ==
1547 {
1548 beta = -2 * sign * M_PI * (m_transposition->GetK(0)) / m_lhom;
1549
1550 Vmath::Smul(nP_pts, beta, temparray, 1, outarray, 1);
1551 }
1552 // Fully complex
1553 else
1554 {
1555 for (int i = 0; i < m_planes.size(); i++)
1556 {
1557 beta =
1558 -sign * 2 * M_PI * (m_transposition->GetK(i)) / m_lhom;
1559
1560 Vmath::Smul(nP_pts, beta, tmp1 = temparray + i * nP_pts, 1,
1561 tmp2 = outarray + (i - int(sign)) * nP_pts, 1);
1562
1563 sign = -1.0 * sign;
1564 }
1565 }
1566 if (m_WaveSpace)
1567 {
1568 out_d = outarray;
1569 }
1570 else
1571 {
1572 HomogeneousBwdTrans(nT_pts, outarray, out_d);
1573 }
1574 }
1575 else
1576 {
1577 if (!m_session->DefinesSolverInfo("HomoStrip"))
1578 {
1579 ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1580 "Parallelisation in the homogeneous direction "
1581 "implemented just for Fourier basis");
1582 }
1583 else
1584 {
1585 ASSERTL0(m_StripZcomm->GetSize() == 1,
1586 "Parallelisation in the homogeneous direction "
1587 "implemented just for Fourier basis");
1588 }
1589
1590 if (m_WaveSpace)
1591 {
1592 ASSERTL0(false, "Semi-phyisical time-stepping not implemented "
1593 "yet for non-Fourier basis");
1594 }
1595 else
1596 {
1597 StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1598
1599 m_transposition->Transpose(nT_pts, inarray, temparray, false,
1601
1602 for (int i = 0; i < nP_pts; i++)
1603 {
1604 StdSeg.PhysDeriv(temparray + i * m_planes.size(),
1605 tmp2 = outarray + i * m_planes.size());
1606 }
1607
1608 m_transposition->Transpose(nT_pts, outarray, out_d, false,
1610
1611 Vmath::Smul(nT_pts, 2.0 / m_lhom, out_d, 1, out_d, 1);
1612 }
1613 }
1614 }
1615}

References ASSERTL0, Nektar::LibUtilities::beta, Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::LibUtilities::eFourierSingleMode, Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, Nektar::MultiRegions::ExpList::HomogeneousBwdTrans(), Nektar::MultiRegions::ExpList::HomogeneousFwdTrans(), Nektar::MultiRegions::ExpList::m_comm, m_homogeneousBasis, m_lhom, Nektar::MultiRegions::ExpList::m_npoints, m_planes, Nektar::MultiRegions::ExpList::m_session, m_StripZcomm, m_transposition, Nektar::MultiRegions::ExpList::m_WaveSpace, Nektar::StdRegions::StdExpansion::PhysDeriv(), sign, and Vmath::Smul().

◆ v_PhysGalerkinProjection1DScaled()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysGalerkinProjection1DScaled ( const NekDouble  scale,
const Array< OneD, NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1345 of file ExpListHomogeneous1D.cpp.

1348{
1349 int cnt, cnt1;
1350 Array<OneD, NekDouble> tmparray;
1351 cnt = m_planes[0]->Get1DScaledTotPoints(scale);
1352 cnt1 = m_planes[0]->GetTotPoints();
1353 ASSERTL1(m_planes.size() * cnt <= inarray.size(),
1354 "size of outarray does not match internal estimage");
1355
1356 for (int i = 0; i < m_planes.size(); i++)
1357 {
1358 m_planes[i]->PhysGalerkinProjection1DScaled(
1359 scale, inarray + i * cnt, tmparray = outarray + i * cnt1);
1360 }
1361}

References ASSERTL1, and m_planes.

◆ v_PhysInterp1DScaled()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysInterp1DScaled ( const NekDouble  scale,
const Array< OneD, NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1325 of file ExpListHomogeneous1D.cpp.

1328{
1329 int cnt, cnt1;
1330 Array<OneD, NekDouble> tmparray;
1331 cnt = m_planes[0]->GetTotPoints();
1332 cnt1 = m_planes[0]->Get1DScaledTotPoints(scale);
1333
1334 ASSERTL1(m_planes.size() * cnt1 <= outarray.size(),
1335 "size of outarray does not match internal estimage");
1336
1337 for (int i = 0; i < m_planes.size(); i++)
1338 {
1339
1340 m_planes[i]->PhysInterp1DScaled(scale, inarray + i * cnt,
1341 tmparray = outarray + i * cnt1);
1342 }
1343}

References ASSERTL1, and m_planes.

◆ v_SetHomo1DSpecVanVisc()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_SetHomo1DSpecVanVisc ( Array< OneD, NekDouble visc)
inlineoverrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 160 of file ExpListHomogeneous1D.h.

161 {
162 m_specVanVisc = visc;
163 }

References m_specVanVisc.

◆ v_SetHomoLen()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_SetHomoLen ( const NekDouble  lhom)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1643 of file ExpListHomogeneous1D.cpp.

1644{
1645 m_lhom = lhom;
1646}

References m_lhom.

◆ v_WriteVtkPieceData()

void Nektar::MultiRegions::ExpListHomogeneous1D::v_WriteVtkPieceData ( std::ostream &  outfile,
int  expansion,
std::string  var 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1254 of file ExpListHomogeneous1D.cpp.

1256{
1257 // If there is only one plane (e.g. HalfMode), we write a 2D plane.
1258 if (m_planes.size() == 1)
1259 {
1260 m_planes[0]->WriteVtkPieceData(outfile, expansion, var);
1261 return;
1262 }
1263
1264 int i;
1265 int nq = (*m_exp)[expansion]->GetTotPoints();
1266 int npoints_per_plane = m_planes[0]->GetTotPoints();
1267
1268 // If we are using Fourier points, output extra plane to fill domain
1269 int outputExtraPlane = 0;
1270 Array<OneD, NekDouble> extraPlane;
1271 if (m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier &&
1272 m_homogeneousBasis->GetPointsType() ==
1274 {
1275 outputExtraPlane = 1;
1276 // Get extra plane data
1277 if (m_StripZcomm->GetSize() == 1)
1278 {
1279 extraPlane = m_phys + m_phys_offset[expansion];
1280 }
1281 else
1282 {
1283 // Determine to and from rank for communication
1284 int size = m_StripZcomm->GetSize();
1285 int rank = m_StripZcomm->GetRank();
1286 int fromRank = (rank + 1) % size;
1287 int toRank = (rank == 0) ? size - 1 : rank - 1;
1288 // Communicate using SendRecv
1289 extraPlane = Array<OneD, NekDouble>(nq);
1290 Array<OneD, NekDouble> send(nq, m_phys + m_phys_offset[expansion]);
1291
1292 m_StripZcomm->SendRecv(toRank, send, fromRank, extraPlane);
1293 }
1294 }
1295
1296 // printing the fields of that zone
1297 outfile << R"( <DataArray type="Float64" Name=")" << var << "\">"
1298 << endl;
1299 outfile << " ";
1300 for (int n = 0; n < m_planes.size(); ++n)
1301 {
1302 const Array<OneD, NekDouble> phys =
1303 m_phys + m_phys_offset[expansion] + n * npoints_per_plane;
1304
1305 for (i = 0; i < nq; ++i)
1306 {
1307 outfile << (fabs(phys[i]) < NekConstants::kNekZeroTol ? 0 : phys[i])
1308 << " ";
1309 }
1310 }
1311 if (outputExtraPlane)
1312 {
1313 for (i = 0; i < nq; ++i)
1314 {
1315 outfile << (fabs(extraPlane[i]) < NekConstants::kNekZeroTol
1316 ? 0
1317 : extraPlane[i])
1318 << " ";
1319 }
1320 }
1321 outfile << endl;
1322 outfile << " </DataArray>" << endl;
1323}
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
Definition: ExpList.h:1096
@ eFourierEvenlySpaced
1D Evenly-spaced points using Fourier Fit
Definition: PointsType.h:74
static const NekDouble kNekZeroTol

References Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierEvenlySpaced, Nektar::NekConstants::kNekZeroTol, m_homogeneousBasis, Nektar::MultiRegions::ExpList::m_phys, Nektar::MultiRegions::ExpList::m_phys_offset, m_planes, and m_StripZcomm.

Member Data Documentation

◆ m_dealiasing

bool Nektar::MultiRegions::ExpListHomogeneous1D::m_dealiasing
private

Definition at line 279 of file ExpListHomogeneous1D.h.

Referenced by ExpListHomogeneous1D().

◆ m_FFT

LibUtilities::NektarFFTSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_FFT
protected

Definition at line 126 of file ExpListHomogeneous1D.h.

Referenced by ExpListHomogeneous1D(), and Homogeneous1DTrans().

◆ m_FFT_deal

LibUtilities::NektarFFTSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_FFT_deal
protected

◆ m_homogeneous1DBlockMat

Homo1DBlockMatrixMapShPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_homogeneous1DBlockMat
protected

Definition at line 138 of file ExpListHomogeneous1D.h.

Referenced by GetHomogeneous1DBlockMatrix().

◆ m_homogeneousBasis

LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_homogeneousBasis
protected

◆ m_lhom

NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::m_lhom
protected

◆ m_padsize

int Nektar::MultiRegions::ExpListHomogeneous1D::m_padsize
private

◆ m_planes

Array<OneD, ExpListSharedPtr> Nektar::MultiRegions::ExpListHomogeneous1D::m_planes
protected

Definition at line 139 of file ExpListHomogeneous1D.h.

Referenced by Nektar::MultiRegions::ContField3DHomogeneous1D::ContField3DHomogeneous1D(), Nektar::MultiRegions::DisContField3DHomogeneous1D::DisContField3DHomogeneous1D(), Nektar::MultiRegions::ExpList2DHomogeneous1D::ExpList2DHomogeneous1D(), Nektar::MultiRegions::ExpList3DHomogeneous1D::ExpList3DHomogeneous1D(), ExpListHomogeneous1D(), Nektar::MultiRegions::ExpList3DHomogeneous1D::GenExpList3DHomogeneous1D(), GenHomogeneous1DBlockMatrix(), GetPlane(), Homogeneous1DTrans(), Nektar::MultiRegions::ExpList2DHomogeneous1D::SetCoeffPhys(), Nektar::MultiRegions::ExpList3DHomogeneous1D::SetCoeffPhys(), Nektar::MultiRegions::DisContField3DHomogeneous1D::SetupBoundaryConditions(), Nektar::MultiRegions::DisContField3DHomogeneous1D::SetUpDG(), v_AppendFieldData(), v_BwdTrans(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_ClearGlobalLinSysManager(), v_DealiasedDotProd(), v_DealiasedProd(), v_ExtractCoeffsToCoeffs(), v_ExtractDataToCoeffs(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_ExtractTracePhys(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_FillBndCondFromField(), v_FwdTrans(), v_FwdTransBndConstrained(), v_FwdTransLocalElmt(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_GetBCValues(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_GetBoundaryToElmtMap(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_GetCoords(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_GetCoords(), v_GetFieldDefinitions(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_GetNormals(), v_GetNumElmts(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_GetPeriodicEntities(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_GetTraceMap(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_GlobalToLocal(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_HelmSolve(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_HelmSolve(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_HomogeneousEnergy(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_ImposeDirichletConditions(), v_IProductWRTBase(), v_IProductWRTDerivBase(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_L2(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_LocalToGlobal(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_NormVectorIProductWRTBase(), v_PhysDeriv(), v_PhysGalerkinProjection1DScaled(), v_PhysInterp1DScaled(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_SmoothField(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_WriteTecplotConnectivity(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_WriteTecplotZone(), v_WriteVtkPieceData(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_WriteVtkPieceHeader(), and Nektar::MultiRegions::ExpList3DHomogeneous1D::v_WriteVtkPieceHeader().

◆ m_specVanVisc

Array<OneD, NekDouble> Nektar::MultiRegions::ExpListHomogeneous1D::m_specVanVisc
private

Spectral vanishing Viscosity coefficient for stabilisation.

Definition at line 283 of file ExpListHomogeneous1D.h.

Referenced by GetSpecVanVisc(), and v_SetHomo1DSpecVanVisc().

◆ m_StripZcomm

LibUtilities::CommSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_StripZcomm

◆ m_tmpIN

Array<OneD, NekDouble> Nektar::MultiRegions::ExpListHomogeneous1D::m_tmpIN
protected

Definition at line 130 of file ExpListHomogeneous1D.h.

Referenced by Homogeneous1DTrans().

◆ m_tmpOUT

Array<OneD, NekDouble> Nektar::MultiRegions::ExpListHomogeneous1D::m_tmpOUT
protected

Definition at line 131 of file ExpListHomogeneous1D.h.

Referenced by Homogeneous1DTrans().

◆ m_transposition

LibUtilities::TranspositionSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_transposition

◆ m_useFFT

bool Nektar::MultiRegions::ExpListHomogeneous1D::m_useFFT
protected