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...
 
int GetOffset_Elmt_Id (int n) const
 Get the element id associated with the n th consecutive block of data in m_phys and m_coeffs. 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
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...
 
Array< OneD, int > m_offset_elmt_id
 Array containing the element id m_offset_elmt_id[n] that the n^th consecutive block of data in m_coeffs and m_phys is associated, i.e. for an array of constant expansion size and single shape elements m_phys[n*m_npoints] is the data related to m_exp[m_offset_elmt_id[n]];. 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().

59  :
60  ExpList(pSession),
61  m_useFFT(useFFT),
62  m_lhom(lhom),
63  m_homogeneous1DBlockMat(MemoryManager<Homo1DBlockMatrixMap>::AllocateSharedPtr()),
64  m_dealiasing(dealiasing)
65  {
66  ASSERTL2(HomoBasis != LibUtilities::NullBasisKey,"Homogeneous Basis is a null basis");
67 
69 
70  m_StripZcomm = m_session->DefinesSolverInfo("HomoStrip") ?
71  m_comm->GetColumnComm()->GetColumnComm() :
72  m_comm->GetColumnComm();
73 
74  ASSERTL0( m_homogeneousBasis->GetNumPoints() %
75  m_StripZcomm->GetSize() == 0,
76  "HomModesZ should be a multiple of npz.");
77 
78  if ( (m_homogeneousBasis->GetBasisType() !=
80  && (m_homogeneousBasis->GetBasisType() !=
82  {
83  ASSERTL0(
84  (m_homogeneousBasis->GetNumPoints() /
85  m_StripZcomm->GetSize()) % 2 == 0,
86  "HomModesZ/npz should be an even integer.");
87  }
88 
91 
92  m_planes = Array<OneD,ExpListSharedPtr>(
93  m_homogeneousBasis->GetNumPoints() /
94  m_StripZcomm->GetSize());
95 
96  if(m_useFFT)
97  {
99  "NekFFTW", m_homogeneousBasis->GetNumPoints());
100  }
101 
102  if(m_dealiasing)
103  {
104  if(m_useFFT)
105  {
106  int size = m_homogeneousBasis->GetNumPoints() +
107  m_homogeneousBasis->GetNumPoints() / 2;
108  m_padsize = size + (size % 2);
110  .CreateInstance("NekFFTW", m_padsize);
111  }
112  else
113  {
114  ASSERTL0(false, "Dealiasing available just in combination "
115  "with FFTW");
116  }
117  }
118  }
#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 124 of file ExpListHomogeneous1D.cpp.

References m_planes.

124  :
125  ExpList(In,false),
126  m_transposition(In.m_transposition),
127  m_StripZcomm(In.m_StripZcomm),
128  m_useFFT(In.m_useFFT),
129  m_FFT(In.m_FFT),
130  m_tmpIN(In.m_tmpIN),
131  m_tmpOUT(In.m_tmpOUT),
132  m_homogeneousBasis(In.m_homogeneousBasis),
133  m_lhom(In.m_lhom),
134  m_homogeneous1DBlockMat(In.m_homogeneous1DBlockMat),
135  m_dealiasing(In.m_dealiasing),
136  m_padsize(In.m_padsize)
137  {
138  m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.num_elements());
139  }
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 141 of file ExpListHomogeneous1D.cpp.

References m_planes.

142  :
143  ExpList(In,eIDs,false),
144  m_transposition(In.m_transposition),
145  m_useFFT(In.m_useFFT),
146  m_FFT(In.m_FFT),
147  m_tmpIN(In.m_tmpIN),
148  m_tmpOUT(In.m_tmpOUT),
149  m_homogeneousBasis(In.m_homogeneousBasis),
150  m_lhom(In.m_lhom),
151  m_homogeneous1DBlockMat(MemoryManager<Homo1DBlockMatrixMap>::AllocateSharedPtr()),
152  m_dealiasing(In.m_dealiasing),
153  m_padsize(In.m_padsize)
154  {
155  m_planes = Array<OneD, ExpListSharedPtr>(In.m_planes.num_elements());
156  }
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 161 of file ExpListHomogeneous1D.cpp.

162  {
163  }

Member Function Documentation

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

Definition at line 747 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().

748  {
749  DNekMatSharedPtr loc_mat;
750  DNekBlkMatSharedPtr BlkMatrix;
751  int n_exp = 0;
752  int num_trans_per_proc = 0;
753 
754  if((mattype == eForwardsCoeffSpace1D)
755  ||(mattype == eBackwardsCoeffSpace1D)) // will operate on m_coeffs
756  {
757  n_exp = m_planes[0]->GetNcoeffs();
758  }
759  else
760  {
761  n_exp = m_planes[0]->GetTotPoints(); // will operatore on m_phys
762  }
763 
764  num_trans_per_proc = n_exp/m_comm->GetColumnComm()->GetSize() + (n_exp%m_comm->GetColumnComm()->GetSize() > 0);
765 
766  Array<OneD,unsigned int> nrows(num_trans_per_proc);
767  Array<OneD,unsigned int> ncols(num_trans_per_proc);
768 
769  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
770  {
771  nrows = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumModes());
772  ncols = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumPoints());
773  }
774  else
775  {
776  nrows = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumPoints());
777  ncols = Array<OneD, unsigned int>(num_trans_per_proc,m_homogeneousBasis->GetNumModes());
778  }
779 
780  MatrixStorage blkmatStorage = eDIAGONAL;
781  BlkMatrix = MemoryManager<DNekBlkMat>
782  ::AllocateSharedPtr(nrows,ncols,blkmatStorage);
783 
784  //Half Mode
786  {
787  StdRegions::StdPointExp StdPoint(m_homogeneousBasis->GetBasisKey());
788 
789  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
790  {
791  StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
792  StdPoint.DetShapeType(),
793  StdPoint);
794 
795  loc_mat = StdPoint.GetStdMatrix(matkey);
796  }
797  else
798  {
799  StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
800  StdPoint.DetShapeType(),
801  StdPoint);
802 
803  loc_mat = StdPoint.GetStdMatrix(matkey);
804  }
805  }
806  //other cases
807  else
808  {
809  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
810 
811  if((mattype == eForwardsCoeffSpace1D)||(mattype == eForwardsPhysSpace1D))
812  {
813  StdRegions::StdMatrixKey matkey(StdRegions::eFwdTrans,
814  StdSeg.DetShapeType(),
815  StdSeg);
816 
817  loc_mat = StdSeg.GetStdMatrix(matkey);
818  }
819  else
820  {
821  StdRegions::StdMatrixKey matkey(StdRegions::eBwdTrans,
822  StdSeg.DetShapeType(),
823  StdSeg);
824 
825  loc_mat = StdSeg.GetStdMatrix(matkey);
826  }
827 
828  }
829 
830  // set up array of block matrices.
831  for(int i = 0; i < num_trans_per_proc; ++i)
832  {
833  BlkMatrix->SetBlock(i,i,loc_mat);
834  }
835 
836  return BlkMatrix;
837  }
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 731 of file ExpListHomogeneous1D.cpp.

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

