35 #include <boost/core/ignore_unused.hpp>
48 namespace MultiRegions
56 "GlobalSysSoln",
"DirectMultiLevelStaticCond",
61 "GlobalSysSoln",
"IterativeStaticCond",
64 "GlobalSysSoln",
"IterativeMultiLevelStaticCond",
71 "GlobalSysSoln",
"XxtMultiLevelStaticCond",
78 "GlobalSysSoln",
"PETScMultiLevelStaticCond",
81 #ifdef NEKTAR_USE_SCOTCH
84 "GlobalSysSoln",
"DirectMultiLevelStaticCond");
189 const std::weak_ptr<ExpList> &pExpList,
190 const std::shared_ptr<AssemblyMap> &pLocToGloMap)
191 : m_linSysKey(pKey), m_expList(pExpList),
192 m_robinBCInfo(m_expList.lock()->GetRobinBCInfo()),
194 m_expList.lock()->GetSession()->DefinesCmdLineArgument(
"verbose"))
196 boost::ignore_unused(pLocToGloMap);
240 std::shared_ptr<MultiRegions::ExpList> expList =
m_expList.lock();
261 "VarCoeffSVVCuroffRatio is set but "
262 " not FactorSVVCutoffRatio");
289 expList->GetPhys_Offset(n),
290 vExp->GetTotPoints());
294 vExp->DetShapeType(), *vExp, vConstFactorMap,
318 int rows = loc_mat->GetRows();
319 int cols = loc_mat->GetColumns();
320 const NekDouble *dat = loc_mat->GetRawPtr();
323 Blas::Dscal(rows * cols, loc_mat->Scale(), new_mat->GetRawPtr(), 1);
326 for (rBC =
m_robinBCInfo.find(n)->second; rBC; rBC = rBC->next)
328 vExp->AddRobinMassMatrix(rBC->m_robinID,
329 rBC->m_robinPrimitiveCoeffs, new_mat);
360 tmp_mat = loc_mat->GetBlock(0, 0);
363 int rows = tmp_mat->GetRows();
364 int cols = tmp_mat->GetColumns();
365 const NekDouble *dat = tmp_mat->GetRawPtr();
368 Blas::Dscal(rows * cols, tmp_mat->Scale(), new_mat->GetRawPtr(), 1);
371 for (rBC =
m_robinBCInfo.find(n)->second; rBC; rBC = rBC->next)
373 vExp->AddRobinMassMatrix(rBC->m_robinID,
374 rBC->m_robinPrimitiveCoeffs, new_mat);
380 unsigned int exp_size[] = {tmp_mat->GetRows(),
381 loc_mat->GetBlock(1, 1)->GetRows()};
382 unsigned int nblks = 2;
384 nblks, nblks, exp_size, exp_size);
386 new_loc_mat->SetBlock(0, 0, tmp_mat);
387 new_loc_mat->SetBlock(0, 1, loc_mat->GetBlock(0, 1));
388 new_loc_mat->SetBlock(1, 0, loc_mat->GetBlock(1, 0));
389 new_loc_mat->SetBlock(1, 1, loc_mat->GetBlock(1, 1));
390 loc_mat = new_loc_mat;
426 const std::shared_ptr<AssemblyMap> &pLocToGloMap)
428 boost::ignore_unused(pLocToGloMap);
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Provides a generic Factory class.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
static std::string RegisterEnumValue(std::string pEnum, std::string pString, int pEnumValue)
Registers an enumeration value.
static std::string RegisterDefaultSolverInfo(const std::string &pName, const std::string &pValue)
Registers the default string value of a solver info property.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual int v_GetNumBlocks()
Get the number of blocks in this system.
const std::weak_ptr< ExpList > m_expList
Local Matrix System.
static std::string lookupIds[]
std::shared_ptr< GlobalLinSys > GetSharedThisPtr()
Returns a shared pointer to the current object.
LocalRegions::MatrixKey GetBlockMatrixKey(unsigned int n)
const std::map< int, RobinBCInfoSharedPtr > m_robinBCInfo
Robin boundary info.
GlobalLinSys(const GlobalLinSysKey &pKey, const std::weak_ptr< ExpList > &pExpList, const std::shared_ptr< AssemblyMap > &pLocToGloMap)
Constructor for full direct matrix solve.
virtual void v_InitObject()
const GlobalLinSysKey m_linSysKey
Key associated with this linear system.
virtual DNekScalMatSharedPtr v_GetBlock(unsigned int n)
Retrieves the block matrix from n-th expansion using the matrix key provided by the m_linSysKey.
virtual void v_DropBlock(unsigned int n)
Releases the local block matrix from NekManager of n-th expansion using the matrix key provided by th...
PreconditionerSharedPtr CreatePrecon(AssemblyMapSharedPtr asmMap)
Create a preconditioner object from the parameters defined in the supplied assembly map.
virtual DNekScalBlkMatSharedPtr v_GetStaticCondBlock(unsigned int n)
Retrieves a the static condensation block matrices from n-th expansion using the matrix key provided ...
virtual void v_Initialise(const std::shared_ptr< AssemblyMap > &pLocToGloMap)
virtual void v_DropStaticCondBlock(unsigned int n)
Releases the static condensation block matrices from NekManager of n-th expansion using the matrix ke...
Describe a linear system.
int GetNVarFactors() const
const Array< OneD, const NekDouble > & GetVarFactors(const StdRegions::ConstFactorType &coeff) const
const StdRegions::ConstFactorMap & GetConstFactors() const
Returns all the constants.
int GetNVarCoeffs() const
const StdRegions::VarCoeffMap & GetVarCoeffs() const
StdRegions::MatrixType GetMatrixType() const
Return the matrix type.
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
std::shared_ptr< Expansion > ExpansionSharedPtr
const char *const PreconditionerTypeMap[]
@ eIterativeMultiLevelStaticCond
@ eDirectMultiLevelStaticCond
@ eXxtMultiLevelStaticCond
@ ePETScMultiLevelStaticCond
std::shared_ptr< RobinBCInfo > RobinBCInfoSharedPtr
GlobalLinSysFactory & GetGlobalLinSysFactory()
std::shared_ptr< Preconditioner > PreconditionerSharedPtr
PreconFactory & GetPreconFactory()
std::shared_ptr< AssemblyMap > AssemblyMapSharedPtr
@ eFactorSVVDGKerDiffCoeff
@ eFactorSVVPowerKerDiffCoeff
VarCoeffMap RestrictCoeffMap(const VarCoeffMap &m, size_t offset, size_t cnt)
std::map< ConstFactorType, NekDouble > ConstFactorMap
std::map< StdRegions::VarCoeffType, VarCoeffEntry > VarCoeffMap
The above copyright notice and this permission notice shall be included.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr