[3115] | 1 | #ifndef COSMOCALC_SEEN
|
---|
| 2 | #define COSMOCALC_SEEN
|
---|
| 3 |
|
---|
| 4 | #include "machdefs.h"
|
---|
| 5 | #include <vector>
|
---|
| 6 |
|
---|
| 7 | #include "genericfunc.h"
|
---|
| 8 |
|
---|
| 9 | namespace SOPHYA {
|
---|
| 10 |
|
---|
| 11 | class CSpline;
|
---|
| 12 |
|
---|
| 13 | //-----------------------------------------------------------------------------------
|
---|
| 14 | class CosmoCalc : public GenericFunc {
|
---|
| 15 | public:
|
---|
| 16 | CosmoCalc(unsigned short flat=0,bool usespline=false,double zmax=0.);
|
---|
| 17 | CosmoCalc(CosmoCalc& univ);
|
---|
| 18 | virtual ~CosmoCalc(void);
|
---|
| 19 |
|
---|
| 20 | unsigned short Flat(void) { return _flat;}
|
---|
| 21 |
|
---|
| 22 | double ZMax(void) { return _zmax;}
|
---|
[3768] | 23 | void ChangeZmax(double zmax,double dzinc=-1.,double dzmax=-1.);
|
---|
[3285] | 24 | void SetInteg(double dperc=-1.,double dzinc=-1.,double dzmax=-1.,unsigned short order=4);
|
---|
| 25 | void PrtInteg(void);
|
---|
[3115] | 26 |
|
---|
[3952] | 27 | void SetDynParam(double h100,double om0,double or0,double ol0,double w0=-1.,double wa=0.);
|
---|
[3115] | 28 | void SetObaryon0(double v);
|
---|
| 29 | void DefaultParam(void);
|
---|
| 30 |
|
---|
| 31 | inline double h100(void) {return _h100;}
|
---|
| 32 | inline double H0(void) {return _H0;}
|
---|
| 33 | inline double Dhubble(void) {return _Dhubble;}
|
---|
| 34 | inline double Olambda0(void) {return _Olambda0;}
|
---|
| 35 | inline double W0(void) {return _W0;}
|
---|
[3952] | 36 | inline double Wa(void) {return _Wa;}
|
---|
[3115] | 37 | inline double Omatter0(void) {return _Omatter0;}
|
---|
| 38 | inline double Obaryon0(void) {return _Obaryon0;}
|
---|
| 39 | inline double Orelat0(void) {return _Orelat0;}
|
---|
| 40 | inline double Ocurv0(void) {return _Ocurv0;}
|
---|
| 41 | inline double Otot0(void) {return _Otot0;}
|
---|
| 42 | double Rhoc(double z);
|
---|
| 43 |
|
---|
| 44 | inline double H(double z) {return _H0 * E(z);}
|
---|
| 45 | double Olambda(double z);
|
---|
[3952] | 46 | inline double W(double z) {return _W0 + _Wa * z/(1.+z);} // W(z) = W0 + Wa*(1-a)
|
---|
[3115] | 47 | double Omatter(double z);
|
---|
| 48 | double Obaryon(double z);
|
---|
| 49 | double Orelat(double z);
|
---|
| 50 | double Ocurv(double z);
|
---|
| 51 | double Otot(double z);
|
---|
| 52 |
|
---|
| 53 | double Dtrcom(double z);
|
---|
| 54 | double Dloscom(double z);
|
---|
[4047] | 55 | double DloscomDz(double z);
|
---|
[3115] | 56 | double Dang(double z);
|
---|
| 57 | double Dlum(double z);
|
---|
| 58 |
|
---|
| 59 | double dVol(double z);
|
---|
| 60 | double Vol4Pi(double z);
|
---|
| 61 | double Vol4Pi(double z1,double z2);
|
---|
| 62 |
|
---|
[3749] | 63 | double ZFrLos(double loscom /* Mpc com */, int niter=6);
|
---|
| 64 |
|
---|
[3115] | 65 | void Print(double z=0.);
|
---|
| 66 |
|
---|
| 67 | double E2(double z) const;
|
---|
| 68 | inline double E(double z) const {return sqrt(E2(z));}
|
---|
| 69 |
|
---|
| 70 | double NInteg(double z);
|
---|
| 71 | inline double Integrand(double z) const {return 1./E(z);}
|
---|
| 72 |
|
---|
[3312] | 73 | virtual double operator() (double z) {return Integrand(z);}
|
---|
[3115] | 74 | protected:
|
---|
| 75 | int_4 Init_Spline(void);
|
---|
| 76 | void Clone(CosmoCalc& univ);
|
---|
| 77 |
|
---|
| 78 | // La cosmology
|
---|
| 79 | unsigned short _flat;
|
---|
| 80 | double _h100, _H0; /* km/s/Mpc */
|
---|
[3952] | 81 | double _Olambda0,_W0,_Wa;
|
---|
[3115] | 82 | double _Omatter0,_Obaryon0;
|
---|
| 83 | double _Orelat0;
|
---|
| 84 | double _Otot0,_Ocurv0;
|
---|
| 85 | double _Dhubble; /* Mpc */
|
---|
| 86 |
|
---|
| 87 | // Parametres d'integration
|
---|
| 88 | double _dperc,_dzinc,_dzmax;
|
---|
| 89 | unsigned short _glorder;
|
---|
| 90 | vector<double> _xgausl, _wgausl;
|
---|
| 91 |
|
---|
| 92 | // Pour le calcul direct
|
---|
| 93 | double _zold,_integval;
|
---|
| 94 |
|
---|
| 95 | // Pour les splines
|
---|
| 96 | bool _usespline,_computespl;
|
---|
| 97 | double _zmax;
|
---|
| 98 | CSpline * _spline;
|
---|
| 99 | int_4 _nspl;
|
---|
| 100 | double *_xspl, *_yspl;
|
---|
| 101 |
|
---|
| 102 | };
|
---|
| 103 |
|
---|
[3749] | 104 | //-----------------------------------------------------------------------------------
|
---|
| 105 | double LargeurDoppler(double v /* km/s */, double nu);
|
---|
| 106 | double DzFrV(double v /* km/s */, double zred);
|
---|
| 107 | double DNuFrDz(double dzred,double nu_at_0,double zred);
|
---|
| 108 | double DzFrDNu(double dnu_at_0,double nu_at_0,double zred);
|
---|
| 109 | double DzFrDNuApprox(double dnu_at_0,double nu_at_0,double zred);
|
---|
| 110 |
|
---|
| 111 | //-----------------------------------------------------------------------------------
|
---|
| 112 |
|
---|
[3325] | 113 | } // Fin du namespace SOPHYA
|
---|
[3115] | 114 |
|
---|
| 115 | #endif
|
---|