Referenced by Homogeneous1DTrans().

732  {
733  Homo1DBlockMatrixMap::iterator matrixIter = m_homogeneous1DBlockMat->find(mattype);
734 
735  if(matrixIter == m_homogeneous1DBlockMat->end())
736  {
737  return ((*m_homogeneous1DBlockMat)[mattype] =
738  GenHomogeneous1DBlockMatrix(mattype,coeffstate));
739  }
740  else
741  {
742  return matrixIter->second;
743  }
744  }
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 598 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().

603  {
604  int num_dofs;
605 
606  if(IsForwards)
607  {
608  num_dofs = inarray.num_elements();
609  }
610  else
611  {
612  num_dofs = outarray.num_elements();
613  }
614 
615  if(m_useFFT)
616  {
617  int num_points_per_plane = num_dofs/m_planes.num_elements();
618  int num_dfts_per_proc;
619  if(!m_session->DefinesSolverInfo("HomoStrip"))
620  {
621  int nP = m_comm->GetColumnComm()->GetSize();
622  num_dfts_per_proc = num_points_per_plane / nP
623  + (num_points_per_plane % nP > 0);
624  }
625  else
626  {
627  int nP = m_StripZcomm->GetSize();
628  num_dfts_per_proc = num_points_per_plane / nP
629  + (num_points_per_plane % nP > 0);
630  }
631 
632  Array<OneD, NekDouble> fft_in (num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),0.0);
633  Array<OneD, NekDouble> fft_out(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),0.0);
634 
635  if(Shuff)
636  {
637  m_transposition->Transpose(inarray,fft_in,false,LibUtilities::eXYtoZ);
638  }
639  else
640  {
641  Vmath::Vcopy(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),
642  inarray,1,fft_in,1);
643  }
644 
645  if(IsForwards)
646  {
647  for(int i = 0 ; i < num_dfts_per_proc ; i++)
648  {
649  m_FFT->FFTFwdTrans(m_tmpIN = fft_in + i*m_homogeneousBasis->GetNumPoints(), m_tmpOUT = fft_out + i*m_homogeneousBasis->GetNumPoints());
650  }
651  }
652  else
653  {
654  for(int i = 0 ; i < num_dfts_per_proc ; i++)
655  {
656  m_FFT->FFTBwdTrans(m_tmpIN = fft_in + i*m_homogeneousBasis->GetNumPoints(), m_tmpOUT = fft_out + i*m_homogeneousBasis->GetNumPoints());
657  }
658  }
659 
660  if(UnShuff)
661  {
662  m_transposition->Transpose(fft_out,outarray,false,LibUtilities::eZtoXY);
663  }
664  else
665  {
666  Vmath::Vcopy(num_dfts_per_proc*m_homogeneousBasis->GetNumPoints(),
667  fft_out,1,outarray,1);
668  }
669  }
670  else
671  {
672  DNekBlkMatSharedPtr blkmat;
673 
674  if(num_dofs == m_npoints) //transform phys space
675  {
676  if(IsForwards)
677  {
679  }
680  else
681  {
683  }
684  }
685  else
686  {
687  if(IsForwards)
688  {
690  }
691  else
692  {
694  }
695  }
696 
697  int nrows = blkmat->GetRows();
698  int ncols = blkmat->GetColumns();
699 
700  Array<OneD, NekDouble> sortedinarray(ncols,0.0);
701  Array<OneD, NekDouble> sortedoutarray(nrows,0.0);
702 
703  if(Shuff)
704  {
705  m_transposition->Transpose(inarray,sortedinarray,!IsForwards,LibUtilities::eXYtoZ);
706  }
707  else
708  {
709  Vmath::Vcopy(ncols,inarray,1,sortedinarray,1);
710  }
711 
712  // Create NekVectors from the given data arrays
713  NekVector<NekDouble> in (ncols,sortedinarray,eWrapper);
714  NekVector<NekDouble> out(nrows,sortedoutarray,eWrapper);
715 
716  // Perform matrix-vector multiply.
717  out = (*blkmat)*in;
718 
719  if(UnShuff)
720  {
721  m_transposition->Transpose(sortedoutarray,outarray,IsForwards,LibUtilities::eZtoXY);
722  }
723  else
724  {
725  Vmath::Vcopy(nrows,sortedoutarray,1,outarray,1);
726  }
727 
728  }
729  }
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 1409 of file ExpListHomogeneous1D.cpp.

