1 #ifndef _MULTIGRIDSOLVER_HEADER 2 #define _MULTIGRIDSOLVER_HEADER 47 template<
size_t NDIM,
typename T>
119 T *
get_y(
size_t level = 0);
120 T const *
get_y(
size_t level = 0)
const;
130 T const *
get_external_field(
size_t level,
size_t field)
const {
return _ext_field[field]->get_y(level); };
148 size_t get_N(
size_t level = 0)
const;
149 size_t get_Ntot(
size_t level = 0)
const;
167 virtual T upd_operator(
const T f,
const size_t level,
const std::vector<size_t>& index_list,
const T h)
const;
168 virtual T l_operator(
const size_t level,
const std::vector<size_t>& index_list,
bool addsource,
const T h)
const;
169 virtual T dl_operator(
const size_t level,
const std::vector<size_t>& index_list,
const T h)
const;
MultiGrid< NDIM, T > _source
Grid< NDIM, T > & get_grid(size_t level=0)
size_t _tot_sweeps_domain_grid
MultiGrid< NDIM, T > & get_mlt_grid(size_t level=0)
void set_ngs_sweeps(size_t ngs_fine, size_t ngs_coarse)
T * get_y(size_t level=0)
void recursive_go_down(size_t from_level)
MultiGridSolver(size_t N)
void make_prolongation_array(Grid< NDIM, T > &f, Grid< NDIM, T > &Rf, Grid< NDIM, T > &df)
T * get_external_field(size_t level, size_t field)
void set_convergence_criterion_residual(bool use_residual)
size_t get_Nlevel() const
void set_epsilon(double eps_converge)
size_t get_N(size_t level=0) const
double calculate_residual(size_t level, Grid< NDIM, T > &res)
size_t get_Ntot(size_t level=0) const
T const * get_external_field(size_t level, size_t field) const
Grid< NDIM, T > & get_external_grid(size_t level, size_t field)
std::vector< MultiGrid< NDIM, T > * > _ext_field
void solve_current_level(size_t level)
virtual T upd_operator(const T f, const size_t level, const std::vector< size_t > &index_list, const T h) const
const Grid< NDIM, T > & get_external_grid(size_t level, size_t field) const
size_t get_external_field_size() const
virtual T l_operator(const size_t level, const std::vector< size_t > &index_list, bool addsource, const T h) const
const MultiGrid< NDIM, T > & get_mlt_grid(size_t level=0) const
void recursive_go_up(size_t to_level)
void set_maxsteps(size_t maxsteps)
void make_new_source(size_t level)
void prolonge_up_array(size_t to_level, Grid< NDIM, T > &BottomGrid, Grid< NDIM, T > &TopGrid)
void set_initial_guess(T guess)
const Grid< NDIM, T > & get_grid(size_t level=0) const
void set_Nlevel(size_t N)
MultiGrid< NDIM, T > _res
T get_multigrid_source(size_t level, size_t i) const
void GaussSeidelSweep(size_t level, size_t curcolor, T *f)
virtual Exit_Status check_convergence()
MultiGridSolver(size_t N, bool verbose)
virtual void check_solution(size_t level, Grid< NDIM, T > &sol)
Grid< NDIM, T > & get_grid(size_t level=0)
void add_external_grid(MultiGrid< NDIM, T > *field)
bool _conv_criterion_residual
std::vector< double > _res_domain_array
void get_neighbor_gridindex(std::vector< size_t > &index_list, size_t i, size_t ngrid)
virtual T dl_operator(const size_t level, const std::vector< size_t > &index_list, const T h) const
virtual void correct_sol(Grid< NDIM, T > &f, const Grid< NDIM, T > &corr, const size_t level)