File multigrid_laplace.hxx

Defines

MAXGM
class MultigridAlg

Subclassed by Multigrid1DP, Multigrid2DPf1D, MultigridSerial

Public Functions

MultigridAlg(int, int, int, int, int, MPI_Comm, int)
virtual ~MultigridAlg()
void setMultigridC(int)
void getSolution(BoutReal*, BoutReal*, int)

Public Members

int mglevel
int mgplag
int cftype
int mgsm
int pcheck
int xNP
int zNP
int rProcI
BoutReal rtol
BoutReal atol
BoutReal dtol
BoutReal omega
Array<int> gnx
Array<int> gnz
Array<int> lnx
Array<int> lnz
BoutReal **matmg

Protected Functions

void communications(BoutReal*, int)
void setMatrixC(int)
void cycleMG(int, BoutReal*, BoutReal*)
void smoothings(int, BoutReal*, BoutReal*)
void projection(int, BoutReal*, BoutReal*)
void prolongation(int, BoutReal*, BoutReal*)
void pGMRES(BoutReal*, BoutReal*, int, int)
void solveMG(BoutReal*, BoutReal*, int)
void multiAVec(int, BoutReal*, BoutReal*)
void residualVec(int, BoutReal*, BoutReal*, BoutReal*)
BoutReal vectorProd(int, BoutReal*, BoutReal*)
virtual void lowestSolver(BoutReal*, BoutReal*, int)

Protected Attributes

int numP
int xProcI
int zProcI
int xProcP
int xProcM
int zProcP
int zProcM
MPI_Comm commMG
class MultigridSerial : public MultigridAlg

Public Functions

MultigridSerial(int level, int gx, int gz, MPI_Comm comm, int check)
inline ~MultigridSerial()
void convertMatrixF(BoutReal*)
class Multigrid2DPf1D : public MultigridAlg

Public Functions

Multigrid2DPf1D(int, int, int, int, int, int, int, int, MPI_Comm, int)
inline ~Multigrid2DPf1D()
void setMultigridC(int)
void setPcheck(int)
void setValueS()

Public Members

int kflag

Private Functions

void convertMatrixFS(int)
virtual void lowestSolver(BoutReal*, BoutReal*, int)

Private Members

std::unique_ptr<MultigridSerial> sMG
class Multigrid1DP : public MultigridAlg

Public Functions

Multigrid1DP(int, int, int, int, int, int, MPI_Comm, int)
inline ~Multigrid1DP()
void setMultigridC(int)
void setPcheck(int)
void setValueS()

Public Members

int kflag

Private Functions

void convertMatrixF2D(int)
void convertMatrixFS(int)
virtual void lowestSolver(BoutReal*, BoutReal*, int)

Private Members

MPI_Comm comm2D
std::unique_ptr<MultigridSerial> sMG
std::unique_ptr<Multigrid2DPf1D> rMG
class LaplaceMultigrid : public Laplacian

Public Functions

LaplaceMultigrid(Options *opt = nullptr, const CELL_LOC loc = CELL_CENTRE, Mesh *mesh_in = nullptr, Solver *solver = nullptr, Datafile *dump = nullptr)
inline ~LaplaceMultigrid()
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 bool uses3DCoefs() const override

Does this solver use Field3D coefficients (true) or only their DC component (false)

inline virtual FieldPerp solve(const FieldPerp &b) override
virtual FieldPerp solve(const FieldPerp &b_in, const FieldPerp &x0) override

Private Functions

void generateMatrixF(int)

Private Members

Field3D A
Field3D C1
Field3D C2
Field3D D
int Nx_local
int Nx_global
int Nz_local
int Nz_global
int yindex
Array<BoutReal> x
Array<BoutReal> b
std::unique_ptr<Multigrid1DP> kMG
int mglevel
int mgplag
int cftype
int mgsm
int pcheck
int mgcount
int mgmpi
Options *opts
BoutReal rtol
BoutReal atol
BoutReal dtol
BoutReal omega
MPI_Comm commX
int comms_tagbase