Skip to content

Commit 9dae82a

Browse files
committed
Merge branch 'jhod0-upstream-version'
2 parents 9d4a45a + 752addd commit 9dae82a

File tree

7 files changed

+141
-207
lines changed

7 files changed

+141
-207
lines changed

src/C_averaging.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,22 @@ double ave_integrand(double lR, void*params){
3737

3838
int average_profile_in_bins(double*Redges, int Nedges, double*R, int NR,
3939
double*profile, double*ave_profile){
40-
int i;
41-
gsl_spline*spline = gsl_spline_alloc(gsl_interp_cspline, NR);
42-
gsl_interp_accel*acc= gsl_interp_accel_alloc();
43-
gsl_integration_workspace * ws = gsl_integration_workspace_alloc(workspace_size);
44-
integrand_params*params=malloc(sizeof(integrand_params));
40+
gsl_spline *spline = gsl_spline_alloc(gsl_interp_cspline, NR);
41+
gsl_interp_accel *acc = gsl_interp_accel_alloc();
42+
gsl_integration_workspace *ws = gsl_integration_workspace_alloc(workspace_size);
4543
gsl_function F;
4644
double result, err;
4745

4846
gsl_spline_init(spline, R, profile, NR);
4947

50-
params->acc = acc;
51-
params->spline = spline;
52-
F.params = params;
48+
integrand_params params;
49+
params.acc = acc;
50+
params.spline = spline;
51+
F.params = &params;
5352
F.function = &ave_integrand;
5453

5554
//Loop over bins and compute the average
56-
for(i = 0; i < Nedges-1; i++){
55+
for(int i = 0; i < Nedges-1; i++){
5756
gsl_integration_qag(&F, log(Redges[i]), log(Redges[i+1]), ABSERR, RELERR,
5857
workspace_size, 6, ws, &result, &err);
5958
ave_profile[i] = 2*result/(Redges[i+1]*Redges[i+1]-Redges[i]*Redges[i]);
@@ -63,6 +62,5 @@ int average_profile_in_bins(double*Redges, int Nedges, double*R, int NR,
6362
gsl_spline_free(spline);
6463
gsl_interp_accel_free(acc);
6564
gsl_integration_workspace_free(ws);
66-
free(params);
6765
return 0;
6866
}

src/C_concentration.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ double DK15_concentration_at_Mmean(double Mass, double*k, double*Plin, int Nk, i
7878
double n_s,double Omega_b, double Omega_m,
7979
double h, double T_CMB){
8080
int status;
81-
mc_params*pars = (mc_params*)malloc(sizeof(mc_params));
81+
mc_params pars;
8282
double R = pow(Mass/(1.33333333333*M_PI*rhocrit*Omega_m*delta), 0.33333333); //R200m
8383
double M_lo = Mass/10;
8484
double M_hi = Mass*10;
@@ -88,20 +88,20 @@ double DK15_concentration_at_Mmean(double Mass, double*k, double*Plin, int Nk, i
8888
gsl_root_fsolver*s = gsl_root_fsolver_alloc(T);
8989
gsl_function F;
9090
int iter = 0, max_iter = 100;
91-
pars->Mm = Mass;
92-
pars->Rm = R;
93-
pars->k = k;
94-
pars->Plin = Plin;
95-
pars->Nk = Nk;
96-
pars->delta = delta;
97-
pars->h = h;
98-
pars->n_s = n_s;
99-
pars->Omega_b = Omega_b;
100-
pars->Omega_m = Omega_m;
101-
pars->T_CMB = T_CMB;
91+
pars.Mm = Mass;
92+
pars.Rm = R;
93+
pars.k = k;
94+
pars.Plin = Plin;
95+
pars.Nk = Nk;
96+
pars.delta = delta;
97+
pars.h = h;
98+
pars.n_s = n_s;
99+
pars.Omega_b = Omega_b;
100+
pars.Omega_m = Omega_m;
101+
pars.T_CMB = T_CMB;
102102

103103
F.function = &Mm_from_Mc;
104-
F.params = pars;
104+
F.params = &pars;
105105

106106
status = gsl_root_fsolver_set(s, &F, M_lo, M_hi);
107107

@@ -115,9 +115,8 @@ double DK15_concentration_at_Mmean(double Mass, double*k, double*Plin, int Nk, i
115115
status = gsl_root_test_interval(M_lo, M_hi, 0, 0.001);
116116
}while(status == GSL_CONTINUE && iter < max_iter);
117117

118-
cm = pars->cm;
118+
cm = pars.cm;
119119

120-
free(pars);
121120
gsl_root_fsolver_free(s);
122121
return cm;
123122
}

src/C_deltasigma.c

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,8 @@
3636
* Note: all distances are comoving.
3737
*/
3838
double Sigma_nfw_at_R(double R, double M, double c, int delta, double om){
39-
double*Rs = (double*)malloc(sizeof(double));
40-
double*Sigma = (double*)malloc(sizeof(double));
41-
double result;
42-
Rs[0] = R;
43-
Sigma_nfw_at_R_arr(Rs, 1, M, c, delta, om, Sigma);
44-
result = Sigma[0];
45-
free(Rs);
46-
free(Sigma);
39+
double result = 0.0;
40+
Sigma_nfw_at_R_arr(&R, 1, M, c, delta, om, &result);
4741
return result;
4842
}
4943

@@ -152,7 +146,7 @@ int Sigma_at_R_arr(double*R, int NR, double*Rxi, double*xi, int Nxi, double M, d
152146

153147
gsl_interp_accel*acc= gsl_interp_accel_alloc();
154148
gsl_integration_workspace*workspace = gsl_integration_workspace_alloc(workspace_size);
155-
integrand_params*params = malloc(sizeof(integrand_params));
149+
integrand_params params;
156150
gsl_function F;
157151
double result1, err1, result2, err2;
158152
int i;
@@ -161,17 +155,17 @@ int Sigma_at_R_arr(double*R, int NR, double*Rxi, double*xi, int Nxi, double M, d
161155
lnRxi[i] = log(Rxi[i]);
162156
}
163157
gsl_spline_init(spline, lnRxi, xi, Nxi);
164-
params->acc = acc;
165-
params->spline = spline;
166-
params->M = M;
167-
params->conc= conc;
168-
params->delta = delta;
169-
params->om = om;
170-
F.params = params;
158+
params.acc = acc;
159+
params.spline = spline;
160+
params.M = M;
161+
params.conc= conc;
162+
params.delta = delta;
163+
params.om = om;
164+
F.params = &params;
171165
int status;
172166
for(i = 0; i < NR; i++){
173167
ln_z_max = log(sqrt(Rxi_max*Rxi_max - R[i]*R[i])); //Max distance to integrate to
174-
params->Rp = R[i];
168+
params.Rp = R[i];
175169
if(R[i] < Rxi0){
176170
F.function = &integrand_small_scales;
177171
status = gsl_integration_qag(&F, log(Rxi0)-10, log(sqrt(Rxi0*Rxi0-R[i]*R[i])), ABSERR, RELERR, workspace_size, KEY, workspace, &result1, &err1);
@@ -193,7 +187,6 @@ int Sigma_at_R_arr(double*R, int NR, double*Rxi, double*xi, int Nxi, double M, d
193187
gsl_interp_accel_free(acc);
194188
gsl_integration_workspace_free(workspace);
195189
free(lnRxi);
196-
free(params);
197190
return 0;
198191
}
199192

@@ -213,22 +206,21 @@ int Sigma_at_R_full_arr(double*R, int NR, double*Rxi, double*xi, int Nxi, double
213206
double ln_z_max;
214207
double result3, err3;
215208
gsl_integration_workspace*workspace = gsl_integration_workspace_alloc(workspace_size);
216-
integrand_params*params=malloc(sizeof(integrand_params));
209+
integrand_params params;
217210
gsl_function F;
218211
int i;
219212
Sigma_at_R_arr(R, NR, Rxi, xi, Nxi, M, conc, delta, om, Sigma);
220-
params->slope = log(xi[Nxi-1]/xi[Nxi-2])/log(Rxi[Nxi-1]/Rxi[Nxi-2]);
221-
params->intercept = xi[Nxi-1]/pow(Rxi[Nxi-1], params->slope);
222-
F.params=params;
213+
params.slope = log(xi[Nxi-1]/xi[Nxi-2])/log(Rxi[Nxi-1]/Rxi[Nxi-2]);
214+
params.intercept = xi[Nxi-1]/pow(Rxi[Nxi-1], params.slope);
215+
F.params = &params;
223216
F.function = &integrand_large_scales;
224217
for(i = 0; i < NR; i++){
225218
ln_z_max = log(sqrt(Rxi_max*Rxi_max - R[i]*R[i]));
226-
params->Rp = R[i];
219+
params.Rp = R[i];
227220
gsl_integration_qag(&F, ln_z_max, ln_z_max+ulim, ABSERR, RELERR, workspace_size, KEY, workspace, &result3, &err3);
228221
Sigma[i] += (result3*rhom*2);
229222
}
230223
gsl_integration_workspace_free(workspace);
231-
free(params);
232224
return 0;
233225
}
234226

@@ -255,7 +247,7 @@ int DeltaSigma_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns, doubl
255247
gsl_spline*spline = gsl_spline_alloc(gsl_interp_cspline, Ns);
256248
gsl_interp_accel*acc = gsl_interp_accel_alloc();
257249
gsl_integration_workspace* workspace = gsl_integration_workspace_alloc(workspace_size);
258-
integrand_params*params=malloc(sizeof(integrand_params));
250+
integrand_params params;
259251
double result1, result2, err1, err2;
260252
gsl_function F;
261253
int i;
@@ -264,13 +256,13 @@ int DeltaSigma_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns, doubl
264256
lnRs[i] = log(Rs[i]);
265257
}
266258
gsl_spline_init(spline, lnRs, Sigma, Ns);
267-
params->spline = spline;
268-
params->acc = acc;
269-
params->M = M;
270-
params->conc = conc;
271-
params->delta = delta;
272-
params->om = om;
273-
F.params = params;
259+
params.spline = spline;
260+
params.acc = acc;
261+
params.M = M;
262+
params.conc = conc;
263+
params.delta = delta;
264+
params.om = om;
265+
F.params = &params;
274266
F.function = &DS_integrand_small_scales;
275267
gsl_integration_qag(&F, lrmin-10, lrmin, ABSERR, RELERR, workspace_size, KEY, workspace, &result1, &err1);
276268
F.function = &DS_integrand_medium_scales;
@@ -282,6 +274,5 @@ int DeltaSigma_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns, doubl
282274
gsl_interp_accel_free(acc);
283275
gsl_integration_workspace_free(workspace);
284276
free(lnRs);
285-
free(params);
286277
return 0;
287278
}

src/C_miscentering.c

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -111,38 +111,37 @@ int Sigma_mis_single_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns,
111111
static gsl_spline*spline = NULL;
112112
static gsl_interp_accel*acc = NULL;
113113
static gsl_integration_workspace*workspace = NULL;
114-
static integrand_params*params = NULL;
114+
static integrand_params params;
115115
if (init_flag == 0){
116116
init_flag = 1;
117117
spline = gsl_spline_alloc(gsl_interp_cspline, Ns);
118118
acc = gsl_interp_accel_alloc();
119119
workspace = gsl_integration_workspace_alloc(workspace_size);
120-
params = malloc(sizeof(integrand_params));
121120
}
122121

123122
gsl_spline_init(spline, lnRs, Sigma, Ns);
124123

125-
params->acc = acc;
126-
params->spline = spline;
127-
params->workspace = workspace;
128-
params->M = M;
129-
params->conc = conc;
130-
params->delta = delta;
131-
params->Omega_m = Omega_m;
132-
params->Rmis = Rmis;
133-
params->Rmis2 = Rmis*Rmis;
134-
params->rmin = Rs[0];
135-
params->rmax = Rs[Ns-1];
136-
params->lrmin = log(Rs[0]);
137-
params->lrmax = log(Rs[Ns-1]);
124+
params.acc = acc;
125+
params.spline = spline;
126+
params.workspace = workspace;
127+
params.M = M;
128+
params.conc = conc;
129+
params.delta = delta;
130+
params.Omega_m = Omega_m;
131+
params.Rmis = Rmis;
132+
params.Rmis2 = Rmis*Rmis;
133+
params.rmin = Rs[0];
134+
params.rmax = Rs[Ns-1];
135+
params.lrmin = log(Rs[0]);
136+
params.lrmax = log(Rs[Ns-1]);
138137

139138
//Angular integral
140-
F.function=&single_angular_integrand;
141-
F.params=params;
139+
F.function = &single_angular_integrand;
140+
F.params = &params;
142141

143142
for(i = 0; i < NR; i++){
144-
params->Rp = R[i];
145-
params->Rp2 = R[i] * R[i];
143+
params.Rp = R[i];
144+
params.Rp2 = R[i] * R[i];
146145
gsl_integration_qag(&F, 0, M_PI, ABSERR, RELERR, workspace_size,
147146
KEY, workspace, &result, &err);
148147
Sigma_mis[i] = result/M_PI;
@@ -272,32 +271,31 @@ int Sigma_mis_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns,
272271
static gsl_interp_accel*acc = NULL;
273272
static gsl_integration_workspace*workspace = NULL;
274273
static gsl_integration_workspace*workspace2 = NULL;
275-
static integrand_params*params = NULL;
274+
static integrand_params params;
276275
if (init_flag == 0){
277276
init_flag = 1;
278277
spline = gsl_spline_alloc(gsl_interp_cspline, Ns);
279278
acc = gsl_interp_accel_alloc();
280279
workspace = gsl_integration_workspace_alloc(workspace_size);
281280
workspace2 = gsl_integration_workspace_alloc(workspace_size);
282-
params = malloc(sizeof(integrand_params));
283281
}
284282

285283
gsl_spline_init(spline, lnRs, Sigma, Ns);
286284

287-
params->spline = spline;
288-
params->acc = acc;
289-
params->workspace = workspace;
290-
params->workspace2 = workspace2;
291-
params->M = M;
292-
params->conc = conc;
293-
params->delta = delta;
294-
params->Omega_m = Omega_m;
295-
params->Rmis = Rmis;
296-
params->Rmis2 = Rmis*Rmis;
297-
params->rmin = Rs[0];
298-
params->rmax = Rs[Ns-1];
299-
params->lrmin = log(Rs[0]);
300-
params->lrmax = log(Rs[Ns-1]);
285+
params.spline = spline;
286+
params.acc = acc;
287+
params.workspace = workspace;
288+
params.workspace2 = workspace2;
289+
params.M = M;
290+
params.conc = conc;
291+
params.delta = delta;
292+
params.Omega_m = Omega_m;
293+
params.Rmis = Rmis;
294+
params.Rmis2 = Rmis*Rmis;
295+
params.rmin = Rs[0];
296+
params.rmax = Rs[Ns-1];
297+
params.lrmin = log(Rs[0]);
298+
params.lrmax = log(Rs[Ns-1]);
301299

302300
//Angular integral
303301
F.function = &angular_integrand;
@@ -313,14 +311,14 @@ int Sigma_mis_at_R_arr(double*R, int NR, double*Rs, double*Sigma, int Ns,
313311
}
314312

315313
//Assign the params struct to the GSL functions.
316-
F_radial.params = params;
317-
params->F_radial = F_radial;
318-
F.params = params;
314+
F_radial.params = &params;
315+
params.F_radial = F_radial;
316+
F.params = &params;
319317

320318
//Angular integral first
321319
for(i = 0; i < NR; i++){
322-
params->Rp = R[i];
323-
params->Rp2 = R[i] * R[i]; //Optimization
320+
params.Rp = R[i];
321+
params.Rp2 = R[i] * R[i]; //Optimization
324322

325323
gsl_integration_qag(&F, 0, M_PI, ABSERR, RELERR, workspace_size,
326324
KEY, workspace, &result, &err);
@@ -384,20 +382,19 @@ int DeltaSigma_mis_at_R_arr(double*R, int NR, double*Rs, double*Sigma_mis, int N
384382
static gsl_spline*spline = NULL;
385383
static gsl_interp_accel*acc = NULL;
386384
static gsl_integration_workspace*workspace = NULL;
387-
static integrand_params*params = NULL;
385+
static integrand_params params;
388386
if (init_flag == 0){
389387
init_flag = 1;
390388
spline = gsl_spline_alloc(gsl_interp_cspline, Ns);
391389
acc = gsl_interp_accel_alloc();
392390
workspace = gsl_integration_workspace_alloc(workspace_size);
393-
params = malloc(sizeof(integrand_params));
394391
}
395392

396393
gsl_spline_init(spline, Rs, Sigma_mis, Ns);
397394

398-
params->spline = spline;
399-
params->acc = acc;
400-
F.params = params;
395+
params.spline = spline;
396+
params.acc = acc;
397+
F.params = &params;
401398
F.function = &DS_mis_integrand;
402399

403400
for(i = 0; i < NR; i++){

0 commit comments

Comments
 (0)