References v_PhysDeriv().

1414  {
1415  v_PhysDeriv(inarray,out_d0,out_d1,out_d2);
1416  }
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 1418 of file ExpListHomogeneous1D.cpp.

References v_PhysDeriv().

1421  {
1422  v_PhysDeriv(edir,inarray,out_d);
1423  }
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 947 of file ExpListHomogeneous1D.cpp.

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

948  {
949  v_AppendFieldData(fielddef,fielddata,m_coeffs);
950  }
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 920 of file ExpListHomogeneous1D.cpp.

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

921  {
922  int i,n;
923  int ncoeffs_per_plane = m_planes[0]->GetNcoeffs();
924 
925  // Determine mapping from element ids to location in
926  // expansion list
927  if (m_elmtToExpId.size() == 0)
928  {
929  for(i = 0; i < m_planes[0]->GetExpSize(); ++i)
930  {
931  m_elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
932  }
933  }
934 
935  for(i = 0; i < fielddef->m_elementIDs.size(); ++i)
936  {
937  int eid = m_elmtToExpId[fielddef->m_elementIDs[i]];
938  int datalen = (*m_exp)[eid]->GetNcoeffs();
939 
940  for(n = 0; n < m_planes.num_elements(); ++n)
941  {
942  fielddata.insert(fielddata.end(),&coeffs[m_coeff_offset[eid]+n*ncoeffs_per_plane],&coeffs[m_coeff_offset[eid]+n*ncoeffs_per_plane]+datalen);
943  }
944  }
945  }
boost::unordered_map< int, int > m_elmtToExpId
Mapping from geometry ID of element to index inside m_exp.
Definition: ExpList.h:1070
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 502 of file ExpListHomogeneous1D.cpp.

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

503  {
504  int cnt = 0, cnt1 = 0;
505  Array<OneD, NekDouble> tmparray;
506 
507  for(int n = 0; n < m_planes.num_elements(); ++n)
508  {
509  m_planes[n]->BwdTrans(inarray+cnt, tmparray = outarray + cnt1,
510  coeffstate);
511  cnt += m_planes[n]->GetNcoeffs();
512  cnt1 += m_planes[n]->GetTotPoints();
513  }
514  if(!m_WaveSpace)
515  {
516  HomogeneousBwdTrans(outarray,outarray);
517  }
518  }
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 523 of file ExpListHomogeneous1D.cpp.

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

524  {
525  int cnt = 0, cnt1 = 0;
526  Array<OneD, NekDouble> tmparray;
527 
528  for(int n = 0; n < m_planes.num_elements(); ++n)
529  {
530  m_planes[n]->BwdTrans_IterPerExp(inarray+cnt, tmparray = outarray + cnt1);
531 
532  cnt += m_planes[n]->GetNcoeffs();
533  cnt1 += m_planes[n]->GetTotPoints();
534  }
535  if(!m_WaveSpace)
536  {
537  HomogeneousBwdTrans(outarray,outarray);
538  }
539  }
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 294 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().

