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;}
|
---|
23 | void SetInteg(double dperc=0.01,double dzinc=0.05,double dzmax=5.,unsigned short order=4);
|
---|
24 |
|
---|
25 | void SetDynParam(double h100,double om0,double or0,double ol0,double w0=-1.);
|
---|
26 | void SetObaryon0(double v);
|
---|
27 | void DefaultParam(void);
|
---|
28 |
|
---|
29 | inline double h100(void) {return _h100;}
|
---|
30 | inline double H0(void) {return _H0;}
|
---|
31 | inline double Dhubble(void) {return _Dhubble;}
|
---|
32 | inline double Olambda0(void) {return _Olambda0;}
|
---|
33 | inline double W0(void) {return _W0;}
|
---|
34 | inline double Omatter0(void) {return _Omatter0;}
|
---|
35 | inline double Obaryon0(void) {return _Obaryon0;}
|
---|
36 | inline double Orelat0(void) {return _Orelat0;}
|
---|
37 | inline double Ocurv0(void) {return _Ocurv0;}
|
---|
38 | inline double Otot0(void) {return _Otot0;}
|
---|
39 | double Rhoc(double z);
|
---|
40 |
|
---|
41 | inline double H(double z) {return _H0 * E(z);}
|
---|
42 | double Olambda(double z);
|
---|
43 | double Omatter(double z);
|
---|
44 | double Obaryon(double z);
|
---|
45 | double Orelat(double z);
|
---|
46 | double Ocurv(double z);
|
---|
47 | double Otot(double z);
|
---|
48 |
|
---|
49 | double Dtrcom(double z);
|
---|
50 | double Dloscom(double z);
|
---|
51 | double Dang(double z);
|
---|
52 | double Dlum(double z);
|
---|
53 |
|
---|
54 | double dVol(double z);
|
---|
55 | double Vol4Pi(double z);
|
---|
56 | double Vol4Pi(double z1,double z2);
|
---|
57 |
|
---|
58 | void Print(double z=0.);
|
---|
59 |
|
---|
60 | double E2(double z) const;
|
---|
61 | inline double E(double z) const {return sqrt(E2(z));}
|
---|
62 |
|
---|
63 | double NInteg(double z);
|
---|
64 | inline double Integrand(double z) const {return 1./E(z);}
|
---|
65 |
|
---|
66 | virtual double operator() (double z) const {return Integrand(z);}
|
---|
67 | protected:
|
---|
68 | int_4 Init_Spline(void);
|
---|
69 | void Clone(CosmoCalc& univ);
|
---|
70 |
|
---|
71 | // La cosmology
|
---|
72 | unsigned short _flat;
|
---|
73 | double _h100, _H0; /* km/s/Mpc */
|
---|
74 | double _Olambda0,_W0;
|
---|
75 | double _Omatter0,_Obaryon0;
|
---|
76 | double _Orelat0;
|
---|
77 | double _Otot0,_Ocurv0;
|
---|
78 | double _Dhubble; /* Mpc */
|
---|
79 |
|
---|
80 | // Parametres d'integration
|
---|
81 | double _dperc,_dzinc,_dzmax;
|
---|
82 | unsigned short _glorder;
|
---|
83 | vector<double> _xgausl, _wgausl;
|
---|
84 |
|
---|
85 | // Pour le calcul direct
|
---|
86 | double _zold,_integval;
|
---|
87 |
|
---|
88 | // Pour les splines
|
---|
89 | bool _usespline,_computespl;
|
---|
90 | double _zmax;
|
---|
91 | CSpline * _spline;
|
---|
92 | int_4 _nspl;
|
---|
93 | double *_xspl, *_yspl;
|
---|
94 |
|
---|
95 | };
|
---|
96 |
|
---|
97 | } // Fin du namespace
|
---|
98 |
|
---|
99 | #endif
|
---|