Nektar++
Loading...
Searching...
No Matches
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.
 
 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.
 
 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.
 
 ContField (const ContField &In, bool DeclareCoeffPhysArrays=true)
 The copy constructor.
 
 ContField (const LibUtilities::SessionReaderSharedPtr &pSession, const ExpList &In)
 Copy constructor.
 
 ~ContField () override
 The default destructor.
 
void Assemble ()
 Assembles the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).
 
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\).
 
const AssemblyMapCGSharedPtrGetLocalToGlobalMap () const
 Returns the map from local to global level.
 
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.
 
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.
 
int GetGlobalMatrixNnz (const GlobalMatrixKey &gkey)
 
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.
 
void InitGJPData ()
 
const GJPStabilisationSharedPtr GetGJPData ()
 
void SetGJPData (const GJPStabilisationSharedPtr &GJPData)
 
- Public Member Functions inherited from Nektar::MultiRegions::DisContField
 DisContField ()
 Default constructor.
 
 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, const std::string bcvariable="NotSet")
 Constructs a 1D discontinuous field based on a mesh and boundary conditions.
 
 DisContField (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable, const LibUtilities::CommSharedPtr &comm, bool SetToOneSpaceDimensions=false, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor for a DisContField from a List of subdomains New Constructor for arterial network.
 
 DisContField (const DisContField &In, const bool DeclareCoeffPhysArrays=true)
 Constructs a 1D discontinuous field based on an existing field.
 
 DisContField (const DisContField &In, const SpatialDomains::MeshGraphSharedPtr &graph, const std::string &variable, const bool SetUpJustDG=true, 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.
 
 ~DisContField () override
 Destructor.
 
GlobalLinSysSharedPtr GetGlobalBndLinSys (const GlobalLinSysKey &mkey)
 For a given key, returns the associated global linear system.
 
bool SameTypeOfBoundaryConditions (const DisContField &In)
 Check to see if expansion has the same BCs as In.
 
std::vector< bool > & GetNegatedFluxNormal (void)
 
NekDouble L2_DGDeriv (const int dir, const Array< OneD, const NekDouble > &coeffs, 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} \).
 
void EvaluateHDGPostProcessing (const Array< OneD, const NekDouble > &coeffs, Array< OneD, NekDouble > &outarray)
 Evaluate HDG post-processing to increase polynomial order of solution.
 
void GetLocTraceToTraceMap (LocTraceToTraceMapSharedPtr &LocTraceToTraceMap)
 
void GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > &bndCond, const Array< OneD, const ExpListSharedPtr > &BndCondExp)
 This method extracts the "forward" and "backward" trace data from the array field and puts the data into output vectors Fwd and Bwd.
 
unsigned GetTraceElmtId (const unsigned elmtid, const unsigned traceid)
 
ExpListSharedPtrGetLocElmtTrace ()
 
bool IsLeftAdjacentTrace (const int n, const int e)
 This routine determines if an element is to the "left" of the adjacent trace, which arises from the idea there is a local normal direction between two elements (i.e. on the trace) and one elements would then be the left.
 
- Public Member Functions inherited from Nektar::MultiRegions::ExpList
 ExpList (const ExpansionType Type=eNoType)
 The default constructor using a type.
 
 ExpList (const ExpList &in, const bool DeclareCoeffPhysArrays=true)
 The copy constructor.
 
 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.
 
 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.
 
 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.
 
 ExpList (SpatialDomains::PointGeom *geom)
 Specialised constructors for 0D Expansions Wrapper around LocalRegion::PointExp - used in PrePacing.cpp.
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, const ExpListSharedPtr > &bndConstraint, const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > &bndCond, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph, const LibUtilities::CommSharedPtr &comm, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate expansions for the trace space expansions used in DisContField.
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph, const bool DeclareCoeffPhysArrays, const std::string variable, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Generate an trace ExpList from a meshgraph graph and session file.
 
 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.
 
virtual ~ExpList ()
 The default destructor.
 
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\).
 
int GetNcoeffs (const int eid) const
 Returns the total number of local degrees of freedom for element eid.
 
ExpansionType GetExpType (void)
 Returns the type of the expansion.
 
void SetExpType (ExpansionType Type)
 Returns the type of the expansion.
 
int EvalBasisNumModesMax (void) const
 Evaulates the maximum number of modes in the elemental basis order over all elements.
 
const Array< OneD, int > EvalBasisNumModesMaxPerExp (void) const
 Returns the vector of the number of modes in the elemental basis order over all elements.
 
int GetTotPoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\).
 
int GetTotPoints (const int eid) const
 Returns the total number of quadrature points for eid's element \(=Q_{\mathrm{tot}}\).
 
int GetNpoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\).
 
int Get1DScaledTotPoints (const NekDouble scale) const
 Returns the total number of qudature points scaled by the factor scale on each 1D direction.
 
void SetWaveSpace (const bool wavespace)
 Sets the wave space to the one of the possible configuration true or false.
 
void SetModifiedBasis (const bool modbasis)
 Set Modified Basis for the stability analysis.
 
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.
 
void SetPhys (int i, NekDouble val)
 Set the i th value of m_phys to value val.
 
void SetPhys (const Array< OneD, const NekDouble > &inarray)
 Fills the array m_phys.
 
void SetPhysArray (Array< OneD, NekDouble > &inarray)
 Sets the array m_phys.
 
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.
 
bool GetPhysState (void) const
 This function indicates whether the array of physical values \(\boldsymbol{u}_l\) (implemented as m_phys) is filled or not.
 
void MultiplyByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 multiply the metric jacobi and quadrature weights
 
void DivideByQuadratureMetric (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Divided by the metric jacobi and quadrature weights.
 
void IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to all local expansion modes \(\phi_n^e(\boldsymbol{x})\).
 
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.
 
void IProductWRTDirectionalDerivBase (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
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})\).
 
void FwdTransLocalElmt (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the forward transformation of a function \(u(\boldsymbol{x})\) onto the global spectral/hp expansion.
 
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.
 
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.
 
GlobalLinSysKey HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const StdRegions::VarFactorsMap &varfactors=StdRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve helmholtz problem.
 
GlobalLinSysKey LinearAdvectionDiffusionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const StdRegions::VarFactorsMap &varfactors=StdRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve Advection Diffusion Reaction.
 
GlobalLinSysKey LinearAdvectionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const StdRegions::VarFactorsMap &varfactors=StdRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve Advection Diffusion Reaction.
 
void FwdTransBndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the backward transformation of the global spectral/hp element expansion.
 
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\).
 
