primordial: inflationary equation solver

## Project description

========================================
primordial: inflationary equation solver
========================================
:primordial: inflationary equation solver
:Author: Will Handley
:Version: 0.0.13
:Homepage: https://github.com/williamjameshandley/primordial

.. image:: https://travis-ci.org/williamjameshandley/primordial.svg?branch=master
:target: https://travis-ci.org/williamjameshandley/primordial
:alt: Build Status
:target: https://codecov.io/gh/williamjameshandley/primordial
:alt: Test Coverage Status
:alt: PyPi location
:alt: Documentation Status
:alt: Permanent DOI for this release

Description
===========

primordial is a python package for solving cosmological inflationary equations.

It is very much in beta stage, and currently being built for research purposes.

Example Usage
=============

Plot Background evolution
-------------------------
.. code:: python

import numpy
import matplotlib.pyplot as plt
from primordial.solver import solve
from primordial.equations.inflation_potentials import ChaoticPotential
from primordial.equations.t.inflation import Equations, KD_initial_conditions
from primordial.equations.events import Inflation, Collapse

fig, ax = plt.subplots(3,sharex=True)
for K in [-1, 0, +1]:
m = 1
V = ChaoticPotential(m)
equations = Equations(K, V)

events= [Inflation(equations), # Record inflation entry and exit
Inflation(equations, -1, terminal=True), # Stop on inflation exit
Collapse(equations, terminal=True)] # Stop if universe stops expanding

N_p = -1.5
phi_p = 23
t_p = 1e-5
ic = KD_initial_conditions(t_p, N_p, phi_p)
t = numpy.logspace(-5,10,1e6)

sol = solve(equations, ic, t_eval=t, events=events)

ax.plot(sol.N(t),sol.phi(t))
ax.set_ylabel(r'$\phi$')

ax.plot(sol.N(t),sol.H(t))
ax.set_yscale('log')
ax.set_ylabel(r'$H$')

ax.plot(sol.N(t),1/(sol.H(t)*numpy.exp(sol.N(t))))
ax.set_yscale('log')
ax.set_ylabel(r'$1/aH$')

ax[-1].set_xlabel('$N$')

|image0|

Plot mode function evolution
----------------------------
.. code:: python

import numpy
import matplotlib.pyplot as plt
from primordial.solver import solve
from primordial.equations.inflation_potentials import ChaoticPotential
from primordial.equations.t.mukhanov_sasaki import Equations, KD_initial_conditions
from primordial.equations.events import Inflation, Collapse, ModeExit

fig, axes = plt.subplots(3,sharex=True)
for ax, K in zip(axes, [-1, 0, +1]):
ax2 = ax.twinx()
m = 1
V = ChaoticPotential(m)
k = 100
equations = Equations(K, V, k)

events= [
Inflation(equations), # Record inflation entry and exit
Collapse(equations, terminal=True), # Stop if universe stops expanding
ModeExit(equations, +1, terminal=True, value=1e1*k) # Stop on mode exit
]

N_p = -1.5
phi_p = 23
t_p = 1e-5
ic = KD_initial_conditions(t_p, N_p, phi_p)
t = numpy.logspace(-5,10,1e6)

sol = solve(equations, ic, t_eval=t, events=events)

N = sol.N(t)
ax.plot(N,sol.R1(t), 'k-')
ax2.plot(N,-numpy.log(sol.H(t))-N, 'b-')

ax.set_ylabel('$\mathcal{R}$')
ax2.set_ylabel('$-\log aH$')

ax.text(0.9, 0.9, r'$K=%i$' % K, transform=ax.transAxes)

axes[-1].set_xlabel('$N$')

|image1|

.. |image0| image:: https://raw.githubusercontent.com/williamjameshandley/primordial/master/figures/background.png
.. |image1| image:: https://raw.githubusercontent.com/williamjameshandley/primordial/master/figures/ms.png

To do list
==========
Eventually would like to submit this to JOSS <https://joss.theoj.org/>_. Here are things to do before then:

Cosmology
---------
* Slow roll initial conditions
* Mukhanov Sazaki evolution in :math:N
* add :math:\eta as independent variable
* add :math:\phi as independent variable

Code
----
* Documentation
* Tests
* 100% coverage
* interpolation
* cosmology

## Project details

This version 0.0.13 0.0.12 0.0.11 0.0.10 0.0.9 0.0.8 0.0.7 0.0.6 0.0.4 0.0.2 0.0.1