File hypre3d_laplace.hxx#

class LaplaceHypre3d : public Laplacian#

Public Functions

LaplaceHypre3d(Options *opt = nullptr, const CELL_LOC loc = CELL_CENTRE, Mesh *mesh_in = nullptr, Solver *solver = nullptr)#
~LaplaceHypre3d() override#
inline virtual void setCoefA(const Field2D &val) override#

Set coefficients for inversion. Re-builds matrices if necessary.

inline virtual void setCoefC(const Field2D &val) override#
inline virtual void setCoefC1(const Field2D &val) override#
inline virtual void setCoefC2(const Field2D &val) override#
inline virtual void setCoefD(const Field2D &val) override#
inline virtual void setCoefEx(const Field2D &val) override#
inline virtual void setCoefEz(const Field2D &val) override#
inline virtual void setCoefA(const Field3D &val) override#
inline virtual void setCoefC(const Field3D &val) override#
inline virtual void setCoefC1(const Field3D &val) override#
inline virtual void setCoefC2(const Field3D &val) override#
inline virtual void setCoefD(const Field3D &val) override#
inline virtual void setCoefEx(const Field3D &val) override#
inline virtual void setCoefEz(const Field3D &val) override#
bout::HypreMatrix<Field3D> &getMatrix3D()#
inline IndexerPtr<Field3D> getIndexer()#
virtual Field2D solve(const Field2D &b) override#
inline virtual Field3D solve(const Field3D &b) override#
virtual Field3D solve(const Field3D &b_in, const Field3D &x0) override#

Performs the laplacian inversion y-slice by y-slice

Parameters:
  • b[in] All the y-slices of b_slice, which is the right hand side of the equation A*x_slice = b_slice

  • x0[in] All the y-slices of the variable eventually used to set BC

Returns:

x All the y-slices of x_slice in the equation A*x_slice = b_slice

inline virtual FieldPerp solve(const FieldPerp &b) override#
void updateMatrix3D()#

Public Members

Field3D A#
Field3D C1#
Field3D C2#
Field3D D#
Field3D Ex#
Field3D Ez#
bool issetD = false#
bool issetC = false#
bool issetE = false#
bool updateRequired = true#
int lower_boundary_flags#
int upper_boundary_flags#
Options *opts#
RangeIterator lowerY#
RangeIterator upperY#
IndexerPtr<Field3D> indexer#
bout::HypreMatrix<Field3D> operator3D#
bout::HypreVector<Field3D> solution#
bout::HypreVector<Field3D> rhs#
bout::HypreSystem<Field3D> linearSystem#
int n_solves = 0#
int cumulative_iterations = 0#
BoutReal average_iterations = 0.0#
Hypre3dMonitor monitor#
bool use_precon#
bool rightprec#

Public Static Functions

static OperatorStencil<Ind3D> getStencil(Mesh *localmesh, const RangeIterator &lowerYBound, const RangeIterator &upperYBound)#

Public Static Attributes

static constexpr int implemented_flags = INVERT_START_NEW#
static constexpr int implemented_boundary_flags = INVERT_AC_GRAD + INVERT_SET + INVERT_RHS#
class Hypre3dMonitor : public Monitor#

Public Functions

inline Hypre3dMonitor(LaplaceHypre3d &laplace_in)#
virtual int call(Solver*, BoutReal, int, int) override#

Callback function for the solver, called after timestep_ has passed

Parameters:
  • solver[in] The solver calling this monitor

  • time[in] The current simulation time

  • iter[in] The current simulation iteration

  • nout[in] The total number of iterations for this simulation

Returns:

non-zero if simulation should be stopped

Private Members

LaplaceHypre3d &laplace#