OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
|
#include <FMGPoissonSolver.h>
Public Member Functions | |
FMGPoissonSolver (AmrBoxLib *itsAmrObject_p) | |
void | solve (AmrScalarFieldContainer_t &rho, AmrScalarFieldContainer_t &phi, AmrVectorFieldContainer_t &efield, unsigned short baseLevel, unsigned short finestLevel, bool prevAsGuess=true) |
double | getXRangeMin (unsigned short level=0) |
double | getXRangeMax (unsigned short level=0) |
double | getYRangeMin (unsigned short level=0) |
double | getYRangeMax (unsigned short level=0) |
double | getZRangeMin (unsigned short level=0) |
double | getZRangeMax (unsigned short level=0) |
Inform & | print (Inform &os) const |
![]() | |
AmrPoissonSolver (AmrBoxLib *itsAmrObject_p) | |
virtual | ~AmrPoissonSolver () |
void | computePotential (Field_t &, Vector_t) |
void | computePotential (Field_t &, Vector_t, double) |
void | test (PartBunchBase< double, 3 > *) |
void | hasToRegrid () |
![]() | |
virtual void | computePotential (Field_t &rho, Vector_t hr)=0 |
virtual void | solve (AmrScalarFieldContainer_t &, AmrScalarFieldContainer_t &, AmrVectorFieldContainer_t &, unsigned short, unsigned short, bool=true) |
virtual void | hasToRegrid () |
virtual void | computePotential (Field_t &rho, Vector_t hr, double zshift)=0 |
virtual double | getXRangeMin (unsigned short level=0)=0 |
virtual double | getXRangeMax (unsigned short level=0)=0 |
virtual double | getYRangeMin (unsigned short level=0)=0 |
virtual double | getYRangeMax (unsigned short level=0)=0 |
virtual double | getZRangeMin (unsigned short level=0)=0 |
virtual double | getZRangeMax (unsigned short level=0)=0 |
virtual void | test (PartBunchBase< double, 3 > *bunch)=0 |
virtual | ~PoissonSolver () |
virtual void | resizeMesh (Vector_t &, Vector_t &, const Vector_t &, const Vector_t &, double) |
virtual double | getinteractionRadius () const |
virtual void | calculatePairForces (PartBunchBase< double, 3 > *, double) |
Private Types | |
typedef AmrBoxLib::AmrGeomContainer_t | GeomContainer_t |
typedef amrex::Vector< AmrBoxLib::AmrField_t * > | AmrFieldContainer_pt |
typedef AmrBoxLib::AmrGeometry_t | AmrGeometry_t |
typedef AmrBoxLib::AmrGrid_t | AmrGrid_t |
typedef AmrBoxLib::AmrProcMap_t | AmrProcMap_t |
typedef AmrBoxLib::AmrScalarFieldContainer_t | AmrScalarFieldContainer_t |
typedef AmrBoxLib::AmrVectorFieldContainer_t | AmrVectorFieldContainer_t |
Private Member Functions | |
void | initParameters_m () |
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) |
Private Attributes | |
int | bc_m [2 *AMREX_SPACEDIM] |
Boundary conditions. More... | |
double | reltol_m |
Relative tolearance for solver. More... | |
double | abstol_m |
Absolute tolerance for solver. More... | |
Additional Inherited Members | |
![]() | |
typedef Field< int, 3, Mesh_t, Center_t > | IField_t |
typedef Field< std::complex< double >, 3, Mesh_t, Center_t > | CxField_t |
![]() | |
AmrBoxLib * | itsAmrObject_mp |
bool | regrid_m |
is set to true by itsAmrObject_mp and reset to false by solver More... | |
Definition at line 33 of file FMGPoissonSolver.h.
|
private |
Definition at line 37 of file FMGPoissonSolver.h.
|
private |
Definition at line 38 of file FMGPoissonSolver.h.
|
private |
Definition at line 39 of file FMGPoissonSolver.h.
|
private |
Definition at line 40 of file FMGPoissonSolver.h.
Definition at line 41 of file FMGPoissonSolver.h.
Definition at line 42 of file FMGPoissonSolver.h.
|
private |
Definition at line 36 of file FMGPoissonSolver.h.
FMGPoissonSolver::FMGPoissonSolver | ( | AmrBoxLib * | itsAmrObject_p | ) |
This solver only works with AmrBoxLib. In order the solver to work the cells need to be of cubic shape. Otherwise the solver stops with the error message that it did not converge (AMReX internal).
itsAmrObject_p | has information about refinemen ratios, etc. |
Definition at line 32 of file FMGPoissonSolver.cpp.
References bc_m, and initParameters_m().
|
virtual |
Implements PoissonSolver.
Definition at line 130 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
virtual |
Implements PoissonSolver.
Definition at line 125 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
virtual |
Implements PoissonSolver.
Definition at line 140 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
virtual |
Implements PoissonSolver.
Definition at line 135 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
virtual |
Implements PoissonSolver.
Definition at line 150 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
virtual |
Implements PoissonSolver.
Definition at line 145 of file FMGPoissonSolver.cpp.
References AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp.
|
private |
Initialize additional parameters for the multigrid solver that are given by ParmParse. The function is called in the constructory only.
Definition at line 164 of file FMGPoissonSolver.cpp.
Referenced by FMGPoissonSolver().
Print information abour tolerances.
os | output stream where to write to |
Definition at line 155 of file FMGPoissonSolver.cpp.
References abstol_m, endl(), and reltol_m.
|
virtual |
Multigrid solve based on AMReX FMultiGrid solver. The relative tolerance is set to 1.0e-9 and the absolute tolerance to 0.0.
rho | right-hand side charge density on grid [C / m] |
phi | electrostatic potential (unknown) [V] |
efield | electric field [V / m] |
baseLevel | for solve |
finestLevel | for solve |
prevAsGuess | use of previous solution as initial guess |
Reimplemented from PoissonSolver.
Definition at line 46 of file FMGPoissonSolver.cpp.
References abstol_m, bc_m, AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp, Hypervolume::n, PAssert, and solveWithF90_m().
|
private |
Does the actual solve. It calls the FMultiGrid solver of AMReX. It uses an approximation order of 3 at Dirichlet boundaries.
rho | charge density on grids [C / m] |
phi | electrostatic potential on grid [V] |
grad_phi_edge | gradient of the potential (values at faces) |
geom | geometry of the problem, i.e. physical domain boundaries |
baseLevel | for solve |
finestLevel | for solve |
Definition at line 264 of file FMGPoissonSolver.cpp.
References abstol_m, bc_m, AmrPoissonSolver< AmrBoxLib >::itsAmrObject_mp, and reltol_m.
Referenced by solve().
|
private |
Absolute tolerance for solver.
Definition at line 128 of file FMGPoissonSolver.h.
Referenced by print(), solve(), and solveWithF90_m().
|
private |
Boundary conditions.
In case of reusing the previous solution the grids might have changed, thus, we interpolate from the coarse grids to the fine grids
Definition at line 126 of file FMGPoissonSolver.h.
Referenced by FMGPoissonSolver(), solve(), and solveWithF90_m().
|
private |
Relative tolearance for solver.
Definition at line 127 of file FMGPoissonSolver.h.
Referenced by print(), and solveWithF90_m().