299  {
300  int ndim = inarray1.num_elements();
301  ASSERTL1( inarray2.num_elements() % ndim == 0,
302  "Wrong dimensions for DealiasedDotProd.");
303  int nvec = inarray2.num_elements() / ndim;
304 
305  int num_dofs = inarray1[0].num_elements();
306  int N = m_homogeneousBasis->GetNumPoints();
307 
308  int num_points_per_plane = num_dofs/m_planes.num_elements();
309  int num_proc;
310  if(!m_session->DefinesSolverInfo("HomoStrip"))
311  {
312  num_proc = m_comm->GetColumnComm()->GetSize();
313  }
314  else
315  {
316  num_proc = m_StripZcomm->GetSize();
317  }
318  int num_dfts_per_proc = num_points_per_plane / num_proc
319  + (num_points_per_plane % num_proc > 0);
320 
321  // Get inputs in Fourier space
322  Array<OneD, Array<OneD, NekDouble> > V1(ndim);
323  Array<OneD, Array<OneD, NekDouble> > V2(ndim*nvec);
324  if(m_WaveSpace)
325  {
326  for (int i = 0; i < ndim; i++)
327  {
328  V1[i] = inarray1[i];
329  }
330  for (int i = 0; i < ndim*nvec; i++)
331  {
332  V2[i] = inarray2[i];
333  }
334  }
335  else
336  {
337  for (int i = 0; i < ndim; i++)
338  {
339  V1[i] = Array<OneD, NekDouble> (num_dofs);
340  HomogeneousFwdTrans(inarray1[i],V1[i],coeffstate);
341  }
342  for (int i = 0; i < ndim*nvec; i++)
343  {
344  V2[i] = Array<OneD, NekDouble> (num_dofs);
345  HomogeneousFwdTrans(inarray2[i],V2[i],coeffstate);
346  }
347  }
348 
349  // Allocate variables for ffts
350  Array<OneD, Array<OneD, NekDouble> > ShufV1(ndim);
351  Array<OneD, NekDouble> ShufV1_PAD_coef(m_padsize,0.0);
352  Array<OneD, Array<OneD, NekDouble> > ShufV1_PAD_phys(ndim);
353  for (int i = 0; i < ndim; i++)
354  {
355  ShufV1[i] = Array<OneD, NekDouble>
356  (num_dfts_per_proc*N,0.0);
357  ShufV1_PAD_phys[i] = Array<OneD, NekDouble>
358  (m_padsize,0.0);
359  }
360 
361  Array<OneD, Array<OneD, NekDouble> > ShufV2(ndim*nvec);
362  Array<OneD, NekDouble> ShufV2_PAD_coef(m_padsize,0.0);
363  Array<OneD, Array<OneD, NekDouble> > ShufV2_PAD_phys(ndim*nvec);
364  for (int i = 0; i < ndim*nvec; i++)
365  {
366  ShufV2[i] = Array<OneD, NekDouble>
367  (num_dfts_per_proc*N,0.0);
368  ShufV2_PAD_phys[i] = Array<OneD, NekDouble>
369  (m_padsize,0.0);
370  }
371 
372  Array<OneD, Array<OneD, NekDouble> > ShufV1V2(nvec);
373  Array<OneD, NekDouble> ShufV1V2_PAD_coef(m_padsize,0.0);
374  Array<OneD, NekDouble> ShufV1V2_PAD_phys(m_padsize,0.0);
375  for (int i = 0; i < nvec; i++)
376  {
377  ShufV1V2[i] = Array<OneD, NekDouble>
378  (num_dfts_per_proc*N,0.0);
379  }
380 
381  // Transpose inputs
382  for (int i = 0; i < ndim; i++)
383  {
384  m_transposition->Transpose(V1[i], ShufV1[i], false,
386  }
387  for (int i = 0; i < ndim*nvec; i++)
388  {
389  m_transposition->Transpose(V2[i], ShufV2[i], false,
391  }
392 
393  // Looping on the pencils
394  for(int i = 0 ; i < num_dfts_per_proc ; i++)
395  {
396  for (int j = 0; j < ndim; j++)
397  {
398  // Copying the i-th pencil pf lenght N into a bigger
399  // pencil of lenght 1.5N We are in Fourier space
400  Vmath::Vcopy(N, &(ShufV1[j][i*N]), 1,
401  &(ShufV1_PAD_coef[0]), 1);
402  // Moving to physical space using the padded system
403  m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys[j]);
404  }
405  for (int j = 0; j < ndim*nvec; j++)
406  {
407  Vmath::Vcopy(N, &(ShufV2[j][i*N]), 1,
408  &(ShufV2_PAD_coef[0]), 1);
409  m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys[j]);
410  }
411 
412  // Performing the vectors multiplication in physical space on
413  // the padded system
414  for (int j = 0; j < nvec; j++)
415  {
416  Vmath::Zero(m_padsize, ShufV1V2_PAD_phys, 1);
417  for (int k = 0; k < ndim; k++)
418  {
419  Vmath::Vvtvp(m_padsize, ShufV1_PAD_phys[k], 1,
420  ShufV2_PAD_phys[j*ndim+k], 1,
421  ShufV1V2_PAD_phys, 1,
422  ShufV1V2_PAD_phys, 1);
423  }
424  // Moving back the result (V1*V2)_phys in Fourier space,
425  // padded system
426  m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
427  // Copying the first half of the padded pencil in the full
428  // vector (Fourier space)
429  Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1,
430  &(ShufV1V2[j][i*N]), 1);
431  }
432  }
433 
434  // Moving the results to the output
435  if (m_WaveSpace)
436  {
437  for (int j = 0; j < nvec; j++)
438  {
439  m_transposition->Transpose(ShufV1V2[j], outarray[j],
440  false,
442  }
443  }
444  else
445  {
446  Array<OneD, NekDouble> V1V2(num_dofs);
447  for (int j = 0; j < nvec; j++)
448  {
449  m_transposition->Transpose(ShufV1V2[j], V1V2, false,
451  HomogeneousBwdTrans(V1V2, outarray[j], coeffstate);
452  }
453  }
454  }
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 192 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().

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

References m_planes.

1072  {
1073  int i;
1074  int fromNcoeffs_per_plane = fromExpList->GetPlane(0)->GetNcoeffs();
1075  int toNcoeffs_per_plane = m_planes[0]->GetNcoeffs();
1076  Array<OneD, NekDouble> tocoeffs_tmp, fromcoeffs_tmp;
1077 
1078  for(i = 0; i < m_planes.num_elements(); ++i)
1079  {
1080  m_planes[i]->ExtractCoeffsToCoeffs(fromExpList->GetPlane(i),fromcoeffs_tmp = fromCoeffs + fromNcoeffs_per_plane*i, tocoeffs_tmp = toCoeffs + toNcoeffs_per_plane*i);
1081  }
1082  }
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 953 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().

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

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

460  {
461  int cnt = 0, cnt1 = 0;
462  Array<OneD, NekDouble> tmparray;
463 
464  for(int n = 0; n < m_planes.num_elements(); ++n)
465  {
466  m_planes[n]->FwdTrans(inarray+cnt, tmparray = outarray + cnt1,
467  coeffstate);
468  cnt += m_planes[n]->GetTotPoints();
469 
470  cnt1 += m_planes[n]->GetNcoeffs(); // need to skip ncoeffs
471  }
472  if(!m_WaveSpace)
473  {
474  HomogeneousFwdTrans(outarray,outarray,coeffstate);
475  }
476  }
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 481 of file ExpListHomogeneous1D.cpp.

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

482  {
483  int cnt = 0, cnt1 = 0;
484  Array<OneD, NekDouble> tmparray;
485 
486  //spectral element FwdTrans plane by plane
487  for(int n = 0; n < m_planes.num_elements(); ++n)
488  {
489  m_planes[n]->FwdTrans_IterPerExp(inarray+cnt, tmparray = outarray + cnt1);
490  cnt += m_planes[n]->GetTotPoints();
491  cnt1 += m_planes[n]->GetNcoeffs();
492  }
493  if(!m_WaveSpace)
494  {
495  HomogeneousFwdTrans(outarray,outarray);
496  }
497  }
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 839 of file ExpListHomogeneous1D.cpp.

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

840  {
841  std::vector<LibUtilities::FieldDefinitionsSharedPtr> returnval;
842 
843  // Set up Homogeneous length details.
844  Array<OneD,LibUtilities::BasisSharedPtr> HomoBasis(1,m_homogeneousBasis);
845 
846  std::vector<NekDouble> HomoLen;
847  HomoLen.push_back(m_lhom);
848 
849  std::vector<unsigned int> StripsIDs;
850 
851  bool strips;
852  m_session->MatchSolverInfo("HomoStrip","True",strips,false);
853  if (strips)
854  {
855  StripsIDs.push_back(m_transposition->GetStripID());
856  }
857 
858  std::vector<unsigned int> PlanesIDs;
859  int IDoffset = 0;
860 
861  // introduce a 2 plane offset for single mode case so can
862  // be post-processed or used in MultiMode expansion.
864  {
865  IDoffset = 2;
866  }
867 
868  for(int i = 0; i < m_planes.num_elements(); i++)
869  {
870  PlanesIDs.push_back(m_transposition->GetPlaneID(i)+IDoffset);
871  }
872 
873  m_planes[0]->GeneralGetFieldDefinitions(returnval, 1, HomoBasis,
874  HomoLen, strips, StripsIDs, PlanesIDs);
875  return returnval;
876  }
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 878 of file ExpListHomogeneous1D.cpp.

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

879  {
880  // Set up Homogeneous length details.
881  Array<OneD,LibUtilities::BasisSharedPtr> HomoBasis(1,m_homogeneousBasis);
882 
883  std::vector<NekDouble> HomoLen;
884  HomoLen.push_back(m_lhom);
885 
886  std::vector<unsigned int> StripsIDs;
887 
888  bool strips;
889  m_session->MatchSolverInfo("HomoStrip","True",strips,false);
890  if (strips)
891  {
892  StripsIDs.push_back(m_transposition->GetStripID());
893  }
894 
895  std::vector<unsigned int> PlanesIDs;
896  int IDoffset = 0;
897 
899  {
900  IDoffset = 2;
901  }
902 
903  for(int i = 0; i < m_planes.num_elements(); i++)
904  {
905  PlanesIDs.push_back(m_transposition->GetPlaneID(i)+IDoffset);
906  }
907 
908  // enforce NumHomoDir == 1 by direct call
909  m_planes[0]->GeneralGetFieldDefinitions(fielddef, 1, HomoBasis,
910  HomoLen, strips, StripsIDs, PlanesIDs);
911  }
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 1430 of file ExpListHomogeneous1D.cpp.

References m_lhom.

1431  {
1432  return m_lhom;
1433  }
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 1425 of file ExpListHomogeneous1D.cpp.

References m_transposition.

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1435 of file ExpListHomogeneous1D.cpp.

References m_transposition.

1436  {
1437  return m_transposition->GetPlanesIDs();
1438  }
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 175 of file ExpListHomogeneous1D.cpp.

References Homogeneous1DTrans().

Referenced by HomogeneousBwdTrans().

180  {
181  // Backwards trans
182  Homogeneous1DTrans(inarray,outarray,false,coeffstate,Shuff,UnShuff);
183  }
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 165 of file ExpListHomogeneous1D.cpp.

References Homogeneous1DTrans().

Referenced by HomogeneousFwdTrans().

170  {
171  // Forwards trans
172  Homogeneous1DTrans(inarray,outarray,true,coeffstate,Shuff,UnShuff);
173  }
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 544 of file ExpListHomogeneous1D.cpp.

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

545  {
546  int cnt = 0, cnt1 = 0;
547  Array<OneD, NekDouble> tmparray, tmpIn;
548 
549  if(m_WaveSpace)
550  {
551  tmpIn = inarray;
552  }
553  else
554  {
555  tmpIn = Array<OneD, NekDouble> (inarray.num_elements(), 0.0);
556  HomogeneousFwdTrans(inarray,tmpIn);
557  }
558 
559  for(int n = 0; n < m_planes.num_elements(); ++n)
560  {
561  m_planes[n]->IProductWRTBase(tmpIn+cnt, tmparray = outarray + cnt1,coeffstate);
562 
563  cnt1 += m_planes[n]->GetNcoeffs();
564  cnt += m_planes[n]->GetTotPoints();
565  }
566  }
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 571 of file ExpListHomogeneous1D.cpp.

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

572  {
573  int cnt = 0, cnt1 = 0;
574  Array<OneD, NekDouble> tmparray, tmpIn;
575 
576  if(m_WaveSpace)
577  {
578  tmpIn = inarray;
579  }
580  else
581  {
582  tmpIn = Array<OneD, NekDouble> (inarray.num_elements(), 0.0);
583  HomogeneousFwdTrans(inarray,tmpIn);
584  }
585 
586  for(int n = 0; n < m_planes.num_elements(); ++n)
587  {
588  m_planes[n]->IProductWRTBase_IterPerExp(tmpIn+cnt, tmparray = outarray + cnt1);
589 
590  cnt1 += m_planes[n]->GetNcoeffs();
591  cnt += m_planes[n]->GetTotPoints();
592  }
593  }
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 1187 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().

1191  {
1192  int nT_pts = inarray.num_elements(); //number of total points = n. of Fourier points * n. of points per plane (nT_pts)
1193  int nP_pts = nT_pts/m_planes.num_elements(); //number of points per plane = n of Fourier transform required (nP_pts)
1194 
1195  Array<OneD, NekDouble> temparray(nT_pts);
1196  Array<OneD, NekDouble> outarray(nT_pts);
1197  Array<OneD, NekDouble> tmp1;
1198  Array<OneD, NekDouble> tmp2;
1199  Array<OneD, NekDouble> tmp3;
1200 
1201  for(int i = 0; i < m_planes.num_elements(); i++)
1202  {
1203  m_planes[i]->PhysDeriv(inarray + i*nP_pts ,tmp2 = out_d0 + i*nP_pts , tmp3 = out_d1 + i*nP_pts );
1204  }
1205 
1206  if(out_d2 != NullNekDouble1DArray)
1207  {
1210  {
1211  if(m_WaveSpace)
1212  {
1213  temparray = inarray;
1214  }
1215  else
1216  {
1217  HomogeneousFwdTrans(inarray,temparray);
1218  }
1219 
1220  NekDouble sign = -1.0;
1221  NekDouble beta;
1222 
1223  //Half Mode
1225  {
1226  beta = sign*2*M_PI*(m_transposition->GetK(0))/m_lhom;
1227 
1228  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1229  }
1230  else if(m_homogeneousBasis->GetBasisType() == LibUtilities::eFourierHalfModeIm)
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 
1237  //Fully complex
1238  else
1239  {
1240  for(int i = 0; i < m_planes.num_elements(); i++)
1241  {
1242  beta = -sign*2*M_PI*(m_transposition->GetK(i))/m_lhom;
1243 
1244  Vmath::Smul(nP_pts,beta,tmp1 = temparray + i*nP_pts,1,tmp2 = outarray + (i-int(sign))*nP_pts,1);
1245 
1246  sign = -1.0*sign;
1247  }
1248  }
1249 
1250  if(m_WaveSpace)
1251  {
1252  out_d2 = outarray;
1253  }
1254  else
1255  {
1256  HomogeneousBwdTrans(outarray,out_d2);
1257  }
1258  }
1259  else
1260  {
1261  if(!m_session->DefinesSolverInfo("HomoStrip"))
1262  {
1263  ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1264  "Parallelisation in the homogeneous direction "
1265  "implemented just for Fourier basis");
1266  }
1267  else
1268  {
1269  ASSERTL0(m_StripZcomm->GetSize() == 1,
1270  "Parallelisation in the homogeneous direction "
1271  "implemented just for Fourier basis");
1272  }
1273 
1274  if(m_WaveSpace)
1275  {
1276  ASSERTL0(false, "Semi-phyisical time-stepping not "
1277  "implemented yet for non-Fourier "
1278  "basis");
1279  }
1280  else
1281  {
1282  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1283 
1284  m_transposition->Transpose(inarray,temparray,false,LibUtilities::eXYtoZ);
1285 
1286  for(int i = 0; i < nP_pts; i++)
1287  {
1288  StdSeg.PhysDeriv(temparray + i*m_planes.num_elements(), tmp2 = outarray + i*m_planes.num_elements());
1289  }
1290 
1291  m_transposition->Transpose(outarray,out_d2,false,LibUtilities::eZtoXY);
1292 
1293  Vmath::Smul(nT_pts,2.0/m_lhom,out_d2,1,out_d2,1);
1294  }
1295  }
1296  }
1297  }
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 1299 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().

