This code is based on the cosmic string model described in astro-ph/9903361 by Pogosian and Vachaspati, and CMBFAST created by Uros Seljak and Matias Zaldarriaga. It contains an integrator for the vector contribution to the CMB temperature and polarization.
Version 4.0
In this
version, I fixed several important bugs and made some
improvements. Namely,
- removed
an extra factor of 2 in the normalization of all vector mode
spectra
- fixed the
sign of vector E- and B-mode source functions, which affected
the vector part of TE correlation (thanks to Adam Moss)
- fixed
the initialization of tf(i) array in muxip (thanks again to Adam
Moss).
- removed
the option that randomized velocities
- updated
the velocity dependent one-scale (VOS) model to eliminate k as a
free parameter and make it a function of v as prescribed in the
Martins and Shellard
paper.
Also eliminated interpolation of the \tilde{c} parameter from
radiation to matter, it's now a constant. Parameters dksi
and vdev set the initial conditions, but the evolution is
largerly independent of them. I kept them as parameters in case
one wants to hardcode them as constant scaling parameters and
bypass the VOS equations.
- Made
wiggliness alpha a constant. It was only an effective parameter,
and there was no clear model for its evolution. It gives an
additional degree of freedom that can be used to tune the
unequal-time-correlators (UETC) of the unconnected segement
model to the UETC found in simulations.
- made
the code compatible with the latest gfortran
Version
3.0
This version is
a significant refurbishment of the code.
All parameters
are now set in the main routine.
The code is
reconfigured to make it easier to use with or without active
sources. To produce inflationary CMB spectra one simply sets the
string tension to zero (gmu=0.0d0). For a non-zero value of
tension only the string contribution is calculated.
An option is
added to randomize the directions of velocities of consolidated
segments as they evolve in time. In the original segment model,
which is still the default version (irandomv=0), each segment is
given a random velocity initially, but then continues to move in a
straight line for the rest of its life. The new option
(irandomv=1) allows to additionally randomize velocities of each
segment at roughly each Hubble time. However, the merits of this
new option are still under investigation. The default version
(irandomv=0) is strongly recommended, since it actually
gives reasonable unequal time correlators. For each Fourier
mode, k, the string stress-energy components are now evaluated
on a time grid sufficiently fine for that k.
Version 2.0
Errors in the vector mode calculation pointed out by Anze Slosar are now fixed. Also, a missing overall factor of 2 multiplying all spectra was discovered and fixed. Details of the fixed errors can be found in astro-ph/0604141.
Added evaluation of the B-polarization spectrum
The code contains remnants of autotasking directives that were used to run an older version of this code in parallel. They do not work now and will be ignored by f77 or f90 compilers.
The code uses a file jlgen.dat as an input.
Before running the code you must compile and run jlgen.f. When asked, input l=3000, keta=6000 and name of the file = jlgen.dat . If other parameters are desired, you'll need to edit the corresponding values in subroutine initlval. Also make sure that cmbfast.inc is in the same directory. Files jlgen.f and cmbfast.inc are included in the compressed package.
Once jlgen.dat is created, compile cmbact.f with the optimization flag -O2, e.g. g77 -O2 cmbact.f
The code does not output anything on the screen, nor it requires any input from the terminal,
Set the values of cosmological parameters, string model parameters, and output file names in the main routine.
Default tension is $G\mu = 1.1e-6$
The code calculates the CMB temperature anisotropy and the matter power spectrum sourced by a model network of strings. The results are averages over NEXP realizations (runs) of the network. The variable NEXP should be set in the main routine
Outputs are written to files created in subroutine openfiles:
cl_tt.d
TT power spectrum (4 columns): l, scalar, vector, tensor
cl_te.d TE power spectrum (4
columns): l, scalar, vector, tensor
cl_ee.d EE power spectrum (4
columns): l, scalar, vector, tensor
cl_bb.d BB power spectrum (3
columns): l, vector, tensor
pk_lin.d linear CDM P(k) (2 columns): k/h
Mpc^{-1}, 4piP(k)
NOTE: Output for TT,TE,EE and BB is (T_cmb)^2 l(l+1)Cl/2pi. Output for matter power spectrum is 4piP(k).
When compiled with -O2 the code will require at least 110 Mb of memory to run.
The time is proportional to the number of experiments (realizations) that you want to average over. NEXP = 100 takes about 3 hours on a single 3 GHz Pentium 4 processor . You can choose not to include vector and tensor contributions and decrease the time by three. However, for cosmic strings the vector modes are as important as scalars, and should not be neglected.
I suggest running the code with NEXP=2 first, to test and to get an estimate of how much time it will take.
You can download the code as a tar.gz file containing cmbact4.f, jlgen.f and cmbfast.inc
With further questions e-mail levon<at>sfu.ca