1 #ifndef _CONTINUITYSOLVER_HEADER 2 #define _CONTINUITYSOLVER_HEADER 3 #include "../src/multigrid_solver.h" 24 template<
unsigned int NDIM,
typename T>
58 T l_operator(
unsigned int level, std::vector<unsigned int>& index_list,
bool addsource){
59 unsigned int i = index_list[0];
72 for(
unsigned int j = 0; j < NDIM; j++){
73 unsigned int iminus = index_list[2*j+1];
74 unsigned int iplus = index_list[2*j+2];
75 T fminus = phi[iminus];
77 T bminus = 0.5 * (
bfunc(delta[iminus]) + boff );
78 T bplus = 0.5 * (
bfunc(delta[iplus]) + boff );
79 kinetic += bplus * (fplus - f) - bminus * (f - fminus);
84 T source = -_growthfachubble * delta[i];
85 if( level > 0 && addsource ){
90 return kinetic/(h*
h) - source;
94 T dl_operator(
unsigned int level, std::vector<unsigned int>& index_list){
95 unsigned int i = index_list[0];
106 for(
unsigned int j = 0; j < NDIM; j++){
107 unsigned int iminus = index_list[2*j+1];
108 unsigned int iplus = index_list[2*j+2];
109 T bminus = 0.5 * (
bfunc(delta[iminus]) + boff );
110 T bplus = 0.5 * (
bfunc(delta[iplus]) + boff );
111 dkinetic += -(bplus + bminus);
118 T dl = dkinetic/(h*
h) - dsource;
120 std::cout <<
"Error: dl = " << dl <<
" delta_rho = " << delta[i] <<
" b = " << boff << std::endl;
T * get_y(size_t level=0)
T * get_external_field(size_t level, size_t field)
size_t get_N(size_t level=0) const
void set_rhomax(double rhomax)
void set_growthfachubble(double growthfachubble)
static T max(const std::vector< T > &data)
ContinuitySolver(MultiGrid< NDIM, T > &source, bool verbose=true)
ContinuitySolver(unsigned int N, unsigned int Nmin, bool verbose=true)
T dl_operator(unsigned int level, std::vector< unsigned int > &index_list)
T min(const std::vector< T > &data)
T get_multigrid_source(size_t level, size_t i) const
void add_external_grid(MultiGrid< NDIM, T > *field)
ContinuitySolver(unsigned int N, bool verbose=true)
T l_operator(unsigned int level, std::vector< unsigned int > &index_list, bool addsource)
void set_rhomin(double rhomin)