Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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:
Inheritance graph
[legend]
Collaboration diagram for Nektar::MultiRegions::ExpListHomogeneous1D:
Collaboration graph
[legend]

Public Member Functions

 ExpListHomogeneous1D ()
 Default constructor. More...
 
 ExpListHomogeneous1D (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)
 
virtual ~ExpListHomogeneous1D ()
 Destructor. More...
 
void Homogeneous1DTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, 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 ()
 The default constructor. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession)
 The default constructor. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 The default constructor. More...
 
 ExpList (const ExpList &in, const std::vector< unsigned int > &eIDs, const bool DeclareCoeffPhysArrays=true)
 Constructor copying only elements defined in eIds. More...
 
 ExpList (const ExpList &in, const bool DeclareCoeffPhysArrays=true)
 The copy constructor. 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...
 
void SetPhys (int i, NekDouble val)
 Set the i th value of m_phys to value val. 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 (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...
 
NekDouble PhysIntegral (void)
 This function integrates a function $f(\boldsymbol{x})$ over the domain consisting of all the elements of the expansion. More...
 
NekDouble PhysIntegral (const Array< OneD, const NekDouble > &inarray)
 This function integrates a function $f(\boldsymbol{x})$ over the domain consisting of all the elements of the expansion. More...
 
void IProductWRTBase_IterPerExp (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 IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
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 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 (in direction. More...
 
void FwdTrans_IterPerExp (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, CoeffState coeffstate=eLocal)
 
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, CoeffState coeffstate=eLocal)
 
void SmoothField (Array< OneD, NekDouble > &field)
 Smooth a field across elements. More...
 
void HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve helmholtz problem. More...
 
void LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 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, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void FwdTrans_BndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void BwdTrans_IterPerExp (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 BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
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 HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray, CoeffState coeffstate=eLocal)
 
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...
 
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 (void)
 Fill Bnd Condition expansion from the values stored in expansion. More...
 
void FillBndCondFromField (const int nreg)
 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_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 (const Array< OneD, const 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 associaed with the homogeneous expansion. More...
 
NekDouble GetHomoLen (void)
 This function returns the Width of homogeneous direction associaed 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...
 
int GetNumElmts (void)
 This function returns the number of elements in the expansion which may be different for a homogeoenous extended expansionp. More...
 
const boost::shared_ptr
< LocalRegions::ExpansionVector
GetExp () 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::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 GetExpIndex (const Array< OneD, const NekDouble > &gloCoords, Array< OneD, NekDouble > &locCoords, NekDouble tol=0.0, bool returnNearestElmt=false)
 
int GetCoeff_Offset (int n) const
 Get the start offset position for a global list of m_coeffs correspoinding to element n. More...
 
int GetPhys_Offset (int n) const
 Get the start offset position for a global list of m_phys 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 CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
const Array< OneD, const
boost::shared_ptr< ExpList > > & 
GetBndCondExpansions ()
 
boost::shared_ptr< ExpList > & UpdateBndCondExpansion (int i)
 
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)
 
void Upwind (const Array< OneD, const NekDouble > &Vn, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
boost::shared_ptr< ExpList > & GetTrace ()
 
boost::shared_ptr
< AssemblyMapDG > & 
GetTraceMap (void)
 
const Array< OneD, const int > & GetTraceBndMap (void)
 
void GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 
void AddTraceIntegral (const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
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)
 
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, CoeffState coeffstate=eLocal)
 This function calculates the result of the multiplication of a matrix of type specified by mkey with a vector given by inarray. More...
 
void GeneralMatrixOp_IterPerExp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void SetUpPhysNormals ()
 
void GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
void GetBndElmtExpansion (int i, boost::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays=true)
 
void ExtractElmtToBndPhys (int i, 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)
 
const
NekOptimize::GlobalOptParamSharedPtr
GetGlobalOptParam (void)
 
std::map< int,
RobinBCInfoSharedPtr
GetRobinBCInfo ()
 
void GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces=NullPeriodicMap)
 
std::vector
< LibUtilities::FieldDefinitionsSharedPtr
GetFieldDefinitions ()
 
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 boost::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)
 Extract the data in fielddata into the coeffs. More...
 
boost::shared_ptr< ExpListGetSharedThisPtr ()
 Returns a shared pointer to the current object. More...
 
boost::shared_ptr
< LibUtilities::SessionReader
GetSession () const
 Returns the session object. More...
 
boost::shared_ptr
< LibUtilities::Comm
GetComm ()
 Returns the comm object. More...
 
SpatialDomains::MeshGraphSharedPtr GetGraph ()
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
boost::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)
 

Public Attributes

LibUtilities::TranspositionSharedPtr m_transposition
 
LibUtilities::CommSharedPtr m_StripZcomm
 
- Public Attributes inherited from Nektar::MultiRegions::ExpList
ExpansionType m_expType
 

Protected Member Functions

DNekBlkMatSharedPtr GenHomogeneous1DBlockMatrix (Homogeneous1DMatType mattype, CoeffState coeffstate=eLocal) const
 
DNekBlkMatSharedPtr GetHomogeneous1DBlockMatrix (Homogeneous1DMatType mattype, CoeffState coeffstate=eLocal) const
 
NekDouble GetSpecVanVisc (const int k)
 
virtual void v_SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 
virtual int v_GetNumElmts (void)
 
virtual
LibUtilities::BasisSharedPtr 
v_GetHomogeneousBasis (void)
 
virtual void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_FwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_BwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_IProductWRTBase_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual std::vector
< LibUtilities::FieldDefinitionsSharedPtr
v_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)
 Extract data from raw field data into expansion list. More...
 
virtual void v_ExtractCoeffsToCoeffs (const boost::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 
virtual void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var)
 
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_HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
virtual void v_HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
virtual void v_DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
virtual void v_DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray, CoeffState coeffstate=eLocal)
 
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 (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual
LibUtilities::TranspositionSharedPtr 
v_GetTransposition (void)
 
virtual Array< OneD, const
unsigned int > 
v_GetZIDs (void)
 
virtual ExpListSharedPtrv_GetPlane (int n)
 
virtual NekDouble v_GetHomoLen (void)
 
- Protected Member Functions inherited from Nektar::MultiRegions::ExpList
void SetCoeffPhysOffsets ()
 Definition of the total number of degrees of freedom and quadrature points and offsets to access data. More...
 
boost::shared_ptr< DNekMatGenGlobalMatrixFull (const GlobalLinSysKey &mkey, const boost::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)
 
boost::shared_ptr< GlobalMatrixGenGlobalMatrix (const GlobalMatrixKey &mkey, const boost::shared_ptr< AssemblyMapCG > &locToGloMap)
 Generates a global matrix from the given key and map. More...
 
void GlobalEigenSystem (const boost::shared_ptr< DNekMat > &Gmat, Array< OneD, NekDouble > &EigValsReal, Array< OneD, NekDouble > &EigValsImag, Array< OneD, NekDouble > &EigVecs=NullNekDouble1DArray)
 
boost::shared_ptr< GlobalLinSysGenGlobalLinSys (const GlobalLinSysKey &mkey, const boost::shared_ptr< AssemblyMapCG > &locToGloMap)
 This operation constructs the global linear system of type mkey. More...
 
boost::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...
 
void ReadGlobalOptimizationParameters ()
 
virtual const Array< OneD,
const boost::shared_ptr
< ExpList > > & 
v_GetBndCondExpansions (void)
 
virtual boost::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 boost::shared_ptr
< ExpList > & 
v_GetTrace ()
 
virtual boost::shared_ptr
< AssemblyMapDG > & 
v_GetTraceMap ()
 
virtual const Array< OneD,
const int > & 
v_GetTraceBndMap ()
 
virtual void v_GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
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)
 
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, CoeffState coeffstate)
 
virtual void v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
 
virtual void v_LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual void v_LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual void v_ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 
virtual void v_FillBndCondFromField ()
 
virtual void v_FillBndCondFromField (const int nreg)
 
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_SmoothField (Array< OneD, NekDouble > &field)
 
virtual void v_GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
virtual void v_PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
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 ()
 
virtual void v_GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
virtual void v_GetBndElmtExpansion (int i, boost::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays)
 