void GetCoords (const int eid, Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
void HomogeneousFwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
void DealiasedProd (const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
void DealiasedDotProd (const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
void GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
void ApplyGeomInfo ()
 Apply geometry information to each expansion.
 
void Reset ()
 Reset geometry information and reset matrices.
 
void ResetMatrices ()
 Reset matrices.
 
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.
 
void SetCoeff (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val.
 
void SetCoeffs (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val.
 
void SetCoeffsArray (Array< OneD, NekDouble > &inarray)
 Set the m_coeffs array to inarray.
 
int GetShapeDimension ()
 This function returns the dimension of the shape of the element eid.
 
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.
 
void ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 Impose Dirichlet Boundary Conditions onto Array.
 
void ImposeNeumannConditions (Array< OneD, NekDouble > &outarray)
 Add Neumann Boundary Condition forcing to Array.
 
void ImposeRobinConditions (Array< OneD, NekDouble > &outarray)
 Add Robin Boundary Condition forcing to Array.
 
void FillBndCondFromField (const Array< OneD, NekDouble > coeffs)
 Fill Bnd Condition expansion from the values stored in expansion.
 
void FillBndCondFromField (const int nreg, const Array< OneD, NekDouble > coeffs)
 Fill Bnd Condition expansion in nreg from the values stored in expansion.
 
void AvgAssemble (bool useComm=true)
 Assemble the average global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\) .
 
void AvgAssemble (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm=true)
 
void LocalToGlobal (bool useComm=true)
 Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).
 
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\).
 
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.
 
NekDouble GetCoeffs (int i)
 Get the i th value (coefficient) of m_coeffs.
 
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.
 
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.
 
NekDouble L2 (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 This function calculates the \(L_\infty\) error of the global This function calculates the \(L_2\) error with respect to soln of the global spectral/hp element approximation.
 
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.
 
NekDouble Integral ()
 Calculates the \(H^1\) error of the global spectral/hp element approximation.
 
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.
 
void SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 This function sets the Spectral Vanishing Viscosity in homogeneous1D expansion.
 
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.
 
LibUtilities::TranspositionSharedPtr GetTransposition (void)
 This function returns the transposition class associated with the homogeneous expansion.
 
NekDouble GetHomoLen (void)
 This function returns the Width of homogeneous direction associated with the homogeneous expansion.
 
void SetHomoLen (const NekDouble lhom)
 This function sets the Width of homogeneous direction associated with the homogeneous expansion.
 
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.
 
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.
 
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.
 
int GetExpSize (void)
 This function returns the number of elements in the expansion.
 
size_t GetNumElmts (void)
 This function returns the number of elements in the expansion which may be different for a homogeoenous extended expansionp.
 
const std::shared_ptr< LocalRegions::ExpansionVectorGetExp () const
 This function returns the vector of elements in the expansion.
 
LocalRegions::ExpansionSharedPtrGetExp (int n) const
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element.
 
LocalRegions::ExpansionSharedPtrGetExpFromGeomId (int n)
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element given a global geometry ID.
 
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.
 
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.
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoords, Array< OneD, NekDouble > &locCoords, NekDouble tol=0.0, bool returnNearestElmt=false, int cachedId=-1, NekDouble maxDistance=1e6)
 
NekDouble PhysEvaluate (const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &phys)
 
int GetCoeff_Offset (int n) const
 Get the start offset position for a local contiguous list of coeffs correspoinding to element n.
 
int GetPhys_Offset (int n) const
 Get the start offset position for a local contiguous list of quadrature points in a full array correspoinding to element n.
 
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.
 
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.
 
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.
 
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.
 
void SetBndCondBwdWeight (const int index, const NekDouble value)
 Set the weight value for boundary conditions.
 
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)
 
std::shared_ptr< InterfaceMapDG > & GetInterfaceMap (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.
 
void GetBwdWeight (Array< OneD, NekDouble > &weightAver, Array< OneD, NekDouble > &weightJump)
 Get the weight value for boundary conditions for boundary average and jump calculations.
 
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.
 
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.
 
void PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 Copy and fill the Periodic boundaries.
 
void PeriodicBwdRot (Array< OneD, Array< OneD, NekDouble > > &Bwd)
 Rotate Bwd trace for rotational periodicity boundaries when the flow is perpendicular to the rotation axis.
 
void PeriodicDeriveBwdRot (TensorOfArray3D< NekDouble > &Bwd)
 Rotate Bwd trace derivative for rotational periodicity boundaries when the flow is perpendicular to the rotation axis.
 
void RotLocalBwdTrace (Array< OneD, Array< OneD, NekDouble > > &Bwd)
 Rotate local Bwd trace across a rotational interface when the flow is perpendicular to the rotation axis.
 
void RotLocalBwdDeriveTrace (TensorOfArray3D< NekDouble > &Bwd)
 Rotate local Bwd trace derivatives across a rotational interface when the flow is perpendicular to the rotation axis.
 
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, bool gridVelocity=false)
 
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 SetBCsToHomogeneous (void)
 Set boundary conditions to be homogeneous.
 
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.
 
void SetUpPhysNormals ()
 
void GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
virtual void GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays=true)
 
void ExtractElmtToBndPhys (int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
void ExtractPhysToBndElmt (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
void ExtractPhysToBnd (int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
void GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
void GeneralGetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef, int NumHomoDir=0, Array< OneD, LibUtilities::BasisSharedPtr > &HomoBasis=LibUtilities::NullBasisSharedPtr1DArray, std::vector< NekDouble > &HomoLen=LibUtilities::NullNekDoubleVector, bool homoStrips=false, std::vector< unsigned int > &HomoSIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoZIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoYIDs=LibUtilities::NullUnsignedIntVector)
 
std::map< int, RobinBCInfoSharedPtrGetRobinBCInfo ()
 
void GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces=NullPeriodicMap)
 
std::vector< LibUtilities::FieldDefinitionsSharedPtrGetFieldDefinitions ()
 
void GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 Append the element data listed in elements fielddef->m_ElementIDs onto fielddata.
 
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.
 
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.
 
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.
 
void ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane=std::unordered_map< int, int >())
 
void ExtractCoeffsFromFile (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, Array< OneD, NekDouble > &coeffs)
 
void GenerateElementVector (const int ElementID, const NekDouble scalar1, const NekDouble scalar2, Array< OneD, NekDouble > &outarray)
 
std::shared_ptr< ExpListGetSharedThisPtr ()
 Returns a shared pointer to the current object.
 
std::shared_ptr< LibUtilities::SessionReaderGetSession () const
 Returns the session object.
 
std::shared_ptr< LibUtilities::CommGetComm () const
 Returns the comm object.
 
SpatialDomains::MeshGraphSharedPtr GetGraph ()
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
std::shared_ptr< ExpList > & GetPlane (int n)
 
const std::shared_ptr< GJPStabilisationGetGJPData (void)
 
void CreateCollections (Collections::ImplementationType ImpType=Collections::eNoImpType)
 
void ClearGlobalLinSysManager (void)
 
int GetPoolCount (std::string)
 
void UnsetGlobalLinSys (GlobalLinSysKey, bool)
 
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > & GetGlobalLinSysManager (void)
 
const Array< OneD, const std::pair< int, int > > & GetCoeffsToElmt () const
 Get m_coeffs to elemental value map.
 
void AddTraceJacToElmtJac (const Array< OneD, const DNekMatSharedPtr > &FwdMat, const Array< OneD, const DNekMatSharedPtr > &BwdMat, Array< OneD, DNekMatSharedPtr > &fieldMat)
 
void GetMatIpwrtDeriveBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, const int nDirctn, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetMatIpwrtDeriveBase (const TensorOfArray3D< NekDouble > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void GetDiagMatIpwrtBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, DNekMatSharedPtr > &mtxPerVar)
 
void AddTraceIntegralToOffDiag (const Array< OneD, const NekDouble > &FwdFlux, const Array< OneD, const NekDouble > &BwdFlux, Array< OneD, NekDouble > &outarray)
 
void AddRightIPTPhysDerivBase (const int dir, const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
void AddRightIPTBaseMatrix (const Array< OneD, const DNekMatSharedPtr > ElmtJacQuad, Array< OneD, DNekMatSharedPtr > ElmtJacCoef)
 
const LocTraceToTraceMapSharedPtrGetLocTraceToTraceMap () const
 
std::vector< bool > & GetLeftAdjacentTraces (void)
 
const std::unordered_map< int, int > & GetElmtToExpId (void)
 This function returns the map of index inside m_exp to geom id.
 
int GetElmtToExpId (int elmtId)
 This function returns the index inside m_exp for a given geom id.
 
void MultiplyByBlockMatrix (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Transpose=false)
 
const Collections::CollectionVectorGetCollections () const
 This function returns collections.
 
int Get_coll_coeff_offset (int n) const
 
int Get_coll_phys_offset (int n) const
 
const Array< OneD, const Array< OneD, NekDouble > > & GetGridVelocity ()
 

Protected Member Functions

GlobalMatrixSharedPtr GetGlobalMatrix (const GlobalMatrixKey &mkey)
 Returns the global matrix specified by mkey.
 
GlobalLinSysSharedPtr GetGlobalLinSys (const GlobalLinSysKey &mkey)
 Returns the linear system specified by the key mkey.
 
GlobalLinSysSharedPtr GenGlobalLinSys (const GlobalLinSysKey &mkey)
 
void v_ImposeDirichletConditions (Array< OneD, NekDouble > &outarray) override
 Impose the Dirichlet Boundary Conditions on outarray.
 
void v_ImposeNeumannConditions (Array< OneD, NekDouble > &outarray) override
 Add Neumann Boundary Conditions forcing to outarray.
 
void v_ImposeRobinConditions (Array< OneD, NekDouble > &outarray) override
 Add Robin Boundary Conditions forcing to outarray.
 
void v_FillBndCondFromField (const Array< OneD, NekDouble > coeffs) override
 
void v_FillBndCondFromField (const int nreg, const Array< OneD, NekDouble > coeffs) override
 
void v_AvgAssemble (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm) override
 Assembly and average of the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).
 
void v_AvgAssemble (bool useComm) override
 
void v_LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm) override
 Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\).
 
void v_LocalToGlobal (bool useComm) override
 
void v_GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 Scatters from the global coefficients \(\boldsymbol{\hat{u}}_g\) to the local coefficients \(\boldsymbol{\hat{u}}_l\).
 
