Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
PoissonSolver< NDIM, T > Class Template Reference

#include <poisson_solver.h>

Inheritance diagram for PoissonSolver< NDIM, T >:
Collaboration diagram for PoissonSolver< NDIM, T >:

Public Member Functions

 PoissonSolver ()
 
 PoissonSolver (unsigned int N, bool verbose=true)
 
 PoissonSolver (unsigned int N, unsigned int Nmin, bool verbose=true)
 
 PoissonSolver (MultiGrid< NDIM, T > &source, bool verbose=true)
 
void set_mass (double mass)
 
void set_rhofac (double rhofac)
 
l_operator (unsigned int level, std::vector< int > &index_list, bool addsource)
 
dl_operator (unsigned int level, std::vector< int > &index_list)
 
- Public Member Functions inherited from MultiGridSolver< NDIM, T >
 MultiGridSolver ()
 
 MultiGridSolver (size_t N)
 
 MultiGridSolver (size_t N, bool verbose)
 
 MultiGridSolver (size_t N, size_t Nmin, bool verbose)
 
size_t get_istep () const
 
T * get_y (size_t level=0)
 
T const * get_y (size_t level=0) const
 
Grid< NDIM, T > & get_grid (size_t level=0)
 
const Grid< NDIM, T > & get_grid (size_t level=0) const
 
MultiGrid< NDIM, T > & get_mlt_grid (size_t level=0)
 
const MultiGrid< NDIM, T > & get_mlt_grid (size_t level=0) const
 
T * get_external_field (size_t level, size_t field)
 
T const * get_external_field (size_t level, size_t field) const
 
Grid< NDIM, T > & get_external_grid (size_t level, size_t field)
 
const Grid< NDIM, T > & get_external_grid (size_t level, size_t field) const
 
size_t get_external_field_size () const
 
get_multigrid_source (size_t level, size_t i) const
 
void set_epsilon (double eps_converge)
 
void set_maxsteps (size_t maxsteps)
 
void set_ngs_sweeps (size_t ngs_fine, size_t ngs_coarse)
 
void set_convergence_criterion_residual (bool use_residual)
 
void set_Nlevel (size_t N)
 
size_t get_N (size_t level=0) const
 
size_t get_Ntot (size_t level=0) const
 
size_t get_Nlevel () const
 
void add_external_grid (MultiGrid< NDIM, T > *field)
 
void set_initial_guess (T guess)
 
void set_initial_guess (T *guess)
 
void set_initial_guess (Grid< NDIM, T > &guess)
 
Exit_Status solve ()
 
void clear ()
 
virtual T upd_operator (const T f, const size_t level, const std::vector< size_t > &index_list, const T h) const
 
virtual T l_operator (const size_t level, const std::vector< size_t > &index_list, bool addsource, const T h) const
 
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)
 
virtual Exit_Status check_convergence ()
 
virtual void check_solution (size_t level, Grid< NDIM, T > &sol)
 
void check_solution (size_t level)
 

Private Attributes

_mass = 0.0
 
_rhofac = 1.0
 

Additional Inherited Members

- Public Types inherited from MultiGridSolver< NDIM, T >
enum  Exit_Status {
  Exit_Status::SUCCESS, Exit_Status::FAILURE, Exit_Status::SLOW, Exit_Status::ITERATE,
  Exit_Status::MAX_STEPS
}
 
- Public Attributes inherited from MultiGridSolver< NDIM, T >
bool _store_all_residual = false
 
std::vector< double_res_domain_array
 
- Protected Member Functions inherited from MultiGridSolver< NDIM, T >
void get_neighbor_gridindex (std::vector< size_t > &index_list, size_t i, size_t ngrid)
 
- Protected Attributes inherited from MultiGridSolver< NDIM, T >
bool _verbose
 
bool _conv_criterion_residual = true
 
double _eps_converge = 1e-5
 
size_t _maxsteps = 1000
 
size_t _istep_vcycle = 0
 
double _rms_res
 
double _rms_res_i
 
double _rms_res_old
 

Detailed Description

template<unsigned int NDIM, typename T>
class PoissonSolver< NDIM, T >

Definition at line 19 of file poisson_solver.h.

Constructor & Destructor Documentation

template<unsigned int NDIM, typename T>
PoissonSolver< NDIM, T >::PoissonSolver ( )
inline