virtual void v_ExtractElmtToBndPhys (int i, Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
virtual void v_ExtractPhysToBndElmt (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
virtual void v_ExtractPhysToBnd (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 void v_ReadGlobalOptimizationParameters ()
 
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_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 Array< OneD, const
NekDouble
v_HomogeneousEnergy (void)
 
virtual Array< OneD, const
unsigned int > 
v_GetYIDs (void)
 
virtual void v_ClearGlobalLinSysManager (void)
 
void ExtractFileBCs (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, const boost::shared_ptr< ExpList > locExpList)
 

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
 
boost::unordered_map< int, int > m_zIdToPlane
 
- Protected Attributes inherited from Nektar::MultiRegions::ExpList
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...
 
boost::shared_ptr
< LocalRegions::ExpansionVector
m_exp
 The list of local expansions. More...
 
Collections::CollectionVector m_collections
 
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...
 
NekOptimize::GlobalOptParamSharedPtr m_globalOptParam
 
BlockMatrixMapShPtr m_blockMat
 
bool m_WaveSpace
 
boost::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 77 of file ExpListHomogeneous1D.h.

Constructor & Destructor Documentation

Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( )

Default constructor.

Definition at line 50 of file ExpListHomogeneous1D.cpp.

50  :
51  ExpList(),
53  m_lhom(1),
54  m_homogeneous1DBlockMat(MemoryManager<Homo1DBlockMatrixMap>::AllocateSharedPtr())
55  {
56  }
ExpList()
The default constructor.
Definition: ExpList.cpp:95
static BasisSharedPtr NullBasisSharedPtr
Definition: Basis.h:358
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...
Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const LibUtilities::SessionReaderSharedPtr pSession,
const LibUtilities::BasisKey HomoBasis,
const NekDouble  lz,
const bool  useFFT,
const bool  dealiasing 
)

Definition at line 58 of file ExpListHomogeneous1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, ASSERTL2, Nektar::LibUtilities::BasisManager(), Nektar::LibUtilities::NekFactory< tKey, tBase, >::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().

63  :
64  ExpList(pSession),
65  m_useFFT(useFFT),
66  m_lhom(lhom),
67  m_homogeneous1DBlockMat(MemoryManager<Homo1DBlockMatrixMap>::AllocateSharedPtr()),
68  m_dealiasing(dealiasing)
69  {
71  "Homogeneous Basis is a null basis");
72 
74 
75  m_StripZcomm = m_session->DefinesSolverInfo("HomoStrip") ?
76  m_comm->GetColumnComm()->GetColumnComm() :
77  m_comm->GetColumnComm();
78 
79  ASSERTL0( m_homogeneousBasis->GetNumPoints() %
80  m_StripZcomm->GetSize() == 0,
81  "HomModesZ should be a multiple of npz.");
82 
83  if ( (m_homogeneousBasis->GetBasisType() !=
85  && (m_homogeneousBasis->GetBasisType() !=
87  {
88  ASSERTL0(
89  (m_homogeneousBasis->GetNumPoints() /
90  m_StripZcomm->GetSize()) % 2 == 0,
91  "HomModesZ/npz should be an even integer.");
92  }
93 
95  ::AllocateSharedPtr(HomoBasis, m_comm,
96  m_StripZcomm);
97 
98  m_planes = Array<OneD,ExpListSharedPtr>(
99  m_homogeneousBasis->GetNumPoints() /
100  m_StripZcomm->GetSize());
101 
102  if(m_useFFT)
103  {
105  "NekFFTW", m_homogeneousBasis->GetNumPoints());
106  }
107 
108  if(m_dealiasing)
109  {
110  if(m_useFFT)
111  {
112  int size = m_homogeneousBasis->GetNumPoints() +
113  m_homogeneousBasis->GetNumPoints() / 2;
114  m_padsize = size + (size % 2);
116  .CreateInstance("NekFFTW", m_padsize);
117  }
118  else
119  {
120  ASSERTL0(false, "Dealiasing available just in combination "
121  "with FFTW");
122  }
123  }
124  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:198
ExpList()
The default constructor.
Definition: ExpList.cpp:95
tBaseSharedPtr CreateInstance(tKey idKey BOOST_PP_COMMA_IF(MAX_PARAM) BOOST_PP_ENUM_BINARY_PARAMS(MAX_PARAM, tParam, x))
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:162
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
LibUtilities::TranspositionSharedPtr m_transposition
LibUtilities::NektarFFTSharedPtr m_FFT_deal
NekDouble m_lhom
Width of homogeneous direction.
NektarFFTFactory & GetNektarFFTFactory()
Definition: NektarFFT.cpp:69
BasisManagerT & BasisManager(void)
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
Fourier Modified expansions with just the real part of the first mode .
Definition: BasisType.h:59
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
Fourier Modified expansions with just the imaginary part of the first mode .
Definition: BasisType.h:60
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:250
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
LibUtilities::NektarFFTSharedPtr m_FFT
Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpListHomogeneous1D In)

Copy constructor.

Parameters
InExpListHomogeneous1D object to copy.

Definition at line 130 of file ExpListHomogeneous1D.cpp.

References m_planes.

130  :
131  ExpList(In,false),
132  m_transposition(In.m_transposition),
133  m_StripZcomm(In.m_StripZcomm),
134  m_useFFT(In.m_useFFT),
135  m_FFT(In.m_FFT),
136  m_tmpIN(In.m_tmpIN),
137  m_tmpOUT(In.m_tmpOUT),
138  m_homogeneousBasis(In.m_homogeneousBasis),
139  m_lhom(In.m_lhom),
140  m_homogeneous1DBlockMat(In.m_homogeneous1DBlockMat),
141  m_dealiasing(In.m_dealiasing),
142  m_padsize(In.m_padsize)
143  {
144  m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.num_elements());
145  }
ExpList()
The default constructor.
Definition: ExpList.cpp:95
LibUtilities::TranspositionSharedPtr m_transposition
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...
Array< OneD, ExpListSharedPtr > m_planes
LibUtilities::NektarFFTSharedPtr m_FFT
Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D ( const ExpListHomogeneous1D In,
const std::vector< unsigned int > &  eIDs 
)

Definition at line 147 of file ExpListHomogeneous1D.cpp.

References m_planes.

148  :
149  ExpList(In,eIDs,false),
150  m_transposition(In.m_transposition),
151  m_useFFT(In.m_useFFT),
152  m_FFT(In.m_FFT),
153  m_tmpIN(In.m_tmpIN),
154  m_tmpOUT(In.m_tmpOUT),
155  m_homogeneousBasis(In.m_homogeneousBasis),
156  m_lhom(In.m_lhom),
157  m_homogeneous1DBlockMat(MemoryManager<Homo1DBlockMatrixMap>::AllocateSharedPtr()),
158  m_dealiasing(In.m_dealiasing),
159  m_padsize(In.m_padsize)
160  {
161  m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.num_elements());
162  }
ExpList()
The default constructor.
Definition: ExpList.cpp:95
LibUtilities::TranspositionSharedPtr m_transposition
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...
Array< OneD, ExpListSharedPtr > m_planes
LibUtilities::NektarFFTSharedPtr m_FFT
Nektar::MultiRegions::ExpListHomogeneous1D::~ExpListHomogeneous1D ( )
virtual

Destructor.

Destructor

Definition at line 167 of file ExpListHomogeneous1D.cpp.

168  {
169  }

Member Function Documentation

DNekBlkMatSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GenHomogeneous1DBlockMatrix ( Homogeneous1DMatType  mattype,
CoeffState  coeffstate = eLocal 
) const
protected

Definition at line 753 of file ExpListHomogeneous1D.cpp.

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

Referenced by GetHomogeneous1DBlockMatrix().

754  {
755  DNekMatSharedPtr loc_mat;
756  DNekBlkMatSharedPtr BlkMatrix;
757  int n_exp = 0;
758  int num_trans_per_proc = 0;
759 
760  if((mattype == eForwardsCoeffSpace1D)
761  ||(mattype == eBackwardsCoeffSpace1D)) // will operate on m_coeffs
762  {
763  n_exp = m_planes[0]->GetNcoeffs();
764  }
765  else
766  {
767  n_exp = m_planes[0]->GetTotPoints(); // will operatore on m_phys
768  }
769 
770  num_trans_per_proc = n_exp/m_comm->GetColumnComm()->GetSize() + (n_exp%m_comm->GetColumnComm()->GetSize() > 0);
771 
772  Array<OneD,unsigned int> nrows(num_trans_per_proc);
773  Array<OneD,unsigned int> ncols(num_trans_per_proc);
774 
775  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
776  {
777  nrows = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumModes());
778  ncols = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumPoints());
779  }
780  else
781  {
782  nrows = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumPoints());
783  ncols = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumModes());
784  }
785 
786  MatrixStorage blkmatStorage = eDIAGONAL;
787  BlkMatrix = MemoryManager<DNekBlkMat>
788  ::AllocateSharedPtr(nrows,ncols,blkmatStorage);
789 
790  //Half Mode
792  {
793  StdRegions::StdPointExp StdPoint(m_homogeneousBasis->GetBasisKey());
794 
795  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
796  {
797  StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
798  StdPoint.DetShapeType(),
799  StdPoint);
800 
801  loc_mat = StdPoint.GetStdMatrix(matkey);
802  }
803  else
804  {
805  StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
806  StdPoint.DetShapeType(),
807  StdPoint);
808 
809  loc_mat = StdPoint.GetStdMatrix(matkey);
810  }
811  }
812  //other cases
813  else
814  {
815  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
816 
817  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
818  {
819  StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
820  StdSeg.DetShapeType(),
821  StdSeg);
822 
823  loc_mat = StdSeg.GetStdMatrix(matkey);
824  }
825  else
826  {
827  StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
828  StdSeg.DetShapeType(),
829  StdSeg);
830 
831  loc_mat = StdSeg.GetStdMatrix(matkey);
832  }
833 
834  }
835 
836  // set up array of block matrices.
837  for(int i = 0; i < num_trans_per_proc; ++i)
838  {
839  BlkMatrix->SetBlock(i,i,loc_mat);
840  }
841 
842  return BlkMatrix;
843  }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
boost::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:70
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
Fourier Modified expansions with just the real part of the first mode .
Definition: BasisType.h:59
Array< OneD, ExpListSharedPtr > m_planes
Fourier Modified expansions with just the imaginary part of the first mode .
Definition: BasisType.h:60
boost::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
Definition: NekTypeDefs.hpp:72
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
DNekBlkMatSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GetHomogeneous1DBlockMatrix ( Homogeneous1DMatType  mattype,
CoeffState  coeffstate = eLocal 
) const
protected