void v_GlobalToLocal (void) override
 
void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 Template method virtual forwarder for FwdTrans().
 
void v_SmoothField (Array< OneD, NekDouble > &field) override
 Template method virtual forwarded for SmoothField().
 
void v_MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
 Template method virtual forwarder for MultiplyByInvMassMatrix().
 
GlobalLinSysKey v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const StdRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing) override
 Solves the two-dimensional Helmholtz equation, subject to the boundary conditions specified.
 
GlobalLinSysKey v_LinearAdvectionDiffusionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const StdRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing) override
 
GlobalLinSysKey v_LinearAdvectionReactionSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const StdRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing) override
 
const Array< OneD, const MultiRegions::ExpListSharedPtr > & v_GetBndCondExpansions () override
 Returns the boundary conditions expansion.
 
const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > & v_GetBndConditions () override
 Template method virtual forwarder for GetBndConditions().
 
void v_ClearGlobalLinSysManager (void) override
 
int v_GetPoolCount (std::string) override
 
void v_UnsetGlobalLinSys (GlobalLinSysKey, bool) override
 
const GJPStabilisationSharedPtr v_GetGJPData (void) override
 
- 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, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Discretises the boundary conditions.
 
void GenerateBoundaryConditionExpansion (const Array< OneD, const MultiRegions::ExpListSharedPtr > &In, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Make copy of boundary conditions.
 
void FindPeriodicTraces (const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 Generate a associative map of periodic vertices in a mesh.
 
void SetUpDG (const std::string="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Set up all DG member variables and maps.
 
ExpListSharedPtrv_GetTrace () override
 
AssemblyMapDGSharedPtrv_GetTraceMap (void) override
 
InterfaceMapDGSharedPtrv_GetInterfaceMap (void) override
 
const LocTraceToTraceMapSharedPtrv_GetLocTraceToTraceMap (void) const override
 
std::vector< bool > & v_GetLeftAdjacentTraces (void) override
 
void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray) override
 Add trace contributions into elemental coefficient spaces.
 
void v_AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray) override
 Add trace contributions into elemental coefficient spaces.
 
void v_AddTraceQuadPhysToField (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &field) override
 
void v_ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool gridVelocity=false) override
 This method extracts the trace (verts in 1D) from the field inarray and puts the values in outarray.
 
void v_ExtractTracePhys (Array< OneD, NekDouble > &outarray) override
 
void v_GetLocTraceFromTracePts (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &locTraceFwd, Array< OneD, NekDouble > &locTraceBwd) override
 
void GenerateFieldBnd1D (SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 
std::map< int, RobinBCInfoSharedPtrv_GetRobinBCInfo () override
 
const Array< OneD, const MultiRegions::ExpListSharedPtr > & v_GetBndCondExpansions () override
 
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & v_GetBndConditions () override
 
MultiRegions::ExpListSharedPtrv_UpdateBndCondExpansion (int i) override
 
Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions () override
 
void v_GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &TraceID) override
 
void v_GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays) override
 
void v_Reset () override
 Reset this field, so that geometry information can be updated.
 
void v_EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble) override
 Evaluate all boundary conditions at a given time..
 
void v_SetBCsToHomogeneous (void) override
 Set boundary conditions to be homogeneous.
 
GlobalLinSysKey v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const StdRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing) override
 Solve the Helmholtz equation.
 
void v_PeriodicBwdCopy (const Array< OneD, const NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd) override
 
void v_PeriodicBwdRot (Array< OneD, Array< OneD, NekDouble > > &Bwd) override
 
void v_PeriodicDeriveBwdRot (TensorOfArray3D< NekDouble > &Bwd) override
 
void v_RotLocalBwdTrace (Array< OneD, Array< OneD, NekDouble > > &Bwd) override
 
void v_RotLocalBwdDeriveTrace (TensorOfArray3D< NekDouble > &Bwd) override
 
void v_FillBwdWithBwdWeight (Array< OneD, NekDouble > &weightave, Array< OneD, NekDouble > &weightjmp) override
 Fill the weight with m_bndCondBndWeight.
 
void v_GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd) override
 
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) override
 
void v_FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, bool PutFwdInBwdOnBCs) override
 
void FillBwdWithBoundCond (const Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd, const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > &bndConditions, const Array< OneD, const ExpListSharedPtr > &BndCondExpansions, bool PutFwdInBwdOnBCs)
 
const Array< OneD, const NekDouble > & v_GetBndCondBwdWeight () override
 
void v_SetBndCondBwdWeight (const int index, const NekDouble value) override
 
void v_GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces) override
 Obtain a copy of the periodic edges and vertices for this field.
 
void v_AddTraceIntegralToOffDiag (const Array< OneD, const NekDouble > &FwdFlux, const Array< OneD, const NekDouble > &BwdFlux, Array< OneD, NekDouble > &outarray) override
 
void Rotate (Array< OneD, Array< OneD, NekDouble > > &Bwd, const int dir, const NekDouble angle, const int offset, const int npts)
 Rotate the slice [offset, offset + npts) of the 3D vector field in Bwd around the axis 'dir' by 'angle'.
 
void DeriveRotate (TensorOfArray3D< NekDouble > &Bwd, const int dir, const NekDouble angle, const int offset, const int npts)
 Rotate the slice [offset, offset + npts) of the 3D vector field in Bwd around the axis 'dir' by 'angle'.
 
- 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.
 
const DNekScalBlkMatSharedPtrGetBlockMatrix (const GlobalMatrixKey &gkey)
 