1302  {
1303  int nT_pts = inarray.num_elements(); //number of total points = n. of Fourier points * n. of points per plane (nT_pts)
1304  int nP_pts = nT_pts/m_planes.num_elements(); //number of points per plane = n of Fourier transform required (nP_pts)
1305 
1306  int dir= (int)edir;
1307 
1308  Array<OneD, NekDouble> temparray(nT_pts);
1309  Array<OneD, NekDouble> outarray(nT_pts);
1310  Array<OneD, NekDouble> tmp1;
1311  Array<OneD, NekDouble> tmp2;
1312 
1313  if (dir < 2)
1314  {
1315  for(int i=0; i < m_planes.num_elements(); i++)
1316  {
1317  m_planes[i]->PhysDeriv(edir, inarray + i*nP_pts ,tmp2 = out_d + i*nP_pts);
1318  }
1319  }
1320  else
1321  {
1324  {
1325  if(m_WaveSpace)
1326  {
1327  temparray = inarray;
1328  }
1329  else
1330  {
1331  HomogeneousFwdTrans(inarray,temparray);
1332  }
1333 
1334  NekDouble sign = -1.0;
1335  NekDouble beta;
1336 
1337  //HalfMode
1339  {
1340  beta = 2*sign*M_PI*(m_transposition->GetK(0))/m_lhom;
1341 
1342  Vmath::Smul(nP_pts,beta,temparray,1,outarray,1);
1343  }
1344  else if(m_homogeneousBasis->GetBasisType() == LibUtilities::eFourierHalfModeIm)
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  //Fully complex
1351  else
1352  {
1353  for(int i = 0; i < m_planes.num_elements(); i++)
1354  {
1355  beta = -sign*2*M_PI*(m_transposition->GetK(i))/m_lhom;
1356 
1357  Vmath::Smul(nP_pts,beta,tmp1 = temparray + i*nP_pts,1,tmp2 = outarray + (i-int(sign))*nP_pts,1);
1358 
1359  sign = -1.0*sign;
1360  }
1361  }
1362  if(m_WaveSpace)
1363  {
1364  out_d = outarray;
1365  }
1366  else
1367  {
1368  HomogeneousBwdTrans(outarray,out_d);
1369  }
1370  }
1371  else
1372  {
1373  if(!m_session->DefinesSolverInfo("HomoStrip"))
1374  {
1375  ASSERTL0(m_comm->GetColumnComm()->GetSize() == 1,
1376  "Parallelisation in the homogeneous direction "
1377  "implemented just for Fourier basis");
1378  }
1379  else
1380  {
1381  ASSERTL0(m_StripZcomm->GetSize() == 1,
1382  "Parallelisation in the homogeneous direction "
1383  "implemented just for Fourier basis");
1384  }
1385 
1386  if(m_WaveSpace)
1387  {
1388  ASSERTL0(false,"Semi-phyisical time-stepping not implemented yet for non-Fourier basis");
1389  }
1390  else
1391  {
1392  StdRegions::StdSegExp StdSeg(m_homogeneousBasis->GetBasisKey());
1393 
1394  m_transposition->Transpose(inarray,temparray,false,LibUtilities::eXYtoZ);
1395 
1396  for(int i = 0; i < nP_pts; i++)
1397  {
1398  StdSeg.PhysDeriv(temparray + i*m_planes.num_elements(), tmp2 = outarray + i*m_planes.num_elements());
1399  }
1400 
1401  m_transposition->Transpose(outarray,out_d,false,LibUtilities::eZtoXY);
1402 
1403  Vmath::Smul(nT_pts,2.0/m_lhom,out_d,1,out_d,1);
1404  }
1405  }
1406  }
1407  }
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 1170 of file ExpListHomogeneous1D.cpp.

