SEVN
Loading...
Searching...
No Matches
Windaccretion.h
Go to the documentation of this file.
1//
2// Created by iorio on 5/21/24.
3//
4
5#ifndef SEVN_WINDACCRETION_H
6#define SEVN_WINDACCRETION_H
7
8#include <IO.h>
9#include <Processes.h>
10#include <binstar.h>
11#include <star.h>
12
13//Forward declaration
14class Star;
15class Binstar;
16
17
19
20public:
21 Windaccretion(_UNUSED IO* _io = nullptr, bool reg = true) {
22 if (reg) {
23 //First register to include this Property in static array
24 Register(this, &ID, name());
25 }
26 betaw = 0.125;
27 alphaw = 1.5;
28 muw = 1.0;
29
30 if (_io!= nullptr){
31 alphaw = _io->svpar.get_num("w_alpha");
32 betaw = _io->svpar.get_num("w_beta");
33 }
34 }
35
36 static size_t ID;
38 inline std::string name() override { return "Windaccretion"; }
39
40 Windaccretion* Instance(_UNUSED IO* _io) override;
41 virtual Windaccretion* instance() { return nullptr; }
42
43
45
46 static constexpr int NO_WINDACCRETION = 0;
47 virtual double DA(_UNUSED Binstar* b, _UNUSED int procID) { return 0; }
48 virtual double DE(_UNUSED Binstar* b, _UNUSED int procID) { return 0; }
49 inline bool is_process_ongoing() const override { return false; }
50
52
53protected:
54
55 static std::map<std::string, Windaccretion*>& GetStaticMap() {
56 static std::map<std::string, Windaccretion*> _locmap;
57 return _locmap;
58 }
59 static std::vector<int>& GetUsed() {
60 static std::vector<int> _used;
61 return _used;
62 }
63 static void Register_specific(Windaccretion* ptr) {
64 GetStaticMap().insert(std::make_pair(ptr->name(), ptr));
65 GetUsed().resize(GetStaticMap().size());
66 GetUsed()[GetUsed().size() - 1] = 0;
67 }
68
69 double betaw;
70 double alphaw;
71 double muw;
73};
74
76
77public:
78
79 WindaccretionHurley(_UNUSED IO* _io = nullptr, bool reg = true) : Windaccretion(nullptr, false) {
80 if (reg) {
82 }
83 }
84
85 inline std::string name() override { return "hurley"; }
87
89 return (new WindaccretionHurley(nullptr, false));
90 }
91
92 int evolve(Binstar* binstar) override;
93
94 double estimate_accreted_mass(_UNUSED double DM, _UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binstar) const override;
95 double DA(_UNUSED Binstar* b, _UNUSED int procID) override;
96 double DE(_UNUSED Binstar* b, _UNUSED int procID) override;
97 inline bool is_process_ongoing() const override { return true; }
98
99protected:
100
101 int accrete_mass(Binstar* binstar) override;
102
103
104};
105
107
108public:
109
110 WindaccretionDisabled(_UNUSED IO* _io = nullptr, bool reg = true) : Windaccretion(nullptr, false) {
111 if (reg) {
112 //Second register to handle the different options
113 Register_specific(this);
114 }
115 }
116
117 inline std::string name() override { return "disabled"; }
120 return (new WindaccretionDisabled(nullptr, false));
121 }
122 int evolve(_UNUSED Binstar* binstar) override;
123
124 inline bool is_process_ongoing() const override { return false; }
125};
126
127
128
129#endif //SEVN_WINDACCRETION_H
#define _UNUSED
Definition: BinaryProperty.h:20
Definition: binstar.h:26
Definition: IO.h:53
Definition: Processes.h:188
void Register(Process *_p, size_t *id, const std::string &_name)
Definition: Processes.h:159
Star * donor
Definition: Processes.h:154
static size_t size
Definition: Processes.h:140
Star * accretor
Definition: Processes.h:155
Definition: star.h:39
Definition: Windaccretion.h:106
std::string name() override
Definition: Windaccretion.h:117
static WindaccretionDisabled _windaccretiondisabled
Definition: Windaccretion.h:118
bool is_process_ongoing() const override
Definition: Windaccretion.h:124
int evolve(_UNUSED Binstar *binstar) override
Definition: Windaccretion.cpp:205
WindaccretionDisabled * instance() override
Definition: Windaccretion.h:119
WindaccretionDisabled(_UNUSED IO *_io=nullptr, bool reg=true)
Definition: Windaccretion.h:110
Definition: Windaccretion.h:18
virtual double DE(_UNUSED Binstar *b, _UNUSED int procID)
Definition: Windaccretion.h:48
static size_t ID
Definition: Windaccretion.h:36
static constexpr int NO_WINDACCRETION
Definition: Windaccretion.h:46
double alphaw
Definition: Windaccretion.h:70
double muw
Definition: Windaccretion.h:71
std::string name() override
Definition: Windaccretion.h:38
Windaccretion * Instance(_UNUSED IO *_io) override
Definition: Windaccretion.cpp:10
double betaw
Definition: Windaccretion.h:69
static std::map< std::string, Windaccretion * > & GetStaticMap()
Definition: Windaccretion.h:55
static Windaccretion _windaccretion
Definition: Windaccretion.h:37
virtual double DA(_UNUSED Binstar *b, _UNUSED int procID)
Definition: Windaccretion.h:47
static std::vector< int > & GetUsed()
Definition: Windaccretion.h:59
bool is_process_ongoing() const override
Definition: Windaccretion.h:49
static void Register_specific(Windaccretion *ptr)
Definition: Windaccretion.h:63
virtual Windaccretion * instance()
Definition: Windaccretion.h:41
Windaccretion(_UNUSED IO *_io=nullptr, bool reg=true)
Definition: Windaccretion.h:21
Definition: Windaccretion.h:75
static WindaccretionHurley _windaccretionhurley
Definition: Windaccretion.h:86
std::string name() override
Definition: Windaccretion.h:85
bool is_process_ongoing() const override
Definition: Windaccretion.h:97
double estimate_accreted_mass(_UNUSED double DM, _UNUSED Star *donor, _UNUSED Star *accretor, _UNUSED Binstar *binstar) const override
Definition: Windaccretion.cpp:25
WindaccretionHurley(_UNUSED IO *_io=nullptr, bool reg=true)
Definition: Windaccretion.h:79
int accrete_mass(Binstar *binstar) override
Definition: Windaccretion.cpp:79
WindaccretionHurley * instance() override
Definition: Windaccretion.h:88
int evolve(Binstar *binstar) override
Definition: Windaccretion.cpp:134
double DE(_UNUSED Binstar *b, _UNUSED int procID) override
Definition: Windaccretion.cpp:178
double DA(_UNUSED Binstar *b, _UNUSED int procID) override
Definition: Windaccretion.cpp:151