SEVN
Loading...
Searching...
No Matches
MTstability.h
Go to the documentation of this file.
1//
2// Created by Giuliano Iorio on 17/11/2021.
3//
4// Classes to handle the MT stability
5//
6//
7
84#ifndef SEVN_MTSTABILITY_H
85#define SEVN_MTSTABILITY_H
86
87#include <string>
88#include <map>
89#include <utility>
90#include <vector>
91
92#include <sevnlog.h>
93
94#define set_prop(star,prop,old) old ? star->getp_0(prop::ID) : star->getp(prop::ID)
95
96
97class Star;
98class Binstar;
100
105
106public:
107 virtual inline std::string name() = 0;
108 static MTstability *Instance(std::string const &name);
109 virtual MTstability *instance(){ svlog.critical("This is supposed to be pure virtual, do you have an uninitialized module?", __FILE__, __LINE__); return nullptr; }
110
118 virtual bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const = 0;
119
120 virtual ~MTstability(){
121 }
122
130 virtual double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const = 0;
131
139 virtual double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const = 0;
140
141protected:
142
143 void Register(MTstability *ptr, const std::string &_name) {
144 GetStaticMap().insert(std::make_pair(_name, ptr));
145 GetUsed().resize(GetStaticMap().size());
146 GetUsed()[GetUsed().size()-1] = 0;
147 }
148
150
151private:
152
153 static std::map<std::string, MTstability *> & GetStaticMap(){
154 static std::map<std::string, MTstability *> _locmap;
155 return _locmap;
156 }
157
158 static std::vector<int> & GetUsed(){
159 static std::vector<int> _used;
160 return _used;
161 }
162
163};
164
165
166class MT_Stable : public MTstability{
167
168public:
169 MT_Stable(bool reg = true){
170 if (reg){
171 Register(this, name());
172 }
173 }
174
175 inline std::string name() override { return "stable"; }
176
185 bool mt_unstable(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return false;}
186
195 double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return 1E30;}
196
206 double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return 0.;}
207
209
210 MT_Stable* instance() override {
211 return (new MT_Stable(false));
212 }
213
214};
215
217
218public:
219 MT_UnStable(bool reg = true){
220 if (reg){
221 Register(this, name());
222 }
223 }
224
225 inline std::string name() override { return "unstable"; }
226
234 bool mt_unstable(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return true;}
235
244 double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return -1E30;}
245
255 double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override {return 0.;}
256
258
259 MT_UnStable* instance() override {
260 return (new MT_UnStable(false));
261 }
262
263};
264
265
271class MT_Qcrit : public MTstability{
272
273public:
274
275 bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override;
276
284 double get_tshold(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override {return qcrit(donor,accretor);}
292 double get(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override {return q(donor,accretor);}
293
294protected:
295
302 virtual double q(Star *donor, Star *accretor) const;
303
310 virtual double qcrit(Star *donor, Star *accretor) const = 0;
311
312};
313
317class Qcrit_Hurley : public MT_Qcrit{
318
319public:
320
321 Qcrit_Hurley(bool reg = true){
322 if (reg){
323 Register(this, name());
324 }
325 }
326
327 inline std::string name() override { return "qcrit_hurley"; }
328
330
331 Qcrit_Hurley* instance() override {
332 return (new Qcrit_Hurley(false));
333 }
334
335protected:
336
344 double qcrit(Star *donor, Star *accretor) const override;
345
353 virtual double qcrit_giant(Star *donor, _UNUSED Star *accretor) const;
354
355};
356
361
362public:
363
364 Qcrit_Hurley_Webbink(bool reg = true){
365 if (reg){
366 Register(this, name());
367 }
368 }
369
370 inline std::string name() override { return "qcrit_hurley_webbink"; }
371
373
375 return (new Qcrit_Hurley_Webbink(false));
376 }
377
378protected:
379
389 double qcrit_giant(Star *donor, _UNUSED Star *accretor) const override;
390
391};
392
398
399public:
400
402 if (reg){
403 Register(this, name());
404 }
405 }
406
407 inline std::string name() override { return "qcrit_hurley_webbink_shao"; }
408
410
412 return (new Qcrit_Hurley_Webbink_Shao(false));
413 }
414
415protected:
416
429 double qcrit(Star *donor, Star *accretor) const override;
430
431};
432
438
439public:
440
441 Qcrit_COSMIC_Neijssel(bool reg = true){
442 if (reg){
443 Register(this, name());
444 }
445 }
446
447 inline std::string name() override { return "qcrit_cosmic_neijssel"; }
448
450
452 return (new Qcrit_COSMIC_Neijssel(false));
453 }
454
455protected:
468 double qcrit(Star *donor, Star *accretor) const override;
469
470};
471
476
477public:
478
479 Qcrit_COSMIC_Claeys(bool reg = true){
480 if (reg){
481 Register(this, name());
482 }
483 }
484
485 inline std::string name() override { return "qcrit_cosmic_claeys"; }
486
488
490 return (new Qcrit_COSMIC_Claeys(false));
491 }
492
493protected:
500 double qcrit(Star *donor, Star *accretor) const override;
501
502
503};
504
509
510public:
511
512 Qcrit_StarTrack(bool reg = true){
513 if (reg){
514 Register(this, name());
515 }
516 }
517
518 inline std::string name() override { return "qcrit_startrack"; }
519
521
523 return (new Qcrit_StarTrack(false));
524 }
525
526protected:
527
535 double qcrit(Star *donor, _UNUSED Star *accretor) const override;
536
537};
538
543public:
544
545 Qcrit_Radiative_Stable(bool reg = true){
546 if (reg){
547 Register(this, name());
548 }
549 }
550
551 inline std::string name() override { return "qcrit_radiative_stable"; }
552
554
556 return (new Qcrit_Radiative_Stable(false));
557 }
558
559protected:
567 double qcrit(Star *donor, Star *accretor) const override;
568
569};
570
575public:
576
577 Qcrit_HRadiative_Stable(bool reg = true){
578 if (reg){
579 Register(this, name());
580 }
581 }
582
583 inline std::string name() override { return "qcrit_Hradiative_stable"; }
584
586
588 return (new Qcrit_HRadiative_Stable(false));
589 }
590
591protected:
599 double qcrit(Star *donor, Star *accretor) const override;
600
601};
602
603class MT_Zeta : public MTstability{
604
605public:
606
607 bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override;
608
616 virtual double get_tshold(Star *donor, Star *accretor, _UNUSED Binstar *binary) const {return qcrit(donor,accretor);}
624 virtual double get(Star *donor, Star *accretor, _UNUSED Binstar *binary) const {return q(donor,accretor);}
625
626protected:
627
634 virtual double q(Star *donor, Star *accretor) const;
635
642 virtual double qcrit(Star *donor, Star *accretor) const = 0;
643
644};
645
646
647
648#endif //SEVN_MTSTABILITY_H
649
#define _UNUSED
Definition: BinaryProperty.h:20
Definition: binstar.h:26
Definition: MTstability.h:271
virtual double qcrit(Star *donor, Star *accretor) const =0
virtual double q(Star *donor, Star *accretor) const
Definition: MTstability.cpp:20
double get(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:292
double get_tshold(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:284
bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.cpp:16
Definition: MTstability.h:166
double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:195
double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:206
MT_Stable * instance() override
Definition: MTstability.h:210
std::string name() override
Definition: MTstability.h:175
bool mt_unstable(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:185
MT_Stable(bool reg=true)
Definition: MTstability.h:169
static MT_Stable _mt_stable
Definition: MTstability.h:208
Definition: MTstability.h:216
double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:244
std::string name() override
Definition: MTstability.h:225
MT_UnStable(bool reg=true)
Definition: MTstability.h:219
MT_UnStable * instance() override
Definition: MTstability.h:259
bool mt_unstable(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:234
double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:255
static MT_UnStable _mt_unstable
Definition: MTstability.h:257
Definition: MTstability.h:603
virtual double q(Star *donor, Star *accretor) const
virtual double qcrit(Star *donor, Star *accretor) const =0
virtual double get_tshold(Star *donor, Star *accretor, _UNUSED Binstar *binary) const
Definition: MTstability.h:616
virtual double get(Star *donor, Star *accretor, _UNUSED Binstar *binary) const
Definition: MTstability.h:624
bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const override
Definition: MTstability.h:104
static MTstability * Instance(std::string const &name)
Definition: MTstability.cpp:10
static std::vector< int > & GetUsed()
Definition: MTstability.h:158
virtual std::string name()=0
SevnLogging svlog
Definition: MTstability.h:149
void Register(MTstability *ptr, const std::string &_name)
Definition: MTstability.h:143
virtual bool mt_unstable(Star *donor, Star *accretor, _UNUSED Binstar *binary) const =0
virtual MTstability * instance()
Definition: MTstability.h:109
virtual double get(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const =0
virtual ~MTstability()
Definition: MTstability.h:120
virtual double get_tshold(_UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binary) const =0
static std::map< std::string, MTstability * > & GetStaticMap()
Definition: MTstability.h:153
Definition: MTstability.h:475
Qcrit_COSMIC_Claeys(bool reg=true)
Definition: MTstability.h:479
static Qcrit_COSMIC_Claeys _qcrit_cosmic_claeys
Definition: MTstability.h:487
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:163
std::string name() override
Definition: MTstability.h:485
Qcrit_COSMIC_Claeys * instance() override
Definition: MTstability.h:489
Definition: MTstability.h:437
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:127
Qcrit_COSMIC_Neijssel(bool reg=true)
Definition: MTstability.h:441
std::string name() override
Definition: MTstability.h:447
static Qcrit_COSMIC_Neijssel _qcrit_cosmic_neijssel
Definition: MTstability.h:449
Qcrit_COSMIC_Neijssel * instance() override
Definition: MTstability.h:451
Definition: MTstability.h:574
std::string name() override
Definition: MTstability.h:583
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:241
Qcrit_HRadiative_Stable(bool reg=true)
Definition: MTstability.h:577
static Qcrit_HRadiative_Stable _qcrit_hradiative_stable
Definition: MTstability.h:585
Qcrit_HRadiative_Stable * instance() override
Definition: MTstability.h:587
Definition: MTstability.h:397
std::string name() override
Definition: MTstability.h:407
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:83
Qcrit_Hurley_Webbink_Shao * instance() override
Definition: MTstability.h:411
Qcrit_Hurley_Webbink_Shao(bool reg=true)
Definition: MTstability.h:401
static Qcrit_Hurley_Webbink_Shao _qcrit_hurley_webbink_shao
Definition: MTstability.h:409
Definition: MTstability.h:360
static Qcrit_Hurley_Webbink _qcrit_hurley_webbink
Definition: MTstability.h:372
Qcrit_Hurley_Webbink * instance() override
Definition: MTstability.h:374
std::string name() override
Definition: MTstability.h:370
double qcrit_giant(Star *donor, _UNUSED Star *accretor) const override
Definition: MTstability.cpp:76
Qcrit_Hurley_Webbink(bool reg=true)
Definition: MTstability.h:364
Definition: MTstability.h:317
virtual double qcrit_giant(Star *donor, _UNUSED Star *accretor) const
Definition: MTstability.cpp:59
Qcrit_Hurley * instance() override
Definition: MTstability.h:331
Qcrit_Hurley(bool reg=true)
Definition: MTstability.h:321
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:28
std::string name() override
Definition: MTstability.h:327
static Qcrit_Hurley _qcrit_hurley
Definition: MTstability.h:329
Definition: MTstability.h:542
double qcrit(Star *donor, Star *accretor) const override
Definition: MTstability.cpp:212
std::string name() override
Definition: MTstability.h:551
Qcrit_Radiative_Stable(bool reg=true)
Definition: MTstability.h:545
Qcrit_Radiative_Stable * instance() override
Definition: MTstability.h:555
static Qcrit_Radiative_Stable _qcrit_radiative_stable
Definition: MTstability.h:553
Definition: MTstability.h:508
std::string name() override
Definition: MTstability.h:518
Qcrit_StarTrack * instance() override
Definition: MTstability.h:522
Qcrit_StarTrack(bool reg=true)
Definition: MTstability.h:512
double qcrit(Star *donor, _UNUSED Star *accretor) const override
Definition: MTstability.cpp:196
static Qcrit_StarTrack _qcrit_startrack
Definition: MTstability.h:520
Definition: star.h:39
Definition: sevnlog.h:43
void critical(std::string errstate, const char *file_input=nullptr, int line_input=-1) const
Definition: sevnlog.cpp:85