References ASSERTL1, and m_planes.

1171  {
1172  int cnt,cnt1;
1173  Array<OneD, NekDouble> tmparray;
1174  cnt = m_planes[0]->Get1DScaledTotPoints(scale);
1175  cnt1 = m_planes[0]->GetTotPoints();
1176 
1177  ASSERTL1(m_planes.num_elements()*cnt <= inarray.num_elements(),"size of outarray does not match internal estimage");
1178 
1179 
1180  for(int i = 0; i < m_planes.num_elements(); i++)
1181  {
1182  m_planes[i]->PhysGalerkinProjection1DScaled(scale,inarray+i*cnt,
1183  tmparray = outarray+i*cnt1);
1184  }
1185 
1186  }
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 1151 of file ExpListHomogeneous1D.cpp.

References ASSERTL1, and m_planes.

1152  {
1153  int cnt,cnt1;
1154  Array<OneD, NekDouble> tmparray;
1155  cnt = m_planes[0]->GetTotPoints();
1156  cnt1 = m_planes[0]->Get1DScaledTotPoints(scale);
1157 
1158  ASSERTL1(m_planes.num_elements()*cnt1 <= outarray.num_elements(),"size of outarray does not match internal estimage");
1159 
1160 
1161  for(int i = 0; i < m_planes.num_elements(); i++)
1162  {
1163 
1164  m_planes[i]->PhysInterp1DScaled(scale,inarray+i*cnt,
1165  tmparray = outarray+i*cnt1);
1166  }
1167  }
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 1084 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.