Definition at line 28 of file poisson_solver.h.

28 {}
template<unsigned int NDIM, typename T>
PoissonSolver< NDIM, T >::PoissonSolver ( unsigned int  N,
bool  verbose = true 
)
inline

Definition at line 29 of file poisson_solver.h.

template<unsigned int NDIM, typename T>
PoissonSolver< NDIM, T >::PoissonSolver ( unsigned int  N,
unsigned int  Nmin,
bool  verbose = true 
)
inline

Definition at line 30 of file poisson_solver.h.

30 : MultiGridSolver<NDIM,T>(N, Nmin, verbose) {} ;
template<unsigned int NDIM, typename T>
PoissonSolver< NDIM, T >::PoissonSolver ( MultiGrid< NDIM, T > &  source,
bool  verbose = true 
)
inline

Definition at line 31 of file poisson_solver.h.

References MultiGridSolver< NDIM, T >::add_external_grid().

31  : MultiGridSolver<NDIM,T>(source.get_N(), source.get_Nmin(), verbose) {
33  }
size_t get_Nmin() const
Definition: multigrid.cpp:116
size_t get_N(size_t level=0) const
Definition: multigrid.cpp:90
void add_external_grid(MultiGrid< NDIM, T > *field)

Member Function Documentation

template<unsigned int NDIM, typename T>
T PoissonSolver< NDIM, T >::dl_operator ( unsigned int  level,
std::vector< int > &  index_list 
)
inline

Definition at line 73 of file poisson_solver.h.

References PoissonSolver< NDIM, T >::_mass, ccl_test_distances::h, and growth_allz::T.

73  {
74  T h = 1.0/T( MultiGridSolver<NDIM,T>::get_N(level) );
75 
76  // Derivative of kinetic term
77  T dkinetic = -2.0*NDIM;
78 
79  // Derivative of source
80  T dsource = _mass * _mass;
81 
82  T dl = dkinetic/(h*h) - dsource;
83  return dl;
84  }
template<unsigned int NDIM, typename T>
T PoissonSolver< NDIM, T >::l_operator ( unsigned int  level,
std::vector< int > &  index_list,
bool  addsource 
)
inline

Definition at line 46 of file poisson_solver.h.

References MultiGridSolver< NDIM, T >::get_external_field(), MultiGridSolver< NDIM, T >::get_multigrid_source(), MultiGridSolver< NDIM, T >::get_y(), ccl_test_distances::h, and growth_allz::T.

46  {
47  unsigned int i = index_list[0];
48 
49  // Gridspacing
50  T h = 1.0/T( MultiGridSolver<NDIM,T>::get_N(level) );
51 
52  // Solution and pde-source grid at current level
53  T *phi = MultiGridSolver<NDIM,T>::get_y(level);
55 
56  // Compute the standard kinetic term [D^2 phi] (in 1D this is phi''_i = phi_{i+1} + phi_{i-1} - 2 phi_{i} )
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] ];
60  }
61 
62  // The right hand side of the PDE with the source term arising
63  // from restricting the equation down to the lower level
64  T source = _mass * _mass * phi[ i ] + _rhofac * drho[ i ];
65  if( level > 0 && addsource ){
67  }
68 
69  return kinetic/(h*h) - source;
70  }
T * get_y(size_t level=0)
T * get_external_field(size_t level, size_t field)
T get_multigrid_source(size_t level, size_t i) const
template<unsigned int NDIM, typename T>
void PoissonSolver< NDIM, T >::set_mass ( double  mass)
inline

Definition at line 36 of file poisson_solver.h.

36  {
37  _mass = mass;
38  }
template<unsigned int NDIM, typename T>
void PoissonSolver< NDIM, T >::set_rhofac ( double  rhofac)
inline

Definition at line 41 of file poisson_solver.h.

41  {
42  _rhofac = rhofac;
43  }

Member Data Documentation

template<unsigned int NDIM, typename T>
T PoissonSolver< NDIM, T >::_mass = 0.0
private

Definition at line 22 of file poisson_solver.h.

Referenced by PoissonSolver< NDIM, T >::dl_operator().

template<unsigned int NDIM, typename T>
T PoissonSolver< NDIM, T >::_rhofac = 1.0
private

Definition at line 23 of file poisson_solver.h.


The documentation for this class was generated from the following file: