1 #ifndef _POISSONSOLVER_HEADER 2 #define _POISSONSOLVER_HEADER 3 #include "../src/multigrid_solver.h" 18 template<
unsigned int NDIM,
typename T>
46 T l_operator(
unsigned int level, std::vector<int>& index_list,
bool addsource){
47 unsigned int i = index_list[0];
57 T kinetic = -2.0 * NDIM * phi[ i ];
58 for(
unsigned int k = 1; k < 2*NDIM + 1; k++){
59 kinetic += phi[ index_list[k] ];
64 T source = _mass * _mass * phi[ i ] + _rhofac * drho[ i ];
65 if( level > 0 && addsource ){
69 return kinetic/(h*
h) - source;
77 T dkinetic = -2.0*NDIM;
82 T dl = dkinetic/(h*
h) - dsource;
T * get_y(size_t level=0)
T * get_external_field(size_t level, size_t field)
PoissonSolver(unsigned int N, unsigned int Nmin, bool verbose=true)
size_t get_N(size_t level=0) const
void set_mass(double mass)
T l_operator(unsigned int level, std::vector< int > &index_list, bool addsource)
T dl_operator(unsigned int level, std::vector< int > &index_list)
PoissonSolver(unsigned int N, bool verbose=true)
T get_multigrid_source(size_t level, size_t i) const
void add_external_grid(MultiGrid< NDIM, T > *field)
PoissonSolver(MultiGrid< NDIM, T > &source, bool verbose=true)
void set_rhofac(double rhofac)