1086  {
1087  // If there is only one plane (e.g. HalfMode), we write a 2D plane.
1088  if (m_planes.num_elements() == 1)
1089  {
1090  m_planes[0]->WriteVtkPieceData(outfile, expansion, var);
1091  return;
1092  }
1093 
1094  int i;
1095  int nq = (*m_exp)[expansion]->GetTotPoints();
1096  int npoints_per_plane = m_planes[0]->GetTotPoints();
1097 
1098  // If we are using Fourier points, output extra plane to fill domain
1099  int outputExtraPlane = 0;
1100  Array<OneD, NekDouble> extraPlane;
1101  if ( m_homogeneousBasis->GetBasisType() == LibUtilities::eFourier
1102  && m_homogeneousBasis->GetPointsType() ==
1104  {
1105  outputExtraPlane = 1;
1106  // Get extra plane data
1107  if (m_StripZcomm->GetSize() == 1)
1108  {
1109  extraPlane = m_phys + m_phys_offset[expansion];
1110  }
1111  else
1112  {
1113  // Determine to and from rank for communication
1114  int size = m_StripZcomm->GetSize();
1115  int rank = m_StripZcomm->GetRank();
1116  int fromRank = (rank+1) % size;
1117  int toRank = (rank == 0) ? size-1 : rank-1;
1118  // Communicate using SendRecv
1119  extraPlane = Array<OneD, NekDouble>(nq);
1120  Array<OneD, NekDouble> send (nq,
1121  m_phys + m_phys_offset[expansion]);
1122  m_StripZcomm->SendRecv(toRank, send,
1123  fromRank, extraPlane);
1124  }
1125  }
1126 
1127  // printing the fields of that zone
1128  outfile << " <DataArray type=\"Float64\" Name=\""
1129  << var << "\">" << endl;
1130  outfile << " ";
1131  for (int n = 0; n < m_planes.num_elements(); ++n)
1132  {
1133  const Array<OneD, NekDouble> phys = m_phys + m_phys_offset[expansion] + n*npoints_per_plane;
1134  for(i = 0; i < nq; ++i)
1135  {
1136  outfile << (fabs(phys[i]) < NekConstants::kNekZeroTol ? 0 : phys[i]) << " ";
1137  }
1138  }
1139  if (outputExtraPlane)
1140  {
1141  for(i = 0; i < nq; ++i)
1142  {
1143  outfile << (fabs(extraPlane[i]) < NekConstants::kNekZeroTol ?
1144  0 : extraPlane[i]) << " ";
1145  }
1146  }
1147  outfile << endl;
1148  outfile << " </DataArray>" << endl;
1149  }
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().