jronayne / PyTransport

A Python Package for the calculation of inflationary correlation functions.
Other
17 stars 3 forks source link

Add PyT.findEndOfInflationMethod() to compute when inflation ends #2

Open ds283 opened 7 years ago

ds283 commented 7 years ago

For many purposes it is helpful to know when inflation ends, given a set of initial conditions. Currently PyT.backEvolve() supplies some of this functionality, but doesn't return the exact time at which epsilon first exceeds unity.

This set of commits sets up a new PyTransport module method, findEndOfInflation(), with signature

findEndOfInflation(initial_conditions, params, tols, Nstart, DeltaN)

where initial_conditions is a set of initial conditions for the fields and their velocities (as would be passed to backEvolve()), params is a list of parameter values, tols is a list of tolerances, NStart labels the e-folding time corresponding to initial_conditions, and DeltaN optionally specifies the width of the search window. If DeltaN is omitted then the search window defaults to 10,000 e-folds.

The function returns None if epsilon does not exceed unity anywhere in the search region, or if the field- or parameter-vectors were the incorrect length. (Perhaps it would be more desirable to distinguish these cases by raising an exception? But returning None if inflation continues throughout the search window seems conceptually the right thing to do.) If inflation does end then it returns the first time at which epsilon > 1. The uncertainty in the determination is roughly the current stepper stride length, which should typically be acceptable.

Example

Nstart = 0.0
Nend = PyT.findEndOfInflation(fields, params, tols, Nstart)
if Nend is not None:
    print 'end of inflation detected at N = {v}'.format(v=Nend)
else:
    print 'end of inflation not detected within search window'

yields

$ python test.py
end of inflation detected at N = 79.1013626167