SEVN
Loading...
Searching...
No Matches
BSEintegrator.h
Go to the documentation of this file.
1//
2// Created by Giuliano Iorio on 10/08/2021.
3//
4
5#ifndef SEVN_BSEINTEGRATOR_H
6#define SEVN_BSEINTEGRATOR_H
7
8constexpr double cZsun = 0.02;
9
10/****************** BSE COEFFICIENTS ********************/
11
18
19public:
20 BSE_Coefficient(double Z, double alpha, double beta=0, double gamma=0, double eta=0, double mu=0) : alpha{alpha}, beta{beta}, gamma{gamma}, eta{eta}, mu{mu}, Z{Z}{
21 set_coeff();
22 }
23
24 inline double operator() () const { return coeff;}
25 inline double getZ(){return Z;}
26 inline void change_Z(double newZ){
27 Z=newZ;
28 set_coeff();
29 }
30
31 const double alpha;
32 const double beta;
33 const double gamma;
34 const double eta;
35 const double mu;
36
37protected:
38 const double Zsun=cZsun;
39 double Z;
40 double coeff;
41
42 inline void set_coeff(){
43 double Zlog = std::log10(Z/Zsun);
44 //Appendix A Hurley+00
45 coeff = alpha + Zlog*(beta + Zlog*(gamma + Zlog*(eta + Zlog*mu))); // alpha+beta*Zlog+gamma*Zlog^2+eta*Zlog^3+mu*Zlog^4
46 }
47};
48
49//TODO it is betteer to create a single class containing a vector with all the coefficients
54public:
55 BSE_Coefficient_a1(double Zinput) : BSE_Coefficient{Zinput,1593.890,2053.038,1231.1226,232.7785}{
56
57 }
58};
60public:
61 BSE_Coefficient_a2(double Zinput) : BSE_Coefficient{Zinput,2.706708e3,1.483131e3,5.772723e3,7.411230e1}{}
62};
64public:
65 BSE_Coefficient_a3(double Zinput) : BSE_Coefficient{Zinput,1.466143e2,-1.048442e2,-6.795374e1,-1.391127e1}{}
66};
68public:
69 BSE_Coefficient_a4(double Zinput) : BSE_Coefficient{Zinput,4.141960e-2,4.564888e-2,2.958542e-2,5.571483e-3}{}
70};
72public:
73 BSE_Coefficient_a5(double Zinput) : BSE_Coefficient{Zinput,3.426349e-1}{}
74};
76public:
77 BSE_Coefficient_a6(double Zinput) : BSE_Coefficient{Zinput,1.949814e1,1.758178,-6.008212,-4.470533}{}
78};
80public:
81 BSE_Coefficient_a7(double Zinput) : BSE_Coefficient{Zinput,4.903830}{}
82};
84public:
85 BSE_Coefficient_a8(double Zinput) : BSE_Coefficient{Zinput,5.212154e-2,3.166411e-2,-2.750074e-3,-2.271549e-3}{}
86};
88public:
89 BSE_Coefficient_a9(double Zinput) : BSE_Coefficient{Zinput,1.312179,-3.294936e-1,9.231860e-2,2.610989e-2}{}
90};
92public:
93 BSE_Coefficient_a10(double Zinput) : BSE_Coefficient{Zinput,8.073972e-1}{}
94};
95
96/********************************************************/
97
98
99/******************BSE PROPERTIES**************************/
100
107public:
108 BSE_Property(double Zinput): Z{Zinput}{}
109 virtual double operator() (double M) = 0;
110 //TODO add also the operator with M and time
111 //virtual double operator() (double M, double t) = 0;
112 virtual std::string units(){return "";}
113
114 //Just a wrapper to be called easily by pointers
115 inline double eval(double M){return operator()(M);}
116
117protected:
118 double chaced_M=0;
119 double chaced_logP=0;
120 double Z;
121
122 std::vector<double> coeff;
123
124};
125
127
131class BSEtimes : public BSE_Property{
132public:
133 BSEtimes(double Zinput) : BSE_Property(Zinput){}
134 std::string units() override{return "Myr";}
135};
136
141class Tbgb : public BSEtimes{
142public:
143
144 Tbgb(double Zinput): BSEtimes(Zinput), a1{BSE_Coefficient_a1(Zinput)()}, a2{BSE_Coefficient_a2(Zinput)()}, a3{BSE_Coefficient_a3(Zinput)()}, a4{BSE_Coefficient_a4(Zinput)()}, a5{BSE_Coefficient_a5(Zinput)()}{
145
146 }
147
148 double operator() (double M) override{
149
150 double M3=M*M*M;
151 double M7=M3*M*M*M*M;
152 double num = a1 + a2*M3 + a3*std::pow(M,5.5) + M7;
153 double den = a4*M*M + a5*M7;
154
155 return num/den;
156 }
157
158private:
159
160 const double a1;
161 const double a2;
162 const double a3;
163 const double a4;
164 const double a5;
165
166};
167
172class Thook : public Tbgb{
173public:
174 Thook(double Zinput): Tbgb(Zinput), a6{BSE_Coefficient_a6(Zinput)()}, a7{BSE_Coefficient_a7(Zinput)()},a8{BSE_Coefficient_a8(Zinput)()}, a9{BSE_Coefficient_a9(Zinput)()}, a10{BSE_Coefficient_a10(Zinput)()}{
175
176 }
177
178 double operator() (double M) override{
179 double tbgb = Tbgb::operator()(M);
180 return mu(M)*tbgb;
181 }
182
183 //Eq. 7 in Hurley+00
184 double mu(double M){
185 double mut = 1.0-0.01*std::max(a6/std::pow(M,a7),a8+a9/std::pow(M,a10));
186 return std::max(0.5,mut);
187 }
188
189private:
190
191 const double a6;
192 const double a7;
193 const double a8;
194 const double a9;
195 const double a10;
196};
197
202class Tms : public Thook{
203
204public:
205 Tms(double Zinput) : Thook(Zinput){
206 double Zeta = std::log10(Zinput/cZsun);
207 //Eq. 6 in Hurley+00
208 x=std::max(0.95, std::min(0.95-0.03*(Zeta+0.30103),0.99));
209 }
210
211 double operator() (double M) override{
212 double tbgb = Tbgb::operator()(M);
213 double thook = Thook::operator()(M);
214
215 return std::max(thook,x*tbgb);
216 }
217
218protected:
219
220 double x;
221
222
223};
224
225#endif //SEVN_BSEINTEGRATOR_H
constexpr double cZsun
Definition: BSEintegrator.h:8
Definition: BSEintegrator.h:91
BSE_Coefficient_a10(double Zinput)
Definition: BSEintegrator.h:93
Definition: BSEintegrator.h:53
BSE_Coefficient_a1(double Zinput)
Definition: BSEintegrator.h:55
Definition: BSEintegrator.h:59
BSE_Coefficient_a2(double Zinput)
Definition: BSEintegrator.h:61
Definition: BSEintegrator.h:63
BSE_Coefficient_a3(double Zinput)
Definition: BSEintegrator.h:65
Definition: BSEintegrator.h:67
BSE_Coefficient_a4(double Zinput)
Definition: BSEintegrator.h:69
Definition: BSEintegrator.h:71
BSE_Coefficient_a5(double Zinput)
Definition: BSEintegrator.h:73
Definition: BSEintegrator.h:75
BSE_Coefficient_a6(double Zinput)
Definition: BSEintegrator.h:77
Definition: BSEintegrator.h:79
BSE_Coefficient_a7(double Zinput)
Definition: BSEintegrator.h:81
Definition: BSEintegrator.h:83
BSE_Coefficient_a8(double Zinput)
Definition: BSEintegrator.h:85
Definition: BSEintegrator.h:87
BSE_Coefficient_a9(double Zinput)
Definition: BSEintegrator.h:89
Definition: BSEintegrator.h:17
double operator()() const
Definition: BSEintegrator.h:24
BSE_Coefficient(double Z, double alpha, double beta=0, double gamma=0, double eta=0, double mu=0)
Definition: BSEintegrator.h:20
const double gamma
Definition: BSEintegrator.h:33
const double beta
Definition: BSEintegrator.h:32
double getZ()
Definition: BSEintegrator.h:25
double Z
Definition: BSEintegrator.h:39
double coeff
Definition: BSEintegrator.h:40
const double Zsun
Definition: BSEintegrator.h:38
const double alpha
Definition: BSEintegrator.h:31
void set_coeff()
Definition: BSEintegrator.h:42
const double mu
Definition: BSEintegrator.h:35
void change_Z(double newZ)
Definition: BSEintegrator.h:26
const double eta
Definition: BSEintegrator.h:34
Definition: BSEintegrator.h:106
double chaced_M
Definition: BSEintegrator.h:118
std::vector< double > coeff
Definition: BSEintegrator.h:122
BSE_Property(double Zinput)
Definition: BSEintegrator.h:108
virtual std::string units()
Definition: BSEintegrator.h:112
double eval(double M)
Definition: BSEintegrator.h:115
double chaced_logP
Definition: BSEintegrator.h:119
double Z
Definition: BSEintegrator.h:120
virtual double operator()(double M)=0
TIMES PROPERTIES.
Definition: BSEintegrator.h:131
std::string units() override
Definition: BSEintegrator.h:134
BSEtimes(double Zinput)
Definition: BSEintegrator.h:133
Definition: BSEintegrator.h:141
const double a4
Definition: BSEintegrator.h:163
const double a5
Definition: BSEintegrator.h:164
const double a1
Definition: BSEintegrator.h:160
const double a3
Definition: BSEintegrator.h:162
Tbgb(double Zinput)
Definition: BSEintegrator.h:144
double operator()(double M) override
Definition: BSEintegrator.h:148
const double a2
Definition: BSEintegrator.h:161
Definition: BSEintegrator.h:172
const double a6
Definition: BSEintegrator.h:191
const double a8
Definition: BSEintegrator.h:193
const double a7
Definition: BSEintegrator.h:192
const double a10
Definition: BSEintegrator.h:195
double mu(double M)
Definition: BSEintegrator.h:184
double operator()(double M) override
Definition: BSEintegrator.h:178
const double a9
Definition: BSEintegrator.h:194
Thook(double Zinput)
Definition: BSEintegrator.h:174
Definition: BSEintegrator.h:202
double x
Definition: BSEintegrator.h:220
Tms(double Zinput)
Definition: BSEintegrator.h:205
double operator()(double M) override
Definition: BSEintegrator.h:211