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

This class is the abstraction of a global continuous two- dimensional spectral/hp element expansion which approximates the solution of a set of partial differential equations. More...

#include <ContField.h>

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

Public Member Functions

 ContField ()
 The default constructor. More...
 
 ContField (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph2D, const std::string &variable="DefaultVar", const bool DeclareCoeffPhysArrays=true, const bool CheckIfSingularSystem=false, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 This constructor sets up global continuous field based on an input mesh and boundary conditions. More...
 
 ContField (const ContField &In, const SpatialDomains::MeshGraphSharedPtr &graph2D, const std::string &variable, const bool DeclareCoeffPhysArrays=true, const bool CheckIfSingularSystem=false)
 Construct a global continuous field with solution type based on another field but using a separate input mesh and boundary conditions. More...
 
 ContField (const ContField &In, bool DeclareCoeffPhysArrays=true)
 The copy constructor. More...
 
 ContField (const LibUtilities::SessionReaderSharedPtr &pSession, const ExpList &In)
 Copy constructor. More...
 
virtual ~ContField ()
 The default destructor. More...
 
void Assemble ()
 Assembles the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
void Assemble (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) const
 Assembles the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
const AssemblyMapCGSharedPtrGetLocalToGlobalMap () const
 Returns the map from local to global level. More...
 
void IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to all global expansion modes \(\phi_n^e(\boldsymbol{x})\). More...
 
void FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Performs the global forward transformation of a function \(f(\boldsymbol{x})\), subject to the boundary conditions specified. More...
 
void BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Performs the backward transformation of the spectral/hp element expansion. More...
 
void MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Multiply a solution by the inverse mass matrix. More...
 
void LaplaceSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const Array< OneD, Array< OneD, NekDouble > > &variablecoeffs=NullNekDoubleArrayOfArray, NekDouble time=0.0)
 Solves the two-dimensional Laplace equation, subject to the boundary conditions specified. More...
 
void LinearAdvectionEigs (const NekDouble ax, const NekDouble ay, Array< OneD, NekDouble > &Real, Array< OneD, NekDouble > &Imag, Array< OneD, NekDouble > &Evecs=NullNekDouble1DArray)
 Compute the eigenvalues of the linear advection operator. More...
 
const Array< OneD, const MultiRegions::ExpListSharedPtr > & GetBndCondExpansions ()
 Returns the boundary conditions expansion. More...
 
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions ()
 Returns the boundary conditions. More...
 
int GetGlobalMatrixNnz (const GlobalMatrixKey &gkey)
 
