32 void read_particles(std::string filename, std::vector<Particle> &P);
34 bool exists(std::string filename);
51 unsigned int npart = 0;
55 std::cout <<
"File [" << filename <<
"] does not exist" << std::endl;
58 std::cout <<
"Reading particles from file [" << filename <<
"]" << std::endl;
63 fp.open( filename.c_str() );
66 std::cout <<
"Npart: " << npart << std::endl;
69 P = std::vector<Particle>(npart);
72 for(
unsigned int i = 0; i < npart; i++){
81 std::cout <<
"Particles read" << std::endl;
89 unsigned int npart = P.size();
90 unsigned int N = f.
get_N();
94 std::cout <<
"Assigning " << npart <<
" particles to grid with N: " << N <<
" Ntot: " << Ntot << std::endl;
97 for(
unsigned int i = 0; i < npart; i++){
98 unsigned int ix = int(P[i].
x * N);
99 unsigned int iy = int(P[i].y * N);
100 unsigned int iz = int(P[i].
z * N);
106 unsigned int index = ix + N * (iy + N *
iz);
113 double sum = 0.0,
max = -1e30,
min = 1e30;
114 for(
unsigned int i = 0; i < Ntot; i++){
115 y[i] = y[i] / rhomean - 1.0;
116 if(y[i] >
max)
max = y[i];
117 if(y[i] < min) min = y[i];
120 std::cout <<
"Average: " << sum /
double(Ntot) <<
" Max: " <<
max <<
" Min: " << min << std::endl;
130 std::ifstream fp(filename.c_str());
135 int NgridPerDim = 64;
137 std::string prefix =
"../test_data/rho_";
138 std::string grid_filename = prefix + std::to_string(NgridPerDim) +
".dat";
139 std::string part_filename =
"../test_data/data.ascii";
143 if(
exists(grid_filename)){
153 for(
unsigned int i = 1; i < rho.
get_Nlevel(); i++){
154 int Ntot = rho.
get_N(i);
157 std::string cur_filename = prefix + std::to_string(Ntot) +
".dat";
158 if(
exists(cur_filename)) {
172 std::vector<Particle> P;
179 for(
unsigned int i = 0; i < rho.
get_Nlevel(); i++) {
180 int Ntot = rho.
get_N(i);
189 double boxsize = 200.0;
196 sol.set_parameters(boxsize, omegam, aexp, nfofr, fofr0);
197 sol.set_ngs_sweeps(30, 10);
198 sol.set_epsilon(1e-8);
201 sol.set_initial_guess( log(fofr0) );
204 sol.add_external_grid(&rho);
213 std::cout <<
"Solution min/max: " << exp(-solution.
min()) / fofr0 <<
" " << exp(-solution.
max()) / fofr0 << std::endl;
void restrict_down(size_t from_level)
void dump_to_file(std::string filename)
void read_particles(std::string filename, std::vector< Particle > &P)
size_t get_N(size_t level=0) const
size_t get_Nlevel() const
void assign_to_grid(Grid< 3, double > &f, std::vector< Particle > &P, std::string store_grid_filename)
int main(int argc, char **argv)
static T max(const std::vector< T > &data)
bool exists(std::string filename)
T min(const std::vector< T > &data)
void read_from_file(std::string filename)
Grid< NDIM, T > & get_grid(size_t level=0)