/usr/share/gnudatalanguage/astrolib/galage.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | ;+
; NAME:
; GALAGE
;
; PURPOSE:
; Determine the age of a galaxy given its redshift and a formation redshift.
;
; CALLING SEQUENCE:
; age = galage(z, [zform, H0 =, k=, lambda0 =, Omega_m= , q0 =, /SILENT])'
;
; INPUTS:
; z - positive numeric vector or scalar of measured redshifts
; zform - redshift of galaxy formation (> z), numeric positive scalar
; To determine the age of the universe at a given redshift, set zform
; to a large number (e.g. ~1000).
;
; OPTIONAL KEYWORD INPUTS:
; H0 - Hubble constant in km/s/Mpc, positive scalar, default is 70
; /SILENT - If set, then the adopted cosmological parameters are not
; displayed at the terminal.
;
; No more than two of the following four parameters should be
; specified. None of them need be specified -- the adopted defaults
; are given.
; k - curvature constant, normalized to the closure density. Default is
; 0, (indicating a flat universe)
; Omega_m - Matter density, normalized to the closure density, default
; is 0.3. Must be non-negative
; Lambda0 - Cosmological constant, normalized to the closure density,
; default is 0.7
; q0 - Deceleration parameter, numeric scalar = -R*(R'')/(R')^2, default
; is -0.55
;
; OUTPUTS:
; age - age of galaxy in years, will have the same number of elements
; as the input Z vector
;
; EXAMPLE:
; (1) Determine the age of a galaxy observed at z = 1.5 in a cosmology with
; Omega_matter = 0.3 and Lambda = 0.0. Assume the formation redshift was
; at z = 25, and use the default Hubble constant (=70 km/s/Mpc)
;
; IDL> print,galage(1.5,25,Omega_m=0.3, Lambda = 0)
; ===> 3.35 Gyr
;
; (2) Plot the age of a galaxy in Gyr out to a redshift of z = 5, assuming
; the default cosmology (omega_m=0.3, lambda=0.7), and zform = 100
;
; IDL> z = findgen(50)/10.
; IDL> plot,z,galage(z,100)/1e9,xtit='z',ytit = 'Age (Gyr)'
;
; PROCEDURE:
; For a given formation time zform and a measured z, integrate dt/dz from
; zform to z. Analytic formula of dt/dz in Gardner, PASP 110:291-305, 1998
; March (eq. 7)
;
; COMMENTS:
; (1) Integrates using the IDL Astronomy Library procedure QSIMP. (The
; intrinsic IDL QSIMP() function is not called because of its ridiculous
; restriction that only scalar arguments can be passed to the integrating
; function.) The function 'dtdz' is defined at the beginning of the
; routine (so it can compile first).
;
; (2) Should probably be fixed to use a different integrator from QSIMP when
; computing age from an "infinite" redshift of formation. But using a
; large value of zform seems to work adequately.
;
; (3) An alternative set of IDL procedures for computing cosmological
; parameters is available at
; https://github.com/jlfischer/red-idl-cosmology
; PROCEDURES CALLED:
; COSMO_PARAM, QSIMP
; HISTORY:
; STIS version by P. Plait (ACC) June 1999
; IDL Astro Version W. Landsman (Raytheon ITSS) April 2000
; Avoid integer overflow for more than 32767 redshifts July 2001
;-
;
; define function dtdz
;
function dtdz, z, lambda0 = lambda0, q0 = q0
term1 = (1.0d + z)
term2 = 2.0d * (q0 + lambda0) * z + 1.0d - lambda0
term3 = (1.0d + z) * (1.0d +z)
return, 1.0 / (term1 * sqrt(term2 * term3 + lambda0))
end
;;;;;;;;;;;;;;;;;;;;;;;;;
function galage, z, zform, h0 = h0, Omega_m=omega_m, lambda0 = lambda0, k = k, $
q0 = q0, SILENT = silent
if N_params() LE 1 then begin
print,$
'Syntax: age = GALAGE(z, zform, [H0= , Omega_M = ,lambda0 =, k= , q0=, /SIL]'
return, 0
endif
;
; initialize numbers
;
if N_elements(h0) EQ 0 then h0 = 70.0
COSMO_PARAM, Omega_m, lambda0, k, q0
if not keyword_set(silent) then $
print,'GALAGE: H0:', h0, ' Omega_m:', omega_m, ' Lambda0',lambda0, $
' q0: ',q0, ' k: ', k, f='(A,I3,A,f5.2,A,f5.2,A,f5.2,A,F5.2)'
nz = N_elements(z)
age = z*0. ;Return same dimensions and data type as Z
;
; use qsimp to integrate dt/dz to get age for each z
; watch out for null case of z >= zform
;
for i= 0L, nz-1 do begin
if (z[i] ge zform) then age_z = 0 else $
qsimp,'dtdz', z[i], zform, age_z, q0 = q0, lambda0 = lambda0
age[i] = age_z
endfor
; convert units of age: km/s/Mpc to years, divide by H0
; 3.085678e19 km --> 1 Mpc
; 3.15567e+07 sec --> 1 year
return, age * 3.085678e+19 / 3.15567e+7/ H0
end
|