45 namespace MultiRegions
51 string PreconditionerLinearWithLowEnergy::className
53 "FullLinearSpaceWithLowEnergyBlock",
54 PreconditionerLinearWithLowEnergy::create,
55 "Full Linear space and low energy block preconditioning");
64 PreconditionerLinearWithLowEnergy::PreconditionerLinearWithLowEnergy(
65 const std::shared_ptr<GlobalLinSys> &plinsys,
102 const std::shared_ptr<DNekScalMat > &loc_mat)
126 int nGlobal = pInput.num_elements();
140 m_linSpacePrecon->DoPreconditionerWithNonVertOutput(InputLinear, OutputLinear, tmp);
142 m_lowEnergyPrecon->DoMultiplybyInverseTransposedTransformationMatrix(OutputLinear,pOutput);
144 Vmath::Vadd(nGlobal,pOutput,1,OutputLowEnergy,1,pOutput,1);
virtual void v_DoTransformToLowEnergy(Array< OneD, NekDouble > &pInOut, int offset)
Transform from original basis to low energy basis.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
const std::weak_ptr< GlobalLinSys > m_linsys
PreconFactory & GetPreconFactory()
std::shared_ptr< AssemblyMap > AssemblyMapSharedPtr
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
virtual void v_InitObject()
virtual void v_DoTransformFromLowEnergy(Array< OneD, NekDouble > &pInput)
Transform from low energy basis to orignal basis.
virtual void v_DoPreconditioner(const Array< OneD, NekDouble > &pInput, Array< OneD, NekDouble > &pOutput)
Apply a preconditioner to the conjugate gradient method.
virtual DNekScalMatSharedPtr v_TransformedSchurCompl(int n, int offset, const std::shared_ptr< DNekScalMat > &loc_mat)
Get block elemental transposed transformation matrix .
PreconditionerSharedPtr m_linSpacePrecon
virtual void v_BuildPreconditioner()
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
std::weak_ptr< AssemblyMap > m_locToGloMap
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.
PreconditionerSharedPtr m_lowEnergyPrecon