39 bool exists(std::string filename);
46 unsigned int npart = 0;
47 unsigned int N = f.
get_N();
51 std::cout <<
"Grid N: " << N <<
" Ntot: " << Ntot << std::endl;
55 fp.open( filename.c_str() );
58 std::cout <<
"Npart: " << npart << std::endl;
65 for(
unsigned int i = 0; i < npart; i++){
67 double vx, vy, vz, v2;
76 v2 = vx*vx + vy*vy + vz*vz;
79 unsigned int ix = int(xx * N);
80 unsigned int iy = int(yy * N);
81 unsigned int iz = int(zz * N);
86 int index = ix + N*(iy + N*
iz);
88 vel[index] +=
sqrt(v2);
91 vrms =
sqrt(vrms /
double(npart));
92 std::cout <<
"Particles read vrms = " << vrms << std::endl;
96 double sum = 0.0,
max = -1e30,
min = 1e30;
97 for(
unsigned int i = 0; i < Ntot; i++){
98 y[i] = y[i] / rhomean - 1.0;
100 if(y[i] < min) min = y[i];
103 std::cout <<
"Average: " << sum /
double(Ntot) <<
" Max: " <<
max <<
" Min: " << min << std::endl;
106 f.
get_grid().dump_to_file(store_grid_filename);
115 unsigned int N = phi.
get_N();
121 for(
unsigned int i = 0; i < Ntot; i++){
122 std::vector<unsigned int> coord = phi.
index_list(i);
123 std::vector<unsigned int> iplus(
_NDIM, 0);
125 for(
unsigned int j = 0; j <
_NDIM; j++)
126 iplus[j] = coord[j] + 1 < N ? coord[j] + 1 : 0;
129 unsigned int ixp = phi.
grid_index_3d(iplus[0], coord[1], coord[2]);
130 unsigned int iyp = phi.
grid_index_3d(coord[0], iplus[1], coord[2]);
131 unsigned int izp = phi.
grid_index_3d(coord[0], coord[1], iplus[2]);
133 double v_x2 = std::norm((phi[ixp] - phi[i])*norm);
134 double v_y2 = std::norm((phi[iyp] - phi[i])*norm);
135 double v_z2 = std::norm((phi[izp] - phi[i])*norm);
136 double v2 = v_x2 + v_y2 + v_z2;
146 int n = drho.
get_N(), nover2 = n/2, n2 = n*n, ntot = drho.
get_Ntot();
147 double fac = -1.0/(4.0*acos(-1)*acos(-1)) * 1.0/
double(n * n * n);
148 fftw_complex *out = (fftw_complex *) fftw_malloc(
sizeof(fftw_complex) * n*n*n);
149 fftw_plan fwd = fftw_plan_dft_3d(n, n, n, out, out, FFTW_FORWARD, FFTW_ESTIMATE);
150 fftw_plan bwd = fftw_plan_dft_3d(n, n, n, out, out, FFTW_BACKWARD, FFTW_ESTIMATE);
153 double rhomean = 0.0;
154 for(
int i = 0; i < ntot; i++){
157 rhomean += out[i][0];
164 for(
int i=0;i<n;i++){
165 int ii = (i < nover2 ? i: i-n);
166 for(
int j=0;j<n;j++){
167 int jj = (j < nover2 ? j: j-n);
168 for(
int k=0;k<n;k++){
169 int kk = (k < nover2 ? k: k-n);
170 int ind = i + j*n + k*n2;
172 double facnow = fac/(ii*ii+jj*jj+kk*kk);
173 out[ind][0] *= facnow;
174 out[ind][1] *= facnow;
185 for(
int i = 0; i < ntot; i++){
196 std::ifstream fp(filename.c_str());
201 int NgridPerDim = 64;
203 DType boxsize = 200.0;
204 std::string prefix =
"../test_data/rho_";
205 std::string grid_filename = prefix + std::to_string(NgridPerDim) +
".dat";
206 std::string part_filename =
"../test_data/data.ascii";
210 if(
exists(grid_filename)){
215 NgridPerDim = tmp.
get_N();
262 std::cout <<
"Difference wrt linear solution: " << err.
rms_norm() * 100.0 <<
" %" << std::endl;
Grid< NDIM, T > & get_grid(size_t level=0)
std::vector< size_t > index_list(size_t i)
void set_ngs_sweeps(size_t ngs_fine, size_t ngs_coarse)
size_t get_Ntot(size_t level=0) const
void set_epsilon(double eps_converge)
void set_rhomax(double rhomax)
void solve_with_fft(Grid< 3, double > &drho, Grid< 3, double > &sol)
size_t get_N(size_t level=0) const
size_t grid_index_3d(size_t ix, size_t iy, size_t iz)
void set_growthfachubble(double growthfachubble)
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
static T max(const std::vector< T > &data)
void set_initial_guess(T guess)
T * get_y(size_t level=0)
void compute_v(Grid< 3, DType > phi, DType boxsize)
T min(const std::vector< T > &data)
void read_from_file(std::string filename)
float pow(float base, unsigned long int exp)
Grid< NDIM, T > & get_grid(size_t level=0)
void add_external_grid(MultiGrid< NDIM, T > *field)
bool exists(std::string filename)
void assign_to_grid(MultiGrid< 3, DType > &f, std::string filename, std::string store_grid_file)
void set_rhomin(double rhomin)
std::complex< double > DType