Definition at line 737 of file ExpListHomogeneous1D.cpp.

References GenHomogeneous1DBlockMatrix(), Nektar::iterator, and m_homogeneous1DBlockMat.

Referenced by Homogeneous1DTrans().

738  {
739  Homo1DBlockMatrixMap::iterator matrixIter = m_homogeneous1DBlockMat->find(mattype);
740 
741  if(matrixIter == m_homogeneous1DBlockMat->end())
742  {
743  return ((*m_homogeneous1DBlockMat)[mattype] =
744  GenHomogeneous1DBlockMatrix(mattype,coeffstate));
745  }
746  else
747  {
748  return matrixIter->second;
749  }
750  }
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
DNekBlkMatSharedPtr GenHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype, CoeffState coeffstate=eLocal) const
LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::GetHomogeneousBasis ( void  )
inline

Definition at line 115 of file ExpListHomogeneous1D.h.

References m_homogeneousBasis.

Referenced by v_GetHomogeneousBasis().

116  {
117  return m_homogeneousBasis;
118  }
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
ExpListSharedPtr& Nektar::MultiRegions::ExpListHomogeneous1D::GetPlane ( int  n)
inline

Definition at line 129 of file ExpListHomogeneous1D.h.

References m_planes.

Referenced by v_GetPlane().

130  {
131  return m_planes[n];
132  }
Array< OneD, ExpListSharedPtr > m_planes
NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::GetSpecVanVisc ( const int  k)
inlineprotected

Definition at line 162 of file ExpListHomogeneous1D.h.

References m_specVanVisc.

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

163  {
164  NekDouble returnval = 0.0;
165 
166  if(m_specVanVisc.num_elements())
167  {
168  returnval = m_specVanVisc[k];
169  }
170 
171  return returnval;
172  }
Array< OneD, NekDouble > m_specVanVisc
Spectral vanishing Viscosity coefficient for stabilisation.
double NekDouble
void Nektar::MultiRegions::ExpListHomogeneous1D::Homogeneous1DTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
bool  IsForwards,
CoeffState  coeffstate = eLocal,
bool  Shuff = true,
bool  UnShuff = true 
)

Homogeneous transform Bwd/Fwd (MVM and FFT)

Definition at line 604 of file ExpListHomogeneous1D.cpp.

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().

609  {
610  int num_dofs;
611 
612  if(IsForwards)
613  {
614  num_dofs = inarray.num_elements();
615  }
616  else
617  {
618  num_dofs = outarray.num_elements();
619  }
620 
621  if(m_useFFT)
622  {
623  int num_points_per_plane = num_dofs/m_planes.num_elements();
624  int num_dfts_per_proc;
625  if(!m_session->DefinesSolverInfo("HomoStrip"))
626  {
627  int nP = m_comm->GetColumnComm()->GetSize();
628  num_dfts_per_proc = num_points_per_plane / nP
629  + (num_points_per_plane % nP > 0);
630  }
631  else
632  {
633  int nP = m_StripZcomm->GetSize();
634  num_dfts_per_proc = num_points_per_plane / nP
635  + (num_points_per_plane % nP > 0);
636  }
637 
638  Array<OneD, NekDouble> fft_in (num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),0.0);
639  Array<OneD, NekDouble> fft_out(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),0.0);
640 
641  if(Shuff)
642  {
643  m_transposition->Transpose(inarray,fft_in,false,LibUtilities::eXYtoZ);
644  }
645  else
646  {
647  Vmath::Vcopy(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),
648  inarray,1,fft_in,1);
649  }
650 
651  if(IsForwards)
652  {
653  for(int i = 0 ; i < num_dfts_per_proc ; i++)
654  {
655  m_FFT->FFTFwdTrans(m_tmpIN = fft_in + i*m_homogeneousBasis->GetNumPoints(), m_tmpOUT = fft_out + i*m_homogeneousBasis->GetNumPoints());
656  }
657  }
658  else
659  {
660  for(int i = 0 ; i < num_dfts_per_proc ; i++)
661  {
662  m_FFT->FFTBwdTrans(m_tmpIN = fft_in + i*m_homogeneousBasis->GetNumPoints(), m_tmpOUT = fft_out + i*m_homogeneousBasis->GetNumPoints());
663  }
664  }
665 
666  if(UnShuff)
667  {
668  m_transposition->Transpose(fft_out,outarray,false,LibUtilities::eZtoXY);
669  }
670  else
671  {
672  Vmath::Vcopy(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),
673  fft_out,1,outarray,1);
674  }
675  }
676  else
677  {
678  DNekBlkMatSharedPtr blkmat;
679 
680  if(num_dofs == m_npoints) //transform phys space
681  {
682  if(IsForwards)
683  {
685  }
686  else
687  {
689  }
690  }
691  else
692  {
693  if(IsForwards)
694  {
696  }
697  else
698  {
700  }
701  }
702 
703  int nrows = blkmat->GetRows();
704  int ncols = blkmat->GetColumns();
705 
706  Array<OneD, NekDouble> sortedinarray(ncols,0.0);
707  Array<OneD, NekDouble> sortedoutarray(nrows,0.0);
708 
709  if(Shuff)
710  {
711  m_transposition->Transpose(inarray,sortedinarray,!IsForwards,LibUtilities::eXYtoZ);
712  }
713  else
714  {
715  Vmath::Vcopy(ncols,inarray,1,sortedinarray,1);
716  }
717 
718  // Create NekVectors from the given data arrays
719  NekVector<NekDouble> in (ncols,sortedinarray,eWrapper);
720  NekVector<NekDouble> out(nrows,sortedoutarray,eWrapper);
721 
722  // Perform matrix-vector multiply.
723  out = (*blkmat)*in;
724 
725  if(UnShuff)
726  {
727  m_transposition->Transpose(sortedoutarray,outarray,IsForwards,LibUtilities::eZtoXY);
728  }
729  else
730  {
731  Vmath::Vcopy(nrows,sortedoutarray,1,outarray,1);
732  }
733 
734  }
735  }
DNekBlkMatSharedPtr GetHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype, CoeffState coeffstate=eLocal) const
LibUtilities::TranspositionSharedPtr m_transposition
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
boost::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
Definition: NekTypeDefs.hpp:72
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1061
LibUtilities::NektarFFTSharedPtr m_FFT
void Nektar::MultiRegions::ExpListHomogeneous1D::HomogeneousBwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate = eLocal,
bool  Shuff = true,
bool  UnShuff = true 
)
inline

Definition at line 294 of file ExpListHomogeneous1D.h.

References v_HomogeneousBwdTrans().

Referenced by v_BwdTrans(), v_BwdTrans_IterPerExp(), v_DealiasedDotProd(), v_DealiasedProd(), and v_PhysDeriv().

299  {
300  v_HomogeneousBwdTrans(inarray,outarray,coeffstate,Shuff,UnShuff);
301  }
virtual void v_HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
void Nektar::MultiRegions::ExpListHomogeneous1D::HomogeneousFwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate = eLocal,
bool  Shuff = true,
bool  UnShuff = true 
)
inline

Definition at line 285 of file ExpListHomogeneous1D.h.

References v_HomogeneousFwdTrans().

Referenced by v_DealiasedDotProd(), v_DealiasedProd(), v_FwdTrans(), v_FwdTrans_IterPerExp(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_HelmSolve(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_HelmSolve(), v_IProductWRTBase(), v_IProductWRTBase_IterPerExp(), and v_PhysDeriv().

290  {
291  v_HomogeneousFwdTrans(inarray,outarray,coeffstate,Shuff,UnShuff);
292  }
virtual void v_HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
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 1415 of file ExpListHomogeneous1D.cpp.

References v_PhysDeriv().

1420  {
1421  v_PhysDeriv(inarray,out_d0,out_d1,out_d2);
1422  }
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)
void Nektar::MultiRegions::ExpListHomogeneous1D::PhysDeriv ( Direction  edir,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d 
)

Definition at line 1424 of file ExpListHomogeneous1D.cpp.

References v_PhysDeriv().

1427  {
1428  v_PhysDeriv(edir,inarray,out_d);
1429  }
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)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_AppendFieldData ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 953 of file ExpListHomogeneous1D.cpp.

References Nektar::MultiRegions::ExpList::m_coeffs.

954  {
955  v_AppendFieldData(fielddef,fielddata,m_coeffs);
956  }
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
Definition: ExpList.h:998
virtual void v_AppendFieldData(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_AppendFieldData ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata,
Array< OneD, NekDouble > &  coeffs 
)
protectedvirtual

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 926 of file ExpListHomogeneous1D.cpp.

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

927  {
928  int i,n;
929  int ncoeffs_per_plane = m_planes[0]->GetNcoeffs();
930 
931  // Determine mapping from element ids to location in
932  // expansion list
933  if (m_elmtToExpId.size() == 0)
934  {
935  for(i = 0; i < m_planes[0]->GetExpSize(); ++i)
936  {
937  m_elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
938  }
939  }
940 
941  for(i = 0; i < fielddef->m_elementIDs.size(); ++i)
942  {
943  int eid = m_elmtToExpId[fielddef->m_elementIDs[i]];
944  int datalen = (*m_exp)[eid]->GetNcoeffs();
945 
946  for(n = 0; n < m_planes.num_elements(); ++n)
947  {
948  fielddata.insert(fielddata.end(),&coeffs[m_coeff_offset[eid]+n*ncoeffs_per_plane],&coeffs[m_coeff_offset[eid]+n*ncoeffs_per_plane]+datalen);
949  }
950  }
951  }
boost::unordered_map< int, int > m_elmtToExpId
Mapping from geometry ID of element to index inside m_exp.
Definition: ExpList.h:1062
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
Definition: ExpList.h:1047
Array< OneD, ExpListSharedPtr > m_planes
void Nektar::MultiRegions::ExpListHomogeneous1D::v_BwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate 
)
protectedvirtual