std::shared_ptr< GlobalMatrixGenGlobalMatrix (const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 Generates a global matrix from the given key and map.
 
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.
 
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.
 
virtual size_t 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.
 
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_FwdTransLocalElmt (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTransBndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
virtual void v_GetCoords (const int eid, Array< OneD, NekDouble > &xc0, Array< OneD, NekDouble > &xc1, Array< OneD, NekDouble > &xc2)
 
virtual void v_PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
 
virtual void v_PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_Curl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_HomogeneousFwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_HomogeneousBwdTrans (const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
 
virtual void v_DealiasedProd (const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray)
 
virtual void v_DealiasedDotProd (const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
virtual void v_NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
virtual void v_SetUpPhysNormals ()
 
virtual void v_ExtractElmtToBndPhys (const int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
virtual void v_ExtractPhysToBndElmt (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
virtual void v_ExtractPhysToBnd (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
virtual void v_GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
virtual std::vector< LibUtilities::FieldDefinitionsSharedPtrv_GetFieldDefinitions (void)
 
virtual void v_GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 
virtual void v_ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane)
 
virtual void v_ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 
virtual void v_WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
virtual void v_WriteTecplotZone (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotField (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotConnectivity (std::ostream &outfile, int expansion)
 
virtual void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var)
 
virtual void v_WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip)
 
virtual NekDouble v_L2 (const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 
virtual NekDouble v_Integral (const Array< OneD, const NekDouble > &inarray)
 
virtual NekDouble v_VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
virtual Array< OneD, const NekDoublev_HomogeneousEnergy (void)
 
virtual LibUtilities::TranspositionSharedPtr v_GetTransposition (void)
 
virtual NekDouble v_GetHomoLen (void)
 
virtual void v_SetHomoLen (const NekDouble lhom)
 
virtual Array< OneD, const unsigned int > v_GetZIDs (void)
 
virtual Array< OneD, const unsigned int > v_GetYIDs (void)
 
virtual void v_PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > & v_GetGlobalLinSysManager (void)
 
void ExtractFileBCs (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, const std::shared_ptr< ExpList > locExpList)
 
virtual LibUtilities::BasisSharedPtr v_GetHomogeneousBasis (void)
 
virtual void v_SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 
virtual std::shared_ptr< ExpList > & v_GetPlane (int n)
 

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.
 
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.
 
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSysm_globalLinSysManager
 A manager which collects all the global linear systems being assembled, such that they should be constructed only once.
 
GJPStabilisationSharedPtr m_GJPData
 Data for Gradient Jump Penalisation (GJP) stabilisaiton.
 
- Protected Attributes inherited from Nektar::MultiRegions::DisContField
Array< OneD, SpatialDomains::BoundaryConditionShPtrm_bndConditions
 An array which contains the information about the boundary condition structure definition on the different boundary regions.
 
Array< OneD, MultiRegions::ExpListSharedPtrm_bndCondExpansions
 An object which contains the discretised boundary conditions.
 
Array< OneD, NekDoublem_bndCondBndWeight
 
InterfaceMapDGSharedPtr m_interfaceMap
 Interfaces mapping for trace space.
 
GlobalLinSysMapShPtr m_globalBndMat
 Global boundary matrix.
 
ExpListSharedPtr m_trace
 Trace space storage for points between elements.
 
MultiRegions::ExpListSharedPtr m_locElmtTrace
 Local Elemental trace expansions.
 
AssemblyMapDGSharedPtr m_traceMap
 Local to global DG mapping for trace space.
 
std::set< int > m_boundaryTraces
 A set storing the global IDs of any boundary Verts.
 
PeriodicMap m_periodicVerts
 A map which identifies groups of periodic vertices.
 
PeriodicMap m_periodicEdges
 A map which identifies pairs of periodic edges.
 
PeriodicMap m_periodicFaces
 A map which identifies pairs of periodic faces.
 
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.
 
std::vector< int > m_periodicBwdCopy
 
std::vector< bool > m_leftAdjacentTraces
 
LocTraceToTraceMapSharedPtr m_locTraceToTraceMap
 
- Protected Attributes inherited from Nektar::MultiRegions::ExpList
SpatialDomains::EntityHolder1D m_holder
 Pointer holder for PulseWaveSolver.
 
ExpansionType m_expType
 Expansion type.
 
LibUtilities::CommSharedPtr m_comm
 Communicator.
 
LibUtilities::SessionReaderSharedPtr m_session
 Session.
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Mesh associated with this expansion list.
 
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\).
 
int m_npoints
 
Array< OneD, NekDoublem_coeffs
 Concatenation of all local expansion coefficients.
 
Array< OneD, NekDoublem_phys
 The global expansion evaluated at the quadrature points.
 
bool m_physState
 The state of the array m_phys.
 
std::shared_ptr< LocalRegions::ExpansionVectorm_exp
 The list of local expansions.
 
Collections::CollectionVector m_collections
 
std::vector< bool > m_collectionsDoInit
 Vector of bools to act as an initialise on first call flag.
 
std::vector< int > m_coll_coeff_offset
 Offset of elemental data into the array m_coeffs.
 
std::vector< int > m_coll_phys_offset
 Offset of elemental data into the array m_phys.
 
Array< OneD, int > m_coeff_offset
 Offset of elemental data into the array m_coeffs.
 
Array< OneD, int > m_phys_offset
 Offset of elemental data into the array m_phys.
 
Array< OneD, std::pair< int, int > > m_coeffsToElmt
 m_coeffs to elemental value map
 
BlockMatrixMapShPtr m_blockMat
 
bool m_WaveSpace
 
std::unordered_map< int, int > m_elmtToExpId
 Mapping from geometry ID of element to index inside m_exp.
 
Array< OneD, Array< OneD, NekDouble > > m_gridVelocity
 Grid velocity at quadrature points.
 

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 54 of file ContField.h.

Constructor & Destructor Documentation

◆ ContField() [1/5]

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

The default constructor.

Definition at line 87 of file ContField.cpp.

90 std::bind(&ContField::GenGlobalLinSys, this, std::placeholders::_1),
91 std::string("GlobalLinSys")),
92 m_GJPData(nullptr)
93{
94}
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:163
GlobalLinSysSharedPtr GenGlobalLinSys(const GlobalLinSysKey &mkey)
AssemblyMapCGSharedPtr m_locToGloMap
(A shared pointer to) the object which contains all the required information for the transformation f...
Definition ContField.h:152
GlobalMatrixMapShPtr m_globalMat
(A shared pointer to) a list which collects all the global matrices being assembled,...
Definition ContField.h:157
GJPStabilisationSharedPtr m_GJPData
Data for Gradient Jump Penalisation (GJP) stabilisaiton.
Definition ContField.h:166
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 117 of file ContField.cpp.

123 : DisContField(pSession, graph, variable, false, DeclareCoeffPhysArrays,
124 ImpType),
127 std::bind(&ContField::GenGlobalLinSys, this, std::placeholders::_1),
128 std::string("GlobalLinSys"))
129{
132 CheckIfSingularSystem, variable, m_periodicVerts, m_periodicEdges,
134
135 if (m_session->DefinesCmdLineArgument("verbose"))
136 {
137 m_locToGloMap->PrintStats(std::cout, variable);
138 }
139}
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.
PeriodicMap m_periodicFaces
A map which identifies pairs of periodic faces.
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition structure definition on the diff...
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
An object which contains the discretised boundary conditions.
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
Definition ExpList.h:1129
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition ExpList.h:1124

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 164 of file ContField.cpp.

168 : DisContField(In, graph, variable, false, DeclareCoeffPhysArrays),
171 std::bind(&ContField::GenGlobalLinSys, this, std::placeholders::_1),
172 std::string("GlobalLinSys")),
173 m_GJPData(In.m_GJPData)
174{
175 if (!SameTypeOfBoundaryConditions(In) || CheckIfSingularSystem)
176 {
179 CheckIfSingularSystem, variable, m_periodicVerts, m_periodicEdges,
181
182 if (m_session->DefinesCmdLineArgument("verbose"))
183 {
184 m_locToGloMap->PrintStats(std::cout, variable);
185 }
186 }
187 else
188 {
189 m_locToGloMap = In.m_locToGloMap;
190 }
191}
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 199 of file ContField.cpp.

200 : DisContField(In, DeclareCoeffPhysArrays), m_locToGloMap(In.m_locToGloMap),
201 m_globalMat(In.m_globalMat),
202 m_globalLinSysManager(In.m_globalLinSysManager), m_GJPData(In.m_GJPData)
203{
204}

◆ 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 212 of file ContField.cpp.

216 std::bind(&ContField::GenGlobalLinSys, this, std::placeholders::_1),
217 std::string("GlobalLinSys"))
218{
220 pSession, m_ncoeffs, In);
221}

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

◆ ~ContField()

Nektar::MultiRegions::ContField::~ContField ( )
override

The default destructor.

Definition at line 226 of file ContField.cpp.

227{
228}

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 322 of file ContField.h.

323{
324 m_locToGloMap->Assemble(m_coeffs, m_coeffs);
325}
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
Definition ExpList.h:1149

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 354 of file ContField.h.

356{
357 m_locToGloMap->Assemble(inarray, outarray);
358}

References m_locToGloMap.

◆ GenGlobalLinSys()

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

Definition at line 549 of file ContField.cpp.

550{
551 ASSERTL1(mkey.LocToGloMapIsDefined(),
552 "To use method must have a AssemblyMap "
553 "attached to key");
555}
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
std::shared_ptr< GlobalLinSys > GenGlobalLinSys(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
This operation constructs the global linear system of type mkey.

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

◆ GetGJPData()

const GJPStabilisationSharedPtr Nektar::MultiRegions::ContField::GetGJPData ( void  )
inline

Definition at line 136 of file ContField.h.

137 {
138 return m_GJPData;
139 }

References m_GJPData.

◆ 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 544 of file ContField.cpp.

545{
546 return m_globalLinSysManager[mkey];
547}

References m_globalLinSysManager.

Referenced by GlobalSolve(), and v_UnsetGlobalLinSys().

◆ 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 514 of file ContField.cpp.

515{
516 ASSERTL1(mkey.LocToGloMapIsDefined(),
517 "To use method must have a AssemblyMap "
518 "attached to key");
519
520 GlobalMatrixSharedPtr glo_matrix;
521 auto matrixIter = m_globalMat->find(mkey);
522
523 if (matrixIter == m_globalMat->end())
524 {
525 glo_matrix = GenGlobalMatrix(mkey, m_locToGloMap);
526 (*m_globalMat)[mkey] = glo_matrix;
527 }
528 else
529 {
530 glo_matrix = matrixIter->second;
531 }
532
533 return glo_matrix;
534}
std::shared_ptr< GlobalMatrix > GenGlobalMatrix(const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
Generates a global matrix from the given key and map.
std::shared_ptr< GlobalMatrix > GlobalMatrixSharedPtr
Shared pointer to a GlobalMatrix object.

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 377 of file ContField.h.

378{
379 ASSERTL1(gkey.LocToGloMapIsDefined(),
380 "To use method must have a AssemblyMap "
381 "attached to key");
382
383 auto matrixIter = m_globalMat->find(gkey);
384
385 if (matrixIter == m_globalMat->end())
386 {
387 return 0;
388 }
389 else
390 {
391 return matrixIter->second->GetNumNonZeroEntries();
392 }
393
394 return 0;
395}

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 
)

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 487 of file ContField.cpp.

491{
492 int NumDirBcs = m_locToGloMap->GetNumGlobalDirBndCoeffs();
493 int contNcoeffs = m_locToGloMap->GetNumGlobalCoeffs();
494
495 // STEP 1: SET THE DIRICHLET DOFS TO THE RIGHT VALUE
496 // IN THE SOLUTION ARRAY
498
499 // STEP 2: CALCULATE THE HOMOGENEOUS COEFFICIENTS
500 if (contNcoeffs - NumDirBcs > 0)
501 {
503 LinSys->Solve(locrhs, inout, m_locToGloMap, dirForcing);
504 }
505}
GlobalLinSysSharedPtr GetGlobalLinSys(const GlobalLinSysKey &mkey)
Returns the linear system specified by the key mkey.
void v_ImposeDirichletConditions(Array< OneD, NekDouble > &outarray) override
Impose the Dirichlet Boundary Conditions on outarray.
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.

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

Referenced by LaplaceSolve(), v_FwdTrans(), v_HelmSolve(), v_LinearAdvectionDiffusionReactionSolve(), v_LinearAdvectionReactionSolve(), and v_MultiplyByInvMassMatrix().

◆ InitGJPData()

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

Definition at line 127 of file ContField.h.

128 {
129 if (!m_GJPData)
130 {
133 }
134 }
std::shared_ptr< ExpList > GetSharedThisPtr()
Returns a shared pointer to the current object.
Definition ExpList.h:985

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::ExpList::GetSharedThisPtr(), and m_GJPData.

◆ 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 #inarray

Parameters
inarrayAn Array<OneD, NekDouble> containing the discrete evaluation of the forcing function \(f(\boldsymbol{x})\) at the quadrature points.
outarrayAn Array<OneD, NekDouble> containing the coefficients of the solution
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 337 of file ContField.cpp.

342{
343 // Inner product of forcing
344 Array<OneD, NekDouble> wsp(m_ncoeffs);
345 IProductWRTBase(inarray, wsp);
346
347 // Note -1.0 term necessary to invert forcing function to
348 // be consistent with matrix definition
349 Vmath::Neg(m_ncoeffs, wsp, 1);
350
351 // Forcing function with weak boundary conditions
352 int i, j;
353 int bndcnt = 0;
354 Array<OneD, NekDouble> sign =
355 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
356 const Array<OneD, const int> map =
357 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
358
359 // Add weak boundary conditions to forcing
360 for (i = 0; i < m_bndCondExpansions.size(); ++i)
361 {
362 if (m_bndConditions[i]->GetBoundaryConditionType() ==
364 m_bndConditions[i]->GetBoundaryConditionType() ==
366 {
367
368 const Array<OneD, const NekDouble> bndcoeff =
370
371 if (m_locToGloMap->GetSignChange())
372 {
373 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
374 {
375 wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
376 }
377 }
378 else
379 {
380 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
381 {
382 wsp[map[bndcnt + j]] += bndcoeff[bndcnt + j];
383 }
384 }
385 }
386
387 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
388 }
389
390 StdRegions::VarCoeffMap varcoeffs;
391 varcoeffs[StdRegions::eVarCoeffD00] = variablecoeffs[0];
392 varcoeffs[StdRegions::eVarCoeffD01] = variablecoeffs[1];
393 varcoeffs[StdRegions::eVarCoeffD11] = variablecoeffs[3];
394 varcoeffs[StdRegions::eVarCoeffD22] = variablecoeffs[5];
397
398 // Solve the system
399 GlobalLinSysKey key(StdRegions::eLaplacian, m_locToGloMap, factors,
400 varcoeffs);
401
402 GlobalSolve(key, wsp, outarray, dirForcing);
403}
#define sign(a, b)
return the sign(b)*a
Definition Polylib.cpp:47
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.
void IProductWRTBase(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:1749
int GetNcoeffs(void) const
Returns the total number of local degrees of freedom .
Definition ExpList.h:1607
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:2046
std::map< ConstFactorType, NekDouble > ConstFactorMap
std::map< StdRegions::VarCoeffType, VarCoeffEntry > VarCoeffMap
StdRegions::ConstFactorMap factors
void Neg(int n, T *x, const int incx)
Negate x = -x.
Definition Vmath.hpp:292

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(), Nektar::MultiRegions::ExpList::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 415 of file ContField.cpp.

419{
420 // Solve the system
421 Array<OneD, Array<OneD, NekDouble>> vel(2);
422 Array<OneD, NekDouble> vel_x(m_npoints, ax);
423 Array<OneD, NekDouble> vel_y(m_npoints, ay);
424 vel[0] = vel_x;
425 vel[1] = vel_y;
426
427 StdRegions::VarCoeffMap varcoeffs;
428 varcoeffs[StdRegions::eVarCoeffVelX] =
429 Array<OneD, NekDouble>(m_npoints, ax);
430 varcoeffs[StdRegions::eVarCoeffVelY] =
431 Array<OneD, NekDouble>(m_npoints, ay);
435 factors, varcoeffs);
436
438 Gmat->EigenSolve(Real, Imag, Evecs);
439}
std::shared_ptr< DNekMat > GenGlobalMatrixFull(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
std::shared_ptr< DNekMat > DNekMatSharedPtr

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

◆ SetGJPData()

void Nektar::MultiRegions::ContField::SetGJPData ( const GJPStabilisationSharedPtr GJPData)
inline

Definition at line 141 of file ContField.h.

143 {
144 m_GJPData = GJPData;
145 }

References m_GJPData.

◆ v_AvgAssemble() [1/2]

void Nektar::MultiRegions::ContField::v_AvgAssemble ( bool  useComm)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 742 of file ContField.cpp.

744{
745 m_locToGloMap->AvgAssemble(m_coeffs, m_coeffs, useComm);
746}

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

◆ v_AvgAssemble() [2/2]

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

Assembly and average of 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{invMultiplicityWithign}[e][i] \cdot \boldsymbol{\hat{u}}^{e}[i]$\\ \> \> continue\\ \> continue \end{tabbing}

where map \([e][i]\) is the mapping array and invMultiplicityWithSign \([e][i]\) is an array of similar dimensions ensuring the correct modal connectivity between the different elements divided by the multiplicity of the degree of freedom(both these arrays are contained in the data member m_locToGloMap).

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 736 of file ContField.cpp.

738{
739 m_locToGloMap->AvgAssemble(inarray, outarray, useComm);
740}

References m_locToGloMap.

◆ v_ClearGlobalLinSysManager()

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

Reset the GlobalLinSys Manager

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1211 of file ContField.cpp.

1212{
1213 m_globalLinSysManager.ClearManager("GlobalLinSys");
1214}

References m_globalLinSysManager.

◆ v_FillBndCondFromField() [1/2]

void Nektar::MultiRegions::ContField::v_FillBndCondFromField ( const Array< OneD, NekDouble coeffs)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 617 of file ContField.cpp.

618{
619 int bndcnt = 0;
620
621 Array<OneD, NekDouble> sign =
622 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
623 const Array<OneD, const int> bndmap =
624 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
625
626 for (int i = 0; i < m_bndCondExpansions.size(); ++i)
627 {
628 Array<OneD, NekDouble> &bcoeffs =
629 m_bndCondExpansions[i]->UpdateCoeffs();
630
631 if (m_locToGloMap->GetSignChange())
632 {
633 for (int j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); ++j)
634 {
635 bcoeffs[j] = sign[bndcnt + j] * coeffs[bndmap[bndcnt + j]];
636 }
637 }
638 else
639 {
640 for (int j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); ++j)
641 {
642 bcoeffs[j] = coeffs[bndmap[bndcnt + j]];
643 }
644 }
645
646 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
647 }
648}

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

◆ v_FillBndCondFromField() [2/2]

void Nektar::MultiRegions::ContField::v_FillBndCondFromField ( const int  nreg,
const Array< OneD, NekDouble coeffs 
)
overrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 650 of file ContField.cpp.

652{
653 int bndcnt = 0;
654
655 ASSERTL1(nreg < m_bndCondExpansions.size(),
656 "nreg is out or range since this many boundary "
657 "regions to not exist");
658
659 Array<OneD, NekDouble> sign =
660 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
661 const Array<OneD, const int> bndmap =
662 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
663
664 // Now fill in all other Dirichlet coefficients.
665 Array<OneD, NekDouble> &bcoeffs = m_bndCondExpansions[nreg]->UpdateCoeffs();
666
667 for (int j = 0; j < nreg; ++j)
668 {
669 bndcnt += m_bndCondExpansions[j]->GetNcoeffs();
670 }
671
672 if (m_locToGloMap->GetSignChange())
673 {
674 for (int j = 0; j < (m_bndCondExpansions[nreg])->GetNcoeffs(); ++j)
675 {
676 bcoeffs[j] = sign[bndcnt + j] * coeffs[bndmap[bndcnt + j]];
677 }
678 }
679 else
680 {
681 for (int j = 0; j < (m_bndCondExpansions[nreg])->GetNcoeffs(); ++j)
682 {
683 bcoeffs[j] = coeffs[bndmap[bndcnt + j]];
684 }
685 }
686}

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

◆ v_FwdTrans()

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

Template method virtual forwarder for FwdTrans().

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 #inarray of the ExpList object Sin. The resulting global coefficients \(\hat{u}_g\) are stored in the array #outarray.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 243 of file ContField.cpp.

246{
247 // Inner product of forcing
248 Array<OneD, NekDouble> wsp(m_ncoeffs);
249 IProductWRTBase(inarray, wsp);
250
251 // Solve the system
252 GlobalLinSysKey key(StdRegions::eMass, m_locToGloMap);
253
254 GlobalSolve(key, wsp, outarray);
255}

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

◆ v_GetBndCondExpansions()

const Array< OneD, const MultiRegions::ExpListSharedPtr > & Nektar::MultiRegions::ContField::v_GetBndCondExpansions ( void  )
inlineoverrideprotectedvirtual

Returns the boundary conditions expansion.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 365 of file ContField.h.

367{
368 return m_bndCondExpansions;
369}

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

◆ v_GetBndConditions()

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

Template method virtual forwarder for GetBndConditions().

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 371 of file ContField.h.

373{
374 return m_bndConditions;
375}

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

◆ v_GetGJPData()

const GJPStabilisationSharedPtr Nektar::MultiRegions::ContField::v_GetGJPData ( void  )
inlineoverrideprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 289 of file ContField.h.

290 {
291 return m_GJPData;
292 }

References m_GJPData.

◆ v_GetPoolCount()

int Nektar::MultiRegions::ContField::v_GetPoolCount ( std::string  poolName)
overrideprotectedvirtual

Get the pool count for the specified poolName

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1219 of file ContField.cpp.

1220{
1221 return m_globalLinSysManager.PoolCount(poolName);
1222}

References m_globalLinSysManager.

◆ v_GlobalToLocal() [1/2]

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

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.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 708 of file ContField.cpp.

710{
711 m_locToGloMap->GlobalToLocal(inarray, outarray);
712}

References m_locToGloMap.

◆ v_GlobalToLocal() [2/2]

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 714 of file ContField.cpp.

715{
716 m_locToGloMap->GlobalToLocal(m_coeffs, m_coeffs);
717}

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

◆ v_HelmSolve()

GlobalLinSysKey Nektar::MultiRegions::ContField::v_HelmSolve ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const StdRegions::ConstFactorMap factors,
const StdRegions::VarCoeffMap pvarcoeff,
const StdRegions::VarFactorsMap pvarfactors,
const Array< OneD, const NekDouble > &  dirForcing,
const bool  PhysSpaceForcing 
)
overrideprotectedvirtual

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.

Parameters
inarrayAn Array<OneD, NekDouble> , containing the discrete evaluation of the forcing function \(f(\boldsymbol{x})\) at the quadrature points
factorsThe parameter \(\lambda\) of the Helmholtz equation is specified through the factors map

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 797 of file ContField.cpp.

803{
804 int i, j;
805
806 //----------------------------------
807 // Setup RHS Inner product
808 //----------------------------------
809 // Inner product of forcing
810 Array<OneD, NekDouble> wsp(m_ncoeffs);
811 if (PhysSpaceForcing)
812 {
813 IProductWRTBase(inarray, wsp);
814 // Note -1.0 term necessary to invert forcing function to
815 // be consistent with matrix definition
816 Vmath::Neg(m_ncoeffs, wsp, 1);
817 }
818 else
819 {
820 Vmath::Smul(m_ncoeffs, -1.0, inarray, 1, wsp, 1);
821 }
822
823 int bndcnt = 0;
824 Array<OneD, NekDouble> sign =
825 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
826 const Array<OneD, const int> map =
827 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
828 // Add weak boundary conditions to forcing
829 for (i = 0; i < m_bndCondExpansions.size(); ++i)
830 {
831 if (m_bndConditions[i]->GetBoundaryConditionType() ==
833 m_bndConditions[i]->GetBoundaryConditionType() ==
835 {
836
837 const Array<OneD, const NekDouble> bndcoeff =
839
840 if (m_locToGloMap->GetSignChange())
841 {
842 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
843 {
844 wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
845 }
846 }
847 else
848 {
849 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
850 {
851 wsp[map[bndcnt + j]] += bndcoeff[j];
852 }
853 }
854 }
855 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
856 }
857
859
860 StdRegions::VarCoeffMap varcoeff(pvarcoeff);
861 StdRegions::VarFactorsMap varfactors(pvarfactors);
863 {
864 LibUtilities::Timer timer;
865 timer.Start();
866
867 // initialize if required
868 if (!m_GJPData)
869 {
872 }
873 timer.Stop();
874 timer.AccumulateRegion("GJP:Initialize", 10);
875
876 if (m_GJPData->IsSemiImplicit())
877 {
878 timer.Start();
880 // set up varcoeff
881
883 m_GJPData->GetTraceWeightVarFactors();
884 timer.Stop();
885 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
886 }
887
888 // add GJP forcing if explicit of semi-implicit
889 if (m_GJPData->IsExplicit() || m_GJPData->IsSemiImplicit())
890 {
891 timer.Start();
892 // to set up forcing need initial guess in physical space
893 Array<OneD, NekDouble> phys(m_npoints), tmp;
894 BwdTrans(outarray, phys);
895 NekDouble scale =
896 -1.0 * factors.find(StdRegions::eFactorGJP)->second;
897
898 m_GJPData->Apply(
899 phys, wsp,
900 pvarcoeff.count(StdRegions::eVarCoeffGJPNormVel)
901 ? pvarcoeff.find(StdRegions::eVarCoeffGJPNormVel)
902 ->second.GetValue()
904 scale);
905
906 varcoeff.erase(StdRegions::eVarCoeffGJPNormVel);
907 timer.Stop();
908 timer.AccumulateRegion("GJP:Apply", 10);
909 }
910
911 if (m_GJPData->IsImplicit())
912 {
913 timer.Start();
915 m_GJPData->GetTraceWeightVarFactors();
916 timer.Stop();
917 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
918 }
919 }
920
921 GlobalLinSysKey key(mtype, m_locToGloMap, factors, varcoeff, varfactors);
922
923 GlobalSolve(key, wsp, outarray, dirForcing);
924
925 return key;
926}
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function elementally evaluates the backward transformation of the global spectral/hp element exp...
Definition ExpList.h:1816
std::map< StdRegions::ConstFactorType, Array< OneD, NekDouble > > VarFactorsMap
static Array< OneD, NekDouble > NullNekDouble1DArray
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Definition Vmath.hpp:100

References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::ExpList::BwdTrans(), Nektar::StdRegions::eFactorGJP, Nektar::StdRegions::eFactorGJPTraceWeight, Nektar::StdRegions::eHelmholtz, Nektar::StdRegions::eHelmholtzGJP, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::StdRegions::eVarCoeffGJPNormVel, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::ExpList::GetSharedThisPtr(), GlobalSolve(), Nektar::MultiRegions::ExpList::IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_GJPData, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Nektar::MultiRegions::ExpList::m_npoints, Vmath::Neg(), Nektar::NullNekDouble1DArray, sign, Vmath::Smul(), Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().

◆ v_ImposeDirichletConditions()

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

Impose the Dirichlet Boundary Conditions on outarray.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 557 of file ContField.cpp.

558{
559 int i, j;
560 int bndcnt = 0;
561
562 Array<OneD, NekDouble> sign =
563 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
564 const Array<OneD, const int> map =
565 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
566
567 for (i = 0; i < m_bndCondExpansions.size(); ++i)
568 {
569 if (m_bndConditions[i]->GetBoundaryConditionType() ==
571 {
572
573 const Array<OneD, const NekDouble> bndcoeff =
575
576 if (m_locToGloMap->GetSignChange())
577 {
578 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
579 {
580 outarray[map[bndcnt + j]] = sign[bndcnt + j] * bndcoeff[j];
581 }
582 }
583 else
584 {
585 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
586 {
587 outarray[map[bndcnt + j]] = bndcoeff[j];
588 }
589 }
590 }
591 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
592 }
593
594 // communicate local Dirichlet coeffs that are just
595 // touching a dirichlet boundary on another partition
596 set<int> &ParallelDirBndSign = m_locToGloMap->GetParallelDirBndSign();
597
598 for (auto &it : ParallelDirBndSign)
599 {
600 outarray[it] *= -1;
601 }
602
603 m_locToGloMap->UniversalAbsMaxBnd(outarray);
604
605 for (auto &it : ParallelDirBndSign)
606 {
607 outarray[it] *= -1;
608 }
609
610 set<ExtraDirDof> &copyLocalDirDofs = m_locToGloMap->GetCopyLocalDirDofs();
611 for (auto &it : copyLocalDirDofs)
612 {
613 outarray[std::get<0>(it)] = outarray[std::get<1>(it)] * std::get<2>(it);
614 }
615}

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

void Nektar::MultiRegions::ContField::v_ImposeNeumannConditions ( Array< OneD, NekDouble > &  outarray)
overrideprotectedvirtual

Add Neumann Boundary Conditions forcing to outarray.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1249 of file ContField.cpp.

1250{
1251 int i, j;
1252 int bndcnt = 0;
1253 Array<OneD, NekDouble> sign =
1254 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
1255 const Array<OneD, const int> map =
1256 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
1257 // Add weak boundary conditions to forcing
1258 for (i = 0; i < m_bndCondExpansions.size(); ++i)
1259 {
1260 if (m_bndConditions[i]->GetBoundaryConditionType() ==
1262 {
1263
1264 const Array<OneD, const NekDouble> bndcoeff =
1266
1267 if (m_locToGloMap->GetSignChange())
1268 {
1269 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1270 {
1271 outarray[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
1272 }
1273 }
1274 else
1275 {
1276 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1277 {
1278 outarray[map[bndcnt + j]] += bndcoeff[j];
1279 }
1280 }
1281 }
1282 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
1283 }
1284}

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

◆ v_ImposeRobinConditions()

void Nektar::MultiRegions::ContField::v_ImposeRobinConditions ( Array< OneD, NekDouble > &  outarray)
overrideprotectedvirtual

Add Robin Boundary Conditions forcing to outarray.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1286 of file ContField.cpp.

1287{
1288 int i, j;
1289 int bndcnt = 0;
1290 Array<OneD, NekDouble> sign =
1291 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
1292 const Array<OneD, const int> map =
1293 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
1294 // Add weak boundary conditions to forcing
1295 for (i = 0; i < m_bndCondExpansions.size(); ++i)
1296 {
1297 if (m_bndConditions[i]->GetBoundaryConditionType() ==
1299 {
1300
1301 const Array<OneD, const NekDouble> bndcoeff =
1303
1304 if (m_locToGloMap->GetSignChange())
1305 {
1306 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1307 {
1308 outarray[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
1309 }
1310 }
1311 else
1312 {
1313 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1314 {
1315 outarray[map[bndcnt + j]] += bndcoeff[j];
1316 }
1317 }
1318 }
1319 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
1320 }
1321}

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

◆ v_LinearAdvectionDiffusionReactionSolve()

GlobalLinSysKey Nektar::MultiRegions::ContField::v_LinearAdvectionDiffusionReactionSolve ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const StdRegions::ConstFactorMap factors,
const StdRegions::VarCoeffMap pvarcoeff,
const StdRegions::VarFactorsMap pvarfactors,
const Array< OneD, const NekDouble > &  dirForcing,
const bool  PhysSpaceForcing 
)
overrideprotectedvirtual

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 939 of file ContField.cpp.

945{
946 // Inner product of forcing
947 Array<OneD, NekDouble> wsp(m_ncoeffs);
948 if (PhysSpaceForcing)
949 {
950 IProductWRTBase(inarray, wsp);
951 // Note -1.0 term necessary to invert forcing function to
952 // be consistent with matrix definition
953 Vmath::Neg(m_ncoeffs, wsp, 1);
954 }
955 else
956 {
957 Vmath::Smul(m_ncoeffs, -1.0, inarray, 1, wsp, 1);
958 }
959
960 // Forcing function with weak boundary conditions
961 int i, j;
962 int bndcnt = 0;
963 Array<OneD, NekDouble> sign =
964 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
965 const Array<OneD, const int> map =
966 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
967 // Add weak boundary conditions to forcing
968 for (i = 0; i < m_bndCondExpansions.size(); ++i)
969 {
970 if (m_bndConditions[i]->GetBoundaryConditionType() ==
972 m_bndConditions[i]->GetBoundaryConditionType() ==
974 {
975
976 const Array<OneD, const NekDouble> bndcoeff =
978
979 if (m_locToGloMap->GetSignChange())
980 {
981 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
982 {
983 wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
984 }
985 }
986 else
987 {
988 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
989 {
990 wsp[map[bndcnt + j]] += bndcoeff[j];
991 }
992 }
993 }
994
995 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
996 }
997
1000
1001 StdRegions::VarCoeffMap varcoeff(pvarcoeff);
1002 StdRegions::VarFactorsMap varfactors(pvarfactors);
1004 {
1005 LibUtilities::Timer timer;
1006 timer.Start();
1007
1008 // initialize if required
1009 if (!m_GJPData)
1010 {
1013 }
1014 timer.Stop();
1015 timer.AccumulateRegion("GJP:Initialize", 10);
1016
1017 if (m_GJPData->IsSemiImplicit())
1018 {
1019 timer.Start();
1021
1023 m_GJPData->GetTraceWeightVarFactors();
1024 timer.Stop();
1025 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
1026 }
1027
1028 if (m_GJPData->IsExplicit() || m_GJPData->IsSemiImplicit())
1029 {
1030 timer.Start();
1031 // Set up forcing need initial guess in physical space
1032 Array<OneD, NekDouble> phys(m_npoints), tmp;
1033 BwdTrans(outarray, phys);
1034 NekDouble scale =
1035 -1.0 * factors.find(StdRegions::eFactorGJP)->second;
1036
1037 m_GJPData->Apply(
1038 phys, wsp,
1039 pvarcoeff.count(StdRegions::eVarCoeffGJPNormVel)
1040 ? pvarcoeff.find(StdRegions::eVarCoeffGJPNormVel)
1041 ->second.GetValue()
1043 scale);
1044 // erase VarCoeffGJPNormVel in temporary arrya so not used in key
1045 // below
1046 varcoeff.erase(StdRegions::eVarCoeffGJPNormVel);
1047 timer.Stop();
1048 timer.AccumulateRegion("GJP:Apply", 10);
1049 }
1050
1051 if (m_GJPData->IsImplicit())
1052 {
1053 timer.Start();
1055 m_GJPData->GetTraceWeightVarFactors();
1056 timer.Stop();
1057 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
1058 }
1059 }
1060
1061 // Solve the system
1062 GlobalLinSysKey key(mtype, m_locToGloMap, factors, varcoeff, varfactors);
1063
1064 GlobalSolve(key, wsp, outarray, dirForcing);
1065
1066 return key;
1067}

References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::ExpList::BwdTrans(), Nektar::StdRegions::eFactorGJP, Nektar::StdRegions::eFactorGJPTraceWeight, Nektar::StdRegions::eLinearAdvectionDiffusionReaction, Nektar::StdRegions::eLinearAdvectionDiffusionReactionGJP, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::StdRegions::eVarCoeffGJPNormVel, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::ExpList::GetSharedThisPtr(), GlobalSolve(), Nektar::MultiRegions::ExpList::IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_GJPData, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Nektar::MultiRegions::ExpList::m_npoints, Vmath::Neg(), Nektar::NullNekDouble1DArray, sign, Vmath::Smul(), Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().

◆ v_LinearAdvectionReactionSolve()

GlobalLinSysKey Nektar::MultiRegions::ContField::v_LinearAdvectionReactionSolve ( const Array< OneD, const NekDouble > &  inarray,
Array< OneD, NekDouble > &  outarray,
const StdRegions::ConstFactorMap factors,
const StdRegions::VarCoeffMap pvarcoeff,
const StdRegions::VarFactorsMap pvarfactors,
const Array< OneD, const NekDouble > &  dirForcing,
const bool  PhysSpaceForcing 
)
overrideprotectedvirtual

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 1078 of file ContField.cpp.

1084{
1085 // Inner product of forcing
1086 Array<OneD, NekDouble> wsp(m_ncoeffs);
1087 if (PhysSpaceForcing)
1088 {
1089 IProductWRTBase(inarray, wsp);
1090 // Note -1.0 term necessary to invert forcing function to
1091 // be consistent with matrix definition
1092 Vmath::Neg(m_ncoeffs, wsp, 1);
1093 }
1094 else
1095 {
1096 Vmath::Smul(m_ncoeffs, -1.0, inarray, 1, wsp, 1);
1097 }
1098
1099 // Forcing function with weak boundary conditions
1100 int i, j;
1101 int bndcnt = 0;
1102 Array<OneD, NekDouble> sign =
1103 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsSign();
1104 const Array<OneD, const int> map =
1105 m_locToGloMap->GetBndCondCoeffsToLocalCoeffsMap();
1106 // Add weak boundary conditions to forcing
1107 for (i = 0; i < m_bndCondExpansions.size(); ++i)
1108 {
1109 if (m_bndConditions[i]->GetBoundaryConditionType() ==
1111 m_bndConditions[i]->GetBoundaryConditionType() ==
1113 {
1114
1115 const Array<OneD, const NekDouble> bndcoeff =
1117
1118 if (m_locToGloMap->GetSignChange())
1119 {
1120 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1121 {
1122 wsp[map[bndcnt + j]] += sign[bndcnt + j] * bndcoeff[j];
1123 }
1124 }
1125 else
1126 {
1127 for (j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
1128 {
1129 wsp[map[bndcnt + j]] += bndcoeff[j];
1130 }
1131 }
1132 }
1133
1134 bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
1135 }
1136
1138
1139 StdRegions::VarCoeffMap varcoeff(pvarcoeff);
1140 StdRegions::VarFactorsMap varfactors(pvarfactors);
1142 {
1143 LibUtilities::Timer timer;
1144 timer.Start();
1145
1146 // initialize if required
1147 if (!m_GJPData)
1148 {
1151 }
1152 timer.Stop();
1153 timer.AccumulateRegion("GJP:Initialize", 10);
1154
1155 if (m_GJPData->IsSemiImplicit())
1156 {
1157 timer.Start();
1158 ASSERTL0(false, "SemiImplicit GJPStabilisation not implemented for "
1159 "LinearAdvectionReactionSolve().")
1160
1161 varfactors[StdRegions::eFactorGJPTraceWeight] =
1162 m_GJPData->GetTraceWeightVarFactors();
1163 timer.Stop();
1164 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
1165 }
1166
1167 if (m_GJPData->IsExplicit() || m_GJPData->IsSemiImplicit())
1168 {
1169 timer.Start();
1170 // Set up forcing need initial guess in physical space
1171 // add GJP forcing
1172 Array<OneD, NekDouble> phys(m_npoints), tmp;
1173 BwdTrans(outarray, phys);
1174 NekDouble scale =
1175 -1.0 * factors.find(StdRegions::eFactorGJP)->second;
1176
1177 m_GJPData->Apply(
1178 phys, wsp,
1179 pvarcoeff.count(StdRegions::eVarCoeffGJPNormVel)
1180 ? pvarcoeff.find(StdRegions::eVarCoeffGJPNormVel)
1181 ->second.GetValue()
1183 scale);
1184
1185 varcoeff.erase(StdRegions::eVarCoeffGJPNormVel);
1186 timer.Stop();
1187 timer.AccumulateRegion("GJP:Apply", 10);
1188 }
1189
1190 if (m_GJPData->IsImplicit())
1191 {
1192 timer.Start();
1194 m_GJPData->GetTraceWeightVarFactors();
1195 timer.Stop();
1196 timer.AccumulateRegion("GJP:GetTraceWeights", 10);
1197 }
1198 }
1199
1200 // Solve the system
1201 GlobalLinSysKey key(mtype, m_locToGloMap, factors, varcoeff, varfactors);
1202
1203 GlobalSolve(key, wsp, outarray, dirForcing);
1204
1205 return key;
1206}
#define ASSERTL0(condition, msg)

References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::MultiRegions::ExpList::BwdTrans(), Nektar::StdRegions::eFactorGJP, Nektar::StdRegions::eFactorGJPTraceWeight, Nektar::StdRegions::eLinearAdvectionReaction, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eRobin, Nektar::StdRegions::eVarCoeffGJPNormVel, Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetNcoeffs(), Nektar::MultiRegions::ExpList::GetSharedThisPtr(), GlobalSolve(), Nektar::MultiRegions::ExpList::IProductWRTBase(), Nektar::MultiRegions::DisContField::m_bndCondExpansions, Nektar::MultiRegions::DisContField::m_bndConditions, m_GJPData, m_locToGloMap, Nektar::MultiRegions::ExpList::m_ncoeffs, Nektar::MultiRegions::ExpList::m_npoints, Vmath::Neg(), Nektar::NullNekDouble1DArray, sign, Vmath::Smul(), Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().

◆ v_LocalToGlobal() [1/2]

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 770 of file ContField.cpp.

772{
773 m_locToGloMap->LocalToGlobal(m_coeffs, m_coeffs, useComm);
774}

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 
)
overrideprotectedvirtual

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 764 of file ContField.cpp.

766{
767 m_locToGloMap->LocalToGlobal(inarray, outarray, useComm);
768}

References m_locToGloMap.

◆ v_MultiplyByInvMassMatrix()

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

Template method virtual forwarder for MultiplyByInvMassMatrix().

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

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

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 278 of file ContField.cpp.

282{
283 GlobalLinSysKey key(StdRegions::eMass, m_locToGloMap);
284 GlobalSolve(key, inarray, outarray);
285}

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

◆ v_SmoothField()

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

Template method virtual forwarded for SmoothField().

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 260 of file ContField.cpp.

261{
262 int Ncoeffs = m_locToGloMap->GetNumLocalCoeffs();
263 Array<OneD, NekDouble> tmp1(Ncoeffs);
264 Array<OneD, NekDouble> tmp2(Ncoeffs);
265
266 IProductWRTBase(field, tmp1);
267 MultiplyByInvMassMatrix(tmp1, tmp2);
268 BwdTrans(tmp2, field);
269}
void MultiplyByInvMassMatrix(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition ExpList.h:1824

References Nektar::MultiRegions::ExpList::BwdTrans(), Nektar::MultiRegions::ExpList::IProductWRTBase(), m_locToGloMap, and Nektar::MultiRegions::ExpList::MultiplyByInvMassMatrix().

◆ v_UnsetGlobalLinSys()

void Nektar::MultiRegions::ContField::v_UnsetGlobalLinSys ( GlobalLinSysKey  key,
bool  clearLocalMatrices 
)
overrideprotectedvirtual

Clear all memory for GlobalLinSys including StaticCond Blocks and LocalMatrix Blocks. Avoids memory leakage if matrices are updated in time

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1229 of file ContField.cpp.

1231{
1232 // Get GlobalLinSys from key
1234
1235 // Loop all expansions
1236 for (int n = 0; n < m_exp->size(); ++n)
1237 {
1238 LinSys->DropStaticCondBlock(n);
1239
1240 if (clearLocalMatrices)
1241 {
1242 LinSys->DropBlock(n);
1243 }
1244 }
1245
1246 m_globalLinSysManager.DeleteObject(key);
1247}
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition ExpList.h:1184

References GetGlobalLinSys(), Nektar::MultiRegions::ExpList::m_exp, and m_globalLinSysManager.

Member Data Documentation

◆ m_GJPData

GJPStabilisationSharedPtr Nektar::MultiRegions::ContField::m_GJPData
protected

Data for Gradient Jump Penalisation (GJP) stabilisaiton.

Definition at line 166 of file ContField.h.

Referenced by GetGJPData(), InitGJPData(), SetGJPData(), v_GetGJPData(), v_HelmSolve(), v_LinearAdvectionDiffusionReactionSolve(), and v_LinearAdvectionReactionSolve().

◆ 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 163 of file ContField.h.

Referenced by GetGlobalLinSys(), v_ClearGlobalLinSysManager(), v_GetPoolCount(), and v_UnsetGlobalLinSys().

◆ 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 157 of file ContField.h.

Referenced by GetGlobalMatrix(), and GetGlobalMatrixNnz().

◆ m_locToGloMap

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