34 #ifndef NEKTAR_LIB_MULTIREGIONS_PRECONDITIONERLOWENERGY_H 35 #define NEKTAR_LIB_MULTIREGIONS_PRECONDITIONERLOWENERGY_H 48 namespace MultiRegions
58 const std::shared_ptr<GlobalLinSys> &plinsys,
59 const std::shared_ptr<AssemblyMap> &pLocToGloMap)
70 const std::shared_ptr<GlobalLinSys> &plinsys,
97 typedef std::map<LibUtilities::ShapeType, DNekScalMatSharedPtr>
108 ShapeToExpMap &maxElmt,
109 ShapeToIntArrayMap &vertMapMaxR,
115 ShapeToIntArrayMap &vertMapMaxR,
122 ShapeToIntArrayMap &vertMapMaxR,
130 ShapeToIntArrayMap &vertMapMaxR,
178 const std::shared_ptr<DNekScalMat > &loc_mat);
virtual void v_DoPreconditioner(const Array< OneD, NekDouble > &pInput, Array< OneD, NekDouble > &pOutput)
std::vector< std::pair< int, int > > m_sameBlock
virtual DNekScalMatSharedPtr v_TransformedSchurCompl(int n, int offset, const std::shared_ptr< DNekScalMat > &loc_mat)
Set up the transformed block matrix system.
virtual void v_DoMultiplybyInverseTransposedTransformationMatrix(const Array< OneD, NekDouble > &pInput, Array< OneD, NekDouble > &pOutput)
Multiply by the block tranposed inverse transformation matrix.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< TetGeom > TetGeomSharedPtr
Array< OneD, NekDouble > m_multiplicity
Array< OneD, NekDouble > m_locToGloSignMult
DNekMatSharedPtr ExtractLocMat(StdRegions::StdExpansionSharedPtr &locExp, DNekScalMatSharedPtr &maxRmat, LocalRegions::ExpansionSharedPtr &expMax, Array< OneD, unsigned int > &vertMapMaxR, Array< OneD, Array< OneD, unsigned int > > &edgeMapMaxR)
virtual void v_InitObject()
void ReSetTetMaxRMat(int nummodesmax, LocalRegions::TetExpSharedPtr &TetExp, ShapeToDNekMap &maxRmat, ShapeToIntArrayMap &vertMapMaxR, ShapeToIntArrayArrayMap &edgeMapMaxR, ShapeToIntArrayArrayMap &faceMapMaxR)
#define MULTI_REGIONS_EXPORT
std::shared_ptr< TetExp > TetExpSharedPtr
DNekBlkMatSharedPtr m_BlkMat
std::shared_ptr< DNekMat > DNekMatSharedPtr
std::map< LibUtilities::ShapeType, LocalRegions::ExpansionSharedPtr > ShapeToExpMap
std::map< LibUtilities::ShapeType, Array< OneD, unsigned int > > ShapeToIntArrayMap
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
std::map< LibUtilities::ShapeType, DNekScalMatSharedPtr > ShapeToDNekMap
SpatialDomains::HexGeomSharedPtr CreateRefHexGeom(void)
Sets up the reference hexahedral element needed to construct a low energy basis.
std::shared_ptr< AssemblyMap > AssemblyMapSharedPtr
static std::string className
Name of class.
static PreconditionerSharedPtr create(const std::shared_ptr< GlobalLinSys > &plinsys, const std::shared_ptr< AssemblyMap > &pLocToGloMap)
Creates an instance of this class.
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
virtual void v_BuildPreconditioner()
Construct the low energy preconditioner from .
DNekBlkMatSharedPtr m_RBlk
DNekBlkMatSharedPtr m_InvRBlk
void SetUpPyrMaxRMat(int nummodesmax, LocalRegions::PyrExpSharedPtr &PyrExp, ShapeToDNekMap &maxRmat, ShapeToIntArrayMap &vertMapMaxR, ShapeToIntArrayArrayMap &edgeMapMaxR, ShapeToIntArrayArrayMap &faceMapMaxR)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual void v_DoTransformToLowEnergy(Array< OneD, NekDouble > &pInOut, int offset)
Transform the solution vector vector to low energy.
SpatialDomains::PyrGeomSharedPtr CreateRefPyrGeom(void)
Sets up the reference prismatic element needed to construct a low energy basis mapping arrays...
void SetUpReferenceElements(ShapeToDNekMap &maxRmat, ShapeToExpMap &maxElmt, ShapeToIntArrayMap &vertMapMaxR, ShapeToIntArrayArrayMap &edgeMapMaxR)
Loop expansion and determine different variants of the transformation matrix.
std::map< LibUtilities::ShapeType, Array< OneD, Array< OneD, unsigned int > > > ShapeToIntArrayArrayMap
virtual void v_DoMultiplybyInverseTransformationMatrix(const Array< OneD, NekDouble > &pInput, Array< OneD, NekDouble > &pOutput)
Multiply by the block inverse transformation matrix.
virtual void v_DoTransformFromLowEnergy(Array< OneD, NekDouble > &pInOut)
transform the solution vector from low energy back to the original basis.
std::shared_ptr< PyrExp > PyrExpSharedPtr
virtual ~PreconditionerLowEnergy()
PreconditionerLowEnergy(const std::shared_ptr< GlobalLinSys > &plinsys, const AssemblyMapSharedPtr &pLocToGloMap)
SpatialDomains::TetGeomSharedPtr CreateRefTetGeom(void)
Sets up the reference tretrahedral element needed to construct a low energy basis.
std::shared_ptr< Expansion > ExpansionSharedPtr
std::shared_ptr< PyrGeom > PyrGeomSharedPtr
std::shared_ptr< PrismExp > PrismExpSharedPtr
std::shared_ptr< HexGeom > HexGeomSharedPtr
void SetupBlockTransformationMatrix(void)
SpatialDomains::PrismGeomSharedPtr CreateRefPrismGeom(void)
Sets up the reference prismatic element needed to construct a low energy basis.
std::shared_ptr< Preconditioner > PreconditionerSharedPtr
std::shared_ptr< PrismGeom > PrismGeomSharedPtr
std::shared_ptr< PreconditionerLowEnergy > PreconditionerLowEnergySharedPtr
void CreateMultiplicityMap(void)
void ReSetPrismMaxRMat(int nummodesmax, LocalRegions::PrismExpSharedPtr &PirsmExp, ShapeToDNekMap &maxRmat, ShapeToIntArrayMap &vertMapMaxR, ShapeToIntArrayArrayMap &edgeMapMaxR, ShapeToIntArrayArrayMap &faceMapMaxR, bool UseTetOnly)