OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
FMGPoissonSolver.h
Go to the documentation of this file.
1 #ifndef FMG_POISSON_SOLVER_H_
2 #define FMG_POISSON_SOLVER_H_
3 
5 #include "Amr/AmrBoxLib.h"
6 
7 #include <AMReX_MultiFabUtil.H>
8 #include <AMReX_BLFort.H>
9 #include <AMReX_FMultiGrid.H>
10 
11 class FMGPoissonSolver : public AmrPoissonSolver< AmrBoxLib > {
12 
13 private:
15  typedef amrex::Vector<AmrBoxLib::AmrField_t*> AmrFieldContainer_pt;
21 
22 public:
23 
31  FMGPoissonSolver(AmrBoxLib* itsAmrObject_p);
32 
47  unsigned short baseLevel,
48  unsigned short finestLevel,
49  bool prevAsGuess = true);
50 
51  double getXRangeMin(unsigned short level = 0);
52  double getXRangeMax(unsigned short level = 0);
53  double getYRangeMin(unsigned short level = 0);
54  double getYRangeMax(unsigned short level = 0);
55  double getZRangeMin(unsigned short level = 0);
56  double getZRangeMax(unsigned short level = 0);
57 
58 
63  Inform &print(Inform &os) const;
64 
65 
66 private:
67 
73  void initParameters_m();
74 
87  double solveWithF90_m(const AmrFieldContainer_pt& rho,
88  const AmrFieldContainer_pt& phi,
89  const amrex::Vector< AmrFieldContainer_pt >& grad_phi_edge,
90  const GeomContainer_t& geom,
91  int baseLevel,
92  int finestLevel);
93 
99  /*
100  void interpolate_m(AmrScalarFieldContainer_t& phi, const GeomContainer_t& geom,
101  double l0norm, int finestLevel);
102  */
103 private:
104  int bc_m[2*AMREX_SPACEDIM];
105  double reltol_m;
106  double abstol_m;
107 };
108 
109 
111  return fs.print(os);
112 }
113 
114 #endif
int bc_m[2 *AMREX_SPACEDIM]
Boundary conditions.
amr::AmrGrid_t AmrGrid_t
Definition: AmrBoxLib.h:32
AmrBoxLib::AmrVectorFieldContainer_t AmrVectorFieldContainer_t
std::ostream & operator<<(std::ostream &os, const Attribute &attr)
Definition: Attribute.cpp:167
amr::AmrGeometry_t AmrGeometry_t
Definition: AmrBoxLib.h:34
double abstol_m
Absolute tolerance for solver.
AmrBoxLib::AmrGeometry_t AmrGeometry_t
amrex::Vector< AmrBoxLib::AmrField_t * > AmrFieldContainer_pt
double getXRangeMax(unsigned short level=0)
AmrBoxLib::AmrGeomContainer_t GeomContainer_t
amr::AmrVectorFieldContainer_t AmrVectorFieldContainer_t
Definition: AmrBoxLib.h:25
Inform & print(Inform &os) const
AmrBoxLib::AmrScalarFieldContainer_t AmrScalarFieldContainer_t
FRONT * fs
Definition: hypervolume.cpp:59
double solveWithF90_m(const AmrFieldContainer_pt &rho, const AmrFieldContainer_pt &phi, const amrex::Vector< AmrFieldContainer_pt > &grad_phi_edge, const GeomContainer_t &geom, int baseLevel, int finestLevel)
double getYRangeMax(unsigned short level=0)
FMGPoissonSolver(AmrBoxLib *itsAmrObject_p)
amr::AmrProcMap_t AmrProcMap_t
Definition: AmrBoxLib.h:33
AmrBoxLib::AmrGrid_t AmrGrid_t
double reltol_m
Relative tolearance for solver.
double getZRangeMin(unsigned short level=0)
AmrBoxLib::AmrProcMap_t AmrProcMap_t
double getYRangeMin(unsigned short level=0)
double getXRangeMin(unsigned short level=0)
amr::AmrScalarFieldContainer_t AmrScalarFieldContainer_t
Definition: AmrBoxLib.h:24
double getZRangeMax(unsigned short level=0)
void solve(AmrScalarFieldContainer_t &rho, AmrScalarFieldContainer_t &phi, AmrVectorFieldContainer_t &efield, unsigned short baseLevel, unsigned short finestLevel, bool prevAsGuess=true)
Definition: Inform.h:41
amr::AmrGeomContainer_t AmrGeomContainer_t
Definition: AmrBoxLib.h:26