24template <
class T,
int MatOrder>
30 typedef memory::shared_ptr<gsINSPreconditioner> Ptr;
31 typedef memory::unique_ptr<gsINSPreconditioner> uPtr;
36 gsINSPreconditioner() {}
71 virtual int rows()
const
75 virtual int cols()
const
79 virtual std::string getName()
107template <
class T,
int MatOrder>
113 typename gsINSPrecondBlock<T>::Ptr m_Finv, m_Sinv;
119 typedef memory::shared_ptr<gsINSBlockPrecondBase> Ptr;
120 typedef memory::unique_ptr<gsINSBlockPrecondBase> uPtr;
130 m_Finv(Finv), m_Sinv(Sinv), m_Bt(B), m_opt(opt)
172 return (m_Finv->
rows() + m_Sinv->
rows());
178 return (m_Finv->
cols() + m_Bt->
cols());
189template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
203 typedef memory::shared_ptr<gsINSBlockPrecondLSC> Ptr;
204 typedef memory::unique_ptr<gsINSBlockPrecondLSC> uPtr;
212 Base(new BlockFType(mat.at(
"matNS"), opt),
213 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
214 new gsINSPrecondSchurLSC<T, MatOrder>(mat, opt), opt)
233 Base::update(
new BlockFType(mat.at(
"matNS"), m_opt),
new gsINSPrecondSchurLSC<T, MatOrder>(mat, m_opt));
239 std::string name =
"LSC_" + m_Finv->getName();
251template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
265 typedef memory::shared_ptr<gsINSBlockPrecondPCD> Ptr;
266 typedef memory::unique_ptr<gsINSBlockPrecondPCD> uPtr;
274 Base(new BlockFType(mat.at(
"matNS"), opt),
275 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
276 new gsINSPrecondSchurPCD<T, MatOrder>(mat, opt), opt)
295 Base::update(
new BlockFType(mat.at(
"matNS"), m_opt),
new gsINSPrecondSchurPCD<T, MatOrder>(mat, m_opt));
301 std::string name =
"PCD_" + m_Finv->getName();
313template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
327 typedef memory::shared_ptr<gsINSBlockPrecondPCDmod> Ptr;
328 typedef memory::unique_ptr<gsINSBlockPrecondPCDmod> uPtr;
336 Base(new BlockFType(mat.at(
"matNS"), opt),
337 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
338 new gsINSPrecondSchurPCDmod<T, MatOrder>(mat, opt), opt)
357 Base::update(
new BlockFType(mat.at(
"matNS"), m_opt),
new gsINSPrecondSchurPCDmod<T, MatOrder>(mat, m_opt));
363 std::string name =
"PCDmod_" + m_Finv->getName();
375template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockFwhole<T, MatOrder> >
389 typedef memory::shared_ptr<gsINSBlockPrecondAL> Ptr;
390 typedef memory::unique_ptr<gsINSBlockPrecondAL> uPtr;
398 Base(new BlockFType(mat.at(
"matNS"), opt),
399 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
400 new gsINSPrecondSchurAL<T, MatOrder>(mat, opt), opt)
443 std::string name =
"AL_" + m_Finv->getName();
455template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
476 typedef memory::shared_ptr<gsINSBlockPrecondSIMPLE> Ptr;
477 typedef memory::unique_ptr<gsINSBlockPrecondSIMPLE> uPtr;
485 Base(new BlockFType(mat.at(
"matNS"), opt),
486 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
487 new gsINSPrecondSchurSIMPLE<T, MatOrder>(mat, opt), opt)
490 int pdofs = opt.
getInt(
"pdofs");
497 m_B = matNS.block(uSize, 0, pdofs, uSize);
499 m_alphaP = opt.
askReal(
"alphaP", 1.0);
518 Base::update(
new BlockFType(mat.at(
"matNS"), m_opt),
new gsINSPrecondSchurSIMPLE<T, MatOrder>(mat, m_opt));
530 std::string name =
"SIMPLE_" + m_Finv->getName();
542template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
557 using Base::m_alphaP;
564 typedef memory::shared_ptr<gsINSBlockPrecondSIMPLER> Ptr;
565 typedef memory::unique_ptr<gsINSBlockPrecondSIMPLER> uPtr;
575 m_BDinv = m_B * m_Dinv;
599 std::string name =
"SIMPLER_" + m_Finv->getName();
611template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
632 typedef memory::shared_ptr<gsINSBlockPrecondMSIMPLER> Ptr;
633 typedef memory::unique_ptr<gsINSBlockPrecondMSIMPLER> uPtr;
641 Base(new BlockFType(mat.at(
"matNS"), opt),
642 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
643 new gsINSPrecondSchurMSIMPLER<T, MatOrder>(mat, opt), opt)
645 int dim = opt.
getInt(
"dim");
646 int udofs = opt.
getInt(
"udofs");
647 int uSize = dim * udofs;
648 int pdofs = opt.
getInt(
"pdofs");
656 m_B = matNS.block(uSize, 0, pdofs, uSize);
657 m_BMinv = m_B * m_velMinv;
659 m_alphaP = opt.
askReal(
"alphaP", 1.0);
690 std::string name =
"MSIMPLER_" + m_Finv->getName();
702template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
708 typename gsINSPrecondBlock<T>::Ptr m_Finv, m_Sinv;
713 typedef memory::shared_ptr<gsBlockPrecondStokes> Ptr;
714 typedef memory::unique_ptr<gsBlockPrecondStokes> uPtr;
722 m_Finv(new BlockFType(mat.at(
"matNS"), opt)), m_Sinv(new gsINSPrecondSchurStokes<T, MatOrder>(mat, opt)), m_opt(opt)
741 m_Finv.reset(
new BlockFType(mat.at(
"matNS"), m_opt));
756 return (m_Finv->
rows() + m_Sinv->
rows());
762 return (m_Finv->
cols() + m_Sinv->
cols());
768 std::string name =
"StokesDiag_" + m_Finv->getName();
780template <
class T,
int MatOrder,
class BlockFType = gsINSPrecondBlockF<T, MatOrder> >
794 typedef memory::shared_ptr<gsBlockPrecondStokesTriang> Ptr;
795 typedef memory::unique_ptr<gsBlockPrecondStokesTriang> uPtr;
803 Base(new BlockFType(mat.at(
"matNS"), opt),
804 new gsINSPrecondBlockBt<T, MatOrder>(mat.at(
"matNS"), opt),
805 new gsINSPrecondSchurStokes<T, MatOrder>(mat, opt), opt)
830 std::string name =
"StokesTriang_" + m_Finv->getName();
838#ifndef GISMO_BUILD_LIB
839#include GISMO_HPP_HEADER(gsINSPreconditioners.hpp)
Block triangular preconditioner for the Stokes problem.
Definition gsINSPreconditioners.h:782
gsBlockPrecondStokesTriang(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:802
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:813
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:828
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:822
Block diagonal preconditioner for the Stokes problem.
Definition gsINSPreconditioners.h:704
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:730
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:766
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:739
gsBlockPrecondStokes(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:721
virtual void apply(const gsMatrix< T > &input, gsMatrix< T > &x) const
Apply the preconditioner. Computes the vector \fx = P^{-1} y\f.
Definition gsINSPreconditioners.hpp:286
virtual int rows() const
Returns the number of rows of the preconditioner.
Definition gsINSPreconditioners.h:754
virtual int cols() const
Returns the number of columns of the preconditioner.
Definition gsINSPreconditioners.h:760
Augmented Lagrangian preconditioner.
Definition gsINSPreconditioners.h:377
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:408
static void fillALmodifSystem_into(gsSparseMatrix< T, MatOrder > &matGamma, gsMatrix< T > &rhsGamma, const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsMatrix< T > &rhs, const gsOptionList &opt)
Fill the Augmented Lagrangian linear system.
Definition gsINSPreconditioners.hpp:182
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:441
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:435
static void fillALgammaPart_into(gsSparseMatrix< T, MatOrder > &matGammaPart, gsMatrix< T > &rhsGammaPart, const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsMatrix< T > &rhs, const gsOptionList &opt)
Fill the extra part of the Augmented Lagrangian linear system.
Definition gsINSPreconditioners.hpp:141
gsINSBlockPrecondAL(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:397
Base class for block preconditioners for linear systems arising from linearized Navier-Stokes of form...
Definition gsINSPreconditioners.h:109
void update(gsINSPrecondBlock< T > *Finv, gsINSPrecondBlock< T > *Sinv)
Update the preconditioner (new linearization or time step). To be used when both \fF\f and \fS\f bloc...
Definition gsINSPreconditioners.h:161
static uPtr make(gsINSPrecondBlock< T > *Finv, gsLinearOperator< T > *B, gsINSPrecondBlock< T > *Sinv, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:136
gsINSBlockPrecondBase(gsINSPrecondBlock< T > *Finv, gsLinearOperator< T > *B, gsINSPrecondBlock< T > *Sinv, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:129
virtual void apply(const gsMatrix< T > &input, gsMatrix< T > &x) const
Apply the preconditioner. Computes the vector \fx = P^{-1} y\f.
Definition gsINSPreconditioners.hpp:120
virtual int rows() const
Returns the number of rows of the preconditioner.
Definition gsINSPreconditioners.h:170
virtual int cols() const
Returns the number of columns of the preconditioner.
Definition gsINSPreconditioners.h:176
void update(gsINSPrecondBlock< T > *Finv)
Update the preconditioner (new linearization or time step). To be used when only the \fF\f block chan...
Definition gsINSPreconditioners.h:152
Least-squares commutator preconditioner.
Definition gsINSPreconditioners.h:191
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:222
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:237
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:231
gsINSBlockPrecondLSC(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:211
MSIMPLER preconditioner.
Definition gsINSPreconditioners.h:613
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:667
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:688
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:676
virtual void apply(const gsMatrix< T > &input, gsMatrix< T > &x) const
Apply the preconditioner. Computes the vector \fx = P^{-1} y\f.
Definition gsINSPreconditioners.hpp:255
gsINSBlockPrecondMSIMPLER(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:640
Pressure convection-diffusion preconditioner.
Definition gsINSPreconditioners.h:253
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:284
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:299
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:293
gsINSBlockPrecondPCD(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:273
Modified pressure convection-diffusion preconditioner.
Definition gsINSPreconditioners.h:315
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:346
gsINSBlockPrecondPCDmod(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:335
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:361
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:355
SIMPLER preconditioner.
Definition gsINSPreconditioners.h:544
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:583
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:597
virtual void apply(const gsMatrix< T > &input, gsMatrix< T > &x) const
Apply the preconditioner. Computes the vector \fx = P^{-1} y\f.
Definition gsINSPreconditioners.hpp:224
gsINSBlockPrecondSIMPLER(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:572
SIMPLE preconditioner.
Definition gsINSPreconditioners.h:457
gsINSBlockPrecondSIMPLE(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Constructor.
Definition gsINSPreconditioners.h:484
static uPtr make(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat, const gsOptionList &opt)
Returns a unique pointer to a newly created instance.
Definition gsINSPreconditioners.h:507
virtual std::string getName()
Returns the preconditioner name as a string.
Definition gsINSPreconditioners.h:528
virtual void update(const std::map< std::string, gsSparseMatrix< T, MatOrder > > &mat)
Update the preconditioner (new linearization or time step).
Definition gsINSPreconditioners.h:516
virtual void apply(const gsMatrix< T > &input, gsMatrix< T > &x) const
Apply the preconditioner. Computes the vector \fx = P^{-1} y\f.
Definition gsINSPreconditioners.hpp:199
A base class for individual blocks of block preconditioners.
Definition gsINSPrecondBlocks.h:28
Simple abstract class for discrete operators.
Definition gsLinearOperator.h:29
memory::shared_ptr< gsLinearOperator > Ptr
Shared pointer for gsLinearOperator.
Definition gsLinearOperator.h:33
virtual index_t rows() const =0
Returns the number of rows of the operator.
virtual index_t cols() const =0
Returns the number of columns of the operator.
A matrix with arbitrary coefficient type and fixed or dynamic size.
Definition gsMatrix.h:41
Class which holds a list of parameters/options, and provides easy access to them.
Definition gsOptionList.h:33
Real askReal(const std::string &label, const Real &value=0) const
Reads value for option label from options.
Definition gsOptionList.cpp:139
bool getSwitch(const std::string &label) const
Reads value for option label from options.
Definition gsOptionList.cpp:51
const index_t & getInt(const std::string &label) const
Reads value for option label from options.
Definition gsOptionList.cpp:37
Sparse matrix class, based on gsEigen::SparseMatrix.
Definition gsSparseMatrix.h:139
#define GISMO_NO_IMPLEMENTATION
Definition gsDebug.h:129
Simple abstract class for (discrete) linear operators.
Simple adapter classes to use matrices or linear solvers as gsLinearOperators.
unique_ptr< T > make_unique(T *x)
Definition gsMemory.h:198
The G+Smo namespace, containing all definitions for the library.
void diagInvMatrix_into(const gsSparseMatrix< T, MatOrder > &mat, gsSparseMatrix< T, MatOrder > &diagInv, int repeat, bool lumping=false)
Fill a diagonal approximation of an inverse matrix.
Definition gsFlowUtils.h:137