Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
ccl_test_power.py
Go to the documentation of this file.
1 import numpy as np
2 from numpy.testing import dec as decorators
3 from numpy.testing import assert_raises, assert_warns, assert_no_warnings, \
4  assert_, run_module_suite
5 import pyccl as ccl
6 from pyccl import CCLError
7 import sys
8 
9 # Set up the cosmological parameters to be used in each of the models
10 # Values that are the same for all 5 models
11 Omega_c = 0.25
12 Omega_b = 0.045
13 Neff = 3.046
14 mnu_sum = 0.06
15 mnu_list = [0.02, 0.02, 0.02] # For use with P(k) from emulator
16 h = 0.7
17 sigma8 = 0.83
18 n_s = 0.96
19 
20 # Values that are different for the different models
21 Omega_v_vals = np.array([0.7, 0.7, 0.7, 0.65, 0.75])
22 w0_vals = np.array([-1.0, -0.9, -0.9, -0.9, -0.9])
23 wa_vals = np.array([0.0, 0.0, 0.1, 0.1, 0.1])
24 
25 # List of transfer functions to run
26 transfer_fns = ['boltzmann_class', 'eisenstein_hu', 'emulator',]
27 
28 def all_finite(vals):
29  """
30  Returns True if all elements are finite (i.e. not NaN or inf).
31  """
32  return np.all( np.isfinite(vals) )
33 
34 
35 def calc_power_spectrum(Omega_v, w0, wa, transfer_fn, matter_power, linear, raise_errors):
36  """
37  Calculate linear and nonlinear power spectrum for a given set of parameters
38  and choices of transfer function and matter power spectrum.
39  """
40  k = np.logspace(-5., 1., 300)
41  a = np.logspace(np.log10(0.51), 0., 5) # Emulator only works at z<2
42 
43  # Set Omega_K in a consistent way
44  Omega_k = 1.0 - Omega_c - Omega_b - Omega_v
45 
46  if (raise_errors == False):
47  if (transfer_fn == 'eisenstein_hu' or transfer_fn == 'bbks'):
48  mnu = 0. # The bbks and E-H P(k) are not defined for massive neutrinos.
49  elif (transfer_fn == 'emulator' and matter_power=='emu'):
50  mnu = mnu_list # For the emulator, we must have 3 equal masses
51  else:
52  mnu = mnu_sum
53  elif (raise_errors==True):
54  if (transfer_fn =='eisenstein_hu' or transfer_fn =='bbks'):
55  mnu = mnu_sum #Use massive neutrinos to deliberately raise an error
56  elif (transfer_fn == 'emulator' and matter_power == 'emu'):
57  mnu = mnu_sum #Use a sum instead of an equal list to deliberately raise an error.
58  else:
59  raise(ValueError, "Transfer function %s with matter power spectrum method %s has no case for which to test errors are raised." % (transfer_fn, matter_power))
60 
61  # Create a new Cosmology object
62  cosmo = ccl.Cosmology(Omega_c=Omega_c, Omega_b=Omega_b,
63  h=h, sigma8=sigma8, n_s=n_s, Omega_k=Omega_k,
64  w0=w0, wa=wa, transfer_function=transfer_fn,
65  matter_power_spectrum=matter_power,
66  Neff = Neff, m_nu = mnu)
67 
68  # Calculate linear and nonlinear power spectra for each scale factor, a
69  for _a in a:
70  if linear:
71  if raise_errors==False:
72  pk_lin = ccl.linear_matter_power(cosmo, k, _a)
73  assert_(all_finite(pk_lin))
74  else:
75  assert_raises(CCLError, ccl.linear_matter_power, cosmo, k, _a)
76  else:
77  if raise_errors==False:
78  pk_nl = ccl.nonlin_matter_power(cosmo, k, _a)
79  assert_(all_finite(pk_nl))
80  else:
81  assert_raises(CCLError,ccl.nonlin_matter_power, cosmo, k, _a)
82 
83 def loop_over_params(transfer_fn, matter_power, lin, raise_errs):
84  """
85  Call the power spectrum testing function for each of a set of parameters.
86  """
87  print(">>> (%s; %s)" % (transfer_fn, matter_power))
88 
89  # Loop over parameters
90  for i in [0,2]: #w0_vals.size):
91  calc_power_spectrum(Omega_v_vals[i], w0_vals[i], wa_vals[i],
92  transfer_fn=transfer_fn, matter_power=matter_power,
93  linear=lin, raise_errors = raise_errs)
94 
96  for tfn in ['bbks', 'eisenstein_hu']:
97  loop_over_params(tfn, 'linear', lin=True, raise_errs = False)
98 
99 @decorators.slow
101  for tfn in ['boltzmann',]:
102  loop_over_params(tfn, 'linear', lin=True, raise_errs = False)
103 
105  for tfn in ['eisenstein_hu', 'bbks',]:
106  loop_over_params(tfn, 'halofit', lin=True, raise_errs = False)
107 
108 @decorators.slow
110  for tfn in ['boltzmann',]:
111  loop_over_params(tfn, 'halofit', lin=True, raise_errs = False)
112 
113 @decorators.slow
115  for tfn in ['emulator',]: loop_over_params(tfn, 'emu', lin=True, raise_errs = False)
116 
118  for tfn in ['eisenstein_hu', 'bbks']:
119  loop_over_params(tfn, 'linear', lin=False, raise_errs = False)
120 
121 @decorators.slow
123  for tfn in ['boltzmann',]:
124  loop_over_params(tfn, 'linear', lin=False, raise_errs = False)
125 
127  for tfn in ['eisenstein_hu', 'bbks']:
128  loop_over_params(tfn, 'halofit', lin=False, raise_errs = False)
129 
130 @decorators.slow
132  for tfn in ['boltzmann',]:
133  loop_over_params(tfn, 'halofit', lin=False, raise_errs = False)
134 
135 @decorators.slow
137  transfer_fns = ['emulator',]
138  for tfn in transfer_fns: loop_over_params(tfn, 'emu', lin=False, raise_errs = False)
139 
140 @decorators.slow
142  for tfn in ['eisenstein_hu']:
143  loop_over_params(tfn, 'linear', lin=True, raise_errs=True)
144 
145 @decorators.slow
147  for tfn in ['bbks']:
148  loop_over_params(tfn, 'halofit', lin=False, raise_errs=True)
149 
150 @decorators.slow
152  for tfn in ['bbks']:
153  loop_over_params(tfn, 'linear', lin=False, raise_errs=True)
154 
155 @decorators.slow
157  transfer_fns = ['emulator',]
158  for tfn in transfer_fns: loop_over_params(tfn, 'emu', lin=True, raise_errs = True)
159 
160 @decorators.slow
162  transfer_fns = ['emulator',]
163  for tfn in transfer_fns: loop_over_params(tfn, 'emu', lin=False, raise_errs = True)
164 
165 if __name__ == "__main__":
166  run_module_suite(argv=sys.argv)
def test_raise_error_EH_bbks_halofit()
def test_nonlin_power_spectrum_linear_slow()
def test_raise_error_emu_nonlin()
def test_nonlin_power_spectrum_linear()
def test_power_spectrum_linear()
def all_finite(vals)
def test_power_spectrum_emu()
def loop_over_params(transfer_fn, matter_power, lin, raise_errs)
def test_raise_error_EH_bbks_nonlin_linear()
def test_raise_error_EH_bbks_lin()
def calc_power_spectrum(Omega_v, w0, wa, transfer_fn, matter_power, linear, raise_errors)
def test_nonlin_power_spectrum_halofit_slow()
def test_power_spectrum_halofit_slow()
def test_nonlin_power_spectrum_emu()
def test_nonlin_power_spectrum_halofit()
def test_raise_error_emu()
def test_power_spectrum_linear_slow()
def test_power_spectrum_halofit()