Backward transform

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 508 of file ExpListHomogeneous1D.cpp.

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

509  {
510  int cnt = 0, cnt1 = 0;
511  Array<OneD, NekDouble> tmparray;
512 
513  for(int n = 0; n < m_planes.num_elements(); ++n)
514  {
515  m_planes[n]->BwdTrans(inarray+cnt, tmparray = outarray + cnt1,
516  coeffstate);
517  cnt += m_planes[n]->GetNcoeffs();
518  cnt1 += m_planes[n]->GetTotPoints();
519  }
520  if(!m_WaveSpace)
521  {
522  HomogeneousBwdTrans(outarray,outarray);
523  }
524  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
Array< OneD, ExpListSharedPtr > m_planes
void Nektar::MultiRegions::ExpListHomogeneous1D::v_BwdTrans_IterPerExp ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Backward transform element by element

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 529 of file ExpListHomogeneous1D.cpp.

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

530  {
531  int cnt = 0, cnt1 = 0;
532  Array<OneD, NekDouble> tmparray;
533 
534  for(int n = 0; n < m_planes.num_elements(); ++n)
535  {
536  m_planes[n]->BwdTrans_IterPerExp(inarray+cnt, tmparray = outarray + cnt1);
537 
538  cnt += m_planes[n]->GetNcoeffs();
539  cnt1 += m_planes[n]->GetTotPoints();
540  }
541  if(!m_WaveSpace)
542  {
543  HomogeneousBwdTrans(outarray,outarray);
544  }
545  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
Array< OneD, ExpListSharedPtr > m_planes
void Nektar::MultiRegions::ExpListHomogeneous1D::v_DealiasedDotProd ( const Array< OneD, Array< OneD, NekDouble > > &  inarray1,
const Array< OneD, Array< OneD, NekDouble > > &  inarray2,
Array< OneD, Array< OneD, NekDouble > > &  outarray,
CoeffState  coeffstate = eLocal 
)
protectedvirtual

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 300 of file ExpListHomogeneous1D.cpp.

References ASSERTL1, Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, HomogeneousBwdTrans(), 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().

305  {
306  int ndim = inarray1.num_elements();
307  ASSERTL1( inarray2.num_elements() % ndim == 0,
308  "Wrong dimensions for DealiasedDotProd.");
309  int nvec = inarray2.num_elements() / ndim;
310 
311  int num_dofs = inarray1[0].num_elements();
312  int N = m_homogeneousBasis->GetNumPoints();
313 
314  int num_points_per_plane = num_dofs/m_planes.num_elements();
315  int num_proc;
316  if(!m_session->DefinesSolverInfo("HomoStrip"))
317  {
318  num_proc = m_comm->GetColumnComm()->GetSize();
319  }
320  else
321  {
322  num_proc = m_StripZcomm->GetSize();
323  }
324  int num_dfts_per_proc = num_points_per_plane / num_proc
325  + (num_points_per_plane % num_proc > 0);
326 
327  // Get inputs in Fourier space
328  Array<OneD, Array<OneD, NekDouble> > V1(ndim);
329  Array<OneD, Array<OneD, NekDouble> > V2(ndim*nvec);
330  if(m_WaveSpace)
331  {
332  for (int i = 0; i < ndim; i++)
333  {
334  V1[i] = inarray1[i];
335  }
336  for (int i = 0; i < ndim*nvec; i++)
337  {
338  V2[i] = inarray2[i];
339  }
340  }
341  else
342  {
343  for (int i = 0; i < ndim; i++)
344  {
345  V1[i] = Array<OneD, NekDouble> (num_dofs);
346  HomogeneousFwdTrans(inarray1[i],V1[i],coeffstate);
347  }
348  for (int i = 0; i < ndim*nvec; i++)
349  {
350  V2[i] = Array<OneD, NekDouble> (num_dofs);
351  HomogeneousFwdTrans(inarray2[i],V2[i],coeffstate);
352  }
353  }
354 
355  // Allocate variables for ffts
356  Array<OneD, Array<OneD, NekDouble> > ShufV1(ndim);
357  Array<OneD, NekDouble> ShufV1_PAD_coef(m_padsize,0.0);
358  Array<OneD, Array<OneD, NekDouble> > ShufV1_PAD_phys(ndim);
359  for (int i = 0; i < ndim; i++)
360  {
361  ShufV1[i] = Array<OneD, NekDouble>
362  (num_dfts_per_proc*N,0.0);
363  ShufV1_PAD_phys[i] = Array<OneD, NekDouble>
364  (m_padsize,0.0);
365  }
366 
367  Array<OneD, Array<OneD, NekDouble> > ShufV2(ndim*nvec);
368  Array<OneD, NekDouble> ShufV2_PAD_coef(m_padsize,0.0);
369  Array<OneD, Array<OneD, NekDouble> > ShufV2_PAD_phys(ndim*nvec);
370  for (int i = 0; i < ndim*nvec; i++)
371  {
372  ShufV2[i] = Array<OneD, NekDouble>
373  (num_dfts_per_proc*N,0.0);
374  ShufV2_PAD_phys[i] = Array<OneD, NekDouble>
375  (m_padsize,0.0);
376  }
377 
378  Array<OneD, Array<OneD, NekDouble> > ShufV1V2(nvec);
379  Array<OneD, NekDouble> ShufV1V2_PAD_coef(m_padsize,0.0);
380  Array<OneD, NekDouble> ShufV1V2_PAD_phys(m_padsize,0.0);
381  for (int i = 0; i < nvec; i++)
382  {
383  ShufV1V2[i] = Array<OneD, NekDouble>
384  (num_dfts_per_proc*N,0.0);
385  }
386 
387  // Transpose inputs
388  for (int i = 0; i < ndim; i++)
389  {
390  m_transposition->Transpose(V1[i], ShufV1[i], false,
392  }
393  for (int i = 0; i < ndim*nvec; i++)
394  {
395  m_transposition->Transpose(V2[i], ShufV2[i], false,
397  }
398 
399  // Looping on the pencils
400  for(int i = 0 ; i < num_dfts_per_proc ; i++)
401  {
402  for (int j = 0; j < ndim; j++)
403  {
404  // Copying the i-th pencil pf lenght N into a bigger
405  // pencil of lenght 1.5N We are in Fourier space
406  Vmath::Vcopy(N, &(ShufV1[j][i*N]), 1,
407  &(ShufV1_PAD_coef[0]), 1);
408  // Moving to physical space using the padded system
409  m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys[j]);
410  }
411  for (int j = 0; j < ndim*nvec; j++)
412  {
413  Vmath::Vcopy(N, &(ShufV2[j][i*N]), 1,
414  &(ShufV2_PAD_coef[0]), 1);
415  m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys[j]);
416  }
417 
418  // Performing the vectors multiplication in physical space on
419  // the padded system
420  for (int j = 0; j < nvec; j++)
421  {
422  Vmath::Zero(m_padsize, ShufV1V2_PAD_phys, 1);
423  for (int k = 0; k < ndim; k++)
424  {
425  Vmath::Vvtvp(m_padsize, ShufV1_PAD_phys[k], 1,
426  ShufV2_PAD_phys[j*ndim+k], 1,
427  ShufV1V2_PAD_phys, 1,
428  ShufV1V2_PAD_phys, 1);
429  }
430  // Moving back the result (V1*V2)_phys in Fourier space,
431  // padded system
432  m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
433  // Copying the first half of the padded pencil in the full
434  // vector (Fourier space)
435  Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1,
436  &(ShufV1V2[j][i*N]), 1);
437  }
438  }
439 
440  // Moving the results to the output
441  if (m_WaveSpace)
442  {
443  for (int j = 0; j < nvec; j++)
444  {
445  m_transposition->Transpose(ShufV1V2[j], outarray[j],
446  false,
448  }
449  }
450  else
451  {
452  Array<OneD, NekDouble> V1V2(num_dofs);
453  for (int j = 0; j < nvec; j++)
454  {
455  m_transposition->Transpose(ShufV1V2[j], V1V2, false,
457  HomogeneousBwdTrans(V1V2, outarray[j], coeffstate);
458  }
459  }
460  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
LibUtilities::TranspositionSharedPtr m_transposition
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
Definition: Vmath.cpp:442
LibUtilities::NektarFFTSharedPtr m_FFT_deal
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.cpp:373
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:228
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1061
void Nektar::MultiRegions::ExpListHomogeneous1D::v_DealiasedProd ( const Array< OneD, NekDouble > &  inarray1,
const Array< OneD, NekDouble > &  inarray2,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate = eLocal 
)
protectedvirtual

Dealiasing routine

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 198 of file ExpListHomogeneous1D.cpp.

References Nektar::LibUtilities::eXYtoZ, Nektar::LibUtilities::eZtoXY, HomogeneousBwdTrans(), 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().

202  {
203  int num_dofs = inarray1.num_elements();
204  int N = m_homogeneousBasis->GetNumPoints();
205 
206  Array<OneD, NekDouble> V1(num_dofs);
207  Array<OneD, NekDouble> V2(num_dofs);
208  Array<OneD, NekDouble> V1V2(num_dofs);
209 
210  if(m_WaveSpace)
211  {
212  V1 = inarray1;
213  V2 = inarray2;
214  }
215  else
216  {
217  HomogeneousFwdTrans(inarray1,V1,coeffstate);
218  HomogeneousFwdTrans(inarray2,V2,coeffstate);
219  }
220 
221  int num_points_per_plane = num_dofs/m_planes.num_elements();
222  int num_proc;
223  if(!m_session->DefinesSolverInfo("HomoStrip"))
224  {
225  num_proc = m_comm->GetColumnComm()->GetSize();
226  }
227  else
228  {
229  num_proc = m_StripZcomm->GetSize();
230  }
231  int num_dfts_per_proc = num_points_per_plane / num_proc
232  + (num_points_per_plane % num_proc > 0);
233 
234  Array<OneD, NekDouble> ShufV1(num_dfts_per_proc*N,0.0);
235  Array<OneD, NekDouble> ShufV2(num_dfts_per_proc*N,0.0);
236  Array<OneD, NekDouble> ShufV1V2(num_dfts_per_proc*N,0.0);
237 
238  Array<OneD, NekDouble> ShufV1_PAD_coef(m_padsize,0.0);
239  Array<OneD, NekDouble> ShufV2_PAD_coef(m_padsize,0.0);
240  Array<OneD, NekDouble> ShufV1_PAD_phys(m_padsize,0.0);
241  Array<OneD, NekDouble> ShufV2_PAD_phys(m_padsize,0.0);
242 
243  Array<OneD, NekDouble> ShufV1V2_PAD_coef(m_padsize,0.0);
244  Array<OneD, NekDouble> ShufV1V2_PAD_phys(m_padsize,0.0);
245 
246  m_transposition->Transpose(V1, ShufV1, false, LibUtilities::eXYtoZ);
247  m_transposition->Transpose(V2, ShufV2, false, LibUtilities::eXYtoZ);
248 
249  // Looping on the pencils
250  for(int i = 0 ; i < num_dfts_per_proc ; i++)
251  {
252  // Copying the i-th pencil pf lenght N into a bigger
253  // pencil of lenght 2N We are in Fourier space
254  Vmath::Vcopy(N, &(ShufV1[i*N]), 1, &(ShufV1_PAD_coef[0]), 1);
255  Vmath::Vcopy(N, &(ShufV2[i*N]), 1, &(ShufV2_PAD_coef[0]), 1);
256 
257  // Moving to physical space using the padded system
258  m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys);
259  m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys);
260 
261  // Perfroming the vectors multiplication in physical space on
262  // the padded system
263  Vmath::Vmul(m_padsize, ShufV1_PAD_phys, 1,
264  ShufV2_PAD_phys, 1,
265  ShufV1V2_PAD_phys, 1);
266 
267  // Moving back the result (V1*V2)_phys in Fourier space, padded
268  // system
269  m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
270 
271  // Copying the first half of the padded pencil in the full
272  // vector (Fourier space)
273  Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1,
274  &(ShufV1V2[i*N]), 1);
275  }
276 
277  // Moving the results to the output
278  if (m_WaveSpace)
279  {
280  m_transposition->Transpose(ShufV1V2, outarray, false,
282  }
283  else
284  {
285  m_transposition->Transpose(ShufV1V2, V1V2, false,
287  HomogeneousBwdTrans(V1V2, outarray, coeffstate);
288  }
289  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
LibUtilities::TranspositionSharedPtr m_transposition
LibUtilities::NektarFFTSharedPtr m_FFT_deal
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1061
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
Definition: Vmath.cpp:183
void Nektar::MultiRegions::ExpListHomogeneous1D::v_ExtractCoeffsToCoeffs ( const boost::shared_ptr< ExpList > &  fromExpList,
const Array< OneD, const NekDouble > &  fromCoeffs,
Array< OneD, NekDouble > &  toCoeffs 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1076 of file ExpListHomogeneous1D.cpp.

References m_planes.

1078  {
1079  int i;
1080  int fromNcoeffs_per_plane = fromExpList->GetPlane(0)->GetNcoeffs();
1081  int toNcoeffs_per_plane = m_planes[0]->GetNcoeffs();
1082  Array<OneD, NekDouble> tocoeffs_tmp, fromcoeffs_tmp;
1083 
1084  for(i = 0; i < m_planes.num_elements(); ++i)
1085  {
1086  m_planes[i]->ExtractCoeffsToCoeffs(fromExpList->GetPlane(i),fromcoeffs_tmp = fromCoeffs + fromNcoeffs_per_plane*i, tocoeffs_tmp = toCoeffs + toNcoeffs_per_plane*i);
1087  }
1088  }
Array< OneD, ExpListSharedPtr > m_planes
void Nektar::MultiRegions::ExpListHomogeneous1D::v_ExtractDataToCoeffs ( LibUtilities::FieldDefinitionsSharedPtr fielddef,
std::vector< NekDouble > &  fielddata,
std::string &  field,
Array< OneD, NekDouble > &  coeffs 
)
protectedvirtual

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 959 of file ExpListHomogeneous1D.cpp.

References Nektar::LibUtilities::GetNumberOfCoefficients(), Nektar::iterator, Nektar::MultiRegions::ExpList::m_coeff_offset, Nektar::MultiRegions::ExpList::m_elmtToExpId, Nektar::MultiRegions::ExpList::m_exp, m_planes, m_transposition, m_zIdToPlane, and Vmath::Vcopy().

964  {
965  int i,n;
966  int offset = 0;
967  int nzmodes = 1;
968  int datalen = fielddata.size()/fielddef->m_fields.size();
969  std::vector<unsigned int> fieldDefHomoZids;
970 
971 
972  // Find data location according to field definition
973  for(i = 0; i < fielddef->m_fields.size(); ++i)
974  {
975  if(fielddef->m_fields[i] == field)
976  {
977  break;
978  }
979  offset += datalen;
980  }
981 
982  if(i == fielddef->m_fields.size())
983  {
984  cout << "Field "<< field<< "not found in data file. " << endl;
985  }
986  else
987  {
988 
989  int modes_offset = 0;
990  int planes_offset = 0;
991  Array<OneD, NekDouble> coeff_tmp;
993 
994  // Build map of plane IDs lying on this processor and determine
995  // mapping from element ids to location in expansion list.
996  if (m_zIdToPlane.size() == 0)
997  {
998  for (i = 0; i < m_planes.num_elements(); ++i)
999  {
1000  m_zIdToPlane[m_transposition->GetPlaneID(i)] = i;
1001  }
1002 
1003  for (i = 0; i < m_planes[0]->GetExpSize(); ++i)
1004  {
1005  m_elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
1006  }
1007  }
1008 
1009  if(fielddef->m_numHomogeneousDir)
1010  {
1011  nzmodes = fielddef->m_homogeneousZIDs.size();
1012  fieldDefHomoZids = fielddef->m_homogeneousZIDs;
1013  }
1014  else // input file is 2D and so set nzmodes to 1
1015  {
1016  nzmodes = 1;
1017  fieldDefHomoZids.push_back(0);
1018  }
1019 
1020  // calculate number of modes in the current partition
1021  int ncoeffs_per_plane = m_planes[0]->GetNcoeffs();
1022 
1023  for(i = 0; i < fielddef->m_elementIDs.size(); ++i)
1024  {
1025  if(fielddef->m_uniOrder == true) // reset modes_offset to zero
1026  {
1027  modes_offset = 0;
1028  }
1029 
1030  int datalen = LibUtilities::GetNumberOfCoefficients(fielddef->m_shapeType,
1031  fielddef->m_numModes,
1032  modes_offset);
1033 
1034  it = m_elmtToExpId.find(fielddef->m_elementIDs[i]);
1035 
1036  // ensure element is on this partition for parallel case.
1037  if(it == m_elmtToExpId.end())
1038  {
1039  // increase offset for correct FieldData access
1040  offset += datalen*nzmodes;
1041  modes_offset += (*m_exp)[0]->GetNumBases() +
1042  fielddef->m_numHomogeneousDir;
1043  continue;
1044  }
1045 
1046  int eid = it->second;
1047 
1048 
1049  for(n = 0; n < nzmodes; ++n, offset += datalen)
1050  {
1051 
1052  it = m_zIdToPlane.find(fieldDefHomoZids[n]);
1053 
1054  // Check to make sure this mode number lies in this field.
1055  if (it == m_zIdToPlane.end())
1056  {
1057  continue;
1058  }
1059 
1060  planes_offset = it->second;
1061  if(datalen == (*m_exp)[eid]->GetNcoeffs())
1062  {
1063  Vmath::Vcopy(datalen,&fielddata[offset],1,&coeffs[m_coeff_offset[eid]+planes_offset*ncoeffs_per_plane],1);
1064  }
1065  else // unpack data to new order
1066  {
1067  (*m_exp)[eid]->ExtractDataToCoeffs(&fielddata[offset], fielddef->m_numModes,modes_offset,&coeffs[m_coeff_offset[eid] + planes_offset*ncoeffs_per_plane], fielddef->m_basis);
1068  }
1069  }
1070  modes_offset += (*m_exp)[0]->GetNumBases() + fielddef->m_numHomogeneousDir;
1071  }
1072  }
1073  }
boost::unordered_map< int, int > m_elmtToExpId
Mapping from geometry ID of element to index inside m_exp.
Definition: ExpList.h:1062
LibUtilities::TranspositionSharedPtr m_transposition
int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset)
Definition: ShapeType.hpp:312
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
Definition: ExpList.h:1047
boost::unordered_map< int, int > m_zIdToPlane
boost::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition: ExpList.h:1036
Array< OneD, ExpListSharedPtr > m_planes
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1061
void Nektar::MultiRegions::ExpListHomogeneous1D::v_FwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate 
)
protectedvirtual

Forward transform

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 465 of file ExpListHomogeneous1D.cpp.

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

466  {
467  int cnt = 0, cnt1 = 0;
468  Array<OneD, NekDouble> tmparray;
469 
470  for(int n = 0; n < m_planes.num_elements(); ++n)
471  {
472  m_planes[n]->FwdTrans(inarray+cnt, tmparray = outarray + cnt1,
473  coeffstate);
474  cnt += m_planes[n]->GetTotPoints();
475 
476  cnt1 += m_planes[n]->GetNcoeffs(); // need to skip ncoeffs
477  }
478  if(!m_WaveSpace)
479  {
480  HomogeneousFwdTrans(outarray,outarray,coeffstate);
481  }
482  }
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_FwdTrans_IterPerExp ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Forward transform element by element

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 487 of file ExpListHomogeneous1D.cpp.

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

488  {
489  int cnt = 0, cnt1 = 0;
490  Array<OneD, NekDouble> tmparray;
491 
492  //spectral element FwdTrans plane by plane
493  for(int n = 0; n < m_planes.num_elements(); ++n)
494  {
495  m_planes[n]->FwdTrans_IterPerExp(inarray+cnt, tmparray = outarray + cnt1);
496  cnt += m_planes[n]->GetTotPoints();
497  cnt1 += m_planes[n]->GetNcoeffs();
498  }
499  if(!m_WaveSpace)
500  {
501  HomogeneousFwdTrans(outarray,outarray);
502  }
503  }
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
std::vector< LibUtilities::FieldDefinitionsSharedPtr > Nektar::MultiRegions::ExpListHomogeneous1D::v_GetFieldDefinitions ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 845 of file ExpListHomogeneous1D.cpp.

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

846  {
847  std::vector<LibUtilities::FieldDefinitionsSharedPtr> returnval;
848 
849  // Set up Homogeneous length details.
850  Array<OneD,LibUtilities::BasisSharedPtr> HomoBasis(1,m_homogeneousBasis);
851 
852  std::vector<NekDouble> HomoLen;
853  HomoLen.push_back(m_lhom);
854 
855  std::vector<unsigned int> StripsIDs;
856 
857  bool strips;
858  m_session->MatchSolverInfo("HomoStrip","True",strips,false);
859  if (strips)
860  {
861  StripsIDs.push_back(m_transposition->GetStripID());
862  }
863 
864  std::vector<unsigned int> PlanesIDs;
865  int IDoffset = 0;
866 
867  // introduce a 2 plane offset for single mode case so can
868  // be post-processed or used in MultiMode expansion.
870  {
871  IDoffset = 2;
872  }
873 
874  for(int i = 0; i < m_planes.num_elements(); i++)
875  {
876  PlanesIDs.push_back(m_transposition->GetPlaneID(i)+IDoffset);
877  }
878 
879  m_planes[0]->GeneralGetFieldDefinitions(returnval, 1, HomoBasis,
880  HomoLen, strips, StripsIDs, PlanesIDs);
881  return returnval;
882  }
LibUtilities::TranspositionSharedPtr m_transposition
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...
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
Fourier ModifiedExpansion with just the first mode .
Definition: BasisType.h:58
void Nektar::MultiRegions::ExpListHomogeneous1D::v_GetFieldDefinitions ( std::vector< LibUtilities::FieldDefinitionsSharedPtr > &  fielddef)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 884 of file ExpListHomogeneous1D.cpp.

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

885  {
886  // Set up Homogeneous length details.
887  Array<OneD,LibUtilities::BasisSharedPtr> HomoBasis(1,m_homogeneousBasis);
888 
889  std::vector<NekDouble> HomoLen;
890  HomoLen.push_back(m_lhom);
891 
892  std::vector<unsigned int> StripsIDs;
893 
894  bool strips;
895  m_session->MatchSolverInfo("HomoStrip","True",strips,false);
896  if (strips)
897  {
898  StripsIDs.push_back(m_transposition->GetStripID());
899  }
900 
901  std::vector<unsigned int> PlanesIDs;
902  int IDoffset = 0;
903 
905  {
906  IDoffset = 2;
907  }
908 
909  for(int i = 0; i < m_planes.num_elements(); i++)
910  {
911  PlanesIDs.push_back(m_transposition->GetPlaneID(i)+IDoffset);
912  }
913 
914  // enforce NumHomoDir == 1 by direct call
915  m_planes[0]->GeneralGetFieldDefinitions(fielddef, 1, HomoBasis,
916  HomoLen, strips, StripsIDs, PlanesIDs);
917  }
LibUtilities::TranspositionSharedPtr m_transposition
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...
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
Fourier ModifiedExpansion with just the first mode .
Definition: BasisType.h:58
virtual LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::v_GetHomogeneousBasis ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 185 of file ExpListHomogeneous1D.h.

References GetHomogeneousBasis().

186  {
187  return GetHomogeneousBasis();
188  }
LibUtilities::BasisSharedPtr GetHomogeneousBasis(void)
NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::v_GetHomoLen ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1436 of file ExpListHomogeneous1D.cpp.

References m_lhom.

1437  {
1438  return m_lhom;
1439  }
NekDouble m_lhom
Width of homogeneous direction.
virtual int Nektar::MultiRegions::ExpListHomogeneous1D::v_GetNumElmts ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 180 of file ExpListHomogeneous1D.h.

181  {
182  return m_planes[0]->GetExpSize();
183  }
Array< OneD, ExpListSharedPtr > m_planes
virtual ExpListSharedPtr& Nektar::MultiRegions::ExpListHomogeneous1D::v_GetPlane ( int  n)
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 268 of file ExpListHomogeneous1D.h.

References GetPlane().

269  {
270  return GetPlane(n);
271  }
LibUtilities::TranspositionSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::v_GetTransposition ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1431 of file ExpListHomogeneous1D.cpp.

References m_transposition.

1432  {
1433  return m_transposition;
1434  }
LibUtilities::TranspositionSharedPtr m_transposition
Array< OneD, const unsigned int > Nektar::MultiRegions::ExpListHomogeneous1D::v_GetZIDs ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1441 of file ExpListHomogeneous1D.cpp.

References m_transposition.

1442  {
1443  return m_transposition->GetPlanesIDs();
1444  }
LibUtilities::TranspositionSharedPtr m_transposition
void Nektar::MultiRegions::ExpListHomogeneous1D::v_HomogeneousBwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate = eLocal,
bool  Shuff = true,
bool  UnShuff = true 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 181 of file ExpListHomogeneous1D.cpp.

References Homogeneous1DTrans().

Referenced by HomogeneousBwdTrans().

186  {
187  // Backwards trans
188  Homogeneous1DTrans(inarray,outarray,false,coeffstate,Shuff,UnShuff);
189  }
void Homogeneous1DTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_HomogeneousFwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate = eLocal,
bool  Shuff = true,
bool  UnShuff = true 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 171 of file ExpListHomogeneous1D.cpp.

References Homogeneous1DTrans().

Referenced by HomogeneousFwdTrans().

176  {
177  // Forwards trans
178  Homogeneous1DTrans(inarray,outarray,true,coeffstate,Shuff,UnShuff);
179  }
void Homogeneous1DTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_IProductWRTBase ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
CoeffState  coeffstate 
)
protectedvirtual

Inner product

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 550 of file ExpListHomogeneous1D.cpp.

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

551  {
552  int cnt = 0, cnt1 = 0;
553  Array<OneD, NekDouble> tmparray, tmpIn;
554 
555  if(m_WaveSpace)
556  {
557  tmpIn = inarray;
558  }
559  else
560  {
561  tmpIn = Array<OneD, NekDouble> (inarray.num_elements(), 0.0);
562  HomogeneousFwdTrans(inarray,tmpIn);
563  }
564 
565  for(int n = 0; n < m_planes.num_elements(); ++n)
566  {
567  m_planes[n]->IProductWRTBase(tmpIn+cnt, tmparray = outarray + cnt1,coeffstate);
568 
569  cnt1 += m_planes[n]->GetNcoeffs();
570  cnt += m_planes[n]->GetTotPoints();
571  }
572  }
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
void Nektar::MultiRegions::ExpListHomogeneous1D::v_IProductWRTBase_IterPerExp ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Inner product element by element

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 577 of file ExpListHomogeneous1D.cpp.

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

578  {
579  int cnt = 0, cnt1 = 0;
580  Array<OneD, NekDouble> tmparray, tmpIn;
581 
582  if(m_WaveSpace)
583  {
584  tmpIn = inarray;
585  }
586  else
587  {
588  tmpIn = Array<OneD, NekDouble> (inarray.num_elements(), 0.0);
589  HomogeneousFwdTrans(inarray,tmpIn);
590  }
591 
592  for(int n = 0; n < m_planes.num_elements(); ++n)
593  {
594  m_planes[n]->IProductWRTBase_IterPerExp(tmpIn+cnt, tmparray = outarray + cnt1);
595 
596  cnt1 += m_planes[n]->GetNcoeffs();
597  cnt += m_planes[n]->GetTotPoints();
598  }
599  }
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
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 
)
protectedvirtual

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 1193 of file ExpListHomogeneous1D.cpp.

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

Referenced by PhysDeriv().

1197  {
1198  int nT_pts = inarray.num_elements(); //number of total points = n. of Fourier points * n. of points per plane (nT_pts)
1199  int nP_pts = nT_pts/m_planes.num_elements(); //number of points per plane = n of Fourier transform required (nP_pts)
1200 
1201  Array<OneD, NekDouble> temparray(nT_pts);
1202  Array<OneD, NekDouble> outarray(nT_pts);
1203  Array<OneD, NekDouble> tmp1;
1204  Array<OneD, NekDouble> tmp2;
1205  Array<OneD, NekDouble> tmp3;
1206 
1207  for(int i = 0; i < m_planes.num_elements(); i++)
1208  {
1209  m_planes[i]->PhysDeriv(inarray + i*nP_pts ,tmp2 = out_d0 + i*nP_pts , tmp3 = out_d1 + i*nP_pts );
1210  }
1211 
1212  if(out_d2 != NullNekDouble1DArray)
1213  {
1216  {
1217  if(m_WaveSpace)
1218  {
1219  temparray = inarray;
1220  }
1221  else
1222  {
1223  HomogeneousFwdTrans(inarray,temparray);
1224  }
1225 
1226  NekDouble sign = -1.0;
1227  NekDouble beta;
1228 
1229  //Half Mode
1231  {
1232  beta = sign*2*M_PI*(m_transposition->GetK(0))/m_lhom;
1233 
1234  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1235  }
1236  else if(m_homogeneousBasis->GetBasisType() == LibUtilities::eFourierHalfModeIm)
1237  {
1238  beta = -sign*2*M_PI*(m_transposition->GetK(0))/m_lhom;
1239 
1240  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1241  }
1242 
1243  //Fully complex
1244  else
1245  {
1246  for(int i = 0; i < m_planes.num_elements(); i++)
1247  {
1248  beta = -sign*2*M_PI*(m_transposition->GetK(i))/m_lhom;
1249 
1250  Vmath::Smul(nP_pts,beta,tmp1 = temparray + i*nP_pts,1,tmp2 = outarray + (i-int(sign))*nP_pts,1);
1251 
1252  sign = -1.0*sign;
1253  }
1254  }
1255 
1256  if(m_WaveSpace)
1257  {
1258  out_d2 = outarray;
1259  }
1260  else
1261  {
1262  HomogeneousBwdTrans(outarray,out_d2);
1263  }
1264  }
1265  else
1266  {
1267  if(!m_session->DefinesSolverInfo("HomoStrip"))
1268  {
1269  ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1270  "Parallelisation in the homogeneous direction "
1271  "implemented just for Fourier basis");
1272  }
1273  else
1274  {
1275  ASSERTL0(m_StripZcomm->GetSize() == 1,
1276  "Parallelisation in the homogeneous direction "
1277  "implemented just for Fourier basis");
1278  }
1279 
1280  if(m_WaveSpace)
1281  {
1282  ASSERTL0(false, "Semi-phyisical time-stepping not "
1283  "implemented yet for non-Fourier "
1284  "basis");
1285  }
1286  else
1287  {
1288  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1289 
1290  m_transposition->Transpose(inarray,temparray,false,LibUtilities::eXYtoZ);
1291 
1292  for(int i = 0; i < nP_pts; i++)
1293  {
1294  StdSeg.PhysDeriv(temparray + i*m_planes.num_elements(), tmp2 = outarray + i*m_planes.num_elements());
1295  }
1296 
1297  m_transposition->Transpose(outarray,out_d2,false,LibUtilities::eZtoXY);
1298 
1299  Vmath::Smul(nT_pts,2.0/m_lhom,out_d2,1,out_d2,1);
1300  }
1301  }
1302  }
1303  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:198
static Array< OneD, NekDouble > NullNekDouble1DArray
#define sign(a, b)
return the sign(b)*a
Definition: Polylib.cpp:27
LibUtilities::TranspositionSharedPtr m_transposition
NekDouble m_lhom
Width of homogeneous direction.
Fourier Expansion .
Definition: BasisType.h:52
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
Fourier Modified expansions with just the real part of the first mode .
Definition: BasisType.h:59
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Definition: Vmath.cpp:213
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
double NekDouble
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
Fourier Modified expansions with just the imaginary part of the first mode .
Definition: BasisType.h:60
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
Fourier ModifiedExpansion with just the first mode .
Definition: BasisType.h:58
void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysDeriv ( Direction  edir,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  out_d 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1305 of file ExpListHomogeneous1D.cpp.

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

1308  {
1309  int nT_pts = inarray.num_elements(); //number of total points = n. of Fourier points * n. of points per plane (nT_pts)
1310  int nP_pts = nT_pts/m_planes.num_elements(); //number of points per plane = n of Fourier transform required (nP_pts)
1311 
1312  int dir= (int)edir;
1313 
1314  Array<OneD, NekDouble> temparray(nT_pts);
1315  Array<OneD, NekDouble> outarray(nT_pts);
1316  Array<OneD, NekDouble> tmp1;
1317  Array<OneD, NekDouble> tmp2;
1318 
1319  if (dir < 2)
1320  {
1321  for(int i=0; i < m_planes.num_elements(); i++)
1322  {
1323  m_planes[i]->PhysDeriv(edir, inarray + i*nP_pts ,tmp2 = out_d + i*nP_pts);
1324  }
1325  }
1326  else
1327  {
1330  {
1331  if(m_WaveSpace)
1332  {
1333  temparray = inarray;
1334  }
1335  else
1336  {
1337  HomogeneousFwdTrans(inarray,temparray);
1338  }
1339 
1340  NekDouble sign = -1.0;
1341  NekDouble beta;
1342 
1343  //HalfMode
1345  {
1346  beta = 2*sign*M_PI*(m_transposition->GetK(0))/m_lhom;
1347 
1348  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1349  }
1350  else if(m_homogeneousBasis->GetBasisType() == LibUtilities::eFourierHalfModeIm)
1351  {
1352  beta = -2*sign*M_PI*(m_transposition->GetK(0))/m_lhom;
1353 
1354  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1355  }
1356  //Fully complex
1357  else
1358  {
1359  for(int i = 0; i < m_planes.num_elements(); i++)
1360  {
1361  beta = -sign*2*M_PI*(m_transposition->GetK(i))/m_lhom;
1362 
1363  Vmath::Smul(nP_pts,beta,tmp1 = temparray + i*nP_pts,1,tmp2 = outarray + (i-int(sign))*nP_pts,1);
1364 
1365  sign = -1.0*sign;
1366  }
1367  }
1368  if(m_WaveSpace)
1369  {
1370  out_d = outarray;
1371  }
1372  else
1373  {
1374  HomogeneousBwdTrans(outarray,out_d);
1375  }
1376  }
1377  else
1378  {
1379  if(!m_session->DefinesSolverInfo("HomoStrip"))
1380  {
1381  ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1382  "Parallelisation in the homogeneous direction "
1383  "implemented just for Fourier basis");
1384  }
1385  else
1386  {
1387  ASSERTL0(m_StripZcomm->GetSize() == 1,
1388  "Parallelisation in the homogeneous direction "
1389  "implemented just for Fourier basis");
1390  }
1391 
1392  if(m_WaveSpace)
1393  {
1394  ASSERTL0(false,"Semi-phyisical time-stepping not implemented yet for non-Fourier basis");
1395  }
1396  else
1397  {
1398  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1399 
1400  m_transposition->Transpose(inarray,temparray,false,LibUtilities::eXYtoZ);
1401 
1402  for(int i = 0; i < nP_pts; i++)
1403  {
1404  StdSeg.PhysDeriv(temparray + i*m_planes.num_elements(), tmp2 = outarray + i*m_planes.num_elements());
1405  }
1406 
1407  m_transposition->Transpose(outarray,out_d,false,LibUtilities::eZtoXY);
1408 
1409  Vmath::Smul(nT_pts,2.0/m_lhom,out_d,1,out_d,1);
1410  }
1411  }
1412  }
1413  }
void HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:198
#define sign(a, b)
return the sign(b)*a
Definition: Polylib.cpp:27
LibUtilities::TranspositionSharedPtr m_transposition
NekDouble m_lhom
Width of homogeneous direction.
Fourier Expansion .
Definition: BasisType.h:52
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
Fourier Modified expansions with just the real part of the first mode .
Definition: BasisType.h:59
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Definition: Vmath.cpp:213
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:969
Array< OneD, ExpListSharedPtr > m_planes
double NekDouble
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
Fourier Modified expansions with just the imaginary part of the first mode .
Definition: BasisType.h:60
LibUtilities::CommSharedPtr m_comm
Communicator.
Definition: ExpList.h:966
Fourier ModifiedExpansion with just the first mode .
Definition: BasisType.h:58
void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysGalerkinProjection1DScaled ( const NekDouble  scale,
const Array< OneD, NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1176 of file ExpListHomogeneous1D.cpp.

References ASSERTL1, and m_planes.

1177  {
1178  int cnt,cnt1;
1179  Array<OneD, NekDouble> tmparray;
1180  cnt = m_planes[0]->Get1DScaledTotPoints(scale);
1181  cnt1 = m_planes[0]->GetTotPoints();
1182 
1183  ASSERTL1(m_planes.num_elements()*cnt <= inarray.num_elements(),"size of outarray does not match internal estimage");
1184 
1185 
1186  for(int i = 0; i < m_planes.num_elements(); i++)
1187  {
1188  m_planes[i]->PhysGalerkinProjection1DScaled(scale,inarray+i*cnt,
1189  tmparray = outarray+i*cnt1);
1190  }
1191 
1192  }
Array< OneD, ExpListSharedPtr > m_planes
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:228
void Nektar::MultiRegions::ExpListHomogeneous1D::v_PhysInterp1DScaled ( const NekDouble  scale,
const Array< OneD, NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1157 of file ExpListHomogeneous1D.cpp.

References ASSERTL1, and m_planes.

1158  {
1159  int cnt,cnt1;
1160  Array<OneD, NekDouble> tmparray;
1161  cnt = m_planes[0]->GetTotPoints();
1162  cnt1 = m_planes[0]->Get1DScaledTotPoints(scale);
1163 
1164  ASSERTL1(m_planes.num_elements()*cnt1 <= outarray.num_elements(),"size of outarray does not match internal estimage");
1165 
1166 
1167  for(int i = 0; i < m_planes.num_elements(); i++)
1168  {
1169 
1170  m_planes[i]->PhysInterp1DScaled(scale,inarray+i*cnt,
1171  tmparray = outarray+i*cnt1);
1172  }
1173  }
Array< OneD, ExpListSharedPtr > m_planes
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:228
virtual void Nektar::MultiRegions::ExpListHomogeneous1D::v_SetHomo1DSpecVanVisc ( Array< OneD, NekDouble visc)
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 175 of file ExpListHomogeneous1D.h.

References m_specVanVisc.

176  {
177  m_specVanVisc = visc;
178  }
Array< OneD, NekDouble > m_specVanVisc
Spectral vanishing Viscosity coefficient for stabilisation.
void Nektar::MultiRegions::ExpListHomogeneous1D::v_WriteVtkPieceData ( std::ostream &  outfile,
int  expansion,
std::string  var 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1090 of file ExpListHomogeneous1D.cpp.

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.

1092  {
1093  // If there is only one plane (e.g. HalfMode), we write a 2D plane.
1094  if (m_planes.num_elements() == 1)
1095  {
1096  m_planes[0]->WriteVtkPieceData(outfile, expansion, var);
1097  return;
1098  }
1099 
1100  int i;
1101  int nq = (*m_exp)[expansion]->GetTotPoints();
1102  int npoints_per_plane = m_planes[0]->GetTotPoints();
1103 
1104  // If we are using Fourier points, output extra plane to fill domain
1105  int outputExtraPlane = 0;
1106  Array<OneD, NekDouble> extraPlane;
1107  if ( m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier
1108  && m_homogeneousBasis->GetPointsType() ==
1110  {
1111  outputExtraPlane = 1;
1112  // Get extra plane data
1113  if (m_StripZcomm->GetSize() == 1)
1114  {
1115  extraPlane = m_phys + m_phys_offset[expansion];
1116  }
1117  else
1118  {
1119  // Determine to and from rank for communication
1120  int size = m_StripZcomm->GetSize();
1121  int rank = m_StripZcomm->GetRank();
1122  int fromRank = (rank+1) % size;
1123  int toRank = (rank == 0) ? size-1 : rank-1;
1124  // Communicate using SendRecv
1125  extraPlane = Array<OneD, NekDouble>(nq);
1126  Array<OneD, NekDouble> send (nq,
1127  m_phys + m_phys_offset[expansion]);
1128  m_StripZcomm->SendRecv(toRank, send,
1129  fromRank, extraPlane);
1130  }
1131  }
1132 
1133  // printing the fields of that zone
1134  outfile << " <DataArray type=\"Float64\" Name=\""
1135  << var << "\">" << endl;
1136  outfile << " ";
1137  for (int n = 0; n < m_planes.num_elements(); ++n)
1138  {
1139  const Array<OneD, NekDouble> phys = m_phys + m_phys_offset[expansion] + n*npoints_per_plane;
1140  for(i = 0; i < nq; ++i)
1141  {
1142  outfile << (fabs(phys[i]) < NekConstants::kNekZeroTol ? 0 : phys[i]) << " ";
1143  }
1144  }
1145  if (outputExtraPlane)
1146  {
1147  for(i = 0; i < nq; ++i)
1148  {
1149  outfile << (fabs(extraPlane[i]) < NekConstants::kNekZeroTol ?
1150  0 : extraPlane[i]) << " ";
1151  }
1152  }
1153  outfile << endl;
1154  outfile << " </DataArray>" << endl;
1155  }
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
Definition: ExpList.h:1015
Fourier Expansion .
Definition: BasisType.h:52
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
1D Evenly-spaced points using Fourier Fit
Definition: PointsType.h:66
static const NekDouble kNekZeroTol
Array< OneD, int > m_phys_offset
Offset of elemental data into the array m_phys.
Definition: ExpList.h:1050
Array< OneD, ExpListSharedPtr > m_planes

Member Data Documentation

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

Definition at line 278 of file ExpListHomogeneous1D.h.

Referenced by ExpListHomogeneous1D().

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

Definition at line 140 of file ExpListHomogeneous1D.h.

Referenced by ExpListHomogeneous1D(), and Homogeneous1DTrans().

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

Definition at line 152 of file ExpListHomogeneous1D.h.

Referenced by GetHomogeneous1DBlockMatrix().

LibUtilities::BasisSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_homogeneousBasis
protected
NekDouble Nektar::MultiRegions::ExpListHomogeneous1D::m_lhom
protected
int Nektar::MultiRegions::ExpListHomogeneous1D::m_padsize
private
Array<OneD, ExpListSharedPtr> Nektar::MultiRegions::ExpListHomogeneous1D::m_planes
protected

Definition at line 153 of file ExpListHomogeneous1D.h.

Referenced by Nektar::MultiRegions::ContField3DHomogeneous1D::ContField3DHomogeneous1D(), Nektar::MultiRegions::DisContField3DHomogeneous1D::DisContField3DHomogeneous1D(), Nektar::MultiRegions::DisContField3DHomogeneous1D::EvaluateBoundaryConditions(), Nektar::MultiRegions::ExpList2DHomogeneous1D::ExpList2DHomogeneous1D(), Nektar::MultiRegions::ExpList3DHomogeneous1D::ExpList3DHomogeneous1D(), ExpListHomogeneous1D(), Nektar::MultiRegions::ExpList3DHomogeneous1D::GenExpList3DHomogeneous1D(), GenHomogeneous1DBlockMatrix(), Nektar::MultiRegions::DisContField3DHomogeneous1D::GetBCValues(), Nektar::MultiRegions::DisContField3DHomogeneous1D::GetBoundaryToElmtMap(), Nektar::MultiRegions::ExpList2DHomogeneous1D::GetCoords(), Nektar::MultiRegions::ExpList3DHomogeneous1D::GetCoords(), GetPlane(), Homogeneous1DTrans(), Nektar::MultiRegions::DisContField3DHomogeneous1D::NormVectorIProductWRTBase(), Nektar::MultiRegions::ExpList2DHomogeneous1D::SetCoeffPhys(), Nektar::MultiRegions::ExpList3DHomogeneous1D::SetCoeffPhys(), Nektar::MultiRegions::DisContField3DHomogeneous1D::SetupBoundaryConditions(), Nektar::MultiRegions::DisContField3DHomogeneous1D::SetUpDG(), v_AppendFieldData(), v_BwdTrans(), v_BwdTrans_IterPerExp(), 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_FwdTrans_IterPerExp(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_GetCoords(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_GetCoords(), v_GetFieldDefinitions(), Nektar::MultiRegions::ExpList2DHomogeneous1D::v_GetNormals(), 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_IProductWRTBase_IterPerExp(), Nektar::MultiRegions::ExpList3DHomogeneous1D::v_L2(), Nektar::MultiRegions::ContField3DHomogeneous1D::v_LocalToGlobal(), 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().

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

Spectral vanishing Viscosity coefficient for stabilisation.

Definition at line 282 of file ExpListHomogeneous1D.h.

Referenced by GetSpecVanVisc(), and v_SetHomo1DSpecVanVisc().

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

Definition at line 144 of file ExpListHomogeneous1D.h.

Referenced by Homogeneous1DTrans().

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

Definition at line 145 of file ExpListHomogeneous1D.h.

Referenced by Homogeneous1DTrans().

LibUtilities::TranspositionSharedPtr Nektar::MultiRegions::ExpListHomogeneous1D::m_transposition
bool Nektar::MultiRegions::ExpListHomogeneous1D::m_useFFT
protected
boost::unordered_map<int, int> Nektar::MultiRegions::ExpListHomogeneous1D::m_zIdToPlane
protected

Definition at line 155 of file ExpListHomogeneous1D.h.

Referenced by v_ExtractDataToCoeffs().