galage.pro

来自「basic median filter simulation」· PRO 代码 · 共 131 行

PRO
131
字号
;+; 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 ;            http://cerebus.as.arizona.edu/~ioannis/research/red/; 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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?