16 void powerspectrum_alloc(
Power * ps,
const int nbins,
const int nthreads,
const int MassiveNuLinResp,
const double BoxSize_in_cm)
19 const int nalloc = nbins*nthreads;
21 ps->
kk = (
double *)
mymalloc(
"Powerspectrum",
sizeof(
double) * 2*nalloc);
25 if(MassiveNuLinResp) {
27 ps->
logknu = (
double *)
mymalloc(
"PowerNu",
sizeof(
double) * 2*nbins);
30 ps->
Nmodes = (int64_t *)
mymalloc(
"Powermodes",
sizeof(int64_t) * nalloc);
37 memset(ps->
kk, 0,
sizeof(
double) * ps->
nalloc);
58 for(i = 0; i < ps->
size; i ++) {
67 MPI_Allreduce(MPI_IN_PLACE, &(ps->
Norm), 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
68 MPI_Allreduce(MPI_IN_PLACE, ps->
kk, ps->
size, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
69 MPI_Allreduce(MPI_IN_PLACE, ps->
Power, ps->
size, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
74 for(i = 0; i < ps->
size; i ++) {
75 if(ps->
Nmodes[i] == 0)
continue;
84 ps->
kk[nk_nz] = ps->
kk[i];
96 MPI_Comm_rank(MPI_COMM_WORLD, &
ThisTask);
105 message(1,
"Writing Power Spectrum to %s\n", fname);
106 FILE * fp = fopen(fname,
"w");
108 message(1,
"Could not open %s for writing\n", fname);
110 fprintf(fp,
"# in Mpc/h Units \n");
111 fprintf(fp,
"# D1 = %g \n", D1);
112 fprintf(fp,
"# k P N P(z=0)\n");
113 for(i = 0; i < ps->
nonzero; i ++) {
114 fprintf(fp,
"%g %g %ld %g\n", ps->
kk[i], ps->
Power[i], ps->
Nmodes[i],
115 ps->
Power[i] / (D1 * D1));
void message(int where, const char *fmt,...)
#define mymalloc(name, size)
void powerspectrum_save(Power *ps, const char *OutputDir, const char *filename, const double Time, const double D1)
void powerspectrum_free(Power *ps)
void powerspectrum_sum(Power *ps)
void powerspectrum_zero(Power *ps)
void powerspectrum_alloc(Power *ps, const int nbins, const int nthreads, const int MassiveNuLinResp, const double BoxSize_in_cm)
char * fastpm_strdup_printf(const char *fmt,...)