- Public Member Functions inherited from Nektar::MultiRegions::DisContField
 DisContField ()
 Default constructor. More...
 
 DisContField (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph, const std::string &variable, const bool SetUpJustDG=true, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructs a 1D discontinuous field based on a mesh and boundary conditions. More...
 
 DisContField (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable, bool SetToOneSpaceDimensions=false, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor for a DisContField from a List of subdomains New Constructor for arterial network. More...
 
 DisContField (const DisContField &In, const bool DeclareCoeffPhysArrays=true)
 Constructs a 1D discontinuous field based on an existing field. More...
 
 DisContField (const DisContField &In, const SpatialDomains::MeshGraphSharedPtr &graph, const std::string &variable, const bool SetUpJustDG=false, const bool DeclareCoeffPhysArrays=true)
 
 DisContField (const ExpList &In)
 Constructs a 1D discontinuous field based on an existing field. (needed in order to use ContField( const ExpList &In) constructor. More...
 
virtual ~DisContField ()
 Destructor. More...
 
GlobalLinSysSharedPtr GetGlobalBndLinSys (const GlobalLinSysKey &mkey)
 For a given key, returns the associated global linear system. More...
 
bool SameTypeOfBoundaryConditions (const DisContField &In)
 Check to see if expansion has the same BCs as In. More...
 
std::vector< bool > & GetNegatedFluxNormal (void)
 
NekDouble L2_DGDeriv (const int dir, const Array< OneD, const NekDouble > &soln)
 Calculate the \( L^2 \) error of the \( Q_{\rm dir} \) derivative using the consistent DG evaluation of \( Q_{\rm dir} \). More...
 
void EvaluateHDGPostProcessing (Array< OneD, NekDouble > &outarray)
 Evaluate HDG post-processing to increase polynomial order of solution. More...
 
- Public Member Functions inherited from Nektar::MultiRegions::ExpList
 ExpList (const ExpansionType Type=eNoType)
 The default constructor using a type. More...
 
 ExpList (const ExpList &in, const bool DeclareCoeffPhysArrays=true)
 The copy constructor. More...
 
 ExpList (const ExpList &in, const std::vector< unsigned int > &eIDs, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor copying only elements defined in eIds. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays=true, const std::string &var="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate an ExpList from a meshgraph graph and session file. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::ExpansionInfoMap &expansions, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Sets up a list of local expansions based on an expansion Map. More...
 
 ExpList (const SpatialDomains::PointGeomSharedPtr &geom)
 Specialised constructors for 0D Expansions Wrapper around LocalRegion::PointExp - used in PrePacing.cpp. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, const ExpListSharedPtr > &bndConstraint, const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > &bndCond, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate expansions for the trace space expansions used in DisContField. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::CompositeMap &domain, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", bool SetToOneSpaceDimension=false, const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr(), const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor based on domain information only for 1D & 2D boundary conditions. More...
 
virtual ~ExpList ()
 The default destructor. More...
 
int GetNcoeffs (void) const
 Returns the total number of local degrees of freedom \(N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_m\). More...
 
int GetNcoeffs (const int eid) const
 Returns the total number of local degrees of freedom for element eid. More...
 
ExpansionType GetExpType (void)
 Returns the type of the expansion. More...
 
void SetExpType (ExpansionType Type)
 Returns the type of the expansion. More...
 
int EvalBasisNumModesMax (void) const
 Evaulates the maximum number of modes in the elemental basis order over all elements. More...
 
const Array< OneD, int > EvalBasisNumModesMaxPerExp (void) const
 Returns the vector of the number of modes in the elemental basis order over all elements. More...
 
int GetTotPoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int GetTotPoints (const int eid) const
 Returns the total number of quadrature points for eid's element \(=Q_{\mathrm{tot}}\). More...
 
int GetNpoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int Get1DScaledTotPoints (const NekDouble scale) const
 Returns the total number of qudature points scaled by the factor scale on each 1D direction. More...
 
void SetWaveSpace (const bool wavespace)
 Sets the wave space to the one of the possible configuration true or false. More...
 
void SetModifiedBasis (const bool modbasis)
 Set Modified Basis for the stability analysis. More...
 
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...
 
void MultiplyByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 multiply the metric jacobi and quadrature weights More...
 
void DivideByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Divided by the metric jacobi and quadrature weights. More...
 
void IProductWRTBase_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)
 
void IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative (in direction. More...
 
void IProductWRTDirectionalDerivBase (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Directional derivative along a given direction. More...
 
void IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative of all local expansion modes \(\phi_n^e(\boldsymbol{x})\). More...
 
void 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)
 
void ExponentialFilter (Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff)
 
void MultiplyByElmtInvMass (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally mulplies the coefficient space of Sin my the elemental inverse of the mass matrix. More...
 
void MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void MultiplyByMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void SmoothField (Array< OneD, NekDouble > &field)
 Smooth a field across elements. More...
 
void HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const MultiRegions::VarFactorsMap &varfactors=MultiRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve helmholtz problem. More...
 
void LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void 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)
 
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, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
void DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
void DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
void GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
void ApplyGeomInfo ()
 Apply geometry information to each expansion. More...
 
void Reset ()
 Reset geometry information and reset matrices. More...
 
void WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
void WriteTecplotZone (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotField (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotConnectivity (std::ostream &outfile, int expansion=-1)
 
void WriteVtkHeader (std::ostream &outfile)
 
void WriteVtkFooter (std::ostream &outfile)
 
void WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip=0)
 
void WriteVtkPieceFooter (std::ostream &outfile, int expansion)
 
void WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var="v")
 
int GetCoordim (int eid)
 This function returns the dimension of the coordinates of the element eid. More...
 
void SetCoeff (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffs (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffsArray (Array< OneD, NekDouble > &inarray)
 Set the m_coeffs array to inarray. More...
 
int GetShapeDimension ()
 This function returns the dimension of the shape of the element eid. More...
 
const Array< OneD, const NekDouble > & GetCoeffs () const
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
void ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 Impose Dirichlet Boundary Conditions onto Array. More...
 
void FillBndCondFromField (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 ()
 
NekDouble Integral (const Array< OneD, const NekDouble > &inarray)
 
NekDouble VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
Array< OneD, const NekDoubleHomogeneousEnergy (void)
 This function calculates the energy associated with each one of the modesof a 3D homogeneous nD expansion. More...
 
void SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 This function sets the Spectral Vanishing Viscosity in homogeneous1D expansion. More...
 
Array< OneD, const unsigned int > GetZIDs (void)
 This function returns a vector containing the wave numbers in z-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
LibUtilities::TranspositionSharedPtr GetTransposition (void)
 This function returns the transposition class associated with the homogeneous expansion. More...
 
NekDouble GetHomoLen (void)
 This function returns the Width of homogeneous direction associated with the homogeneous expansion. More...
 
void SetHomoLen (const NekDouble lhom)
 This function sets the Width of homogeneous direction associated with the homogeneous expansion. More...
 
Array< OneD, const unsigned int > GetYIDs (void)
 This function returns a vector containing the wave numbers in y-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
void PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function interpolates the physical space points in inarray to outarray using the same points defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
void PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function Galerkin projects the physical space points in inarray to outarray where inarray is assumed to be defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
int GetExpSize (void)
 This function returns the number of elements in the expansion. More...
 
int GetNumElmts (void)
 This function returns the number of elements in the expansion which may be different for a homogeoenous extended expansionp. More...
 
const std::shared_ptr< LocalRegions::ExpansionVectorGetExp () const
 This function returns the vector of elements in the expansion. More...
 
LocalRegions::ExpansionSharedPtrGetExp (int n) const
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element. More...
 
LocalRegions::ExpansionSharedPtrGetExp (const Array< OneD, const NekDouble > &gloCoord)
 This function returns (a shared pointer to) the local elemental expansion containing the arbitrary point given by gloCoord. More...
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoord, NekDouble tol=0.0, bool returnNearestElmt=false, int cachedId=-1, NekDouble maxDistance=1e6)
 This function returns the index of the local elemental expansion containing the arbitrary point given by gloCoord, within a distance tolerance of tol. More...
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoords, Array< OneD, NekDouble > &locCoords, NekDouble tol=0.0, bool returnNearestElmt=false, int cachedId=-1, NekDouble maxDistance=1e6)
 
NekDouble PhysEvaluate (const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &phys)
 
int GetCoeff_Offset (int n) const
 Get the start offset position for a global list of m_coeffs correspoinding to element n. More...
 
int GetPhys_Offset (int n) const
 Get the start offset position for a global list of m_phys correspoinding to element n. More...
 
Array< OneD, NekDouble > & UpdateCoeffs ()
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
Array< OneD, NekDouble > & UpdatePhys ()
 This function returns (a reference to) the array \(\boldsymbol{u}_l\) (implemented as m_phys) containing the function \(u^{\delta}(\boldsymbol{x})\) evaluated at the quadrature points. More...
 
void PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
 This function discretely evaluates the derivative of a function \(f(\boldsymbol{x})\) on the domain consisting of all elements of the expansion. More...
 
void PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
void PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
const Array< OneD, const std::shared_ptr< ExpList > > & GetBndCondExpansions ()
 
const Array< OneD, const NekDouble > & GetBndCondBwdWeight ()
 Get the weight value for boundary conditions. More...
 
void SetBndCondBwdWeight (const int index, const NekDouble value)
 Set the weight value for boundary conditions. More...
 
std::shared_ptr< ExpList > & UpdateBndCondExpansion (int i)
 
void Upwind (const Array< OneD, const NekDouble > &Vn, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
void Upwind (const Array< OneD, const Array< OneD, NekDouble > > &Vec, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
std::shared_ptr< ExpList > & GetTrace ()
 
std::shared_ptr< AssemblyMapDG > & GetTraceMap (void)
 
const Array< OneD, const int > & GetTraceBndMap (void)
 
void GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 
void GetElmtNormalLength (Array< OneD, NekDouble > &lengthsFwd, Array< OneD, NekDouble > &lengthsBwd)
 Get the length of elements in boundary normal direction. More...
 
void GetBwdWeight (Array< OneD, NekDouble > &weightAver, Array< OneD, NekDouble > &weightJump)
 Get the weight value for boundary conditions for boundary average and jump calculations. More...
 
void AddTraceIntegral (const Array< OneD, const NekDouble > &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, bool FillBnd=true, bool PutFwdInBwdOnBCs=false, bool DoExchange=true)
 
void FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool PutFwdInBwdOnBCs=false)
 
void AddTraceQuadPhysToField (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 Add Fwd and Bwd value to field, a reverse procedure of GetFwdBwdTracePhys. More...
 
void AddTraceQuadPhysToOffDiag (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
void GetLocTraceFromTracePts (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &locTraceFwd, Array< OneD, NekDouble > &locTraceBwd)
 
void FillBwdWithBwdWeight (Array< OneD, NekDouble > &weightave, Array< OneD, NekDouble > &weightjmp)
 Fill Bwd with boundary conditions. More...
 
void PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 Copy and fill the Periodic boundaries. More...
 
const std::vector< bool > & GetLeftAdjacentFaces (void) const
 
void ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
void ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions ()
 
Array< OneD, SpatialDomains::BoundaryConditionShPtr > & UpdateBndConditions ()
 
void EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
 
void GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the result of the multiplication of a matrix of type specified by mkey with a vector given by inarray. More...
 
void 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, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays=true)
 
void ExtractElmtToBndPhys (int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
void ExtractPhysToBndElmt (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
void ExtractPhysToBnd (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
void GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
void GeneralGetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef, int NumHomoDir=0, Array< OneD, LibUtilities::BasisSharedPtr > &HomoBasis=LibUtilities::NullBasisSharedPtr1DArray, std::vector< NekDouble > &HomoLen=LibUtilities::NullNekDoubleVector, bool homoStrips=false, std::vector< unsigned int > &HomoSIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoZIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoYIDs=LibUtilities::NullUnsignedIntVector)
 
std::map< int, RobinBCInfoSharedPtrGetRobinBCInfo ()
 
void GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces=NullPeriodicMap)
 
std::vector< LibUtilities::FieldDefinitionsSharedPtrGetFieldDefinitions ()
 
void GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 Append the element data listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 Append the data in coeffs listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void ExtractElmtDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract the data in fielddata into the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 Extract the data from fromField using fromExpList the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract the data in fielddata into the coeffs. More...
 
void GenerateElementVector (const int ElementID, const NekDouble scalar1, const NekDouble scalar2, Array< OneD, NekDouble > &outarray)
 Generate vector v such that v[i] = scalar1 if i is in the element < ElementID. Otherwise, v[i] = scalar2. More...
 
std::shared_ptr< ExpListGetSharedThisPtr ()
 Returns a shared pointer to the current object. More...
 
std::shared_ptr< LibUtilities::SessionReaderGetSession () const
 Returns the session object. More...
 
std::shared_ptr< LibUtilities::CommGetComm ()
 Returns the comm object. More...
 
SpatialDomains::MeshGraphSharedPtr GetGraph ()
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
std::shared_ptr< ExpList > & GetPlane (int n)
 
void CreateCollections (Collections::ImplementationType ImpType=Collections::eNoImpType)
 Construct collections of elements containing a single element type and polynomial order from the list of expansions. More...
 
void ClearGlobalLinSysManager (void)
 
const Array< OneD, const std::pair< int, int > > & GetCoeffsToElmt () const
 Get m_coeffs to elemental value map. More...
 
void AddTraceJacToElmtJac (const Array< OneD, const DNekMatSharedPtr > &FwdMat, const Array< OneD, const DNekMatSharedPtr > &BwdMat, Array< OneD, DNekMatSharedPtr > &fieldMat)
 inverse process of v_GetFwdBwdTracePhys. Given Trace integration of Fwd and Bwd Jacobian, with dimension NtotalTrace*TraceCoef*TracePhys. return Elemental Jacobian matrix with dimension NtotalElement*ElementCoef*ElementPhys. More...
 
void GetMatIpwrtDeriveBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, const int nDirctn, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetMatIpwrtDeriveBase (const TensorOfArray3D< NekDouble > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetDiagMatIpwrtBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void AddTraceIntegralToOffDiag (const Array< OneD, const NekDouble > &FwdFlux, const Array< OneD, const NekDouble > &BwdFlux, Array< OneD, NekDouble > &outarray)
 
void AddRightIPTPhysDerivBase (const int dir, const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
void AddRightIPTBaseMatrix (const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
const LocTraceToTraceMapSharedPtrGetLocTraceToTraceMap () const
 

Protected Member Functions

void GlobalSolve (const GlobalLinSysKey &key, const Array< OneD, const NekDouble > &rhs, Array< OneD, NekDouble > &inout, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solves the linear system specified by the key key. More...
 
GlobalMatrixSharedPtr GetGlobalMatrix (const GlobalMatrixKey &mkey)
 Returns the global matrix specified by mkey. More...
 
GlobalLinSysSharedPtr GetGlobalLinSys (const GlobalLinSysKey &mkey)
 Returns the linear system specified by the key mkey. More...
 
GlobalLinSysSharedPtr GenGlobalLinSys (const GlobalLinSysKey &mkey)
 
virtual void v_ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 Impose the Dirichlet Boundary Conditions on outarray. More...
 
virtual void v_FillBndCondFromField ()
 
virtual void v_FillBndCondFromField (const int nreg)
 
virtual void v_LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm)
 Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
virtual void v_LocalToGlobal (bool useComm)
 
virtual void v_GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Scatters from the global coefficients \(\boldsymbol{\hat{u}}_g\) to the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
virtual void v_GlobalToLocal (void)
 
virtual void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Template method virtual forwarder for FwdTrans(). More...
 
virtual void v_SmoothField (Array< OneD, NekDouble > &field)
 Template method virtual forwarded for SmoothField(). More...
 
virtual void v_MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Template method virtual forwarder for MultiplyByInvMassMatrix(). More...
 
virtual void v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const MultiRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
 Solves the two-dimensional Helmholtz equation, subject to the boundary conditions specified. More...
 
virtual void v_GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Calculates the result of the multiplication of a global matrix of type specified by mkey with a vector given by inarray. More...
 
virtual void v_LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
void v_LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > & v_GetBndConditions ()
 Template method virtual forwarder for GetBndConditions(). More...
 
virtual void v_ClearGlobalLinSysManager (void)
 
- Protected Member Functions inherited from Nektar::MultiRegions::DisContField
void GenerateBoundaryConditionExpansion (const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, const bool DeclareCoeffPhysArrays=true)
 Discretises the boundary conditions. More...
 
void FindPeriodicTraces (const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 Generate a associative map of periodic vertices in a mesh. More...
 
virtual ExpListSharedPtrv_GetTrace ()
 
virtual AssemblyMapDGSharedPtrv_GetTraceMap (void)
 
virtual const LocTraceToTraceMapSharedPtrv_GetLocTraceToTraceMap (void) const
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
 Add trace contributions into elemental coefficient spaces. More...
 
virtual void v_AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
 Add trace contributions into elemental coefficient spaces. More...
 
virtual void v_AddTraceQuadPhysToField (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
virtual void v_ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
virtual void v_ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This method extracts the trace (verts in 1D) from the field inarray and puts the values in outarray. More...
 
virtual void v_GetLocTraceFromTracePts (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &locTraceFwd, Array< OneD, NekDouble > &locTraceBwd)
 
void GenerateFieldBnd1D (SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 
virtual std::map< int, RobinBCInfoSharedPtrv_GetRobinBCInfo ()
 
virtual const Array< OneD, const MultiRegions::ExpListSharedPtr > & v_GetBndCondExpansions ()
 
virtual MultiRegions::ExpListSharedPtrv_UpdateBndCondExpansion (int i)
 
virtual Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions ()
 
virtual void v_GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &TraceID)
 
virtual void v_GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays)
 
virtual void v_Reset ()
 Reset this field, so that geometry information can be updated. More...
 
virtual void v_EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
 Evaluate all boundary conditions at a given time.. More...
 
virtual void v_PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
virtual void v_FillBwdWithBwdWeight (Array< OneD, NekDouble > &weightave, Array< OneD, NekDouble > &weightjmp)
 Fill the weight with m_bndCondBndWeight. More...
 
virtual void v_GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
virtual void v_GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool FillBnd=true, bool PutFwdInBwdOnBCs=false, bool DoExchange=true)
 This method extracts the "forward" and "backward" trace data from the array field and puts the data into output vectors Fwd and Bwd. More...
 
virtual void v_FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool PutFwdInBwdOnBCs)
 
virtual const Array< OneD, const NekDouble > & v_GetBndCondBwdWeight ()
 
virtual void v_SetBndCondBwdWeight (const int index, const NekDouble value)
 
void SetUpDG (const std::string="DefaultVar")
 Set up all DG member variables and maps. More...
 
bool IsLeftAdjacentTrace (const int n, const int e)
 
virtual void v_GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces)
 Obtain a copy of the periodic edges and vertices for this field. More...
 
- Protected Member Functions inherited from Nektar::MultiRegions::ExpList
std::shared_ptr< DNekMatGenGlobalMatrixFull (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 
const DNekScalBlkMatSharedPtr GenBlockMatrix (const GlobalMatrixKey &gkey)
 This function assembles the block diagonal matrix of local matrices of the type mtype. More...
 
const DNekScalBlkMatSharedPtrGetBlockMatrix (const GlobalMatrixKey &gkey)
 
void MultiplyByBlockMatrix (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
std::shared_ptr< GlobalMatrixGenGlobalMatrix (const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 Generates a global matrix from the given key and map. More...
 
void GlobalEigenSystem (const std::shared_ptr< DNekMat > &Gmat, Array< OneD, NekDouble > &EigValsReal, Array< OneD, NekDouble > &EigValsImag, Array< OneD, NekDouble > &EigVecs=NullNekDouble1DArray)
 
std::shared_ptr< GlobalLinSysGenGlobalLinSys (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 This operation constructs the global linear system of type mkey. More...
 
std::shared_ptr< GlobalLinSysGenGlobalBndLinSys (const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
 Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocToGloBaseMap. More...
 
virtual int v_GetNumElmts (void)
 
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 const Array< OneD, const int > & v_GetTraceBndMap ()
 
virtual void v_GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 Populate normals with the normals of all expansions. More...
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
virtual void v_AddTraceQuadPhysToOffDiag (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field)
 
virtual const std::vector< bool > & v_GetLeftAdjacentFaces (void) const
 
virtual void v_BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_BwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTrans_BndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTBase_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
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 Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
 
virtual void v_PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
virtual void v_DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
virtual void v_SetUpPhysNormals ()
 
virtual void v_ExtractElmtToBndPhys (const int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
virtual void v_ExtractPhysToBndElmt (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
virtual void v_ExtractPhysToBnd (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
virtual void v_GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
virtual std::vector< LibUtilities::FieldDefinitionsSharedPtrv_GetFieldDefinitions (void)
 
virtual void v_GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 
virtual void v_ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract data from raw field data into expansion list. More...
 
virtual void v_ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 
virtual void v_WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
virtual void v_WriteTecplotZone (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotField (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotConnectivity (std::ostream &outfile, int expansion)
 
virtual void v_WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip)
 
virtual void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var)
 
virtual NekDouble v_L2 (const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 
virtual NekDouble v_Integral (const Array< OneD, const NekDouble > &inarray)
 
virtual NekDouble v_VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
virtual Array< OneD, const NekDoublev_HomogeneousEnergy (void)
 
virtual LibUtilities::TranspositionSharedPtr v_GetTransposition (void)
 
virtual NekDouble v_GetHomoLen (void)
 
virtual void v_SetHomoLen (const NekDouble lhom)
 
virtual Array< OneD, const unsigned int > v_GetZIDs (void)
 
virtual Array< OneD, const unsigned int > v_GetYIDs (void)
 
virtual void v_PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void ExtractFileBCs (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, const std::shared_ptr< ExpList > locExpList)
 

Protected Attributes

AssemblyMapCGSharedPtr m_locToGloMap
 (A shared pointer to) the object which contains all the required information for the transformation from local to global degrees of freedom. More...
 
GlobalMatrixMapShPtr m_globalMat
 (A shared pointer to) a list which collects all the global matrices being assembled, such that they should be constructed only once. More...
 
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSysm_globalLinSysManager
 A manager which collects all the global linear systems being assembled, such that they should be constructed only once. More...
 
- Protected Attributes inherited from Nektar::MultiRegions::DisContField
int m_numDirBndCondExpansions
 The number of boundary segments on which Dirichlet boundary conditions are imposed. More...
 
Array< OneD, MultiRegions::ExpListSharedPtrm_bndCondExpansions
 An object which contains the discretised boundary conditions. More...
 
Array< OneD, NekDoublem_bndCondBndWeight
 
Array< OneD, SpatialDomains::BoundaryConditionShPtrm_bndConditions
 An array which contains the information about the boundary condition on the different boundary regions. More...
 
GlobalLinSysMapShPtr m_globalBndMat
 Global boundary matrix. More...
 
ExpListSharedPtr m_trace
 Trace space storage for points between elements. More...
 
AssemblyMapDGSharedPtr m_traceMap
 Local to global DG mapping for trace space. More...
 
std::set< int > m_boundaryTraces
 A set storing the global IDs of any boundary Verts. More...
 
PeriodicMap m_periodicVerts
 A map which identifies groups of periodic vertices. More...
 
PeriodicMap m_periodicEdges
 A map which identifies pairs of periodic edges. More...
 
PeriodicMap m_periodicFaces
 A map which identifies pairs of periodic faces. More...
 
std::vector< int > m_periodicFwdCopy
 A vector indicating degress of freedom which need to be copied from forwards to backwards space in case of a periodic boundary condition. More...
 
std::vector< int > m_periodicBwdCopy
 
std::vector< bool > m_leftAdjacentTraces
 
LocTraceToTraceMapSharedPtr m_locTraceToTraceMap
 
- Protected Attributes inherited from Nektar::MultiRegions::ExpList
ExpansionType m_expType
 Exapnsion type. More...
 
LibUtilities::CommSharedPtr m_comm
 Communicator. More...
 
LibUtilities::SessionReaderSharedPtr m_session
 Session. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Mesh associated with this expansion list. More...
 
int m_ncoeffs
 The total number of local degrees of freedom. m_ncoeffs \(=N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_l\). More...
 
int m_npoints
 
Array< OneD, NekDoublem_coeffs
 Concatenation of all local expansion coefficients. More...
 
Array< OneD, NekDoublem_phys
 The global expansion evaluated at the quadrature points. More...
 
bool m_physState
 The state of the array m_phys. More...
 
std::shared_ptr< LocalRegions::ExpansionVectorm_exp
 The list of local expansions. More...
 
Collections::CollectionVector m_collections
 
std::vector< bool > m_collectionsDoInit
 Vector of bools to act as an initialise on first call flag. More...
 
std::vector< int > m_coll_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
std::vector< int > m_coll_phys_offset
 Offset of elemental data into the array m_phys. More...
 
Array< OneD, int > m_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
Array< OneD, int > m_phys_offset
 Offset of elemental data into the array m_phys. More...
 
Array< OneD, std::pair< int, int > > m_coeffsToElmt
 m_coeffs to elemental value map More...
 
BlockMatrixMapShPtr m_blockMat
 
bool m_WaveSpace
 
std::unordered_map< int, int > m_elmtToExpId
 Mapping from geometry ID of element to index inside m_exp. More...
 

Additional Inherited Members

- Public Attributes inherited from Nektar::MultiRegions::DisContField
Array< OneD, int > m_BCtoElmMap
 
Array< OneD, int > m_BCtoTraceMap
 
- 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

This class is the abstraction of a global continuous two- dimensional spectral/hp element expansion which approximates the solution of a set of partial differential equations.

The class ContField is able to incorporate the boundary conditions imposed to the problem to be solved. Therefore, the class is equipped with three additional data members:

The first data structure, m_bndCondExpansions, contains the one-dimensional spectral/hp expansion on the boundary, #m_bndTypes stores information about the type of boundary condition on the different parts of the boundary while #m_bndCondEquations holds the equation of the imposed boundary conditions.

Furthermore, in case of Dirichlet boundary conditions, this class is capable of lifting a known solution satisfying these boundary conditions. If we denote the unknown solution by \(u^{\mathcal{H}}(\boldsymbol{x})\) and the known Dirichlet boundary conditions by \(u^{\mathcal{D}}(\boldsymbol{x})\), the expansion then can be decomposed as

\[ u^{\delta}(\boldsymbol{x}_i)=u^{\mathcal{D}}(\boldsymbol{x}_i)+ u^{\mathcal{H}}(\boldsymbol{x}_i)=\sum_{n=0}^{N^{\mathcal{D}}-1} \hat{u}_n^{\mathcal{D}}\Phi_n(\boldsymbol{x}_i)+ \sum_{n={N^{\mathcal{D}}}}^{N_{\mathrm{dof}}-1} \hat{u}_n^{\mathcal{H}} \Phi_n(\boldsymbol{x}_i).\]

This lifting is accomplished by ordering the known global degrees of freedom, prescribed by the Dirichlet boundary conditions, first in the global array \(\boldsymbol{\hat{u}}\), that is,

\[\boldsymbol{\hat{u}}=\left[ \begin{array}{c} \boldsymbol{\hat{u}}^{\mathcal{D}}\\ \boldsymbol{\hat{u}}^{\mathcal{H}} \end{array} \right].\]

Such kind of expansions are also referred to as continuous fields. This class should be used when solving 2D problems using a standard Galerkin approach.

Definition at line 55 of file ContField.h.

Constructor & Destructor Documentation

◆ ContField() [1/5]

Nektar::MultiRegions::ContField::ContField ( )

The default constructor.

Definition at line 88 of file ContField.cpp.

88  :
89  DisContField(),
90  m_locToGloMap(),
91  m_globalMat(),
93  std::bind(&ContField::GenGlobalLinSys, this,
94  std::placeholders::_1),
95  std::string("GlobalLinSys"))
96  {
97  }
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > m_globalLinSysManager
A manager which collects all the global linear systems being assembled, such that they should be cons...
Definition: ContField.h:177
GlobalLinSysSharedPtr GenGlobalLinSys(const GlobalLinSysKey &mkey)
Definition: ContField.cpp:585
AssemblyMapCGSharedPtr m_locToGloMap
(A shared pointer to) the object which contains all the required information for the transformation f...
Definition: ContField.h:167
GlobalMatrixMapShPtr m_globalMat
(A shared pointer to) a list which collects all the global matrices being assembled,...
Definition: ContField.h:172
DisContField()
Default constructor.

◆ ContField() [2/5]

Nektar::MultiRegions::ContField::ContField ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr graph,
const std::string &  variable = "DefaultVar",
const bool  DeclareCoeffPhysArrays = true,
const bool  CheckIfSingularSystem = false,
const Collections::ImplementationType  ImpType = Collections::eNoImpType 
)

This constructor sets up global continuous field based on an input mesh and boundary conditions.

Given a mesh graph, containing information about the domain and the spectral/hp element expansion, this constructor fills the list of local expansions m_exp with the proper expansions, calculates the total number of quadrature points \(\boldsymbol{x}_i\) and local expansion coefficients \(\hat{u}^e_n\) and allocates memory for the arrays m_coeffs and m_phys. Furthermore, it constructs the mapping array (contained in m_locToGloMap) for the transformation between local elemental level and global level, it calculates the total number global expansion coefficients \(\hat{u}_n\) and allocates memory for the array #m_contCoeffs. The constructor also discretises the boundary conditions, specified by the argument bcs, by expressing them in terms of the coefficient of the expansion on the boundary.

Parameters
graphA mesh, containing information about the domain and the spectral/hp element expansion.
bcsThe boundary conditions.
variableAn optional parameter to indicate for which variable the field should be constructed.

Definition at line 121 of file ContField.cpp.

127  :
128  DisContField(pSession,graph,variable,false,
129  DeclareCoeffPhysArrays,ImpType),
132  std::bind(&ContField::GenGlobalLinSys, this,
133  std::placeholders::_1),
134  std::string("GlobalLinSys"))
135  {
140  CheckIfSingularSystem,
141  variable,
145 
146  if (m_session->DefinesCmdLineArgument("verbose"))
147  {
148  m_locToGloMap->PrintStats(std::cout, variable);
149  }
150  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
PeriodicMap m_periodicEdges
A map which identifies pairs of periodic edges.
Definition: DisContField.h:172
PeriodicMap m_periodicFaces
A map which identifies pairs of periodic faces.
Definition: DisContField.h:177
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
Definition: DisContField.h:148
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
An object which contains the discretised boundary conditions.
Definition: DisContField.h:142
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
Definition: DisContField.h:167
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
Definition: ExpList.h:1230
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1223

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Nektar::MultiRegions::DisContField::m_periodicEdges, Nektar::MultiRegions::DisContField::m_periodicFaces, Nektar::MultiRegions::DisContField::m_periodicVerts, and Nektar::MultiRegions::ExpList::m_session.

◆ ContField() [3/5]

Nektar::MultiRegions::ContField::ContField ( const ContField In,
const SpatialDomains::MeshGraphSharedPtr graph,
const std::string &  variable,
const bool  DeclareCoeffPhysArrays = true,
const bool  CheckIfSingularSystem = false 
)

Construct a global continuous field with solution type based on another field but using a separate input mesh and boundary conditions.

Given a mesh graph, containing information about the domain and the spectral/hp element expansion, this constructor fills the list of local expansions m_exp with the proper expansions, calculates the total number of quadrature points \(\boldsymbol{x}_i\) and local expansion coefficients \(\hat{u}^e_n\) and allocates memory for the arrays m_coeffs and m_phys. Furthermore, it constructs the mapping array (contained in m_locToGloMap) for the transformation between local elemental level and global level, it calculates the total number global expansion coefficients \(\hat{u}_n\) and allocates memory for the array m_coeffs. The constructor also discretises the boundary conditions, specified by the argument bcs, by expressing them in terms of the coefficient of the expansion on the boundary.

Parameters
InExisting ContField object used to provide the local to global mapping information and global solution type.
graphA mesh, containing information about the domain and the spectral/hp element expansion.
bcsThe boundary conditions.
bc_loc

Definition at line 176 of file ContField.cpp.

180  :
181  DisContField(In,graph,variable,false,DeclareCoeffPhysArrays),
184  std::bind(&ContField::GenGlobalLinSys, this, std::placeholders::_1),
185  std::string("GlobalLinSys"))
186  {
187  if(!SameTypeOfBoundaryConditions(In) || CheckIfSingularSystem)
188  {
193  CheckIfSingularSystem,
194  variable,
198 
199  if (m_session->DefinesCmdLineArgument("verbose"))
200  {
201  m_locToGloMap->PrintStats(std::cout, variable);
202  }
203  }
204  else
205  {
206  m_locToGloMap = In.m_locToGloMap;
207  }
208  }
bool SameTypeOfBoundaryConditions(const DisContField &In)
Check to see if expansion has the same BCs as In.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Nektar::MultiRegions::DisContField::m_periodicEdges, Nektar::MultiRegions::DisContField::m_periodicFaces, Nektar::MultiRegions::DisContField::m_periodicVerts, Nektar::MultiRegions::ExpList::m_session, and Nektar::MultiRegions::DisContField::SameTypeOfBoundaryConditions().

◆ ContField() [4/5]

Nektar::MultiRegions::ContField::ContField ( const ContField In,
bool  DeclareCoeffPhysArrays = true 
)

The copy constructor.

Initialises the object as a copy of an existing ContField object.

Parameters
InExisting ContField object.
DeclareCoeffPhysArraysbool to declare if m_phys and m_coeffs should be declared. Default is true

Definition at line 217 of file ContField.cpp.

217  :
218  DisContField(In,DeclareCoeffPhysArrays),
219  m_locToGloMap(In.m_locToGloMap),
220  m_globalMat(In.m_globalMat),
221  m_globalLinSysManager(In.m_globalLinSysManager)
222  {
223  }

◆ ContField() [5/5]

Nektar::MultiRegions::ContField::ContField ( const LibUtilities::SessionReaderSharedPtr pSession,
const ExpList In 
)

Copy constructor.

Constructs a continuous field as a copy of an existing explist field and adding all the boundary conditions.

Parameters
InExisting explist1D field .

Definition at line 231 of file ContField.cpp.

233  :
234  DisContField(In),
235  m_locToGloMap(),
237  (std::bind(&ContField::GenGlobalLinSys,
238  this, std::placeholders::_1),
239  std::string("GlobalLinSys"))
240  {
242  ::AllocateSharedPtr(pSession, m_ncoeffs, In);
243  }

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), m_locToGloMap, and Nektar::MultiRegions::ExpList::m_ncoeffs.

◆ ~ContField()

Nektar::MultiRegions::ContField::~ContField ( )
virtual

The default destructor.

Definition at line 248 of file ContField.cpp.

249  {
250  }

Member Function Documentation

◆ Assemble() [1/2]

void Nektar::MultiRegions::ContField::Assemble ( )
inline

Assembles the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).

This operation is evaluated as:

\begin{tabbing} \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\ \> \> Do \= $i=$ $0,N_m^e-1$ \\ \> \> \> $\boldsymbol{\hat{u}}_g[\mbox{map}[e][i]] = \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]+\mbox{sign}[e][i] \cdot \boldsymbol{\hat{u}}^{e}[i]$\\ \> \> continue\\ \> continue \end{tabbing}

where map \([e][i]\) is the mapping array and sign \([e][i]\) is an array of similar dimensions ensuring the correct modal connectivity between the different elements (both these arrays are contained in the data member m_locToGloMap). This operation is equivalent to the gather operation \(\boldsymbol{\hat{u}}_g=\mathcal{A}^{T}\boldsymbol{\hat{u}}_l\), where \(\mathcal{A}\) is the \(N_{\mathrm{eof}}\times N_{\mathrm{dof}}\) permutation matrix.

Note
The array m_coeffs should be filled with the local coefficients \(\boldsymbol{\hat{u}}_l\) and that the resulting global coefficients \(\boldsymbol{\hat{u}}_g\) will be stored in m_coeffs.

Definition at line 319 of file ContField.h.

320  {
321  m_locToGloMap->Assemble(m_coeffs,m_coeffs);
322  }
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
Definition: ExpList.h:1252

References Nektar::MultiRegions::ExpList::m_coeffs, and m_locToGloMap.

◆ Assemble() [2/2]

void Nektar::MultiRegions::ContField::Assemble ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
) const
inline

Assembles the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).

This operation is evaluated as:

\begin{tabbing} \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\ \> \> Do \= $i=$ $0,N_m^e-1$ \\ \> \> \> $\boldsymbol{\hat{u}}_g[\mbox{map}[e][i]] = \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]+\mbox{sign}[e][i] \cdot \boldsymbol{\hat{u}}^{e}[i]$\\ \> \> continue\\ \> continue \end{tabbing}

where map \([e][i]\) is the mapping array and sign \([e][i]\) is an array of similar dimensions ensuring the correct modal connectivity between the different elements (both these arrays are contained in the data member m_locToGloMap). This operation is equivalent to the gather operation \(\boldsymbol{\hat{u}}_g=\mathcal{A}^{T}\boldsymbol{\hat{u}}_l\), where \(\mathcal{A}\) is the \(N_{\mathrm{eof}}\times N_{\mathrm{dof}}\) permutation matrix.

Parameters
inarrayAn array of size \(N_\mathrm{eof}\) containing the local degrees of freedom \(\boldsymbol{x}_l\).
outarrayThe resulting global degrees of freedom \(\boldsymbol{x}_g\) will be stored in this array of size \(N_\mathrm{dof}\).

Definition at line 351 of file ContField.h.

354  {
355  m_locToGloMap->Assemble(inarray,outarray);
356  }

References m_locToGloMap.

◆ BwdTrans()

void Nektar::MultiRegions::ContField::BwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
inline

Performs the backward transformation of the spectral/hp element expansion.

Given the coefficients of an expansion, this function evaluates the spectral/hp expansion \(u^{\delta}(\boldsymbol{x})\) at the quadrature points \(\boldsymbol{x}_i\). This operation is evaluated locally by the function ExpList::BwdTrans.

The coefficients of the expansion should be contained in the variable m_coeffs of the ExpList object In. The resulting physical values at the quadrature points \(u^{\delta}(\boldsymbol{x}_i)\) are stored in the array m_phys.

Parameters
InAn ExpList, containing the local coefficients \(\hat{u}_n^e\) in its array m_coeffs.

Definition at line 403 of file ContField.h.

406  {
407  BwdTrans_IterPerExp(inarray,outarray);
408  }
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 exp...
Definition: ExpList.h:2025

References Nektar::MultiRegions::ExpList::BwdTrans_IterPerExp().

Referenced by v_SmoothField().

◆ FwdTrans()

void Nektar::MultiRegions::ContField::FwdTrans ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)

Performs the global forward transformation of a function \(f(\boldsymbol{x})\), subject to the boundary conditions specified.

Given a function \(f(\boldsymbol{x})\) defined at the quadrature points, this function determines the unknown global coefficients \(\boldsymbol{\hat{u}}^{\mathcal{H}}\) employing a discrete Galerkin projection from physical space to coefficient space. The operation is evaluated by the function GlobalSolve using the global mass matrix.

The values of the function \(f(\boldsymbol{x})\) evaluated at the quadrature points \(\boldsymbol{x}_i\) should be contained in the variable m_phys of the ExpList object Sin. The resulting global coefficients \(\hat{u}_g\) are stored in the array m_coeffs.

Parameters
SinAn ExpList, containing the discrete evaluation of \(f(\boldsymbol{x})\) at the quadrature points in its array m_phys.

Definition at line 270 of file ContField.cpp.

273  {
274  // Inner product of forcing
275  Array<OneD,NekDouble> wsp(m_ncoeffs);
276  IProductWRTBase(inarray,wsp);
277 
278  // Solve the system
279  GlobalLinSysKey key(StdRegions::eMass, m_locToGloMap);
280 
281  GlobalSolve(key,wsp,outarray);
282  }
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculates the inner product of a function with respect to all global expansion modes .
Definition: ContField.h:381
void GlobalSolve(const GlobalLinSysKey &key, const Array< OneD, const NekDouble > &rhs, Array< OneD, NekDouble > &inout, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
Solves the linear system specified by the key key.
Definition: ContField.cpp:517

References Nektar::StdRegions::eMass, GlobalSolve(), IProductWRTBase(), m_locToGloMap, and Nektar::MultiRegions::ExpList::m_ncoeffs.

Referenced by v_FwdTrans().

◆ GenGlobalLinSys()

GlobalLinSysSharedPtr Nektar::MultiRegions::ContField::GenGlobalLinSys ( const GlobalLinSysKey mkey)
protected

Definition at line 585 of file ContField.cpp.

587  {
588  ASSERTL1(mkey.LocToGloMapIsDefined(),
589  "To use method must have a AssemblyMap "
590  "attached to key");
592  }
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:250
std::shared_ptr< GlobalLinSys > GenGlobalLinSys(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
This operation constructs the global linear system of type mkey.
Definition: ExpList.cpp:2310

References ASSERTL1, Nektar::MultiRegions::ExpList::GenGlobalLinSys(), Nektar::MultiRegions::GlobalMatrixKey::LocToGloMapIsDefined(), and m_locToGloMap.

◆ GetBndCondExpansions()

const Array< OneD, const MultiRegions::ExpListSharedPtr > & Nektar::MultiRegions::ContField::GetBndCondExpansions ( )
inline

Returns the boundary conditions expansion.

Definition at line 411 of file ContField.h.

412  {
413  return m_bndCondExpansions;
414  }

References Nektar::MultiRegions::DisContField::m_bndCondExpansions.

◆ GetBndConditions()

const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & Nektar::MultiRegions::ContField::GetBndConditions ( )
inline

Returns the boundary conditions.

Definition at line 417 of file ContField.h.

418  {
419  return m_bndConditions;
420  }

References Nektar::MultiRegions::DisContField::m_bndConditions.

Referenced by v_GetBndConditions().

◆ GetGlobalLinSys()

GlobalLinSysSharedPtr Nektar::MultiRegions::ContField::GetGlobalLinSys ( const GlobalLinSysKey mkey)
protected

Returns the linear system specified by the key mkey.

The function searches the map #m_globalLinSys to see if the global matrix has been created before. If not, it calls the function GenGlobalLinSys to generate the requested global system.

Parameters
mkeyThis key uniquely defines the requested linear system.

Definition at line 579 of file ContField.cpp.

581  {
582  return m_globalLinSysManager[mkey];
583  }

References m_globalLinSysManager.

Referenced by GlobalSolve().

◆ GetGlobalMatrix()

GlobalMatrixSharedPtr Nektar::MultiRegions::ContField::GetGlobalMatrix ( const GlobalMatrixKey mkey)
protected

Returns the global matrix specified by mkey.

Returns the global matrix associated with the given GlobalMatrixKey. If the global matrix has not yet been constructed on this field, it is first constructed using GenGlobalMatrix().

Parameters
mkeyGlobal matrix key.
Returns
Assocated global matrix.

Definition at line 547 of file ContField.cpp.

549  {
550  ASSERTL1(mkey.LocToGloMapIsDefined(),
551  "To use method must have a AssemblyMap "
552  "attached to key");
553 
554  GlobalMatrixSharedPtr glo_matrix;
555  auto matrixIter = m_globalMat->find(mkey);
556 
557  if(matrixIter == m_globalMat->end())
558  {
559  glo_matrix = GenGlobalMatrix(mkey,m_locToGloMap);
560  (*m_globalMat)[mkey] = glo_matrix;
561  }
562  else
563  {
564  glo_matrix = matrixIter->second;
565  }
566 
567  return glo_matrix;
568  }
std::shared_ptr< GlobalMatrix > GenGlobalMatrix(const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
Generates a global matrix from the given key and map.
Definition: ExpList.cpp:2034
std::shared_ptr< GlobalMatrix > GlobalMatrixSharedPtr
Shared pointer to a GlobalMatrix object.
Definition: GlobalMatrix.h:88

References ASSERTL1, Nektar::MultiRegions::ExpList::GenGlobalMatrix(), Nektar::MultiRegions::GlobalMatrixKey::LocToGloMapIsDefined(), m_globalMat, and m_locToGloMap.

◆ GetGlobalMatrixNnz()

int Nektar::MultiRegions::ContField::GetGlobalMatrixNnz ( const GlobalMatrixKey gkey)
inline

Definition at line 422 of file ContField.h.

423  {
424  ASSERTL1(gkey.LocToGloMapIsDefined(),
425  "To use method must have a AssemblyMap "
426  "attached to key");
427 
428  auto matrixIter = m_globalMat->find(gkey);
429 
430  if(matrixIter == m_globalMat->end())
431  {
432  return 0;
433  }
434  else
435  {
436  return matrixIter->second->GetNumNonZeroEntries();
437  }
438 
439  return 0;
440  }

References ASSERTL1, Nektar::MultiRegions::GlobalMatrixKey::LocToGloMapIsDefined(), and m_globalMat.

◆ GetLocalToGlobalMap()

const AssemblyMapCGSharedPtr & Nektar::MultiRegions::ContField::GetLocalToGlobalMap ( ) const
inline

Returns the map from local to global level.

Definition at line 360 of file ContField.h.

361  {
362  return m_locToGloMap;
363  }

References m_locToGloMap.

◆ GlobalSolve()

void Nektar::MultiRegions::ContField::GlobalSolve ( const GlobalLinSysKey key,
const Array< OneD, const NekDouble > &  locrhs,
Array< OneD, NekDouble > &  inout,
const Array< OneD, const NekDouble > &  dirForcing = NullNekDouble1DArray 
)
protected

Solves the linear system specified by the key key.

Given a linear system specified by the key key,

\[\boldsymbol{M}\boldsymbol{\hat{u}}_g=\boldsymbol{\hat{f}},\]

this function solves this linear system taking into account the boundary conditions specified in the data member m_bndCondExpansions. Therefore, it adds an array \(\boldsymbol{\hat{g}}\) which represents the non-zero surface integral resulting from the weak boundary conditions (e.g. Neumann boundary conditions) to the right hand side, that is,

\[\boldsymbol{M}\boldsymbol{\hat{u}}_g=\boldsymbol{\hat{f}}+ \boldsymbol{\hat{g}}.\]

Furthermore, it lifts the known degrees of freedom which are prescribed by the Dirichlet boundary conditions. As these known coefficients \(\boldsymbol{\hat{u}}^{\mathcal{D}}\) are numbered first in the global coefficient array \(\boldsymbol{\hat{u}}_g\), the linear system can be decomposed as,

\[\left[\begin{array}{cc} \boldsymbol{M}^{\mathcal{DD}}&\boldsymbol{M}^{\mathcal{DH}}\\ \boldsymbol{M}^{\mathcal{HD}}&\boldsymbol{M}^{\mathcal{HH}} \end{array}\right] \left[\begin{array}{c} \boldsymbol{\hat{u}}^{\mathcal{D}}\\ \boldsymbol{\hat{u}}^{\mathcal{H}} \end{array}\right]= \left[\begin{array}{c} \boldsymbol{\hat{f}}^{\mathcal{D}}\\ \boldsymbol{\hat{f}}^{\mathcal{H}} \end{array}\right]+ \left[\begin{array}{c} \boldsymbol{\hat{g}}^{\mathcal{D}}\\ \boldsymbol{\hat{g}}^{\mathcal{H}} \end{array}\right] \]

which will then be solved for the unknown coefficients \(\boldsymbol{\hat{u}}^{\mathcal{H}}\) as,

\[ \boldsymbol{M}^{\mathcal{HH}}\boldsymbol{\hat{u}}^{\mathcal{H}}= \boldsymbol{\hat{f}}^{\mathcal{H}}+ \boldsymbol{\hat{g}}^{\mathcal{H}}- \boldsymbol{M}^{\mathcal{HD}}\boldsymbol{\hat{u}}^{\mathcal{D}}\]

Parameters
mkeyThis key uniquely defines the linear system to be solved.
locrhscontains the forcing term in local coefficient space
Note
inout contains initial guess and final output in local coeffs.

Definition at line 517 of file ContField.cpp.

522  {
523  int NumDirBcs = m_locToGloMap->GetNumGlobalDirBndCoeffs();
524  int contNcoeffs = m_locToGloMap->GetNumGlobalCoeffs();
525 
526  // STEP 1: SET THE DIRICHLET DOFS TO THE RIGHT VALUE
527  // IN THE SOLUTION ARRAY
529 
530  // STEP 2: CALCULATE THE HOMOGENEOUS COEFFICIENTS
531  if(contNcoeffs - NumDirBcs > 0)
532  {
534  LinSys->Solve(locrhs,inout,m_locToGloMap,dirForcing);
535 
536  }
537  }
virtual void v_ImposeDirichletConditions(Array< OneD, NekDouble > &outarray)
Impose the Dirichlet Boundary Conditions on outarray.
Definition: ContField.cpp:617
GlobalLinSysSharedPtr GetGlobalLinSys(const GlobalLinSysKey &mkey)
Returns the linear system specified by the key mkey.
Definition: ContField.cpp:579
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
Definition: GlobalLinSys.h:50

References GetGlobalLinSys(), m_locToGloMap, and v_ImposeDirichletConditions().

Referenced by FwdTrans(), LaplaceSolve(), MultiplyByInvMassMatrix(), v_HelmSolve(), v_LinearAdvectionDiffusionReactionSolve(), and v_LinearAdvectionReactionSolve().

◆ IProductWRTBase()

void Nektar::MultiRegions::ContField::IProductWRTBase ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
inline

Calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to all global expansion modes \(\phi_n^e(\boldsymbol{x})\).

The operation is evaluated locally (i.e. with respect to all local expansion modes) by the function ExpList::IProductWRTBase. The inner product with respect to the global expansion modes is than obtained by a global assembly operation.

The values of the function \(f(\boldsymbol{x})\) evaluated at the quadrature points \(\boldsymbol{x}_i\) should be contained in the variable m_phys of the ExpList object in. The result is stored in the array m_coeffs.

Parameters
InAn ExpList, containing the discrete evaluation of \(f(\boldsymbol{x})\) at the quadrature points in its array m_phys.

Definition at line 381 of file ContField.h.

385  {
386  IProductWRTBase_IterPerExp(inarray,outarray);
387  }
void IProductWRTBase_IterPerExp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function calculates the inner product of a function with respect to all local expansion modes .
Definition: ExpList.h:1966

References Nektar::MultiRegions::ExpList::IProductWRTBase_IterPerExp().

Referenced by FwdTrans(), LaplaceSolve(), v_HelmSolve(), v_LinearAdvectionDiffusionReactionSolve(), v_LinearAdvectionReactionSolve(), and v_SmoothField().

◆ LaplaceSolve()

void Nektar::MultiRegions::ContField::LaplaceSolve ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const Array< OneD, const NekDouble > &  dirForcing = NullNekDouble1DArray,
const Array< OneD, Array< OneD, NekDouble > > &  variablecoeffs = NullNekDoubleArrayOfArray,
NekDouble  time = 0.0 
)

Solves the two-dimensional Laplace equation, subject to the boundary conditions specified.

Consider the two dimensional Laplace equation,

\[\nabla\cdot\left(\boldsymbol{\sigma}\nabla u(\boldsymbol{x})\right) = f(\boldsymbol{x}),\]

supplemented with appropriate boundary conditions (which are contained in the data member m_bndCondExpansions). In the equation above \(\boldsymbol{\sigma}\) is the (symmetric positive definite) diffusion tensor:

\[ \sigma = \left[ \begin{array}{cc} \sigma_{00}(\boldsymbol{x},t) & \sigma_{01}(\boldsymbol{x},t) \\ \sigma_{01}(\boldsymbol{x},t) & \sigma_{11}(\boldsymbol{x},t) \end{array} \right]. \]

Applying a \(C^0\) continuous Galerkin discretisation, this equation leads to the following linear system:

\[\boldsymbol{L} \boldsymbol{\hat{u}}_g=\boldsymbol{\hat{f}}\]

where \(\boldsymbol{L}\) is the Laplacian matrix. This function solves the system above for the global coefficients \(\boldsymbol{\hat{u}}\) by a call to the function GlobalSolve.

The values of the function \(f(\boldsymbol{x})\) evaluated at the quadrature points \(\boldsymbol{x}_i\) should be contained in the variable m_phys of the ExpList object Sin. The resulting global coefficients \(\boldsymbol{\hat{u}}_g\) are stored in the array m_coeffs.

Parameters
SinAn ExpList, containing the discrete evaluation of the forcing function \(f(\boldsymbol{x})\) at the quadrature points in its array m_phys.
variablecoeffsThe (optional) parameter containing the coefficients evaluated at the quadrature points. It is an Array of (three) arrays which stores the laplacian coefficients in the following way

\[\mathrm{variablecoeffs} = \left[ \begin{array}{c} \left[\sigma_{00}(\boldsymbol{x_i},t)\right]_i \\ \left[\sigma_{01}(\boldsymbol{x_i},t)\right]_i \\ \left[\sigma_{11}(\boldsymbol{x_i},t)\right]_i \end{array}\right] \]

If this argument is not passed to the function, the following equation will be solved:

\[\nabla^2u(\boldsymbol{x}) = f(\boldsymbol{x}),\]

timeThe time-level at which the coefficients are evaluated

Definition at line 364 of file ContField.cpp.

370  {
371  // Inner product of forcing
372  Array<OneD,NekDouble> wsp(m_ncoeffs);
373  IProductWRTBase(inarray,wsp);
374 
375  // Note -1.0 term necessary to invert forcing function to
376  // be consistent with matrix definition
377  Vmath::Neg(m_ncoeffs, wsp, 1);
378 
379  // Forcing function with weak boundary conditions
380  int i,j;
381  int bndcnt = 0;
382  Array<OneD, NekDouble> sign = m_locToGloMap->
383  GetBndCondCoeffsToLocalCoeffsSign();
384  const Array<OneD, const int> map= m_locToGloMap->
385  GetBndCondCoeffsToLocalCoeffsMap();
386 
387  // Add weak boundary conditions to forcing
388  for(i = 0; i < m_bndCondExpansions.size(); ++i)
389  {
390  if(m_bndConditions[i]->GetBoundaryConditionType() ==
392  m_bndConditions[i]->GetBoundaryConditionType() ==
394  {
395  const Array<OneD, NekDouble> bndcoeff =
397 
398  if(m_locToGloMap->GetSignChange())
399  {
400  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
401  {
402  wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
403  }
404  }
405  else
406  {
407  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
408  {
409  wsp[map[bndcnt+j]] += bndcoeff[bndcnt + j];
410  }
411  }
412  }
413 
414  bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
415  }
416 
417  StdRegions::VarCoeffMap varcoeffs;
418  varcoeffs[StdRegions::eVarCoeffD00] = variablecoeffs[0];
419  varcoeffs[StdRegions::eVarCoeffD01] = variablecoeffs[1];
420  varcoeffs[StdRegions::eVarCoeffD11] = variablecoeffs[3];
421  varcoeffs[StdRegions::eVarCoeffD22] = variablecoeffs[5];
423  factors[StdRegions::eFactorTime] = time;
424 
425  // Solve the system
426  GlobalLinSysKey key(StdRegions::eLaplacian,m_locToGloMap,factors,
427  varcoeffs);
428 
429  GlobalSolve(key,wsp,outarray,dirForcing);
430  }
#define sign(a, b)
return the sign(b)*a
Definition: Polylib.cpp:15
int GetNcoeffs(void) const
Returns the total number of local degrees of freedom .
Definition: ExpList.h:1800
const Array< OneD, const NekDouble > & GetCoeffs() const
This function returns (a reference to) the array (implemented as m_coeffs) containing all local expa...
Definition: ExpList.h:2293
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
Definition: StdRegions.hpp:272
std::map< ConstFactorType, NekDouble > ConstFactorMap
Definition: StdRegions.hpp:314
void Neg(int n, T *x, const int incx)
Negate x = -x.
Definition: Vmath.cpp:461

References Nektar::StdRegions::eFactorTime, Nektar::StdRegions::eLaplacian, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::StdRegions::eVarCoeffD00, Nektar::StdRegions::eVarCoeffD01, Nektar::StdRegions::eVarCoeffD11, Nektar::StdRegions::eVarCoeffD22, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), GlobalSolve(), IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Vmath::Neg(), and sign.

◆ LinearAdvectionEigs()

void Nektar::MultiRegions::ContField::LinearAdvectionEigs ( const NekDouble  ax,
const NekDouble  ay,
Array< OneD, NekDouble > &  Real,
Array< OneD, NekDouble > &  Imag,
Array< OneD, NekDouble > &  Evecs = NullNekDouble1DArray 
)

Compute the eigenvalues of the linear advection operator.

Constructs the GlobalLinearSysKey for the linear advection operator with the supplied parameters, and computes the eigenvectors and eigenvalues of the associated matrix.

Parameters
axAdvection parameter, x.
ayAdvection parameter, y.
RealComputed eigenvalues, real component.
ImagComputed eigenvalues, imag component.
EvecsComputed eigenvectors.

Definition at line 443 of file ContField.cpp.

448  {
449  // Solve the system
450  Array<OneD, Array<OneD, NekDouble> > vel(2);
451  Array<OneD, NekDouble> vel_x(m_npoints,ax);
452  Array<OneD, NekDouble> vel_y(m_npoints,ay);
453  vel[0] = vel_x;
454  vel[1] = vel_y;
455 
456  StdRegions::VarCoeffMap varcoeffs;
457  varcoeffs[StdRegions::eVarCoeffVelX] = Array<OneD, NekDouble>(m_npoints,ax);
458  varcoeffs[StdRegions::eVarCoeffVelY] = Array<OneD, NekDouble>(m_npoints,ay);
460  factors[StdRegions::eFactorTime] = 0.0;
462  factors,varcoeffs);
463 
465  Gmat->EigenSolve(Real,Imag,Evecs);
466  }
std::shared_ptr< DNekMat > GenGlobalMatrixFull(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
Definition: ExpList.cpp:2170
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:69

References CG_Iterations::ax, Nektar::StdRegions::eFactorTime, Nektar::StdRegions::eLinearAdvectionReaction, Nektar::StdRegions::eVarCoeffVelX, Nektar::StdRegions::eVarCoeffVelY, Nektar::MultiRegions::ExpList::GenGlobalMatrixFull(), m_locToGloMap, and Nektar::MultiRegions::ExpList::m_npoints.

◆ MultiplyByInvMassMatrix()

void Nektar::MultiRegions::ContField::MultiplyByInvMassMatrix ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)

Multiply a solution by the inverse mass matrix.

Computes the matrix vector product \( \mathbf{y} = \mathbf{M}^{-1}\mathbf{x} \).

Parameters
inarrayInput vector \(\mathbf{x}\).
outarrayOutput vector \(\mathbf{y}\).

Definition at line 306 of file ContField.cpp.

310  {
311 
312  GlobalLinSysKey key(StdRegions::eMass,m_locToGloMap);
313  GlobalSolve(key,inarray,outarray);
314  }

References Nektar::StdRegions::eMass, GlobalSolve(), and m_locToGloMap.

Referenced by v_MultiplyByInvMassMatrix(), and v_SmoothField().

◆ v_ClearGlobalLinSysManager()

void Nektar::MultiRegions::ContField::v_ClearGlobalLinSysManager ( void  )
protectedvirtual

Reset the GlobalLinSys Manager

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1085 of file ContField.cpp.

1086  {
1087  m_globalLinSysManager.ClearManager("GlobalLinSys");
1088  }

References m_globalLinSysManager.

◆ v_FillBndCondFromField() [1/2]

void Nektar::MultiRegions::ContField::v_FillBndCondFromField ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 678 of file ContField.cpp.

679  {
680  int bndcnt = 0;
681 
682  Array<OneD, NekDouble> sign = m_locToGloMap->
683  GetBndCondCoeffsToLocalCoeffsSign();
684  const Array<OneD, const int> bndmap= m_locToGloMap->
685  GetBndCondCoeffsToLocalCoeffsMap();
686 
687  for(int i = 0; i < m_bndCondExpansions.size(); ++i)
688  {
689  Array<OneD, NekDouble>& coeffs = m_bndCondExpansions[i]->UpdateCoeffs();
690 
691  if(m_locToGloMap->GetSignChange())
692  {
693  for(int j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); ++j)
694  {
695  coeffs[j] = sign[bndcnt+j] * m_coeffs[bndmap[bndcnt+j]];
696  }
697  }
698  else
699  {
700  for(int j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); ++j)
701  {
702  coeffs[j] = m_coeffs[bndmap[bndcnt+j]];
703  }
704  }
705 
706  bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
707  }
708  }

References Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::ExpList::m_coeffs, m_locToGloMap, and sign.

◆ v_FillBndCondFromField() [2/2]

void Nektar::MultiRegions::ContField::v_FillBndCondFromField ( const int  nreg)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 711 of file ContField.cpp.

712  {
713  int bndcnt = 0;
714 
715  ASSERTL1(nreg < m_bndCondExpansions.size(),
716  "nreg is out or range since this many boundary "
717  "regions to not exist");
718 
719  Array<OneD, NekDouble> sign = m_locToGloMap->
720  GetBndCondCoeffsToLocalCoeffsSign();
721  const Array<OneD, const int> bndmap= m_locToGloMap->
722  GetBndCondCoeffsToLocalCoeffsMap();
723 
724  // Now fill in all other Dirichlet coefficients.
725  Array<OneD, NekDouble>& coeffs = m_bndCondExpansions[nreg]->UpdateCoeffs();
726 
727  for(int j = 0; j < nreg; ++j)
728  {
729  bndcnt += m_bndCondExpansions[j]->GetNcoeffs();
730  }
731 
732  if(m_locToGloMap->GetSignChange())
733  {
734  for(int j = 0; j < (m_bndCondExpansions[nreg])->GetNcoeffs(); ++j)
735  {
736  coeffs[j] = sign[bndcnt + j] * m_coeffs[bndmap[bndcnt + j]];
737  }
738  }
739  else
740  {
741  for(int j = 0; j < (m_bndCondExpansions[nreg])->GetNcoeffs(); ++j)
742  {
743  coeffs[j] = m_coeffs[bndmap[bndcnt + j]];
744  }
745  }
746  }

References ASSERTL1, Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::ExpList::m_coeffs, m_locToGloMap, and sign.

◆ v_FwdTrans()

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

Template method virtual forwarder for FwdTrans().

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 609 of file ContField.cpp.

613  {
614  FwdTrans(inarray,outarray);
615  }
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Performs the global forward transformation of a function , subject to the boundary conditions specifi...
Definition: ContField.cpp:270

References FwdTrans().

◆ v_GeneralMatrixOp()

void Nektar::MultiRegions::ContField::v_GeneralMatrixOp ( const GlobalMatrixKey gkey,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Calculates the result of the multiplication of a global matrix of type specified by mkey with a vector given by inarray.

This is equivalent to the operation:

\[\boldsymbol{M\hat{u}}_g\]

where \(\boldsymbol{M}\) is the global matrix of type specified by mkey. After scattering the global array inarray to local level, this operation is evaluated locally by the function ExpList::GeneralMatrixOp. The global result is then obtained by a global assembly procedure.

Parameters
mkeyThis key uniquely defines the type matrix required for the operation.
inarrayThe vector \(\boldsymbol{\hat{u}}_g\) of size \(N_{\mathrm{dof}}\).
outarrayThe resulting vector of size \(N_{\mathrm{dof}}\).

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 953 of file ContField.cpp.

957  {
958  GeneralMatrixOp_IterPerExp(gkey,inarray,outarray);
959  }
void GeneralMatrixOp_IterPerExp(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: ExpList.cpp:1961

References Nektar::MultiRegions::ExpList::GeneralMatrixOp_IterPerExp().

◆ v_GetBndConditions()

const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & Nektar::MultiRegions::ContField::v_GetBndConditions ( void  )
protectedvirtual

Template method virtual forwarder for GetBndConditions().

Reimplemented from Nektar::MultiRegions::DisContField.

Definition at line 1076 of file ContField.cpp.

1077  {
1078  return GetBndConditions();
1079  }
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions()
Returns the boundary conditions.
Definition: ContField.h:417

References GetBndConditions().

◆ v_GlobalToLocal() [1/2]

void Nektar::MultiRegions::ContField::v_GlobalToLocal ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Scatters from the global coefficients \(\boldsymbol{\hat{u}}_g\) to the local coefficients \(\boldsymbol{\hat{u}}_l\).

This operation is evaluated as:

\begin{tabbing} \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\ \> \> Do \= $i=$ $0,N_m^e-1$ \\ \> \> \> $\boldsymbol{\hat{u}}^{e}[i] = \mbox{sign}[e][i] \cdot \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]$ \\ \> \> continue \\ \> continue \end{tabbing}

where map \([e][i]\) is the mapping array and sign \([e][i]\) is an array of similar dimensions ensuring the correct modal connectivity between the different elements (both these arrays are contained in the data member m_locToGloMap). This operation is equivalent to the scatter operation \(\boldsymbol{\hat{u}}_l=\mathcal{A}\boldsymbol{\hat{u}}_g\), where \(\mathcal{A}\) is the \(N_{\mathrm{eof}}\times N_{\mathrm{dof}}\) permutation matrix.

Note
The array m_coeffs should be filled with the global coefficients \(\boldsymbol{\hat{u}}_g\) and that the resulting local coefficients \(\boldsymbol{\hat{u}}_l\) will be stored in m_coeffs.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 773 of file ContField.cpp.

776  {
777  m_locToGloMap->GlobalToLocal(inarray, outarray);
778  }

References m_locToGloMap.

◆ v_GlobalToLocal() [2/2]

void Nektar::MultiRegions::ContField::v_GlobalToLocal ( void  )
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 781 of file ContField.cpp.

782  {
783  m_locToGloMap->GlobalToLocal(m_coeffs,m_coeffs);
784  }

References Nektar::MultiRegions::ExpList::m_coeffs, and m_locToGloMap.

◆ v_HelmSolve()

void Nektar::MultiRegions::ContField::v_HelmSolve ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const StdRegions::ConstFactorMap factors,
const StdRegions::VarCoeffMap varcoeff,
const MultiRegions::VarFactorsMap varfactors,
const Array< OneD, const NekDouble > &  dirForcing,
const bool  PhysSpaceForcing 
)
protectedvirtual

Solves the two-dimensional Helmholtz equation, subject to the boundary conditions specified.

Consider the two dimensional Helmholtz equation,

\[\nabla^2u(\boldsymbol{x})-\lambda u(\boldsymbol{x}) = f(\boldsymbol{x}),\]

supplemented with appropriate boundary conditions (which are contained in the data member m_bndCondExpansions). Applying a \(C^0\) continuous Galerkin discretisation, this equation leads to the following linear system:

\[\left(\boldsymbol{L}+\lambda\boldsymbol{M}\right) \boldsymbol{\hat{u}}_g=\boldsymbol{\hat{f}}\]

where \(\boldsymbol{L}\) and \(\boldsymbol{M}\) are the Laplacian and mass matrix respectively. This function solves the system above for the global coefficients \(\boldsymbol{\hat{u}}\) by a call to the function GlobalSolve. It is assumed #m_coeff contains an initial estimate for the solution.

The values of the function \(f(\boldsymbol{x})\) evaluated at the quadrature points \(\boldsymbol{x}_i\) should be contained in the variable m_phys of the ExpList object inarray.

Parameters
inarrayAn ExpList, containing the discrete evaluation of the forcing function \(f(\boldsymbol{x})\) at the quadrature points in its array m_phys.
factorsThe parameter \(\lambda\) of the Helmholtz equation is specified through the factors map

Reimplemented from Nektar::MultiRegions::DisContField.

Definition at line 867 of file ContField.cpp.

876  {
877  int i,j;
878 
879  //----------------------------------
880  // Setup RHS Inner product
881  //----------------------------------
882  // Inner product of forcing
883  Array<OneD,NekDouble> wsp(m_ncoeffs);
884  if(PhysSpaceForcing)
885  {
886  IProductWRTBase(inarray,wsp);
887  // Note -1.0 term necessary to invert forcing function to
888  // be consistent with matrix definition
889  Vmath::Neg(m_ncoeffs, wsp, 1);
890  }
891  else
892  {
893  Vmath::Smul(m_ncoeffs,-1.0,inarray,1,wsp,1);
894  }
895 
896  int bndcnt = 0;
897  Array<OneD, NekDouble> sign = m_locToGloMap->
898  GetBndCondCoeffsToLocalCoeffsSign();
899  const Array<OneD, const int> map= m_locToGloMap->
900  GetBndCondCoeffsToLocalCoeffsMap();
901  // Add weak boundary conditions to forcing
902  for(i = 0; i < m_bndCondExpansions.size(); ++i)
903  {
904  if(m_bndConditions[i]->GetBoundaryConditionType() ==
906  m_bndConditions[i]->GetBoundaryConditionType() ==
908  {
909  const Array<OneD, NekDouble> bndcoeff =
911 
912  if(m_locToGloMap->GetSignChange())
913  {
914  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
915  {
916  wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
917  }
918  }
919  else
920  {
921  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
922  {
923  wsp[map[bndcnt+j]] += bndcoeff[j];
924  }
925  }
926  }
927  bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
928  }
929 
930  GlobalLinSysKey key(StdRegions::eHelmholtz,m_locToGloMap,factors,
931  varcoeff,varfactors);
932 
933  GlobalSolve(key,wsp,outarray,dirForcing);
934  }
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Definition: Vmath.cpp:225

References Nektar::StdRegions::eHelmholtz, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), GlobalSolve(), IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Vmath::Neg(), sign, and Vmath::Smul().

◆ v_ImposeDirichletConditions()

void Nektar::MultiRegions::ContField::v_ImposeDirichletConditions ( Array< OneD, NekDouble > &  outarray)
protectedvirtual

Impose the Dirichlet Boundary Conditions on outarray.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 617 of file ContField.cpp.

618  {
619  int i,j;
620  int bndcnt=0;
621 
622  Array<OneD, NekDouble> sign = m_locToGloMap->
623  GetBndCondCoeffsToLocalCoeffsSign();
624  const Array<OneD, const int> map= m_locToGloMap->
625  GetBndCondCoeffsToLocalCoeffsMap();
626 
627  for(i = 0; i < m_bndCondExpansions.size(); ++i)
628  {
629  if(m_bndConditions[i]->GetBoundaryConditionType() ==
631  {
632  const Array<OneD, NekDouble> bndcoeff =
634 
635  if(m_locToGloMap->GetSignChange())
636  {
637  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
638  {
639  outarray[map[bndcnt + j]] = sign[bndcnt + j] * bndcoeff[j];
640  }
641  }
642  else
643  {
644  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
645  {
646  outarray[map[bndcnt+j]] = bndcoeff[j];
647  }
648  }
649  }
650  bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
651  }
652 
653  // communicate local Dirichlet coeffs that are just
654  // touching a dirichlet boundary on another partition
655  set<int> &ParallelDirBndSign = m_locToGloMap->GetParallelDirBndSign();
656 
657  for (auto &it : ParallelDirBndSign)
658  {
659  outarray[it] *= -1;
660  }
661 
662  m_locToGloMap->UniversalAbsMaxBnd(outarray);
663 
664  for (auto &it : ParallelDirBndSign)
665  {
666  outarray[it] *= -1;
667  }
668 
669  set<ExtraDirDof> &copyLocalDirDofs = m_locToGloMap->GetCopyLocalDirDofs();
670  for (auto &it : copyLocalDirDofs)
671  {
672  outarray[std::get<0>(it)] =
673  outarray[std::get<1>(it)]*std::get<2>(it);
674  }
675 
676  }

References Nektar::SpatialDomains::eDirichlet, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_locToGloMap, and sign.

Referenced by GlobalSolve().

◆ v_LinearAdvectionDiffusionReactionSolve()

void Nektar::MultiRegions::ContField::v_LinearAdvectionDiffusionReactionSolve ( const Array< OneD, Array< OneD, NekDouble > > &  velocity,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const NekDouble  lambda,
const Array< OneD, const NekDouble > &  dirForcing = NullNekDouble1DArray 
)
protectedvirtual

First compute the inner product of forcing function with respect to base, and then solve the system with the linear advection operator.

Parameters
velocityArray of advection velocities in physical space
inarrayForcing function.
outarrayResult.
lambdareaction coefficient
dirForcingDirichlet Forcing.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 972 of file ContField.cpp.

978  {
979  // Inner product of forcing
980  Array<OneD,NekDouble> wsp(m_ncoeffs);
981  IProductWRTBase(inarray,wsp);
982 
983  // Note -1.0 term necessary to invert forcing function to
984  // be consistent with matrix definition
985  Vmath::Neg(m_ncoeffs, wsp, 1);
986 
987  // Forcing function with weak boundary conditions
988  int i,j;
989  int bndcnt=0;
990  Array<OneD, NekDouble> sign = m_locToGloMap->
991  GetBndCondCoeffsToLocalCoeffsSign();
992  const Array<OneD, const int> map= m_locToGloMap->
993  GetBndCondCoeffsToLocalCoeffsMap();
994  // Add weak boundary conditions to forcing
995  for(i = 0; i < m_bndCondExpansions.size(); ++i)
996  {
997  if(m_bndConditions[i]->GetBoundaryConditionType() ==
999  m_bndConditions[i]->GetBoundaryConditionType() ==
1001  {
1002  const Array<OneD, NekDouble> bndcoeff =
1004 
1005  if(m_locToGloMap->GetSignChange())
1006  {
1007  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1008  {
1009  wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
1010  }
1011  }
1012  else
1013  {
1014  for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1015  {
1016  wsp[map[bndcnt+j]] += bndcoeff[bndcnt + j];
1017  }
1018  }
1019  }
1020 
1021  bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
1022  }
1023 
1024  // Solve the system
1026  factors[StdRegions::eFactorLambda] = lambda;
1027  StdRegions::VarCoeffMap varcoeffs;
1028  varcoeffs[StdRegions::eVarCoeffVelX] = velocity[0];
1029  varcoeffs[StdRegions::eVarCoeffVelY] = velocity[1];
1030  if(m_expType == e3D)
1031  {
1032  varcoeffs[StdRegions::eVarCoeffVelZ] = velocity[2];
1033  }
1034 
1035  GlobalLinSysKey key(StdRegions::eLinearAdvectionDiffusionReaction,m_locToGloMap,factors,varcoeffs);
1036 
1037  GlobalSolve(key,wsp,outarray,dirForcing);
1038  }
ExpansionType m_expType
Exapnsion type.
Definition: ExpList.h:1212

References Nektar::MultiRegions::e3D, Nektar::StdRegions::eFactorLambda, Nektar::StdRegions::eLinearAdvectionDiffusionReaction, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::StdRegions::eVarCoeffVelX, Nektar::StdRegions::eVarCoeffVelY, Nektar::StdRegions::eVarCoeffVelZ, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), GlobalSolve(), IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, Nektar::MultiRegions::ExpList::m_expType, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Vmath::Neg(), and sign.

◆ v_LinearAdvectionReactionSolve()

void Nektar::MultiRegions::ContField::v_LinearAdvectionReactionSolve ( const Array< OneD, Array< OneD, NekDouble > > &  velocity,
const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const NekDouble  lambda,
const Array< OneD, const NekDouble > &  dirForcing = NullNekDouble1DArray 
)
protectedvirtual

First compute the inner product of forcing function with respect to base, and then solve the system with the linear advection operator.

Parameters
velocityArray of advection velocities in physical space
inarrayForcing function.
outarrayResult.
lambdareaction coefficient
dirForcingDirichlet Forcing.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1049 of file ContField.cpp.

1055  {
1056  // Inner product of forcing
1057  Array<OneD,NekDouble> wsp(m_ncoeffs);
1058  IProductWRTBase(inarray,wsp);
1059 
1060  // Solve the system
1062  factors[StdRegions::eFactorLambda] = lambda;
1063  StdRegions::VarCoeffMap varcoeffs;
1064  varcoeffs[StdRegions::eVarCoeffVelX] = velocity[0];
1065  varcoeffs[StdRegions::eVarCoeffVelY] = velocity[1];
1066  GlobalLinSysKey key(StdRegions::eLinearAdvectionReaction,m_locToGloMap,factors,varcoeffs);
1067 
1068  GlobalSolve(key,wsp,outarray,dirForcing);
1069  }

References Nektar::StdRegions::eFactorLambda, Nektar::StdRegions::eLinearAdvectionReaction, Nektar::StdRegions::eVarCoeffVelX, Nektar::StdRegions::eVarCoeffVelY, GlobalSolve(), IProductWRTBase(), m_locToGloMap, and Nektar::MultiRegions::ExpList::m_ncoeffs.

◆ v_LocalToGlobal() [1/2]

void Nektar::MultiRegions::ContField::v_LocalToGlobal ( bool  useComm)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 824 of file ContField.cpp.

826  {
827  m_locToGloMap->LocalToGlobal(m_coeffs,m_coeffs, useComm);
828  }

References Nektar::MultiRegions::ExpList::m_coeffs, and m_locToGloMap.

◆ v_LocalToGlobal() [2/2]

void Nektar::MultiRegions::ContField::v_LocalToGlobal ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
bool  useComm 
)
protectedvirtual

Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).

This operation is evaluated as:

\begin{tabbing} \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\ \> \> Do \= $i=$ $0,N_m^e-1$ \\ \> \> \> $\boldsymbol{\hat{u}}_g[\mbox{map}[e][i]] = \mbox{sign}[e][i] \cdot \boldsymbol{\hat{u}}^{e}[i]$\\ \> \> continue\\ \> continue \end{tabbing}

where map \([e][i]\) is the mapping array and sign \([e][i]\) is an array of similar dimensions ensuring the correct modal connectivity between the different elements (both these arrays are contained in the data member m_locToGloMap). This operation is equivalent to the gather operation \(\boldsymbol{\hat{u}}_g=\mathcal{A}^{-1}\boldsymbol{\hat{u}}_l\), where \(\mathcal{A}\) is the \(N_{\mathrm{eof}}\times N_{\mathrm{dof}}\) permutation matrix.

Note
The array m_coeffs should be filled with the local coefficients \(\boldsymbol{\hat{u}}_l\) and that the resulting global coefficients \(\boldsymbol{\hat{u}}_g\) will be stored in m_coeffs. Also if useComm is set to false then no communication call will be made to check if all values are consistent over processors

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 815 of file ContField.cpp.

819  {
820  m_locToGloMap->LocalToGlobal(inarray, outarray, useComm);
821  }

References m_locToGloMap.

◆ v_MultiplyByInvMassMatrix()

void Nektar::MultiRegions::ContField::v_MultiplyByInvMassMatrix ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Template method virtual forwarder for MultiplyByInvMassMatrix().

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 833 of file ContField.cpp.

836  {
837  MultiplyByInvMassMatrix(inarray,outarray);
838  }
void MultiplyByInvMassMatrix(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Multiply a solution by the inverse mass matrix.
Definition: ContField.cpp:306

References MultiplyByInvMassMatrix().

◆ v_SmoothField()

void Nektar::MultiRegions::ContField::v_SmoothField ( Array< OneD, NekDouble > &  field)
protectedvirtual

Template method virtual forwarded for SmoothField().

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 287 of file ContField.cpp.

288  {
289  int Ncoeffs = m_locToGloMap->GetNumLocalCoeffs();
290  Array<OneD,NekDouble> tmp1(Ncoeffs);
291  Array<OneD,NekDouble> tmp2(Ncoeffs);
292 
293  IProductWRTBase(field,tmp1);
294  MultiplyByInvMassMatrix(tmp1,tmp2);
295  BwdTrans(tmp2,field);
296  }
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Performs the backward transformation of the spectral/hp element expansion.
Definition: ContField.h:403

References BwdTrans(), IProductWRTBase(), m_locToGloMap, and MultiplyByInvMassMatrix().

Member Data Documentation

◆ m_globalLinSysManager

LibUtilities::NekManager<GlobalLinSysKey, GlobalLinSys> Nektar::MultiRegions::ContField::m_globalLinSysManager
protected

A manager which collects all the global linear systems being assembled, such that they should be constructed only once.

Definition at line 177 of file ContField.h.

Referenced by GetGlobalLinSys(), and v_ClearGlobalLinSysManager().

◆ m_globalMat

GlobalMatrixMapShPtr Nektar::MultiRegions::ContField::m_globalMat
protected

(A shared pointer to) a list which collects all the global matrices being assembled, such that they should be constructed only once.

Definition at line 172 of file ContField.h.

Referenced by GetGlobalMatrix(), and GetGlobalMatrixNnz().

◆ m_locToGloMap

AssemblyMapCGSharedPtr Nektar::MultiRegions::ContField::m_locToGloMap
protected