42 namespace MultiRegions
87 ContField2D::ContField2D():
91 m_globalLinSysManager(
93 std::string(
"GlobalLinSys"))
122 const std::string &variable,
123 const bool DeclareCoeffPhysArrays,
124 const bool CheckIfSingularSystem,
126 DisContField2D(pSession,graph2D,variable,false,DeclareCoeffPhysArrays,ImpType),
130 std::string(
"GlobalLinSys"))
136 CheckIfSingularSystem,
141 if (
m_session->DefinesCmdLineArgument(
"verbose"))
173 const std::string &variable,
174 bool DeclareCoeffPhysArrays,
175 const bool CheckIfSingularSystem):
180 std::string(
"GlobalLinSys"))
188 CheckIfSingularSystem,
193 if (
m_session->DefinesCmdLineArgument(
"verbose"))
307 if(inarray.data() == outarray.data())
322 if(inarray.data() == outarray.data())
412 ->GetBndCondCoeffsToGlobalCoeffsMap(bndcnt++)]
478 Gmat->EigenSolve(Real,Imag,Evecs);
549 if(contNcoeffs - NumDirBcs > 0)
568 "To use method must have a AssemblyMap " 577 (*m_globalMat)[mkey] = glo_matrix;
581 glo_matrix = matrixIter->second;
606 "To use method must have a AssemblyMap " 620 BwdTrans(inarray,outarray,coeffstate);
632 FwdTrans(inarray,outarray,coeffstate);
656 map<int, vector<ExtraDirDof> > &extraDirDofs =
659 for (
auto &it : extraDirDofs)
661 for (i = 0; i < it.second.size(); ++i)
663 tmp[std::get<1>(it.second.at(i))] =
665 std::get<0>(it.second.at(i))]*std::get<2>(it.second.at(i));
682 tmp[bndMap[bndcnt++]] = sign * coeffs[j];
718 sign =
m_locToGloMap->GetBndCondCoeffsToGlobalCoeffsSign(bndcnt);
719 coeffs[j] = sign * tmp[bndMap[bndcnt++]];
736 "nreg is out or range since this many boundary " 737 "regions to not exist");
742 for(
int j = 0; j < nreg; ++j)
755 sign =
m_locToGloMap->GetBndCondCoeffsToGlobalCoeffsSign(bndcnt);
756 coeffs[j] = sign * tmp[bndMap[bndcnt++]];
891 const bool PhysSpaceForcing)
925 ->GetBndCondCoeffsToGlobalCoeffsMap(bndcnt++)]
938 Vmath::Vadd(contNcoeffs, wsp, 1, gamma, 1, wsp, 1);
986 mat->Multiply(inarray,outarray);
1042 ->GetBndCondCoeffsToGlobalCoeffsMap(bndcnt++)]
1053 Vmath::Vadd(contNcoeffs, wsp, 1, gamma, 1, wsp, 1);
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
Template method virtual forwarder for FwdTrans().
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
void LaplaceSolve(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray, const Array< OneD, Array< OneD, NekDouble > > &variablecoeffs=NullNekDoubleArrayofArray, NekDouble time=0.0, CoeffState coeffstate=eLocal)
Solves the two-dimensional Laplace equation, subject to the boundary conditions specified.
void LocalToGlobal(bool useComm=true)
Gathers the global coefficients from the local coefficients .
void GeneralMatrixOp_IterPerExp(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_FillBndCondFromField()
AssemblyMapCGSharedPtr m_locToGloMap
(A shared pointer to) the object which contains all the required information for the transformation f...
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
Performs the global forward transformation of a function , subject to the boundary conditions specifi...
#define sign(a, b)
return the sign(b)*a
NekOptimize::GlobalOptParamSharedPtr m_globalOptParam
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)
const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & GetBndConditions()
Returns the boundary conditions.
virtual void v_ImposeDirichletConditions(Array< OneD, NekDouble > &outarray)
Impose the Dirichlet Boundary Conditions on outarray.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::map< GlobalMatrixKey, GlobalMatrixSharedPtr > GlobalMatrixMap
Mapping from global matrix keys to global matrices.
GlobalLinSysSharedPtr GenGlobalLinSys(const GlobalLinSysKey &mkey)
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
Performs the backward transformation of the spectral/hp element expansion.
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
PeriodicMap m_periodicEdges
A map which identifies pairs of periodic edges.
std::map< ConstFactorType, NekDouble > ConstFactorMap
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
std::shared_ptr< DNekMat > DNekMatSharedPtr
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
LibUtilities::NekManager< GlobalLinSysKey, GlobalLinSys > m_globalLinSysManager
A manager which collects all the global linear systems being assembled, such that they should be cons...
virtual void v_LocalToGlobal(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool useComm)
Gathers the global coefficients from the local coefficients .
bool SameTypeOfBoundaryConditions(const DisContField2D &In)
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
An object which contains the discretised boundary conditions.
StdRegions::MatrixType GetMatrixType() const
Return the matrix type.
This class is the abstraction of a global continuous two- dimensional spectral/hp element expansion w...
std::shared_ptr< GlobalMatrix > GenGlobalMatrix(const GlobalMatrixKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
Generates a global matrix from the given key and map.
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
int GetNcoeffs(void) const
Returns the total number of local degrees of freedom .
bool isSet(const FlagType &key) const
std::shared_ptr< GlobalMatrix > GlobalMatrixSharedPtr
Shared pointer to a GlobalMatrix object.
bool LocToGloMapIsDefined() const
Returns true if a local to global map is defined.
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
Template method virtual forwarder for FwdTrans().
virtual void v_SmoothField(Array< OneD, NekDouble > &field)
Template method virtual forwarded for SmoothField().
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
GlobalMatrixMapShPtr m_globalMat
(A shared pointer to) a list which collects all the global matrices being assembled, such that they should be constructed only once.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void GlobalSolve(const GlobalLinSysKey &key, const Array< OneD, const NekDouble > &rhs, Array< OneD, NekDouble > &inout, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
Solves the linear system specified by the key key.
GlobalMatrixSharedPtr GetGlobalMatrix(const GlobalMatrixKey &mkey)
Returns the global matrix specified by mkey.
virtual ~ContField2D()
The default destructor.
virtual void v_GeneralMatrixOp(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
Calculates the result of the multiplication of a global matrix of type specified by mkey with a vecto...
LibUtilities::SessionReaderSharedPtr m_session
Session.
ContField2D()
The default constructor.
void Neg(int n, T *x, const int incx)
Negate x = -x.
virtual void v_GlobalToLocal(void)
void Assemble()
Assembles the global coefficients from the local coefficients .
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
virtual const Array< OneD, const SpatialDomains ::BoundaryConditionShPtr > & v_GetBndConditions()
Template method virtual forwarder for GetBndConditions().
Describe a linear system.
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
Calculates the inner product of a function with respect to all global expansion modes ...
Describes a matrix with ordering defined by a local to global map.
virtual void v_MultiplyByInvMassMatrix(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
Template method virtual forwarder for MultiplyByInvMassMatrix().
void MultiplyByInvMassMatrix(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
Multiply a solution by the inverse mass matrix.
std::shared_ptr< GlobalLinSys > GenGlobalLinSys(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
This operation constructs the global linear system of type mkey.
std::shared_ptr< DNekMat > GenGlobalMatrixFull(const GlobalLinSysKey &mkey, const std::shared_ptr< AssemblyMapCG > &locToGloMap)
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs
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)
Solves the two-dimensional Helmholtz equation, subject to the boundary conditions specified...
GlobalLinSysSharedPtr GetGlobalLinSys(const GlobalLinSysKey &mkey)
Returns the linear system specified by the key mkey.
void LinearAdvectionEigs(const NekDouble ax, const NekDouble ay, Array< OneD, NekDouble > &Real, Array< OneD, NekDouble > &Imag, Array< OneD, NekDouble > &Evecs=NullNekDouble1DArray)
Compute the eigenvalues of the linear advection operator.
virtual void v_ClearGlobalLinSysManager(void)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
void GlobalToLocal(void)
Scatters from the global coefficients to the local coefficients .
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
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)
std::map< StdRegions::ConstFactorType, Array< OneD, NekDouble > > VarFactorsMap