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

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

#include <DisContField1D.h>

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

Public Member Functions

 DisContField1D ()
 Default constructor. More...
 
 DisContField1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const std::string &variable, const bool SetUpJustDG=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructs a 1D discontinuous field based on a mesh and boundary conditions. More...
 
 DisContField1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable, bool SetToOneSpaceDimensions=false, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor for a DisContField1D from a List of subdomains New Constructor for arterial network. More...
 
 DisContField1D (const DisContField1D &In)
 Constructs a 1D discontinuous field based on an existing field. More...
 
 DisContField1D (const ExpList1D &In)
 Constructs a 1D discontinuous field based on an existing field. (needed in order to use ContField( const ExpList1D &In) constructor. More...
 
virtual ~DisContField1D ()
 Destructor. More...
 
GlobalLinSysSharedPtr GetGlobalBndLinSys (const GlobalLinSysKey &mkey)
 For a given key, returns the associated global linear system. More...
 
std::vector< bool > & GetNegatedFluxNormal (void)
 
- Public Member Functions inherited from Nektar::MultiRegions::ExpList1D
 ExpList1D ()
 The default constructor. More...
 
 ExpList1D (const ExpList1D &In, const bool DeclareCoeffPhysArrays=true)
 The copy constructor. More...
 
 ExpList1D (const ExpList1D &In, const std::vector< unsigned int > &eIDs, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Constructor copying only elements defined in eIds. More...
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const LibUtilities::BasisKey &Ba, const SpatialDomains::MeshGraphSharedPtr &graph1D, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Construct an ExpList1D from a given graph. More...
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 This constructor sets up a list of local expansions based on an input graph1D. More...
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::CompositeMap &domain, const bool DeclareCoeffPhysArrays=true, const std::string var="DefaultVar", bool SetToOneSpaceDimension=false, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 This constructor sets up a list of local expansions based on an input compositeMap. More...
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::CompositeMap &domain, const SpatialDomains::MeshGraphSharedPtr &graph2D, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr(), const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Specialised constructor for Neumann boundary conditions in DisContField2D and ContField2D. More...
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::CompositeMap &domain, const SpatialDomains::MeshGraphSharedPtr &graph1D, int i, const bool DeclareCoeffPhysArrays=true, const Collections::ImplementationType ImpType=Collections::eNoImpType)
 
 ExpList1D (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, const ExpListSharedPtr > &bndConstraint, const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > &bndCond, const LocalRegions::ExpansionVector &locexp, const SpatialDomains::MeshGraphSharedPtr &graph2D, const PeriodicMap &periodicEdges, const bool DeclareCoeffPhysArrays=true, const std::string variable="DefaultVar", const Collections::ImplementationType ImpType=Collections::eNoImpType)
 Specialised constructor for trace expansions. More...
 
virtual ~ExpList1D ()
 Destructor. More...
 
void PostProcess (LibUtilities::KernelSharedPtr kernel, Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray, NekDouble h, int elmId=0)
 Performs the post-processing on a specified element. More...
 
void PeriodicEval (Array< OneD, NekDouble > &inarray1, Array< OneD, NekDouble > &inarray2, NekDouble h, int nmodes, Array< OneD, NekDouble > &outarray)
 Evaluates the global spectral/hp expansion at some arbitray set of points. More...
 
void ParNormalSign (Array< OneD, NekDouble > &normsign)
 Set up the normals on each expansion. More...
 
- Public Member Functions inherited from Nektar::MultiRegions::ExpList
 ExpList ()
 The default constructor. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession)
 The default constructor. More...
 
 ExpList (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 The default constructor. More...
 
 ExpList (const ExpList &in, const std::vector< unsigned int > &eIDs, const bool DeclareCoeffPhysArrays=true)
 Constructor copying only elements defined in eIds. More...
 
 ExpList (const ExpList &in, const bool DeclareCoeffPhysArrays=true)
 The copy constructor. More...
 
virtual ~ExpList ()
 The default destructor. More...
 
int GetNcoeffs (void) const
 Returns the total number of local degrees of freedom \(N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_m\). More...
 
int GetNcoeffs (const int eid) const
 Returns the total number of local degrees of freedom for element eid. More...
 
ExpansionType GetExpType (void)
 Returns the type of the expansion. More...
 
void SetExpType (ExpansionType Type)
 Returns the type of the expansion. More...
 
int EvalBasisNumModesMax (void) const
 Evaulates the maximum number of modes in the elemental basis order over all elements. More...
 
const Array< OneD, int > EvalBasisNumModesMaxPerExp (void) const
 Returns the vector of the number of modes in the elemental basis order over all elements. More...
 
int GetTotPoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int GetTotPoints (const int eid) const
 Returns the total number of quadrature points for eid's element \(=Q_{\mathrm{tot}}\). More...
 
int GetNpoints (void) const
 Returns the total number of quadrature points m_npoints \(=Q_{\mathrm{tot}}\). More...
 
int Get1DScaledTotPoints (const NekDouble scale) const
 Returns the total number of qudature points scaled by the factor scale on each 1D direction. More...
 
void SetWaveSpace (const bool wavespace)
 Sets the wave space to the one of the possible configuration true or false. More...
 
void SetModifiedBasis (const bool modbasis)
 Set Modified Basis for the stability analysis. More...
 
void SetPhys (int i, NekDouble val)
 Set the i th value of m_phys to value val. More...
 
bool GetWaveSpace (void) const
 This function returns the third direction expansion condition, which can be in wave space (coefficient) or not It is stored in the variable m_WaveSpace. More...
 
void SetPhys (const Array< OneD, const NekDouble > &inarray)
 Fills the array m_phys. More...
 
void SetPhysArray (Array< OneD, NekDouble > &inarray)
 Sets the array m_phys. More...
 
void SetPhysState (const bool physState)
 This function manually sets whether the array of physical values \(\boldsymbol{u}_l\) (implemented as m_phys) is filled or not. More...
 
bool GetPhysState (void) const
 This function indicates whether the array of physical values \(\boldsymbol{u}_l\) (implemented as m_phys) is filled or not. More...
 
NekDouble PhysIntegral (void)
 This function integrates a function \(f(\boldsymbol{x})\) over the domain consisting of all the elements of the expansion. More...
 
NekDouble PhysIntegral (const Array< OneD, const NekDouble > &inarray)
 This function integrates a function \(f(\boldsymbol{x})\) over the domain consisting of all the elements of the expansion. More...
 
void IProductWRTBase_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to all local expansion modes \(\phi_n^e(\boldsymbol{x})\). More...
 
void IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void IProductWRTDerivBase (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative (in direction. More...
 
void IProductWRTDirectionalDerivBase (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 Directional derivative along a given direction. More...
 
void IProductWRTDerivBase (const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, NekDouble > &outarray)
 This function calculates the inner product of a function \(f(\boldsymbol{x})\) with respect to the derivative (in direction. More...
 
void FwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the forward transformation of a function \(u(\boldsymbol{x})\) onto the global spectral/hp expansion. More...
 
void FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void ExponentialFilter (Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff)
 
void MultiplyByElmtInvMass (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally mulplies the coefficient space of Sin my the elemental inverse of the mass matrix. More...
 
void MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void SmoothField (Array< OneD, NekDouble > &field)
 Smooth a field across elements. More...
 
void HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff=StdRegions::NullVarCoeffMap, const MultiRegions::VarFactorsMap &varfactors=MultiRegions::NullVarFactorsMap, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const bool PhysSpaceForcing=true)
 Solve helmholtz problem. More...
 
void LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 Solve Advection Diffusion Reaction. More...
 
void FwdTrans_BndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void BwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function elementally evaluates the backward transformation of the global spectral/hp element expansion. More...
 
void BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 This function calculates the coordinates of all the elemental quadrature points \(\boldsymbol{x}_i\). More...
 
void HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
void DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
void DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray, CoeffState coeffstate=eLocal)
 
void GetBCValues (Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
 
void NormVectorIProductWRTBase (Array< OneD, Array< OneD, NekDouble > > &V, Array< OneD, NekDouble > &outarray)
 
void ApplyGeomInfo ()
 Apply geometry information to each expansion. More...
 
void Reset ()
 Reset geometry information and reset matrices. More...
 
void WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
void WriteTecplotZone (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotField (std::ostream &outfile, int expansion=-1)
 
void WriteTecplotConnectivity (std::ostream &outfile, int expansion=-1)
 
void WriteVtkHeader (std::ostream &outfile)
 
void WriteVtkFooter (std::ostream &outfile)
 
void WriteVtkPieceHeader (std::ostream &outfile, int expansion, int istrip=0)
 
void WriteVtkPieceFooter (std::ostream &outfile, int expansion)
 
void WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var="v")
 
int GetCoordim (int eid)
 This function returns the dimension of the coordinates of the element eid. More...
 
void SetCoeff (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffs (int i, NekDouble val)
 Set the i th coefficiient in m_coeffs to value val. More...
 
void SetCoeffsArray (Array< OneD, NekDouble > &inarray)
 Set the m_coeffs array to inarray. More...
 
int GetShapeDimension ()
 This function returns the dimension of the shape of the element eid. More...
 
const Array< OneD, const NekDouble > & GetCoeffs () const
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
void ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 Impose Dirichlet Boundary Conditions onto Array. More...
 
void FillBndCondFromField (void)
 Fill Bnd Condition expansion from the values stored in expansion. More...
 
void FillBndCondFromField (const int nreg)
 Fill Bnd Condition expansion in nreg from the values stored in expansion. More...
 
void LocalToGlobal (bool useComm=true)
 Gathers the global coefficients \(\boldsymbol{\hat{u}}_g\) from the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
void LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm=true)
 
void GlobalToLocal (void)
 Scatters from the global coefficients \(\boldsymbol{\hat{u}}_g\) to the local coefficients \(\boldsymbol{\hat{u}}_l\). More...
 
void GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
NekDouble GetCoeff (int i)
 Get the i th value (coefficient) of m_coeffs. More...
 
NekDouble GetCoeffs (int i)
 Get the i th value (coefficient) of m_coeffs. More...
 
const Array< OneD, const NekDouble > & GetPhys () const
 This function returns (a reference to) the array \(\boldsymbol{u}_l\) (implemented as m_phys) containing the function \(u^{\delta}(\boldsymbol{x})\) evaluated at the quadrature points. More...
 
NekDouble Linf (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 This function calculates the \(L_\infty\) error of the global spectral/hp element approximation. More...
 
NekDouble L2 (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 This function calculates the \(L_2\) error with respect to soln of the global spectral/hp element approximation. More...
 
NekDouble H1 (const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 Calculates the \(H^1\) error of the global spectral/hp element approximation. More...
 
NekDouble Integral (const Array< OneD, const NekDouble > &inarray)
 
NekDouble VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
Array< OneD, const NekDoubleHomogeneousEnergy (void)
 This function calculates the energy associated with each one of the modesof a 3D homogeneous nD expansion. More...
 
void SetHomo1DSpecVanVisc (Array< OneD, NekDouble > visc)
 This function sets the Spectral Vanishing Viscosity in homogeneous1D expansion. More...
 
Array< OneD, const unsigned int > GetZIDs (void)
 This function returns a vector containing the wave numbers in z-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
LibUtilities::TranspositionSharedPtr GetTransposition (void)
 This function returns the transposition class associaed with the homogeneous expansion. More...
 
NekDouble GetHomoLen (void)
 This function returns the Width of homogeneous direction associaed with the homogeneous expansion. More...
 
void SetHomoLen (const NekDouble lhom)
 This function sets the Width of homogeneous direction associaed with the homogeneous expansion. More...
 
Array< OneD, const unsigned int > GetYIDs (void)
 This function returns a vector containing the wave numbers in y-direction associated with the 3D homogenous expansion. Required if a parellelisation is applied in the Fourier direction. More...
 
void PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function interpolates the physical space points in inarray to outarray using the same points defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
void PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This function Galerkin projects the physical space points in inarray to outarray where inarray is assumed to be defined in the expansion but where the number of points are rescaled by 1DScale. More...
 
int GetExpSize (void)
 This function returns the number of elements in the expansion. More...
 
int GetNumElmts (void)
 This function returns the number of elements in the expansion which may be different for a homogeoenous extended expansionp. More...
 
const std::shared_ptr< LocalRegions::ExpansionVectorGetExp () const
 This function returns the vector of elements in the expansion. More...
 
LocalRegions::ExpansionSharedPtrGetExp (int n) const
 This function returns (a shared pointer to) the local elemental expansion of the \(n^{\mathrm{th}}\) element. More...
 
LocalRegions::ExpansionSharedPtrGetExp (const Array< OneD, const NekDouble > &gloCoord)
 This function returns (a shared pointer to) the local elemental expansion containing the arbitrary point given by gloCoord. More...
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoord, NekDouble tol=0.0, bool returnNearestElmt=false)
 
int GetExpIndex (const Array< OneD, const NekDouble > &gloCoords, Array< OneD, NekDouble > &locCoords, NekDouble tol=0.0, bool returnNearestElmt=false)
 
NekDouble PhysEvaluate (const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &phys)
 
int GetCoeff_Offset (int n) const
 Get the start offset position for a global list of m_coeffs correspoinding to element n. More...
 
int GetPhys_Offset (int n) const
 Get the start offset position for a global list of m_phys correspoinding to element n. More...
 
Array< OneD, NekDouble > & UpdateCoeffs ()
 This function returns (a reference to) the array \(\boldsymbol{\hat{u}}_l\) (implemented as m_coeffs) containing all local expansion coefficients. More...
 
Array< OneD, NekDouble > & UpdatePhys ()
 This function returns (a reference to) the array \(\boldsymbol{u}_l\) (implemented as m_phys) containing the function \(u^{\delta}(\boldsymbol{x})\) evaluated at the quadrature points. More...
 
void PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
 This function discretely evaluates the derivative of a function \(f(\boldsymbol{x})\) on the domain consisting of all elements of the expansion. More...
 
void PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
void CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
void PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
const Array< OneD, const std::shared_ptr< ExpList > > & GetBndCondExpansions ()
 
std::shared_ptr< ExpList > & UpdateBndCondExpansion (int i)
 
void Upwind (const Array< OneD, const Array< OneD, NekDouble > > &Vec, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
void Upwind (const Array< OneD, const NekDouble > &Vn, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
 
std::shared_ptr< ExpList > & GetTrace ()
 
std::shared_ptr< AssemblyMapDG > & GetTraceMap (void)
 
const Array< OneD, const int > & GetTraceBndMap (void)
 
void GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 
void AddTraceIntegral (const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
void AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
 
void AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
 
void GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
void GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
const std::vector< bool > & GetLeftAdjacentFaces (void) const
 
void ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
void ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions ()
 
Array< OneD, SpatialDomains::BoundaryConditionShPtr > & UpdateBndConditions ()
 
void EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
 
void GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 This function calculates the result of the multiplication of a matrix of type specified by mkey with a vector given by inarray. More...
 
void GeneralMatrixOp_IterPerExp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
void SetUpPhysNormals ()
 
void GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
 
void GetBndElmtExpansion (int i, 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)
 
const NekOptimize::GlobalOptParamSharedPtrGetGlobalOptParam (void)
 
std::map< int, RobinBCInfoSharedPtrGetRobinBCInfo ()
 
void GetPeriodicEntities (PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces=NullPeriodicMap)
 
std::vector< LibUtilities::FieldDefinitionsSharedPtrGetFieldDefinitions ()
 
void GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 Append the element data listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 Append the data in coeffs listed in elements fielddef->m_ElementIDs onto fielddata. More...
 
void ExtractElmtDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract the data in fielddata into the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 Extract the data from fromField using fromExpList the coeffs using the basic ExpList Elemental expansions rather than planes in homogeneous case. More...
 
void ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract the data in fielddata into the coeffs. More...
 
void GenerateElementVector (const int ElementID, const NekDouble scalar1, const NekDouble scalar2, Array< OneD, NekDouble > &outarray)
 Generate vector v such that v[i] = scalar1 if i is in the element < ElementID. Otherwise, v[i] = scalar2. More...
 
std::shared_ptr< ExpListGetSharedThisPtr ()
 Returns a shared pointer to the current object. More...
 
std::shared_ptr< LibUtilities::SessionReaderGetSession () const
 Returns the session object. More...
 
std::shared_ptr< LibUtilities::CommGetComm ()
 Returns the comm object. More...
 
SpatialDomains::MeshGraphSharedPtr GetGraph ()
 
LibUtilities::BasisSharedPtr GetHomogeneousBasis (void)
 
std::shared_ptr< ExpList > & GetPlane (int n)
 
void CreateCollections (Collections::ImplementationType ImpType=Collections::eNoImpType)
 Construct collections of elements containing a single element type and polynomial order from the list of expansions. More...
 
void ClearGlobalLinSysManager (void)
 

Protected Member Functions

void GenerateBoundaryConditionExpansion (const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 Discretises the boundary conditions. More...
 
void FindPeriodicVertices (const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 Generate a associative map of periodic vertices in a mesh. More...
 
virtual ExpListSharedPtrv_GetTrace ()
 
virtual AssemblyMapDGSharedPtrv_GetTraceMap (void)
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetFwdBwdTracePhys (Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 
virtual void v_GetFwdBwdTracePhys (const Array< OneD, const NekDouble > &field, Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
 This method extracts the "forward" and "backward" trace data from the array field and puts the data into output vectors Fwd and Bwd. More...
 
virtual void v_ExtractTracePhys (Array< OneD, NekDouble > &outarray)
 
virtual void v_ExtractTracePhys (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 This method extracts the trace (verts in 1D) from the field inarray and puts the values in outarray. More...
 
void SetBoundaryConditionExpansion (const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, Array< OneD, MultiRegions::ExpListSharedPtr > &bndCondExpansions, Array< OneD, SpatialDomains ::BoundaryConditionShPtr > &bndConditions)
 Populates the list of boundary condition expansions. More...
 
void SetMultiDomainBoundaryConditionExpansion (const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, Array< OneD, MultiRegions::ExpListSharedPtr > &bndCondExpansions, Array< OneD, SpatialDomains ::BoundaryConditionShPtr > &bndConditions, int subdomain)
 Populates the list of boundary condition expansions in multidomain case. More...
 
void GenerateFieldBnd1D (SpatialDomains::BoundaryConditions &bcs, const std::string variable)
 
virtual std::map< int, RobinBCInfoSharedPtrv_GetRobinBCInfo ()
 
virtual const Array< OneD, const MultiRegions::ExpListSharedPtr > & v_GetBndCondExpansions ()
 
virtual const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & v_GetBndConditions ()
 
virtual MultiRegions::ExpListSharedPtrv_UpdateBndCondExpansion (int i)
 
virtual Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions ()
 
virtual void v_GetBoundaryToElmtMap (Array< OneD, int > &ElmtID, Array< OneD, int > &VertID)
 
virtual void v_GetBndElmtExpansion (int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays)
 
virtual void v_Reset ()
 Reset this field, so that geometry information can be updated. More...
 
virtual void v_EvaluateBoundaryConditions (const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
 Evaluate all boundary conditions at a given time.. More...
 
virtual void v_HelmSolve (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const MultiRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
 Solve the Helmholtz equation. More...
 
- Protected Member Functions inherited from Nektar::MultiRegions::ExpList1D
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)
 Upwind the Fwd and Bwd states based on the velocity field given by Vec. More...
 
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)
 Upwind the Fwd and Bwd states based on the one- dimensional normal velocity field given by Vn. More...
 
void v_GetNormals (Array< OneD, Array< OneD, NekDouble > > &normals)
 Populate normals with the normals of all expansions. More...
 
- Protected Member Functions inherited from Nektar::MultiRegions::ExpList
void SetCoeffPhysOffsets ()
 Definition of the total number of degrees of freedom and quadrature points and offsets to access data. More...
 
std::shared_ptr< DNekMatGenGlobalMatrixFull (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 
const DNekScalBlkMatSharedPtr GenBlockMatrix (const GlobalMatrixKey &gkey)
 This function assembles the block diagonal matrix of local matrices of the type mtype. More...
 
const DNekScalBlkMatSharedPtrGetBlockMatrix (const GlobalMatrixKey &gkey)
 
void MultiplyByBlockMatrix (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
std::shared_ptr< GlobalMatrixGenGlobalMatrix (const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 Generates a global matrix from the given key and map. More...
 
void GlobalEigenSystem (const std::shared_ptr< DNekMat > &Gmat, Array< OneD, NekDouble > &EigValsReal, Array< OneD, NekDouble > &EigValsImag, Array< OneD, NekDouble > &EigVecs=NullNekDouble1DArray)
 
std::shared_ptr< GlobalLinSysGenGlobalLinSys (const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
 This operation constructs the global linear system of type mkey. More...
 
std::shared_ptr< GlobalLinSysGenGlobalBndLinSys (const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
 Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocToGloBaseMap. More...
 
void ReadGlobalOptimizationParameters ()
 
virtual int v_GetNumElmts (void)
 
virtual const Array< OneD, const int > & v_GetTraceBndMap ()
 
virtual void v_AddTraceIntegral (const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
virtual void v_AddFwdBwdTraceIntegral (const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
 
virtual const std::vector< bool > & v_GetLeftAdjacentFaces (void) const
 
virtual void v_MultiplyByInvMassMatrix (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_LinearAdvectionDiffusionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual void v_LinearAdvectionReactionSolve (const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
 
virtual void v_ImposeDirichletConditions (Array< OneD, NekDouble > &outarray)
 
virtual void v_FillBndCondFromField ()
 
virtual void v_FillBndCondFromField (const int nreg)
 
virtual void v_LocalToGlobal (bool UseComm)
 
virtual void v_LocalToGlobal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool UseComm)
 
virtual void v_GlobalToLocal (void)
 
virtual void v_GlobalToLocal (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_BwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_BwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_FwdTrans_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_FwdTrans_BndConstrained (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_SmoothField (Array< OneD, NekDouble > &field)
 
virtual void v_IProductWRTBase (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_IProductWRTBase_IterPerExp (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GeneralMatrixOp (const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
 
virtual void v_GetCoords (Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
 
virtual void v_PhysDeriv (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
 
virtual void v_PhysDeriv (const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_PhysDeriv (Direction edir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d)
 
virtual void v_CurlCurl (Array< OneD, Array< OneD, NekDouble > > &Vel, Array< OneD, Array< OneD, NekDouble > > &Q)
 
virtual void v_PhysDirectionalDeriv (const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_GetMovingFrames (const SpatialDomains::GeomMMF MMFdir, const Array< OneD, const NekDouble > &CircCentre, Array< OneD, Array< OneD, NekDouble > > &outarray)
 
virtual void v_HomogeneousFwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
virtual void v_HomogeneousBwdTrans (const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
 
virtual void v_DealiasedProd (const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
 
virtual void v_DealiasedDotProd (const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray, CoeffState coeffstate=eLocal)
 
virtual void v_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_ExtractElmtToBndPhys (const int i, const Array< OneD, NekDouble > &elmt, Array< OneD, NekDouble > &boundary)
 
virtual void v_ExtractPhysToBndElmt (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bndElmt)
 
virtual void v_ExtractPhysToBnd (const int i, const Array< OneD, const NekDouble > &phys, Array< OneD, NekDouble > &bnd)
 
virtual void v_GetBoundaryNormals (int i, Array< OneD, Array< OneD, NekDouble > > &normals)
 
virtual std::vector< LibUtilities::FieldDefinitionsSharedPtrv_GetFieldDefinitions (void)
 
virtual void v_GetFieldDefinitions (std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
 
virtual void v_AppendFieldData (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, Array< OneD, NekDouble > &coeffs)
 
virtual void v_ExtractDataToCoeffs (LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
 Extract data from raw field data into expansion list. More...
 
virtual void v_ExtractCoeffsToCoeffs (const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
 
virtual void v_WriteTecplotHeader (std::ostream &outfile, std::string var="")
 
virtual void v_WriteTecplotZone (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotField (std::ostream &outfile, int expansion)
 
virtual void v_WriteTecplotConnectivity (std::ostream &outfile, int expansion)
 
virtual void v_WriteVtkPieceData (std::ostream &outfile, int expansion, std::string var)
 
virtual NekDouble v_L2 (const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
 
virtual NekDouble v_Integral (const Array< OneD, const NekDouble > &inarray)
 
virtual NekDouble v_VectorFlux (const Array< OneD, Array< OneD, NekDouble > > &inarray)
 
virtual Array< OneD, const NekDoublev_HomogeneousEnergy (void)
 
virtual LibUtilities::TranspositionSharedPtr v_GetTransposition (void)
 
virtual NekDouble v_GetHomoLen (void)
 
virtual void v_SetHomoLen (const NekDouble lhom)
 
virtual Array< OneD, const unsigned int > v_GetZIDs (void)
 
virtual Array< OneD, const unsigned int > v_GetYIDs (void)
 
virtual void v_PhysInterp1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_PhysGalerkinProjection1DScaled (const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
 
virtual void v_ClearGlobalLinSysManager (void)
 
void ExtractFileBCs (const std::string &fileName, LibUtilities::CommSharedPtr comm, const std::string &varName, const std::shared_ptr< ExpList > locExpList)
 

Protected Attributes

int m_numDirBndCondExpansions
 The number of boundary segments on which Dirichlet boundary conditions are imposed. More...
 
Array< OneD, MultiRegions::ExpListSharedPtrm_bndCondExpansions
 Discretised boundary conditions. More...
 
Array< OneD, SpatialDomains::BoundaryConditionShPtrm_bndConditions
 An array which contains the information about the boundary condition on the different boundary regions. More...
 
GlobalLinSysMapShPtr m_globalBndMat
 Global boundary matrix. More...
 
ExpListSharedPtr m_trace
 Trace space storage for points between elements. More...
 
AssemblyMapDGSharedPtr m_traceMap
 Local to global DG mapping for trace space. More...
 
std::set< int > m_boundaryVerts
 A set storing the global IDs of any boundary edges. More...
 
PeriodicMap m_periodicVerts
 A map which identifies groups of periodic vertices. More...
 
std::vector< int > m_periodicFwdCopy
 A vector indicating degress of freedom which need to be copied from forwards to backwards space in case of a periodic boundary condition. More...
 
std::vector< int > m_periodicBwdCopy
 
std::vector< bool > m_leftAdjacentVerts
 
- Protected Attributes inherited from Nektar::MultiRegions::ExpList
LibUtilities::CommSharedPtr m_comm
 Communicator. More...
 
LibUtilities::SessionReaderSharedPtr m_session
 Session. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Mesh associated with this expansion list. More...
 
int m_ncoeffs
 The total number of local degrees of freedom. m_ncoeffs \(=N_{\mathrm{eof}}=\sum_{e=1}^{{N_{\mathrm{el}}}}N^{e}_l\). More...
 
int m_npoints
 
Array< OneD, NekDoublem_coeffs
 Concatenation of all local expansion coefficients. More...
 
Array< OneD, NekDoublem_phys
 The global expansion evaluated at the quadrature points. More...
 
bool m_physState
 The state of the array m_phys. More...
 
std::shared_ptr< LocalRegions::ExpansionVectorm_exp
 The list of local expansions. More...
 
Collections::CollectionVector m_collections
 
std::vector< int > m_coll_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
std::vector< int > m_coll_phys_offset
 Offset of elemental data into the array m_phys. More...
 
Array< OneD, int > m_coeff_offset
 Offset of elemental data into the array m_coeffs. More...
 
Array< OneD, int > m_phys_offset
 Offset of elemental data into the array m_phys. More...
 
NekOptimize::GlobalOptParamSharedPtr m_globalOptParam
 
BlockMatrixMapShPtr m_blockMat
 
bool m_WaveSpace
 
std::unordered_map< int, int > m_elmtToExpId
 Mapping from geometry ID of element to index inside m_exp. More...
 

Private Member Functions

void SetUpDG (const std::string &variable)
 
bool IsLeftAdjacentVertex (const int n, const int e)
 
SpatialDomains::BoundaryConditionsSharedPtr GetDomainBCs (const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable)
 

Private Attributes

std::vector< bool > m_negatedFluxNormal
 

Additional Inherited Members

- Public Attributes inherited from Nektar::MultiRegions::ExpList
ExpansionType m_expType
 
- 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 discontinuous two- dimensional spectral/hp element expansion which approximates the solution of a set of partial differential equations.

This class augments the list of local expansions inherited from ExpList1D with boundary conditions. Inter-element boundaries are handled using an discontinuous Galerkin scheme.

Definition at line 54 of file DisContField1D.h.

Constructor & Destructor Documentation

◆ DisContField1D() [1/5]

Nektar::MultiRegions::DisContField1D::DisContField1D ( )

Default constructor.

Constructs an empty expansion list with no boundary conditions.

Definition at line 59 of file DisContField1D.cpp.

59  :
60  ExpList1D(),
63  {
64  }
ExpList1D()
The default constructor.
Definition: ExpList1D.cpp:78
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ DisContField1D() [2/5]

Nektar::MultiRegions::DisContField1D::DisContField1D ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr graph1D,
const std::string &  variable,
const bool  SetUpJustDG = true,
const Collections::ImplementationType  ImpType = Collections::eNoImpType 
)

Constructs a 1D discontinuous field based on a mesh and boundary conditions.

An expansion list for the boundary expansions is generated first for the field. These are subsequently evaluated for time zero. The trace map is then constructed.

Parameters
graph1DA mesh, containing information about the domain and the spectral/hp element expansions.
bcsInformation about the enforced boundary conditions.
variableThe session variable associated with the boundary conditions to enforce.
solnTypeType of global system to use.

Definition at line 79 of file DisContField1D.cpp.

References Nektar::MultiRegions::ExpList::ApplyGeomInfo(), Nektar::MultiRegions::ExpList::EvaluateBoundaryConditions(), FindPeriodicVertices(), GenerateBoundaryConditionExpansion(), Nektar::MultiRegions::ExpList::GetBoundaryToElmtMap(), m_bndCondExpansions, Nektar::MultiRegions::ExpList::m_session, SetUpDG(), and Nektar::MultiRegions::ExpList::SetUpPhysNormals().

85  : ExpList1D(pSession,graph1D,true, ImpType),
88  {
89  if (variable.compare("DefaultVar") != 0)
90  {
91  SpatialDomains::BoundaryConditions bcs(m_session, graph1D);
92 
93  GenerateBoundaryConditionExpansion(graph1D,bcs,variable);
94  EvaluateBoundaryConditions(0.0, variable);
95  ApplyGeomInfo();
96  FindPeriodicVertices(bcs,variable);
97  }
98 
99  if(SetUpJustDG)
100  {
101  SetUpDG(variable);
102  }
103  else
104  {
105  int i;
106  Array<OneD, int> ElmtID, VertexID;
107  GetBoundaryToElmtMap(ElmtID, VertexID);
108 
109  for(i = 0; i < m_bndCondExpansions.num_elements(); ++i)
110  {
112  locExpList = m_bndCondExpansions[i];
113 
115  (*m_exp)[ElmtID[i]]->
116  as<LocalRegions::Expansion1D>();
118  locExpList->GetExp(0)->
119  as<LocalRegions::Expansion0D>();
120 
121  exp0d->SetAdjacentElementExp(VertexID[i], exp1d);
122  }
123 
125  }
126 
127  }
ExpList1D()
The default constructor.
Definition: ExpList1D.cpp:78
void EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
Definition: ExpList.h:2356
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
void FindPeriodicVertices(const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Generate a associative map of periodic vertices in a mesh.
void SetUpDG(const std::string &variable)
void GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
Definition: ExpList.h:2409
void ApplyGeomInfo()
Apply geometry information to each expansion.
Definition: ExpList.cpp:1570
std::shared_ptr< Expansion0D > Expansion0DSharedPtr
Definition: Expansion0D.h:48
void GenerateBoundaryConditionExpansion(const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Discretises the boundary conditions.
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1023
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
std::shared_ptr< Expansion1D > Expansion1DSharedPtr
Definition: Expansion1D.h:51

◆ DisContField1D() [3/5]

Nektar::MultiRegions::DisContField1D::DisContField1D ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr graph1D,
const SpatialDomains::CompositeMap domain,
const SpatialDomains::BoundaryConditions Allbcs,
const std::string &  variable,
bool  SetToOneSpaceDimension = false,
const Collections::ImplementationType  ImpType = Collections::eNoImpType 
)

Constructor for a DisContField1D from a List of subdomains New Constructor for arterial network.

Constructor for use in multidomain computations where a domain list can be passed instead of graph1D

Parameters
domainSubdomain specified in the inputfile from which the DisContField1D is set up

Definition at line 468 of file DisContField1D.cpp.

References Nektar::MultiRegions::ExpList::ApplyGeomInfo(), Nektar::MultiRegions::ExpList::EvaluateBoundaryConditions(), FindPeriodicVertices(), GenerateBoundaryConditionExpansion(), GetDomainBCs(), Nektar::MultiRegions::ExpList::m_graph, and SetUpDG().

475  :
476  ExpList1D(pSession,graph1D,domain, true,variable,SetToOneSpaceDimension,ImpType),
479  {
480  if (variable.compare("DefaultVar") != 0)
481  {
482  SpatialDomains::BoundaryConditionsSharedPtr DomBCs = GetDomainBCs(domain,Allbcs,variable);
483 
485  EvaluateBoundaryConditions(0.0, variable);
486  ApplyGeomInfo();
487  FindPeriodicVertices(*DomBCs,variable);
488  }
489 
490  SetUpDG(variable);
491  }
ExpList1D()
The default constructor.
Definition: ExpList1D.cpp:78
void EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
Definition: ExpList.h:2356
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition: Conditions.h:289
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
void FindPeriodicVertices(const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Generate a associative map of periodic vertices in a mesh.
SpatialDomains::BoundaryConditionsSharedPtr GetDomainBCs(const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable)
void SetUpDG(const std::string &variable)
void ApplyGeomInfo()
Apply geometry information to each expansion.
Definition: ExpList.cpp:1570
SpatialDomains::MeshGraphSharedPtr m_graph
Mesh associated with this expansion list.
Definition: ExpList.h:1026
void GenerateBoundaryConditionExpansion(const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Discretises the boundary conditions.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ DisContField1D() [4/5]

Nektar::MultiRegions::DisContField1D::DisContField1D ( const DisContField1D In)

Constructs a 1D discontinuous field based on an existing field.

Constructs a field as a copy of an existing field.

Parameters
InExisting DisContField1D object to copy.

Definition at line 497 of file DisContField1D.cpp.

497  :
498  ExpList1D(In),
499  m_bndCondExpansions(In.m_bndCondExpansions),
500  m_bndConditions(In.m_bndConditions),
501  m_globalBndMat(In.m_globalBndMat),
502  m_trace(In.m_trace),
503  m_traceMap(In.m_traceMap),
504  m_boundaryVerts(In.m_boundaryVerts),
505  m_periodicVerts(In.m_periodicVerts),
506  m_periodicFwdCopy(In.m_periodicFwdCopy),
507  m_periodicBwdCopy(In.m_periodicBwdCopy),
508  m_leftAdjacentVerts(In.m_leftAdjacentVerts)
509  {
510  }
ExpList1D()
The default constructor.
Definition: ExpList1D.cpp:78
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
GlobalLinSysMapShPtr m_globalBndMat
Global boundary matrix.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
std::set< int > m_boundaryVerts
A set storing the global IDs of any boundary edges.
ExpListSharedPtr m_trace
Trace space storage for points between elements.
std::vector< int > m_periodicFwdCopy
A vector indicating degress of freedom which need to be copied from forwards to backwards space in ca...
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.

◆ DisContField1D() [5/5]

Nektar::MultiRegions::DisContField1D::DisContField1D ( const ExpList1D In)

Constructs a 1D discontinuous field based on an existing field. (needed in order to use ContField( const ExpList1D &In) constructor.

Constructs a field as a copy of an existing explist1D field.

Parameters
InExisting ExpList1D object to copy.

Definition at line 517 of file DisContField1D.cpp.

517  :
518  ExpList1D(In)
519  {
520  }
ExpList1D()
The default constructor.
Definition: ExpList1D.cpp:78

◆ ~DisContField1D()

Nektar::MultiRegions::DisContField1D::~DisContField1D ( )
virtual

Destructor.

Definition at line 525 of file DisContField1D.cpp.

526  {
527  }

Member Function Documentation

◆ FindPeriodicVertices()

void Nektar::MultiRegions::DisContField1D::FindPeriodicVertices ( const SpatialDomains::BoundaryConditions bcs,
const std::string  variable 
)
protected

Generate a associative map of periodic vertices in a mesh.

Parameters
graph1DA mesh containing information about the domain and the spectral/hp element expansion.
bcsInformation about the boundary conditions.
variableSpecifies the field.
periodicVerticesMap into which the list of periodic vertices is placed.

Definition at line 582 of file DisContField1D.cpp.

References ASSERTL0, Nektar::StdRegions::eNoOrientation, Nektar::SpatialDomains::ePeriodic, Nektar::MultiRegions::ExpList::GetBoundaryCondition(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryConditions(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryRegions(), m_periodicVerts, Nektar::MultiRegions::ExpList::m_session, CellMLToNektar.cellml_metadata::p, Nektar::LibUtilities::ReduceSum, and Vmath::Vsum().

Referenced by DisContField1D().

585  {
587  = bcs.GetBoundaryRegions();
589  = bcs.GetBoundaryConditions();
590 
592  m_session->GetComm()->GetRowComm();
593 
594  int i, region1ID, region2ID;
595 
597 
598  map<int,int> BregionToVertMap;
599 
600  // Construct list of all periodic Region and their global vertex on
601  // this process.
602  for (auto &it : bregions)
603  {
604  locBCond = GetBoundaryCondition(bconditions, it.first, variable);
605 
606  if (locBCond->GetBoundaryConditionType()
608  {
609  continue;
610  }
611  int id = it.second->begin()->second->m_geomVec[0]->GetGlobalID();
612 
613  BregionToVertMap[it.first] = id;
614  }
615 
616  set<int> islocal;
617 
618  int n = vComm->GetSize();
619  int p = vComm->GetRank();
620 
621  Array<OneD, int> nregions(n, 0);
622  nregions[p] = BregionToVertMap.size();
623  vComm->AllReduce(nregions, LibUtilities::ReduceSum);
624 
625  int totRegions = Vmath::Vsum(n, nregions, 1);
626 
627  Array<OneD, int> regOffset(n, 0);
628 
629  for (i = 1; i < n; ++i)
630  {
631  regOffset[i] = regOffset[i-1] + nregions[i-1];
632  }
633 
634  Array<OneD, int> bregmap(totRegions, 0);
635  Array<OneD, int> bregid (totRegions, 0);
636 
637  i = regOffset[p];
638  for (auto &iit : BregionToVertMap)
639  {
640  bregid [i ] = iit.first;
641  bregmap[i++] = iit.second;
642  islocal.insert(iit.first);
643  }
644 
645  vComm->AllReduce(bregmap, LibUtilities::ReduceSum);
646  vComm->AllReduce(bregid, LibUtilities::ReduceSum);
647 
648  for (int i = 0; i < totRegions; ++i)
649  {
650  BregionToVertMap[bregid[i]] = bregmap[i];
651  }
652 
653  // Construct list of all periodic pairs local to this process.
654  for (auto &it : bregions)
655  {
656  locBCond = GetBoundaryCondition(bconditions, it.first, variable);
657 
658  if (locBCond->GetBoundaryConditionType()
660  {
661  continue;
662  }
663 
664  // Identify periodic boundary region IDs.
665  region1ID = it.first;
666  region2ID = std::static_pointer_cast<
667  SpatialDomains::PeriodicBoundaryCondition>(
668  locBCond)->m_connectedBoundaryRegion;
669 
670  ASSERTL0(BregionToVertMap.count(region1ID) != 0,
671  "Cannot determine vertex of region1ID");
672 
673  ASSERTL0(BregionToVertMap.count(region2ID) != 0,
674  "Cannot determine vertex of region2ID");
675 
676  PeriodicEntity ent(BregionToVertMap[region2ID],
678  islocal.count(region2ID) != 0);
679 
680  m_periodicVerts[BregionToVertMap[region1ID]].push_back(ent);
681  }
682  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition: Comm.h:53
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:217
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1023
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:226
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:219
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
Definition: ExpList.cpp:3261
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
Definition: Vmath.cpp:740

◆ GenerateBoundaryConditionExpansion()

void Nektar::MultiRegions::DisContField1D::GenerateBoundaryConditionExpansion ( const SpatialDomains::MeshGraphSharedPtr graph1D,
const SpatialDomains::BoundaryConditions bcs,
const std::string  variable 
)
protected

Discretises the boundary conditions.

Generate the boundary condition expansion list

Parameters
graph1DA mesh, containing information about the domain and the spectral/hp element expansions.
bcsInformation about the enforced boundary conditions.
variableThe session variable associated with the boundary conditions to enforce.

Definition at line 539 of file DisContField1D.cpp.

References Nektar::MultiRegions::ExpList::GetBoundaryCondition(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryConditions(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryRegions(), m_bndCondExpansions, m_bndConditions, and SetBoundaryConditionExpansion().

Referenced by DisContField1D().

543  {
544  int cnt = 0;
545 
547  = bcs.GetBoundaryRegions();
549  = bcs.GetBoundaryConditions();
550 
551  // count the number of non-periodic boundary points
552  for (auto &it : bregions)
553  {
554  const SpatialDomains::BoundaryConditionShPtr boundaryCondition =
555  GetBoundaryCondition(bconditions, it.first, variable);
556  SpatialDomains::BoundaryRegion::iterator bregionIt;
557  for (auto &bregionIt : *(it.second))
558  {
559  cnt += bregionIt.second->m_geomVec.size();
560  }
561  }
562 
564  = Array<OneD,MultiRegions::ExpListSharedPtr>(cnt);
566  = Array<OneD,SpatialDomains::BoundaryConditionShPtr>(cnt);
567 
568  SetBoundaryConditionExpansion(graph1D,bcs,variable,
570  m_bndConditions);
571  }
void SetBoundaryConditionExpansion(const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, Array< OneD, MultiRegions::ExpListSharedPtr > &bndCondExpansions, Array< OneD, SpatialDomains ::BoundaryConditionShPtr > &bndConditions)
Populates the list of boundary condition expansions.
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:217
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:226
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:219
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
Definition: ExpList.cpp:3261

◆ GenerateFieldBnd1D()

void Nektar::MultiRegions::DisContField1D::GenerateFieldBnd1D ( SpatialDomains::BoundaryConditions bcs,
const std::string  variable 
)
protected

Referenced by v_GetTraceMap().

◆ GetDomainBCs()

SpatialDomains::BoundaryConditionsSharedPtr Nektar::MultiRegions::DisContField1D::GetDomainBCs ( const SpatialDomains::CompositeMap domain,
const SpatialDomains::BoundaryConditions Allbcs,
const std::string &  variable 
)
private

Definition at line 354 of file DisContField1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL1, Nektar::SpatialDomains::BoundaryConditions::GetBoundaryConditions(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryRegions(), and Nektar::MultiRegions::ExpList::m_session.

Referenced by DisContField1D().

358  {
360 
362 
363  map<int,int> GeometryToRegionsMap;
364 
366  = Allbcs.GetBoundaryRegions();
368  = Allbcs.GetBoundaryConditions();
369 
370  // Set up a map of all boundary regions
371  for(auto &it : bregions)
372  {
373  for (auto &bregionIt : *it.second)
374  {
375  // can assume that all regions only contain one point in 1D
376  // Really do not need loop above
377  int id = bregionIt.second->m_geomVec[0]->GetGlobalID();
378  GeometryToRegionsMap[id] = it.first;
379  }
380  }
381 
382  map<int,SpatialDomains::GeometrySharedPtr> EndOfDomain;
383 
384  // Now find out which points in domain have only one vertex
385  for(auto &domIt : domain)
386  {
387  SpatialDomains::CompositeSharedPtr geomvector = domIt.second;
388  for(int i = 0; i < geomvector->m_geomVec.size(); ++i)
389  {
390  for(int j = 0; j < 2; ++j)
391  {
392  int vid = geomvector->m_geomVec[i]->GetVid(j);
393  if(EndOfDomain.count(vid) == 0)
394  {
395  EndOfDomain[vid] = geomvector->m_geomVec[i]->GetVertex(j);
396  }
397  else
398  {
399  EndOfDomain.erase(vid);
400  }
401  }
402  }
403  }
404  ASSERTL1(EndOfDomain.size() == 2,"Did not find two ends of domain");
405 
406  int numNewBc = 1;
407  for(auto &regIt : EndOfDomain)
408  {
409  if(GeometryToRegionsMap.count(regIt.first) != 0)
410  {
411  // Set up boundary condition up
412  auto iter = GeometryToRegionsMap.find(regIt.first);
413  ASSERTL1(iter != GeometryToRegionsMap.end(),
414  "Failied to find GeometryToRegionMap");
415 
416  int regionId = iter->second;
417  auto bregionsIter = bregions.find(regionId);
418  ASSERTL1(bregionsIter != bregions.end(),
419  "Failed to find boundary region");
420 
422  bregionsIter->second;
423  returnval->AddBoundaryRegions(regionId, breg);
424 
425  auto bconditionsIter = bconditions.find(regionId);
426  ASSERTL1(bconditionsIter != bconditions.end(),
427  "Failed to find boundary collection");
428 
430  bconditionsIter->second;
431  returnval->AddBoundaryConditions(regionId,bcond);
432  }
433  else // Set up an undefined region.
434  {
436 
437  // Set up Composite (GemetryVector) to contain vertex and put into bRegion
441  gvec->m_geomVec.push_back(regIt.second);
442  (*breg)[regIt.first] = gvec;
443 
444  returnval->AddBoundaryRegions(bregions.size()+numNewBc,breg);
445 
447 
448  // Set up just boundary condition for this variable.
450  (*bCondition)[variable] = notDefinedCondition;
451 
452  returnval->AddBoundaryConditions(bregions.size()+numNewBc,bCondition);
453  ++numNewBc;
454 
455  }
456  }
457 
458  return returnval;
459  }
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition: Conditions.h:289
std::shared_ptr< Composite > CompositeSharedPtr
Definition: MeshGraph.h:136
std::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Definition: Conditions.h:225
std::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Definition: Conditions.h:215
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:217
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1023
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:226
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:219
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ GetGlobalBndLinSys()

GlobalLinSysSharedPtr Nektar::MultiRegions::DisContField1D::GetGlobalBndLinSys ( const GlobalLinSysKey mkey)

For a given key, returns the associated global linear system.

Definition at line 752 of file DisContField1D.cpp.

References ASSERTL0, ASSERTL1, Nektar::MultiRegions::eDirectFullMatrix, Nektar::StdRegions::eHybridDGHelmBndLam, Nektar::MultiRegions::ExpList::GenGlobalBndLinSys(), Nektar::MultiRegions::GlobalLinSysKey::GetGlobalSysSolnType(), Nektar::MultiRegions::GlobalMatrixKey::GetMatrixType(), m_globalBndMat, and m_traceMap.

Referenced by v_HelmSolve().

754  {
755  ASSERTL0(mkey.GetMatrixType() == StdRegions::eHybridDGHelmBndLam,
756  "Routine currently only tested for HybridDGHelmholtz");
757 
758  ASSERTL1(mkey.GetGlobalSysSolnType() != eDirectFullMatrix,
759  "Full matrix global systems are not supported for HDG "
760  "expansions");
761 
762  ASSERTL1(mkey.GetGlobalSysSolnType()
763  ==m_traceMap->GetGlobalSysSolnType(),
764  "The local to global map is not set up for the requested "
765  "solution type");
766 
767  GlobalLinSysSharedPtr glo_matrix;
768  auto matrixIter = m_globalBndMat->find(mkey);
769 
770  if (matrixIter == m_globalBndMat->end())
771  {
772  glo_matrix = GenGlobalBndLinSys(mkey,m_traceMap);
773  (*m_globalBndMat)[mkey] = glo_matrix;
774  }
775  else
776  {
777  glo_matrix = matrixIter->second;
778  }
779 
780  return glo_matrix;
781  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
Definition: GlobalLinSys.h:50
std::shared_ptr< GlobalLinSys > GenGlobalBndLinSys(const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocTo...
Definition: ExpList.cpp:1381
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
GlobalLinSysMapShPtr m_globalBndMat
Global boundary matrix.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ GetNegatedFluxNormal()

vector< bool > & Nektar::MultiRegions::DisContField1D::GetNegatedFluxNormal ( void  )

Definition at line 784 of file DisContField1D.cpp.

References Nektar::MultiRegions::ExpList::GetExpSize(), m_negatedFluxNormal, and m_traceMap.

Referenced by v_AddTraceIntegral().

785  {
786  if(m_negatedFluxNormal.size() == 0)
787  {
788  Array<OneD, Array<OneD, LocalRegions::ExpansionSharedPtr> >
789  &elmtToTrace = m_traceMap->GetElmtToTrace();
790 
791  m_negatedFluxNormal.resize(2*GetExpSize());
792 
793  for(int i = 0; i < GetExpSize(); ++i)
794  {
795 
796  for(int v = 0; v < 2; ++v)
797  {
798 
800  elmtToTrace[i][v]->as<LocalRegions::Expansion0D>();
801 
802  if(vertExp->GetLeftAdjacentElementExp()->GetGeom()->GetGlobalID() != (*m_exp)[i]->GetGeom()->GetGlobalID())
803  {
804  m_negatedFluxNormal[2*i+v] = true;
805  }
806  else
807  {
808  m_negatedFluxNormal[2*i+v] = false;
809  }
810 
811  if(vertExp->GetLeftAdjacentElementExp()->
812  VertexNormalNegated(vertExp->GetLeftAdjacentElementVertex()))
813  {
814  m_negatedFluxNormal[2*i+v] =
815  (!m_negatedFluxNormal[2*i+v]);
816  }
817  }
818  }
819 
820  }
821 
822  return m_negatedFluxNormal;
823  }
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
std::shared_ptr< Expansion0D > Expansion0DSharedPtr
Definition: Expansion0D.h:48
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.

◆ IsLeftAdjacentVertex()

bool Nektar::MultiRegions::DisContField1D::IsLeftAdjacentVertex ( const int  n,
const int  e 
)
private

Definition at line 304 of file DisContField1D.cpp.

References ASSERTL2, m_boundaryVerts, Nektar::MultiRegions::ExpList::m_exp, m_periodicVerts, m_trace, and m_traceMap.

Referenced by SetUpDG(), and v_UpdateBndConditions().

305  {
307  m_traceMap->GetElmtToTrace()[n][e]->as<LocalRegions::Expansion0D>();
308 
309  bool fwd = true;
310  if (traceEl->GetLeftAdjacentElementVertex () == -1 ||
311  traceEl->GetRightAdjacentElementVertex() == -1)
312  {
313  // Boundary edge (1 connected element). Do nothing in
314  // serial.
315  auto it = m_boundaryVerts.find(traceEl->GetElmtId());
316 
317  // If the edge does not have a boundary condition set on
318  // it, then assume it is a partition edge or periodic.
319  if (it == m_boundaryVerts.end())
320  {
321  int traceGeomId = traceEl->GetGeom0D()->GetGlobalID();
322  auto pIt = m_periodicVerts.find(traceGeomId);
323 
324  if (pIt != m_periodicVerts.end() && !pIt->second[0].isLocal)
325  {
326  fwd = traceGeomId == min(traceGeomId,pIt->second[0].id);
327  }
328  else
329  {
330  int offset = m_trace->GetPhys_Offset(traceEl->GetElmtId());
331  fwd = m_traceMap->
332  GetTraceToUniversalMapUnique(offset) >= 0;
333  }
334  }
335  }
336  else if (traceEl->GetLeftAdjacentElementVertex () != -1 &&
337  traceEl->GetRightAdjacentElementVertex() != -1)
338  {
339  // Non-boundary edge (2 connected elements).
340  fwd = (traceEl->GetLeftAdjacentElementExp().get()) == (*m_exp)[n].get();
341  }
342  else
343  {
344  ASSERTL2(false, "Unconnected trace element!");
345  }
346 
347  return fwd;
348  }
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition: ExpList.h:1090
std::shared_ptr< Expansion0D > Expansion0DSharedPtr
Definition: Expansion0D.h:48
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
Definition: ErrorUtil.hpp:274
std::set< int > m_boundaryVerts
A set storing the global IDs of any boundary edges.
ExpListSharedPtr m_trace
Trace space storage for points between elements.
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.

◆ SetBoundaryConditionExpansion()

void Nektar::MultiRegions::DisContField1D::SetBoundaryConditionExpansion ( const SpatialDomains::MeshGraphSharedPtr graph1D,
const SpatialDomains::BoundaryConditions bcs,
const std::string  variable,
Array< OneD, MultiRegions::ExpListSharedPtr > &  bndCondExpansions,
Array< OneD, SpatialDomains ::BoundaryConditionShPtr > &  bndConditions 
)
protected

Populates the list of boundary condition expansions.

Parameters
graph1DA mesh containing information about the domain and the Spectral/hp element expansion.
bcsInformation about the boundary conditions.
variableSpecifies the field.
bndCondExpansionsArray of ExpList1D objects each containing a 1D spectral/hp element expansion on a single boundary region.
bncConditionsArray of BoundaryCondition objects which contain information about the boundary conditions on the different boundary regions.

Definition at line 697 of file DisContField1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::MultiRegions::ExpList::GetBoundaryCondition(), Nektar::SpatialDomains::BoundaryConditions::GetBoundaryConditions(), and Nektar::SpatialDomains::BoundaryConditions::GetBoundaryRegions().

Referenced by GenerateBoundaryConditionExpansion(), and v_GetTraceMap().

705  {
706  boost::ignore_unused(graph1D);
707 
708  int k;
709  int cnt = 0;
710 
712  = bcs.GetBoundaryRegions();
714  = bcs.GetBoundaryConditions();
715 
719 
720  cnt = 0;
721  for (auto &it : bregions)
722  {
723  locBCond = GetBoundaryCondition(bconditions, it.first, variable);
724 
725  for (auto &bregionIt : *(it.second))
726  {
727  for (k = 0; k < bregionIt.second->m_geomVec.size(); k++)
728  {
729  if((vert = std::dynamic_pointer_cast
730  <SpatialDomains::PointGeom>(
731  bregionIt.second->m_geomVec[k])))
732  {
733  locPointExp
736  bndCondExpansions[cnt] = locPointExp;
737  bndConditions[cnt++] = locBCond;
738  }
739  else
740  {
741  ASSERTL0(false,
742  "dynamic cast to a vertex failed");
743  }
744  }
745  }
746  }
747  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
std::shared_ptr< ExpList0D > ExpList0DSharedPtr
Shared pointer to an ExpList0D object.
Definition: ExpList0D.h:53
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:217
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:226
std::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:59
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:219
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
Definition: ExpList.cpp:3261

◆ SetMultiDomainBoundaryConditionExpansion()

void Nektar::MultiRegions::DisContField1D::SetMultiDomainBoundaryConditionExpansion ( const SpatialDomains::MeshGraphSharedPtr graph1D,
const SpatialDomains::BoundaryConditions bcs,
const std::string  variable,
Array< OneD, MultiRegions::ExpListSharedPtr > &  bndCondExpansions,
Array< OneD, SpatialDomains ::BoundaryConditionShPtr > &  bndConditions,
int  subdomain 
)
protected

Populates the list of boundary condition expansions in multidomain case.

Referenced by v_GetTraceMap().

◆ SetUpDG()

void Nektar::MultiRegions::DisContField1D::SetUpDG ( const std::string &  variable)
private

Definition at line 129 of file DisContField1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL1, Nektar::SpatialDomains::ePeriodic, Nektar::MultiRegions::PeriodicEntity::id, IsLeftAdjacentVertex(), Nektar::MultiRegions::PeriodicEntity::isLocal, m_bndCondExpansions, m_bndConditions, m_boundaryVerts, Nektar::MultiRegions::ExpList::m_exp, m_globalBndMat, Nektar::MultiRegions::ExpList::m_graph, m_leftAdjacentVerts, m_periodicBwdCopy, m_periodicFwdCopy, m_periodicVerts, Nektar::MultiRegions::ExpList::m_session, m_trace, m_traceMap, Nektar::MultiRegions::NullExpListSharedPtr, Nektar::LocalRegions::Expansion0D::SetAdjacentElementExp(), and Nektar::MultiRegions::ExpList::SetUpPhysNormals().

Referenced by DisContField1D(), and v_UpdateBndConditions().

130  {
131  // Check for multiple calls
133  {
134  return;
135  }
136 
138 
143  *m_exp,m_graph,
145 
146  m_trace = std::dynamic_pointer_cast<ExpList>(trace);
147 
149  AllocateSharedPtr(m_session, m_graph, trace, *this,
151  m_periodicVerts, variable);
152 
153  if (m_session->DefinesCmdLineArgument("verbose"))
154  {
155  m_traceMap->PrintStats(std::cout, variable);
156  }
157 
158  // Scatter trace points to 1D elements. For each element, we find
159  // the trace point associated to each vertex. The element then
160  // retains a pointer to the trace space points, to ensure
161  // uniqueness of normals when retrieving from two adjoining
162  // elements which do not lie in a plane.
163 
164  int ElmtPointGeom = 0;
165  int TracePointGeom = 0;
168  for (int i = 0; i < m_exp->size(); ++i)
169  {
170  exp1d = (*m_exp)[i]->as<LocalRegions::Expansion1D>();
171  for (int j = 0; j < exp1d->GetNverts(); ++j)
172  {
173  ElmtPointGeom = (exp1d->GetGeom1D())->GetVid(j);
174 
175  for (int k = 0; k < m_trace->GetExpSize(); ++k)
176  {
177  TracePointGeom = m_trace->GetExp(k)->GetGeom()->GetVid(0);
178 
179  if (TracePointGeom == ElmtPointGeom)
180  {
181  exp0d = m_trace->GetExp(k)->as<LocalRegions::Expansion0D>();
182  exp0d->SetAdjacentElementExp(j,exp1d);
183  break;
184  }
185  }
186  }
187  }
188 
190 
191  // Set up information for parallel and periodic problems.
192  for (int i = 0; i < m_trace->GetExpSize(); ++i)
193  {
195  m_trace->GetExp(i)->as<LocalRegions::Expansion0D>();
196 
197  int offset = m_trace->GetPhys_Offset(i);
198  int traceGeomId = traceEl->GetGeom0D()->GetGlobalID();
199  PeriodicMap::iterator pIt = m_periodicVerts.find(traceGeomId);
200 
201  if (pIt != m_periodicVerts.end() && !pIt->second[0].isLocal)
202  {
203  if (traceGeomId != min(pIt->second[0].id, traceGeomId))
204  {
205  traceEl->GetLeftAdjacentElementExp()->NegateVertexNormal(
206  traceEl->GetLeftAdjacentElementVertex());
207  }
208  }
209  else if (m_traceMap->GetTraceToUniversalMapUnique(offset) < 0)
210  {
211  traceEl->GetLeftAdjacentElementExp()->NegateVertexNormal(
212  traceEl->GetLeftAdjacentElementVertex());
213  }
214  }
215 
216  int cnt, n, e;
217 
218  // Identify boundary verts
219  for(cnt = 0, n = 0; n < m_bndCondExpansions.num_elements(); ++n)
220  {
221  if (m_bndConditions[n]->GetBoundaryConditionType() !=
223  {
224  for(e = 0; e < m_bndCondExpansions[n]->GetExpSize(); ++e)
225  {
226  m_boundaryVerts.insert(
227  m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt+e));
228  }
229  }
230  cnt += m_bndCondExpansions[n]->GetExpSize();
231  }
232 
233  // Set up left-adjacent edge list.
234  m_leftAdjacentVerts.resize(2*((*m_exp).size()));
235 
236  // count size of trace
237  for (cnt = n = 0; n < m_exp->size(); ++n)
238  {
239  for (int v = 0; v < (*m_exp)[n]->GetNverts(); ++v, ++cnt)
240  {
242  }
243  }
244 
245 
246  std::unordered_map<int,pair<int,int> > perVertToExpMap;
247  for (n = 0; n < m_exp->size(); ++n)
248  {
249  for (int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
250  {
251  auto it = m_periodicVerts.find(
252  (*m_exp)[n]->GetGeom()->GetVid(v));
253 
254  if (it != m_periodicVerts.end())
255  {
256  perVertToExpMap[it->first] = make_pair(n,v);
257  }
258  }
259  }
260 
261 
262  // Set up mapping to copy Fwd of periodic bcs to Bwd of other edge.
263  for (n = 0; n < m_exp->size(); ++n)
264  {
265  for (int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
266  {
267  int vertGeomId = (*m_exp)[n]->GetGeom()->GetVid(v);
268 
269  // Check to see if this face is periodic.
270  auto it = m_periodicVerts.find(vertGeomId);
271 
272  if (it != m_periodicVerts.end())
273  {
274  const PeriodicEntity &ent = it->second[0];
275  auto it2 = perVertToExpMap.find(ent.id);
276 
277  if (it2 == perVertToExpMap.end())
278  {
279  if (m_session->GetComm()->GetRowComm()->GetSize() > 1 &&
280  !ent.isLocal)
281  {
282  continue;
283  }
284  else
285  {
286  ASSERTL1(false, "Periodic vert not found!");
287  }
288  }
289 
290  int offset = m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
291  [n][v]->GetElmtId());
292  m_periodicFwdCopy.push_back(offset);
293 
294  int offset2 = m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
295  [it2->second.first]
296  [it2->second.second]->GetElmtId());
297  m_periodicBwdCopy.push_back(offset2);
298  }
299  }
300  }
301  }
ExpList()
The default constructor.
Definition: ExpList.cpp:96
static ExpListSharedPtr NullExpListSharedPtr
Definition: ExpList.h:1550
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition: ExpList.h:1090
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
std::shared_ptr< ExpList0D > ExpList0DSharedPtr
Shared pointer to an ExpList0D object.
Definition: ExpList0D.h:53
std::shared_ptr< Expansion0D > Expansion0DSharedPtr
Definition: Expansion0D.h:48
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
SpatialDomains::MeshGraphSharedPtr m_graph
Mesh associated with this expansion list.
Definition: ExpList.h:1026
LibUtilities::SessionReaderSharedPtr m_session
Session.
Definition: ExpList.h:1023
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
bool IsLeftAdjacentVertex(const int n, const int e)
GlobalLinSysMapShPtr m_globalBndMat
Global boundary matrix.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
std::set< int > m_boundaryVerts
A set storing the global IDs of any boundary edges.
ExpListSharedPtr m_trace
Trace space storage for points between elements.
std::vector< int > m_periodicFwdCopy
A vector indicating degress of freedom which need to be copied from forwards to backwards space in ca...
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250
std::shared_ptr< Expansion1D > Expansion1DSharedPtr
Definition: Expansion1D.h:51

◆ v_AddTraceIntegral()

void Nektar::MultiRegions::DisContField1D::v_AddTraceIntegral ( const Array< OneD, const NekDouble > &  Fn,
Array< OneD, NekDouble > &  outarray 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1005 of file DisContField1D.cpp.

References Nektar::LibUtilities::BasisManager(), Nektar::LibUtilities::eGauss_Lagrange, Nektar::LibUtilities::eGaussGaussLegendre, Nektar::MultiRegions::ExpList::GetCoeff_Offset(), Nektar::MultiRegions::ExpList::GetExpSize(), GetNegatedFluxNormal(), Nektar::MultiRegions::ExpList::GetTrace(), Nektar::MultiRegions::ExpList::m_exp, m_traceMap, and CellMLToNektar.cellml_metadata::p.

Referenced by v_GetTraceMap().

1008  {
1009  int n,offset, t_offset;
1010 
1011  Array<OneD, Array<OneD, LocalRegions::ExpansionSharedPtr> >
1012  &elmtToTrace = m_traceMap->GetElmtToTrace();
1013 
1014  vector<bool> negatedFluxNormal = GetNegatedFluxNormal();
1015 
1016  for (n = 0; n < GetExpSize(); ++n)
1017  {
1018  // Number of coefficients on each element
1019  int e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1020 
1021  offset = GetCoeff_Offset(n);
1022 
1023  // Implementation for every points except Gauss points
1024  if ((*m_exp)[n]->GetBasis(0)->GetBasisType() !=
1026  {
1027  t_offset = GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1028  if(negatedFluxNormal[2*n])
1029  {
1030  outarray[offset] -= Fn[t_offset];
1031  }
1032  else
1033  {
1034  outarray[offset] += Fn[t_offset];
1035  }
1036 
1037  t_offset = GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1038 
1039  if(negatedFluxNormal[2*n+1])
1040  {
1041  outarray[offset+(*m_exp)[n]->GetVertexMap(1)] -= Fn[t_offset];
1042  }
1043  else
1044  {
1045  outarray[offset+(*m_exp)[n]->GetVertexMap(1)] += Fn[t_offset];
1046  }
1047 
1048  }
1049  else
1050  {
1051 #if 0
1052  DNekMatSharedPtr m_Ixm;
1054  const LibUtilities::PointsKey
1055  BS_p(e_ncoeffs,LibUtilities::eGaussGaussLegendre);
1056  const LibUtilities::BasisKey
1057  BS_k(LibUtilities::eGauss_Lagrange,e_ncoeffs,BS_p);
1058 
1059  BASE = LibUtilities::BasisManager()[BS_k];
1060 
1061  Array<OneD, NekDouble> coords(3, 0.0);
1062 
1063  int j;
1064 
1065  for(p = 0; p < 2; ++p)
1066  {
1067  NekDouble vertnorm = 0.0;
1068  for (int i=0; i<((*m_exp)[n]->
1069  GetVertexNormal(p)).num_elements(); i++)
1070  {
1071  vertnorm += ((*m_exp)[n]->GetVertexNormal(p))[i][0];
1072  coords[0] = vertnorm ;
1073  }
1074 
1075  t_offset = GetTrace()->GetPhys_Offset(n+p);
1076 
1077  if (vertnorm >= 0.0)
1078  {
1079  m_Ixm = BASE->GetI(coords);
1080 
1081 
1082  for (j = 0; j < e_ncoeffs; j++)
1083  {
1084  outarray[offset + j] +=
1085  (m_Ixm->GetPtr())[j] * Fn[t_offset];
1086  }
1087  }
1088 
1089  if (vertnorm < 0.0)
1090  {
1091  m_Ixm = BASE->GetI(coords);
1092 
1093  for (j = 0; j < e_ncoeffs; j++)
1094  {
1095  outarray[offset + j] -=
1096  (m_Ixm->GetPtr())[j] * Fn[t_offset];
1097  }
1098  }
1099  }
1100 #else
1101  int j;
1102  static DNekMatSharedPtr m_Ixm, m_Ixp;
1103  static int sav_ncoeffs = 0;
1104  if(!m_Ixm.get() || e_ncoeffs != sav_ncoeffs)
1105  {
1107  const LibUtilities::PointsKey
1108  BS_p(e_ncoeffs,LibUtilities::eGaussGaussLegendre);
1109  const LibUtilities::BasisKey
1110  BS_k(LibUtilities::eGauss_Lagrange,e_ncoeffs,BS_p);
1111 
1112  BASE = LibUtilities::BasisManager()[BS_k];
1113 
1114  Array<OneD, NekDouble> coords(1, 0.0);
1115 
1116  coords[0] = -1.0;
1117  m_Ixm = BASE->GetI(coords);
1118 
1119  coords[0] = 1.0;
1120  m_Ixp = BASE->GetI(coords);
1121 
1122  sav_ncoeffs = e_ncoeffs;
1123  }
1124 
1125  t_offset = GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1126  if(negatedFluxNormal[2*n])
1127  {
1128  for (j = 0; j < e_ncoeffs; j++)
1129  {
1130  outarray[offset + j] -=
1131  (m_Ixm->GetPtr())[j] * Fn[t_offset];
1132  }
1133  }
1134  else
1135  {
1136  for (j = 0; j < e_ncoeffs; j++)
1137  {
1138  outarray[offset + j] +=
1139  (m_Ixm->GetPtr())[j] * Fn[t_offset];
1140  }
1141  }
1142 
1143  t_offset = GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1144  if (negatedFluxNormal[2*n+1])
1145  {
1146  for (j = 0; j < e_ncoeffs; j++)
1147  {
1148  outarray[offset + j] -=
1149  (m_Ixp->GetPtr())[j] * Fn[t_offset];
1150  }
1151  }
1152  else
1153  {
1154  for (j = 0; j < e_ncoeffs; j++)
1155  {
1156  outarray[offset + j] +=
1157  (m_Ixp->GetPtr())[j] * Fn[t_offset];
1158  }
1159  }
1160 #endif
1161  }
1162  }
1163  }
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
Definition: ExpList.h:1090
Lagrange Polynomials using the Gauss points .
Definition: BasisType.h:55
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:69
std::shared_ptr< Basis > BasisSharedPtr
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
1D Gauss-Gauss-Legendre quadrature points
Definition: PointsType.h:48
BasisManagerT & BasisManager(void)
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
double NekDouble
std::vector< bool > & GetNegatedFluxNormal(void)
int GetCoeff_Offset(int n) const
Get the start offset position for a global list of m_coeffs correspoinding to element n...
Definition: ExpList.h:2200
std::shared_ptr< ExpList > & GetTrace()
Definition: ExpList.h:2267

◆ v_EvaluateBoundaryConditions()

void Nektar::MultiRegions::DisContField1D::v_EvaluateBoundaryConditions ( const NekDouble  time = 0.0,
const std::string  varName = "",
const NekDouble  x2_in = NekConstants::kNekUnsetDouble,
const NekDouble  x3_in = NekConstants::kNekUnsetDouble 
)
protectedvirtual

Evaluate all boundary conditions at a given time..

Based on the expression \(g(x,t)\) for the boundary conditions, this function evaluates the boundary conditions for all boundaries at time-level t.

Parameters
timeThe time at which the boundary conditions should be evaluated.
bndCondExpansionsList of boundary expansions.
bndConditionsInformation about the boundary conditions.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1314 of file DisContField1D.cpp.

References ASSERTL0, Nektar::SpatialDomains::eDirichlet, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eNotDefined, Nektar::SpatialDomains::ePeriodic, Nektar::SpatialDomains::eRobin, Nektar::MultiRegions::ExpList::GetCoeff(), Nektar::NekConstants::kNekUnsetDouble, m_bndCondExpansions, and m_bndConditions.

Referenced by v_UpdateBndConditions().

1319  {
1320  boost::ignore_unused(varName);
1321 
1322  int i;
1323 
1324  Array<OneD, NekDouble> x0(1);
1325  Array<OneD, NekDouble> x1(1);
1326  Array<OneD, NekDouble> x2(1);
1327 
1328  for (i = 0; i < m_bndCondExpansions.num_elements(); ++i)
1329  {
1330  if (time == 0.0 || m_bndConditions[i]->IsTimeDependent())
1331  {
1332  m_bndCondExpansions[i]->GetCoords(x0, x1, x2);
1333 
1334  if (x2_in != NekConstants::kNekUnsetDouble && x3_in !=
1336  {
1337  x1[0] = x2_in;
1338  x2[0] = x3_in;
1339  }
1340 
1341  if (m_bndConditions[i]->GetBoundaryConditionType() ==
1343  {
1344  m_bndCondExpansions[i]->SetCoeff(0,
1345  (std::static_pointer_cast<SpatialDomains
1346  ::DirichletBoundaryCondition>(m_bndConditions[i])
1347  ->m_dirichletCondition).Evaluate(x0[0],x1[0],x2[0],time));
1348  m_bndCondExpansions[i]->SetPhys(0,m_bndCondExpansions[i]->GetCoeff(0));
1349  }
1350  else if (m_bndConditions[i]->GetBoundaryConditionType()
1352  {
1353  m_bndCondExpansions[i]->SetCoeff(0,
1354  (std::static_pointer_cast<SpatialDomains
1355  ::NeumannBoundaryCondition>(m_bndConditions[i])
1356  ->m_neumannCondition).Evaluate(x0[0],x1[0],x2[0],time));
1357  }
1358  else if (m_bndConditions[i]->GetBoundaryConditionType()
1360  {
1361  m_bndCondExpansions[i]->SetCoeff(0,
1362  (std::static_pointer_cast<SpatialDomains
1363  ::RobinBoundaryCondition>(m_bndConditions[i])
1364  ->m_robinFunction).Evaluate(x0[0],x1[0],x2[0],time));
1365 
1366  }
1367  else if (m_bndConditions[i]->GetBoundaryConditionType()
1369  {
1370  continue;
1371  }
1372  else if (m_bndConditions[i]->GetBoundaryConditionType()
1374  {
1375  }
1376  else
1377  {
1378  ASSERTL0(false, "This type of BC not implemented yet");
1379  }
1380  }
1381  }
1382  }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
static const NekDouble kNekUnsetDouble
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
NekDouble GetCoeff(int i)
Get the i th value (coefficient) of m_coeffs.
Definition: ExpList.h:2139

◆ v_ExtractTracePhys() [1/2]

void Nektar::MultiRegions::DisContField1D::v_ExtractTracePhys ( Array< OneD, NekDouble > &  outarray)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 960 of file DisContField1D.cpp.

References ASSERTL1, Nektar::MultiRegions::ExpList::m_phys, and Nektar::MultiRegions::ExpList::m_physState.

Referenced by v_GetTraceMap().

962  {
963  ASSERTL1(m_physState == true,"local physical space is not true ");
964  v_ExtractTracePhys(m_phys, outarray);
965  }
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
Definition: ExpList.h:1069
virtual void v_ExtractTracePhys(Array< OneD, NekDouble > &outarray)
bool m_physState
The state of the array m_phys.
Definition: ExpList.h:1078
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ v_ExtractTracePhys() [2/2]

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

This method extracts the trace (verts in 1D) from the field inarray and puts the values in outarray.

It assumes the field is C0 continuous so that it can overwrite the edge data when visited by the two adjacent elements.

Parameters
inarrayAn array containing the 1D data from which we wish to extract the edge data.
outarrayThe resulting edge information.

This will not work for non-boundary expansions

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 980 of file DisContField1D.cpp.

References ASSERTL1, Nektar::MultiRegions::ExpList::GetExpSize(), Nektar::MultiRegions::ExpList::GetPhys_Offset(), m_trace, m_traceMap, and CellMLToNektar.cellml_metadata::p.

983  {
984  // Loop over elemente and collect forward expansion
985  int nexp = GetExpSize();
986  int n,p,offset,phys_offset;
987 
988  ASSERTL1(outarray.num_elements() >= m_trace->GetExpSize(),
989  "input array is of insufficient length");
990 
991  for (n = 0; n < nexp; ++n)
992  {
993  phys_offset = GetPhys_Offset(n);
994 
995  for (p = 0; p < (*m_exp)[n]->GetNverts(); ++p)
996  {
997  offset = m_trace->GetPhys_Offset(
998  (m_traceMap->GetElmtToTrace())[n][p]->GetElmtId());
999  (*m_exp)[n]->GetVertexPhysVals(p, inarray + phys_offset,
1000  outarray[offset]);
1001  }
1002  }
1003  }
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
ExpListSharedPtr m_trace
Trace space storage for points between elements.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
Definition: ExpList.h:2208

◆ v_GetBndCondExpansions()

virtual const Array<OneD,const MultiRegions::ExpListSharedPtr>& Nektar::MultiRegions::DisContField1D::v_GetBndCondExpansions ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 221 of file DisContField1D.h.

References m_bndCondExpansions.

222  {
223  return m_bndCondExpansions;
224  }
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ v_GetBndConditions()

virtual const Array<OneD,const SpatialDomains::BoundaryConditionShPtr>& Nektar::MultiRegions::DisContField1D::v_GetBndConditions ( void  )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Reimplemented in Nektar::MultiRegions::ContField1D.

Definition at line 227 of file DisContField1D.h.

References m_bndConditions.

228  {
229  return m_bndConditions;
230  }
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...

◆ v_GetBndElmtExpansion()

void Nektar::MultiRegions::DisContField1D::v_GetBndElmtExpansion ( int  i,
std::shared_ptr< ExpList > &  result,
const bool  DeclareCoeffPhysArrays 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1439 of file DisContField1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::MultiRegions::ExpList::GetBoundaryToElmtMap(), Nektar::MultiRegions::ExpList::GetCoeff_Offset(), Nektar::MultiRegions::ExpList::GetCoeffs(), Nektar::MultiRegions::ExpList::GetExp(), Nektar::MultiRegions::ExpList::GetPhys(), Nektar::MultiRegions::ExpList::GetPhys_Offset(), m_bndCondExpansions, and Vmath::Vcopy().

Referenced by v_UpdateBndConditions().

1442  {
1443  int n, cnt, nq;
1444  int offsetOld, offsetNew;
1445  std::vector<unsigned int> eIDs;
1446 
1447  Array<OneD, int> ElmtID,EdgeID;
1448  GetBoundaryToElmtMap(ElmtID,EdgeID);
1449 
1450  // Skip other boundary regions
1451  for (cnt = n = 0; n < i; ++n)
1452  {
1453  cnt += m_bndCondExpansions[n]->GetExpSize();
1454  }
1455 
1456  // Populate eIDs with information from BoundaryToElmtMap
1457  for (n = 0; n < m_bndCondExpansions[i]->GetExpSize(); ++n)
1458  {
1459  eIDs.push_back(ElmtID[cnt+n]);
1460  }
1461 
1462  // Create expansion list
1463  result =
1465  (*this, eIDs, DeclareCoeffPhysArrays);
1466 
1467  // Copy phys and coeffs to new explist
1468  if( DeclareCoeffPhysArrays)
1469  {
1470  Array<OneD, NekDouble> tmp1, tmp2;
1471  for (n = 0; n < result->GetExpSize(); ++n)
1472  {
1473  nq = GetExp(ElmtID[cnt+n])->GetTotPoints();
1474  offsetOld = GetPhys_Offset(ElmtID[cnt+n]);
1475  offsetNew = result->GetPhys_Offset(n);
1476  Vmath::Vcopy(nq, tmp1 = GetPhys()+ offsetOld, 1,
1477  tmp2 = result->UpdatePhys()+ offsetNew, 1);
1478 
1479  nq = GetExp(ElmtID[cnt+n])->GetNcoeffs();
1480  offsetOld = GetCoeff_Offset(ElmtID[cnt+n]);
1481  offsetNew = result->GetCoeff_Offset(n);
1482  Vmath::Vcopy(nq, tmp1 = GetCoeffs()+ offsetOld, 1,
1483  tmp2 = result->UpdateCoeffs()+ offsetNew, 1);
1484  }
1485  }
1486  }
const Array< OneD, const NekDouble > & GetPhys() const
This function returns (a reference to) the array (implemented as m_phys) containing the function ev...
Definition: ExpList.h:2161
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:2062
void GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
Definition: ExpList.h:2409
const std::shared_ptr< LocalRegions::ExpansionVector > GetExp() const
This function returns the vector of elements in the expansion.
Definition: ExpList.h:2191
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
int GetCoeff_Offset(int n) const
Get the start offset position for a global list of m_coeffs correspoinding to element n...
Definition: ExpList.h:2200
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
Definition: ExpList.h:2208
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1064

◆ v_GetBoundaryToElmtMap()

void Nektar::MultiRegions::DisContField1D::v_GetBoundaryToElmtMap ( Array< OneD, int > &  ElmtID,
Array< OneD, int > &  VertID 
)
protectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1386 of file DisContField1D.cpp.

References ASSERTL1, Nektar::MultiRegions::ExpList::GetExpSize(), m_bndCondExpansions, and m_bndConditions.

Referenced by v_UpdateBndConditions().

1388  {
1389  map<int, int> VertGID;
1390  int i,n,id;
1391  int bid,cnt,Vid;
1392  int nbcs = m_bndConditions.num_elements();
1393 
1394  // make sure arrays are of sufficient length
1395  if (ElmtID.num_elements() != nbcs)
1396  {
1397  ElmtID = Array<OneD, int>(nbcs,-1);
1398  }
1399  else
1400  {
1401  fill(ElmtID.get(), ElmtID.get()+nbcs, -1);
1402  }
1403 
1404  if (VertID.num_elements() != nbcs)
1405  {
1406  VertID = Array<OneD, int>(nbcs);
1407  }
1408 
1409  // setup map of all global ids along boundary
1410  for (cnt = n = 0; n < m_bndCondExpansions.num_elements(); ++n)
1411  {
1412  Vid = m_bndCondExpansions[n]->GetExp(0)->GetGeom()->GetVertex(0)->GetVid();
1413  VertGID[Vid] = cnt++;
1414  }
1415 
1416  // Loop over elements and find verts that match;
1418  for(cnt = n = 0; n < GetExpSize(); ++n)
1419  {
1420  exp = (*m_exp)[n];
1421  for(i = 0; i < exp->GetNverts(); ++i)
1422  {
1423  id = exp->GetGeom()->GetVid(i);
1424 
1425  if (VertGID.count(id) > 0)
1426  {
1427  bid = VertGID.find(id)->second;
1428  ASSERTL1(ElmtID[bid] == -1,"Edge already set");
1429  ElmtID[bid] = n;
1430  VertID[bid] = i;
1431  cnt ++;
1432  }
1433  }
1434  }
1435 
1436  ASSERTL1(cnt == nbcs,"Failed to visit all boundary condtiions");
1437  }
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
std::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:65
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ v_GetFwdBwdTracePhys() [1/2]

void Nektar::MultiRegions::DisContField1D::v_GetFwdBwdTracePhys ( Array< OneD, NekDouble > &  Fwd,
Array< OneD, NekDouble > &  Bwd 
)
protectedvirtual

Generate the forward or backward state for each trace point.

Parameters
FwdForward state.
BwdBackward state.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 830 of file DisContField1D.cpp.

References Nektar::MultiRegions::ExpList::m_phys.

Referenced by v_GetTraceMap().

832  {
833  v_GetFwdBwdTracePhys(m_phys,Fwd,Bwd);
834  }
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
Definition: ExpList.h:1069
virtual void v_GetFwdBwdTracePhys(Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)

◆ v_GetFwdBwdTracePhys() [2/2]

void Nektar::MultiRegions::DisContField1D::v_GetFwdBwdTracePhys ( const Array< OneD, const NekDouble > &  field,
Array< OneD, NekDouble > &  Fwd,
Array< OneD, NekDouble > &  Bwd 
)
protectedvirtual

This method extracts the "forward" and "backward" trace data from the array field and puts the data into output vectors Fwd and Bwd.

We first define the convention which defines "forwards" and "backwards". First an association is made between the vertex of each element and its corresponding vertex in the trace space using the mapping m_traceMap. The element can either be left-adjacent or right-adjacent to this trace edge (see Expansion0D::GetLeftAdjacentElementExp). Boundary edges are never left-adjacent since elemental left-adjacency is populated first.

If the element is left-adjacent we extract the vertex trace data from field into the forward trace space Fwd; otherwise, we place it in the backwards trace space Bwd. In this way, we form a unique set of trace normals since these are always extracted from left-adjacent elements.

Parameters
fieldis a NekDouble array which contains the 1D data from which we wish to extract the backward and forward orientated trace/edge arrays.
FwdThe resulting forwards space.
BwdThe resulting backwards space.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 863 of file DisContField1D.cpp.

References ASSERTL0, Nektar::SpatialDomains::eDirichlet, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::eNotDefined, Nektar::SpatialDomains::ePeriodic, Nektar::SpatialDomains::eRobin, Nektar::MultiRegions::ExpList::GetExpSize(), Nektar::MultiRegions::ExpList::GetPhys(), Nektar::MultiRegions::ExpList::GetPhys_Offset(), m_bndCondExpansions, m_bndConditions, m_leftAdjacentVerts, m_periodicBwdCopy, m_periodicFwdCopy, m_trace, m_traceMap, and Vmath::Zero().

867  {
868  // Counter variables
869  int n, v;
870 
871  // Number of elements
872  int nElements = GetExpSize();
873 
874  // Initial index of each element
875  int phys_offset;
876 
877  Array<OneD, Array<OneD, LocalRegions::ExpansionSharedPtr> >
878  &elmtToTrace = m_traceMap->GetElmtToTrace();
879 
880  // Set forward and backard state to zero
881  Vmath::Zero(Fwd.num_elements(), Fwd, 1);
882  Vmath::Zero(Bwd.num_elements(), Bwd, 1);
883 
884  int cnt;
885 
886  // Loop on the elements
887  for (cnt = n = 0; n < nElements; ++n)
888  {
889  // Set the offset of each element
890  phys_offset = GetPhys_Offset(n);
891 
892  for(v = 0; v < 2; ++v, ++cnt)
893  {
894  int offset = m_trace->GetPhys_Offset(elmtToTrace[n][v]->GetElmtId());
895 
896  if (m_leftAdjacentVerts[cnt])
897  {
898  (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
899  Fwd[offset]);
900  }
901  else
902  {
903  (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
904  Bwd[offset]);
905  }
906  }
907  }
908 
909  // Fill boundary conditions into missing elements.
910  int id = 0;
911 
912  for(cnt = n = 0; n < m_bndCondExpansions.num_elements(); ++n)
913  {
914  if (m_bndConditions[n]->GetBoundaryConditionType() ==
916  {
917  id = m_trace->GetPhys_Offset(m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt));
918  Bwd[id] = m_bndCondExpansions[n]->GetPhys()[0]; //this is not getting the correct value?
919  cnt++;
920  }
921  else if (m_bndConditions[n]->GetBoundaryConditionType() ==
923  m_bndConditions[n]->GetBoundaryConditionType() ==
925  {
926  ASSERTL0((m_bndCondExpansions[n]->GetPhys())[0]==0.0,
927  "Method not set up for non-zero Neumann "
928  "boundary condition");
929  id = m_trace->GetPhys_Offset(m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt));
930  Bwd[id] = Fwd[id];
931 
932  cnt++;
933  }
934  else if (m_bndConditions[n]->GetBoundaryConditionType() ==
936  {
937  // Do nothing
938  }
939  else if (m_bndConditions[n]->GetBoundaryConditionType() !=
941  {
942  ASSERTL0(false,
943  "Method not set up for this boundary condition.");
944  }
945  }
946 
947  // Copy any periodic boundary conditions.
948  for (n = 0; n < m_periodicFwdCopy.size(); ++n)
949  {
950  Bwd[m_periodicBwdCopy[n]] = Fwd[m_periodicFwdCopy[n]];
951  }
952 
953  // Do parallel exchange for forwards/backwards spaces.
954  m_traceMap->UniversalTraceAssemble(Fwd);
955  m_traceMap->UniversalTraceAssemble(Bwd);
956 
957  }
const Array< OneD, const NekDouble > & GetPhys() const
This function returns (a reference to) the array (implemented as m_phys) containing the function ev...
Definition: ExpList.h:2161
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
ExpListSharedPtr m_trace
Trace space storage for points between elements.
std::vector< int > m_periodicFwdCopy
A vector indicating degress of freedom which need to be copied from forwards to backwards space in ca...
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.cpp:376
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
Definition: ExpList.h:2208

◆ v_GetRobinBCInfo()

map< int, RobinBCInfoSharedPtr > Nektar::MultiRegions::DisContField1D::v_GetRobinBCInfo ( void  )
protectedvirtual

Search through the edge expansions and identify which ones have Robin/Mixed type boundary conditions. If find a Robin boundary then store the edge id of the boundary condition and the array of points of the physical space boundary condition which are hold the boundary condition primitive variable coefficient at the quatrature points

Returns
std map containing the robin boundary condition info using a key of the element id

There is a next member to allow for more than one Robin boundary condition per element

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1516 of file DisContField1D.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::SpatialDomains::eRobin, Nektar::MultiRegions::ExpList::GetBoundaryToElmtMap(), m_bndCondExpansions, and m_bndConditions.

Referenced by v_GetTraceMap().

1517  {
1518  int i;
1519  map<int, RobinBCInfoSharedPtr> returnval;
1520  Array<OneD, int> ElmtID,VertID;
1521  GetBoundaryToElmtMap(ElmtID,VertID);
1522 
1523  for (i = 0; i < m_bndCondExpansions.num_elements(); ++i)
1524  {
1525  if (m_bndConditions[i]->GetBoundaryConditionType() ==
1527  {
1528  int elmtid;
1529 
1530  Array<OneD, NekDouble> x0(1);
1531  Array<OneD, NekDouble> x1(1);
1532  Array<OneD, NekDouble> x2(1);
1533  Array<OneD, NekDouble> coeffphys(1);
1534 
1535  m_bndCondExpansions[i]->GetCoords(x0, x1, x2);
1536 
1537  coeffphys[0] = (std::static_pointer_cast<SpatialDomains
1538  ::RobinBoundaryCondition>(m_bndConditions[i])
1539  ->m_robinPrimitiveCoeff).Evaluate(x0[0],x1[0],x2[0],0.0);
1540 
1541  RobinBCInfoSharedPtr rInfo =
1543  AllocateSharedPtr(VertID[i],coeffphys);
1544 
1545  elmtid = ElmtID[i];
1546  // make link list if necessary (not likely in
1547  // 1D but needed in 2D & 3D)
1548  if(returnval.count(elmtid) != 0)
1549  {
1550  rInfo->next = returnval.find(elmtid)->second;
1551  }
1552  returnval[elmtid] = rInfo;
1553  }
1554  }
1555 
1556  return returnval;
1557  }
std::shared_ptr< RobinBCInfo > RobinBCInfoSharedPtr
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
void GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
Definition: ExpList.h:2409
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ v_GetTrace()

virtual ExpListSharedPtr& Nektar::MultiRegions::DisContField1D::v_GetTrace ( )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 167 of file DisContField1D.h.

References m_trace.

168  {
169  return m_trace;
170  }
ExpListSharedPtr m_trace
Trace space storage for points between elements.

◆ v_GetTraceMap()

virtual AssemblyMapDGSharedPtr& Nektar::MultiRegions::DisContField1D::v_GetTraceMap ( void  )
inlineprotectedvirtual

◆ v_HelmSolve()

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

Solve the Helmholtz equation.

Reimplemented from Nektar::MultiRegions::ExpList.

Reimplemented in Nektar::MultiRegions::ContField1D.

Definition at line 1166 of file DisContField1D.cpp.

References ASSERTL0, Nektar::SpatialDomains::eDirichlet, Nektar::StdRegions::eHybridDGHelmBndLam, Nektar::StdRegions::eHybridDGLamToU, Nektar::StdRegions::eInvHybridDGHelmholtz, Nektar::SpatialDomains::eNeumann, Nektar::SpatialDomains::ePeriodic, Nektar::SpatialDomains::eRobin, Nektar::eWrapper, Nektar::MultiRegions::ExpList::GetBlockMatrix(), Nektar::MultiRegions::ExpList::GetExpSize(), GetGlobalBndLinSys(), Nektar::MultiRegions::ExpList::IProductWRTBase(), m_bndCondExpansions, m_bndConditions, Nektar::MultiRegions::ExpList::m_coeff_offset, Nektar::MultiRegions::ExpList::m_ncoeffs, m_traceMap, Vmath::Neg(), Nektar::MultiRegions::NullAssemblyMapSharedPtr, Vmath::Smul(), Nektar::Transpose(), and Vmath::Zero().

Referenced by v_UpdateBndConditions().

1175  {
1176  boost::ignore_unused(flags, varfactors, dirForcing);
1177 
1178  int i,n,cnt,nbndry;
1179  int nexp = GetExpSize();
1180  Array<OneD,NekDouble> f(m_ncoeffs);
1181  DNekVec F(m_ncoeffs,f,eWrapper);
1182  Array<OneD,NekDouble> e_f, e_l;
1183 
1184  //----------------------------------
1185  // Setup RHS Inner product if required
1186  //----------------------------------
1187  if(PhysSpaceForcing)
1188  {
1189  IProductWRTBase(inarray,f);
1190  Vmath::Neg(m_ncoeffs,f,1);
1191  }
1192  else
1193  {
1194  Vmath::Smul(m_ncoeffs,-1.0,inarray,1,f,1);
1195  }
1196 
1197  //----------------------------------
1198  // Solve continuous Boundary System
1199  //----------------------------------
1200  int GloBndDofs = m_traceMap->GetNumGlobalBndCoeffs();
1201  int NumDirBCs = m_traceMap->GetNumLocalDirBndCoeffs();
1202  int e_ncoeffs,id;
1203 
1204  GlobalMatrixKey HDGLamToUKey(
1207  factors,
1208  varcoeff);
1209 
1210  const DNekScalBlkMatSharedPtr &HDGLamToU =
1211  GetBlockMatrix(HDGLamToUKey);
1212 
1213  // Retrieve global trace space storage, \Lambda, from trace expansion
1214  Array<OneD,NekDouble> BndSol = Array<OneD,NekDouble>
1215  (m_traceMap->GetNumLocalBndCoeffs());
1216 
1217 
1218  Array<OneD,NekDouble> BndRhs(GloBndDofs,0.0);
1219  // Zero trace space
1220  Vmath::Zero(GloBndDofs,BndSol,1);
1221 
1222  int LocBndCoeffs = m_traceMap->GetNumLocalBndCoeffs();
1223  Array<OneD, NekDouble> loc_lambda(LocBndCoeffs);
1224  DNekVec LocLambda(LocBndCoeffs,loc_lambda,eWrapper);
1225 
1226  //----------------------------------
1227  // Evaluate Trace Forcing
1228  //----------------------------------
1229  // Determing <u_lam,f> terms using HDGLamToU matrix
1230  for (cnt = n = 0; n < nexp; ++n)
1231  {
1232  nbndry = (*m_exp)[n]->NumDGBndryCoeffs();
1233 
1234  e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1235  e_f = f+m_coeff_offset[n];
1236  e_l = loc_lambda + cnt;
1237 
1238  // use outarray as tmp space
1239  DNekVec Floc (nbndry, e_l, eWrapper);
1240  DNekVec ElmtFce (e_ncoeffs, e_f, eWrapper);
1241  Floc = Transpose(*(HDGLamToU->GetBlock(n,n)))*ElmtFce;
1242 
1243  cnt += nbndry;
1244  }
1245 
1246  // Assemble into global operator
1247  m_traceMap->AssembleBnd(loc_lambda,BndRhs);
1248 
1249  cnt = 0;
1250  // Copy Dirichlet boundary conditions into trace space
1251  for (i = 0; i < m_bndCondExpansions.num_elements(); ++i)
1252  {
1253  if (m_bndConditions[i]->GetBoundaryConditionType() ==
1255  {
1256  id = m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1257  BndSol[id] = m_bndCondExpansions[i]->GetCoeff(0);
1258  }
1259  else if (m_bndConditions[i]->GetBoundaryConditionType() ==
1261  m_bndConditions[i]->GetBoundaryConditionType() ==
1263  {
1264  id = m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1265  BndRhs[id] += m_bndCondExpansions[i]->GetCoeff(0);
1266  }
1267  else if (m_bndConditions[i]->GetBoundaryConditionType() ==
1269  {
1270  ASSERTL0(false, "HDG implementation does not support "
1271  "periodic boundary conditions at present.");
1272  }
1273  }
1274 
1275  //----------------------------------
1276  // Solve trace problem
1277  //----------------------------------
1278  if (GloBndDofs - NumDirBCs > 0)
1279  {
1280  GlobalLinSysKey key(StdRegions::eHybridDGHelmBndLam,
1281  m_traceMap,factors);
1283  LinSys->Solve(BndRhs,BndSol,m_traceMap);
1284  }
1285 
1286  //----------------------------------
1287  // Internal element solves
1288  //----------------------------------
1289  GlobalMatrixKey invHDGhelmkey(StdRegions::eInvHybridDGHelmholtz,
1291  factors);
1292 
1293  const DNekScalBlkMatSharedPtr& InvHDGHelm =
1294  GetBlockMatrix(invHDGhelmkey);
1295  DNekVec out(m_ncoeffs,outarray,eWrapper);
1296  Vmath::Zero(m_ncoeffs,outarray,1);
1297 
1298  // get local trace solution from BndSol
1299  m_traceMap->GlobalToLocalBnd(BndSol,loc_lambda);
1300 
1301  // out = u_f + u_lam = (*InvHDGHelm)*f + (LamtoU)*Lam
1302  out = (*InvHDGHelm)*F + (*HDGLamToU)*LocLambda;
1303  }
const DNekScalBlkMatSharedPtr & GetBlockMatrix(const GlobalMatrixKey &gkey)
Definition: ExpList.cpp:1004
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
Definition: NekTypeDefs.hpp:73
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
Definition: GlobalLinSys.h:50
int GetExpSize(void)
This function returns the number of elements in the expansion.
Definition: ExpList.h:2170
GlobalLinSysSharedPtr GetGlobalBndLinSys(const GlobalLinSysKey &mkey)
For a given key, returns the associated global linear system.
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
Definition: ExpList.h:1101
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
Definition: Vmath.cpp:216
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
Definition: ExpList.h:1030
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
void Neg(int n, T *x, const int incx)
Negate x = -x.
Definition: Vmath.cpp:399
static AssemblyMapSharedPtr NullAssemblyMapSharedPtr
Definition: AssemblyMap.h:54
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
NekVector< NekDouble > DNekVec
Definition: NekTypeDefs.hpp:48
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
Definition: ExpList.h:1714
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.cpp:376

◆ v_Reset()

void Nektar::MultiRegions::DisContField1D::v_Reset ( )
protectedvirtual

Reset this field, so that geometry information can be updated.

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 1491 of file DisContField1D.cpp.

References m_bndCondExpansions, and Nektar::MultiRegions::ExpList::v_Reset().

Referenced by v_UpdateBndConditions().

1492  {
1493  ExpList::v_Reset();
1494 
1495  // Reset boundary condition expansions.
1496  for (int n = 0; n < m_bndCondExpansions.num_elements(); ++n)
1497  {
1498  m_bndCondExpansions[n]->Reset();
1499  }
1500  }
virtual void v_Reset()
Reset geometry information, metrics, matrix managers and geometry information.
Definition: ExpList.cpp:1583
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ v_UpdateBndCondExpansion()

virtual MultiRegions::ExpListSharedPtr& Nektar::MultiRegions::DisContField1D::v_UpdateBndCondExpansion ( int  i)
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 233 of file DisContField1D.h.

234  {
235  return m_bndCondExpansions[i];
236  }
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.

◆ v_UpdateBndConditions()

virtual Array<OneD, SpatialDomains::BoundaryConditionShPtr>& Nektar::MultiRegions::DisContField1D::v_UpdateBndConditions ( )
inlineprotectedvirtual

Reimplemented from Nektar::MultiRegions::ExpList.

Definition at line 239 of file DisContField1D.h.

References IsLeftAdjacentVertex(), Nektar::NekConstants::kNekUnsetDouble, m_bndConditions, SetUpDG(), v_EvaluateBoundaryConditions(), v_GetBndElmtExpansion(), v_GetBoundaryToElmtMap(), v_HelmSolve(), and v_Reset().

240  {
241  return m_bndConditions;
242  }
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...

Member Data Documentation

◆ m_bndCondExpansions

Array<OneD,MultiRegions::ExpListSharedPtr> Nektar::MultiRegions::DisContField1D::m_bndCondExpansions
protected

◆ m_bndConditions

Array<OneD,SpatialDomains::BoundaryConditionShPtr> Nektar::MultiRegions::DisContField1D::m_bndConditions
protected

◆ m_boundaryVerts

std::set<int> Nektar::MultiRegions::DisContField1D::m_boundaryVerts
protected

A set storing the global IDs of any boundary edges.

Definition at line 131 of file DisContField1D.h.

Referenced by IsLeftAdjacentVertex(), and SetUpDG().

◆ m_globalBndMat

GlobalLinSysMapShPtr Nektar::MultiRegions::DisContField1D::m_globalBndMat
protected

Global boundary matrix.

Definition at line 120 of file DisContField1D.h.

Referenced by GetGlobalBndLinSys(), and SetUpDG().

◆ m_leftAdjacentVerts

std::vector<bool> Nektar::MultiRegions::DisContField1D::m_leftAdjacentVerts
protected

Definition at line 153 of file DisContField1D.h.

Referenced by SetUpDG(), and v_GetFwdBwdTracePhys().

◆ m_negatedFluxNormal

std::vector<bool> Nektar::MultiRegions::DisContField1D::m_negatedFluxNormal
private

Definition at line 274 of file DisContField1D.h.

Referenced by GetNegatedFluxNormal().

◆ m_numDirBndCondExpansions

int Nektar::MultiRegions::DisContField1D::m_numDirBndCondExpansions
protected

The number of boundary segments on which Dirichlet boundary conditions are imposed.

Definition at line 105 of file DisContField1D.h.

◆ m_periodicBwdCopy

std::vector<int> Nektar::MultiRegions::DisContField1D::m_periodicBwdCopy
protected

Definition at line 146 of file DisContField1D.h.

Referenced by SetUpDG(), and v_GetFwdBwdTracePhys().

◆ m_periodicFwdCopy

std::vector<int> Nektar::MultiRegions::DisContField1D::m_periodicFwdCopy
protected

A vector indicating degress of freedom which need to be copied from forwards to backwards space in case of a periodic boundary condition.

Definition at line 145 of file DisContField1D.h.

Referenced by SetUpDG(), and v_GetFwdBwdTracePhys().

◆ m_periodicVerts

PeriodicMap Nektar::MultiRegions::DisContField1D::m_periodicVerts
protected

A map which identifies groups of periodic vertices.

Definition at line 137 of file DisContField1D.h.

Referenced by Nektar::MultiRegions::ContField1D::ContField1D(), FindPeriodicVertices(), IsLeftAdjacentVertex(), and SetUpDG().

◆ m_trace

ExpListSharedPtr Nektar::MultiRegions::DisContField1D::m_trace
protected

Trace space storage for points between elements.

Definition at line 123 of file DisContField1D.h.

Referenced by IsLeftAdjacentVertex(), SetUpDG(), v_ExtractTracePhys(), v_GetFwdBwdTracePhys(), and v_GetTrace().

◆ m_traceMap

AssemblyMapDGSharedPtr Nektar::MultiRegions::DisContField1D::m_traceMap
protected