File petsc_laplace.hxx#
Perpendicular Laplacian inversion using PETSc Solvers
Equation solved is:
\[ d\nabla^2_\perp x + (1/c1)\nabla_perp c2\cdot\nabla_\perp x + ex\nabla_x x + ez\nabla_z x + a x = b \]
-
class LaplacePetsc : public Laplacian#
Public Functions
-
LaplacePetsc(Options *opt = nullptr, const CELL_LOC loc = CELL_CENTRE, Mesh *mesh_in = nullptr, Solver *solver = nullptr)#
-
inline ~LaplacePetsc()#
-
inline virtual void setCoefA(const Field2D &val) override#
Set coefficients for inversion. Re-builds matrices if necessary.
-
int precon(Vec x, Vec y)#
Preconditioner function.
-
void setCoefA(const Field2D &val) = 0
Set coefficients for inversion. Re-builds matrices if necessary.
-
inline void setCoefA(const Field3D &val)
-
void setCoefC(const Field2D &val) = 0
-
inline void setCoefC(const Field3D &val)
-
inline void setCoefC1(const Field2D &val)
-
inline void setCoefC1(const Field3D &val)
-
inline void setCoefC2(const Field2D &val)
-
inline void setCoefC2(const Field3D &val)
-
void setCoefD(const Field2D &val) = 0
-
inline void setCoefD(const Field3D &val)
-
void setCoefEx(const Field2D &val) = 0
-
inline void setCoefEx(const Field3D &val)
-
void setCoefEz(const Field2D &val) = 0
-
inline void setCoefEz(const Field3D &val)
Private Functions
-
void Element(int i, int x, int z, int xshift, int zshift, PetscScalar ele, Mat &MatA)#
-
void Coeffs(int x, int y, int z, BoutReal &A1, BoutReal &A2, BoutReal &A3, BoutReal &A4, BoutReal &A5)#
-
void checkFlags()#
Private Members
-
bool issetD#
-
bool issetC#
-
bool issetE#
-
int Istart#
-
int Iend#
-
int meshx#
-
int meshz#
-
int size#
-
int localN#
-
MPI_Comm comm#
-
Mat MatA#
-
Vec xs#
-
Vec bs#
-
KSP ksp#
-
int gmres_max_steps#
-
int maxits#
-
bool direct#
-
bool fourth_order#
-
bool rightprec#
Private Static Attributes
-
static constexpr int implemented_flags = INVERT_START_NEW#
-
static constexpr int implemented_boundary_flags = INVERT_AC_GRAD | INVERT_SET | INVERT_RHS#
-
LaplacePetsc(Options *opt = nullptr, const CELL_LOC loc = CELL_CENTRE, Mesh *mesh_in = nullptr, Solver *solver = nullptr)#