SEVN
Loading...
Searching...
No Matches
lambda_nanjing.h
Go to the documentation of this file.
1//
2// Created by iorio on 12/14/21.
3//
4
5#ifndef SEVN_LAMBDA_NANJING_H
6#define SEVN_LAMBDA_NANJING_H
7
8#include <vector>
9#include <sevnlog.h>
10#include <utilities.h>
11#include <lambda_base.h>
12
13class Star;
14class IO;
15
52
53public:
57 virtual ~Lambda_Nanjing() = default;
58
64 double operator() (const Star* s) override;
65
66protected:
67
68
70 virtual double lambda_Giant(const Star* s);
71 virtual double lambda_Cheb(const Star* s);
72 virtual double lambda_AGB(const Star* s);
73 virtual double lambda_pureHe(const Star* s);
74
75 //Properly estimated the two lambdas, they call set_coeff** to set the coefficients of the fittin equations
76 virtual double lambda_Giant(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th);
77 virtual double lambda_Cheb(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th);
78 virtual double lambda_AGB(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th);
79 virtual double lambda_pureHe(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th);
80
81 //Set the coefficient of the lambda fitting equations
82 typedef unsigned int coeff_status;
83 virtual coeff_status set_coeff_Giant(double Mzams, double Z, double Radius); //From HG::CalculateLambdaNanjing in HG.cpp in COMPAS
84 virtual coeff_status set_coeff_Cheb(double Mzams, double Z, double Radius); //From CHeB::CalculateLambdaNanjing in CHeb.cpp in COMPAS
85 virtual coeff_status set_coeff_AGB(double Mzams, double Z, double Radius); //From EAGB::CalculateLambdaNanjing in EAGB.cpp in COMPAS
86
92 std::vector<double> fitting_equation(double x){
93 double x2 = x * x;
94 double x3 = x2 * x;
95 double x4 = x2 * x2;
96 double x5 = x3 * x2;
97
98 double y1 = coeff_lambdab[0] + (coeff_lambdab[1] * x) + (coeff_lambdab[2] * x2) + (coeff_lambdab[3] * x3) + (coeff_lambdab[4] * x4) + (coeff_lambdab[5] * x5);
99 double y2 = coeff_lambdag[0] + (coeff_lambdag[1] * x) + (coeff_lambdag[2] * x2) + (coeff_lambdag[3] * x3) + (coeff_lambdag[4] * x4) + (coeff_lambdag[5] * x5);
100
101 std::vector<double> y_vec = {y1,y2};
102
103 return y_vec;
104 }
105
107 std::vector<double> coeff_lambdab;
108 std::vector<double> coeff_lambdag;
109 std::vector<double> maxBG = {};
110 std::vector<double> lambdaBG = {};
116 inline int reset(){
117 coeff_lambdab.clear();
118 coeff_lambdag.clear();
119 maxBG.clear();
120 lambdaBG.clear();
121 return EXIT_SUCCESS;
122 }
123
124private:
125
126 const double ZpopI = 0.0085;
127 constexpr static unsigned int COEF_SET = 1;
128 constexpr static unsigned int COEF_NOT_SET = 0;
129
135 inline double lambda_estimate(double lambda_th){
136 return lambda_th*lambdaBG[0] + (1-lambda_th)*lambdaBG[1];
137 }
138};
139
140
154
155public:
159
160 double operator() (const Star* s) override;
161
162protected:
163
164 double operator() (unsigned int Phase, double Mzams, double Z, double Radius, double Menv, double lambda_th);
165
166
167 static std::vector<double> Mzams_list;
168 double Mzams_cache{0}, Z_cache{0};
170 void find_interpolators(double Mzams);
171
172private:
173
174 double Mzams_interpolators [2] = {0.,0.};
175 double wM [2] = {0., 0.};
177};
178
179#endif //SEVN_LAMBDA_NANJING_H
#define _UNUSED
Definition: BinaryProperty.h:20
Definition: IO.h:53
Definition: lambda_base.h:19
Definition: lambda_nanjing.h:153
void find_interpolators(double Mzams)
Definition: lambda_nanjing.cpp:998
double Mzams_cache
Definition: lambda_nanjing.h:168
Lambda_Nanjing_interpolator(_UNUSED const IO *io)
Definition: lambda_nanjing.h:158
static std::vector< double > Mzams_list
Definition: lambda_nanjing.h:167
Lambda_Nanjing_interpolator()
Definition: lambda_nanjing.h:156
double wM[2]
Definition: lambda_nanjing.h:175
double operator()(const Star *s) override
Definition: lambda_nanjing.cpp:1014
double Mzams_interpolators[2]
Definition: lambda_nanjing.h:174
double Z_cache
Definition: lambda_nanjing.h:168
Lambda_Nanjing_interpolator(_UNUSED const Star *s)
Definition: lambda_nanjing.h:157
Definition: lambda_nanjing.h:51
virtual coeff_status set_coeff_AGB(double Mzams, double Z, double Radius)
Definition: lambda_nanjing.cpp:577
Lambda_Nanjing(_UNUSED const IO *io)
Definition: lambda_nanjing.h:56
std::vector< double > coeff_lambdab
Definition: lambda_nanjing.h:107
virtual ~Lambda_Nanjing()=default
virtual double lambda_Giant(const Star *s)
Definition: lambda_nanjing.cpp:935
virtual coeff_status set_coeff_Giant(double Mzams, double Z, double Radius)
Definition: lambda_nanjing.cpp:9
static constexpr unsigned int COEF_SET
Definition: lambda_nanjing.h:127
virtual double lambda_Giant(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th)
double operator()(const Star *s) override
Definition: lambda_nanjing.cpp:976
int reset()
Definition: lambda_nanjing.h:116
virtual double lambda_Cheb(const Star *s)
Definition: lambda_nanjing.cpp:945
virtual double lambda_pureHe(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th)
virtual double lambda_pureHe(const Star *s)
Definition: lambda_nanjing.cpp:965
double lambda_estimate(double lambda_th)
Definition: lambda_nanjing.h:135
virtual coeff_status set_coeff_Cheb(double Mzams, double Z, double Radius)
Definition: lambda_nanjing.cpp:286
virtual double lambda_Cheb(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th)
sevnstd::SevnLogging svlog
Definition: lambda_nanjing.h:106
std::vector< double > maxBG
Definition: lambda_nanjing.h:109
Lambda_Nanjing()
Definition: lambda_nanjing.h:54
virtual double lambda_AGB(_UNUSED double Mzams, _UNUSED double Z, _UNUSED double Radius, _UNUSED double Menv, _UNUSED double lambda_th)
unsigned int coeff_status
Definition: lambda_nanjing.h:82
static constexpr unsigned int COEF_NOT_SET
Definition: lambda_nanjing.h:128
std::vector< double > fitting_equation(double x)
Definition: lambda_nanjing.h:92
const double ZpopI
Definition: lambda_nanjing.h:126
std::vector< double > coeff_lambdag
Definition: lambda_nanjing.h:108
Lambda_Nanjing(_UNUSED const Star *s)
Definition: lambda_nanjing.h:55
std::vector< double > lambdaBG
Definition: lambda_nanjing.h:110
virtual double lambda_AGB(const Star *s)
Definition: lambda_nanjing.cpp:955
Definition: property.h:881
Definition: property.h:697
Definition: star.h:39
Definition: sevnlog.h:43