SEVN
Loading...
Searching...
No Matches
supernova.h
Go to the documentation of this file.
1/*
2Created by spera on 30/12/18.
3Module for SN models, it includes:
4 - Class supernova: Base class for SN models
5 - Class PisnON: auxiliary class-option used to enable pair instability at compile time
6 - Class PisnOFF: auxiliary class-option used to disable pair instability at compile time
7 - Class NeutrinoMassLossOFF: auxiliary class-option used to disable neutrino mass loss at compile time
8 - Class NSfromGau: auxiliary class-option used to force to draw Neutron Star masses from a Gaussian
9*/
10
11#ifndef SEVN_SUPERNOVA_H
12#define SEVN_SUPERNOVA_H
13
240#include <string>
241#include <map>
242#include <vector>
243#include <sevnlog.h>
244#include <lookup_and_phases.h>
245#include <kicks.h>
246#include <random>
247#include <neutrinomassloss.h>
248
249class Star;
250class PairInstability;
252
253#define _UNUSED __attribute__ ((unused))
254
255
257
258/***** For Developers that want to add new supernova models: ******/
264public:
266 virtual inline std::string name() const { return "GenericSupernova"; }
271 virtual supernova *instance(_UNUSED Star *s) = 0; //Pure virtual
272
283 virtual void explosion(Star *s) = 0;
284
288
297
300protected:
301
313
323 virtual void CCexplosion(Star *s);
324
336 virtual void ECSN(Star *s);
337
347 virtual void WDformation(Star *s);
348
349
350
351
352
353 /*********************************************************************************************************/
354 /***** STOP: DO NOT CHANGE THE REST OF THE CODE IF YOU ARE NOT FULLY AWARE OF WHAT YOU ARE DOING ******/
355 /*********************************************************************************************************/
356public:
357 //TODO Since Star is passed to the constructor, it can be stored as a pointer and the Star* s can be removed
358 //in the other function calls
359 supernova(Star *s = nullptr);
360
361 virtual ~supernova();
362
363 static supernova *Instance(std::string const &name, Star *s);
364
365
366 void main(Star *s);
367
374 void initialise_remnant(Star *s, double Mass_remnant, Lookup::Remnants Remnant_type);
375
376
377 inline double get_fallback_frac() const { return fallback_frac; }
378
379 inline double get_pisncorrection() const { return pisn_correction; }
380
381 inline double get_M_neutrinos() const { return M_neutrinos; }
382
383 inline double get_Mremnant() const { return Mremnant; }
384
385 /*** Return the Mass of the remnant before the pisn and neutrino mass loss correction ***/
386 inline double get_Mremnant_preCorrection() const {
388 }
389
390 inline double get_AverageRemnant() const { return Average_remnant; }
391 inline double get_AverageEjected() const { return Average_ejected; }
392
393 inline double get_Mejected() const { return Mejected; }
394 inline double get_remnant_type() const { return remnant_type; }
395
396
401 virtual void explosion_SNI(Star *s);
402
408 virtual void explosion_SNI(Star *s, Binstar *b);
409
415 double get_preSN_Mass(size_t massid) const;
416
417
418protected:
425
426 void Register(supernova *ptr) {
427 //Register only if the name is not already in the map,
428 //this is necessary to avoid multiple registration of the same model when the constructor is called from
429 //inherited classes
430 if (GetStaticMap().find(ptr->name())==GetStaticMap().end()){
431 GetStaticMap().insert(std::make_pair(ptr->name(), ptr));
432 GetUsed().resize(GetStaticMap().size());
433 GetUsed()[GetUsed().size() - 1] = 0;
434 }
435 }
436
437
444 double Mass_corrections_after_explosion(const double mass, Star *s);
445
452 virtual double pisn(const double mass, Star *s) = 0;
453
455
463 virtual double neutrino_mass_loss(const double mass, Star *s) const;
464
471 void set_Average_for_Unified(Star* s, double default_Average_Mremnant, double default_Average_Mejected);
472
473
475
479 virtual int set_preSN_Masses(Star *s) = 0;
480
481 int _set_preSN_Masses(Star *s, bool allow_pisn);
482
483
484
485private:
489 //std::unique_ptr<Kicks> *kick;
490
491 //preSN Mass container
493
494 static std::map<std::string, supernova *> &GetStaticMap() {
495 static std::map<std::string, supernova *> _locmap;
496 return _locmap;
497 }
498
499 static std::vector<int> &GetUsed() {
500 static std::vector<int> _used;
501 return _used;
502 }
503
504 void remnant_properties(Star *s);
505
511 void set_staremnant(Star *s);
512
513
514
515};
516
517
521class PisnON : virtual public supernova{
522public:
524protected:
528 int set_preSN_Masses(Star *s) override;
529
530 double pisn(const double mass, Star *s) override;
531
532};
533
537class PisnOFF : virtual public supernova{
538public:
540protected:
544 int set_preSN_Masses(Star *s) override;
545
546 double pisn(const double mass, Star *s) override;
547
548};
549
553class NeutrinoMassLossOFF : virtual public supernova{
554public:
557protected:
558 double neutrino_mass_loss(const double mass, _UNUSED Star *s) const override {return mass;}
559};
560
564class NSfromGau : virtual public supernova {
565public:
567 void ECSN(Star *s) override;
568 double get_NS_mass(Star *s);
569
570protected:
571 std::normal_distribution<double> normal_dist{0.,1.};
572 inline double generate_random_gau(double mean, double std){
573 return normal_dist(utilities::mtrand)*std + mean;
574 }
575
583 void CCexplosion(Star *s) override;
584
585};
586
587
588
589
590
591
592#endif //SEVN_SUPERNOVA_H
Definition: binstar.h:26
Definition: kicks.h:24
Definition: supernova.h:564
NSfromGau()
Definition: supernova.h:566
void CCexplosion(Star *s) override
Definition: supernova.cpp:418
std::normal_distribution< double > normal_dist
Definition: supernova.h:571
double generate_random_gau(double mean, double std)
Definition: supernova.h:572
void ECSN(Star *s) override
Definition: supernova.cpp:409
double get_NS_mass(Star *s)
Definition: supernova.cpp:401
Definition: neutrinomassloss.h:80
Definition: supernova.h:553
NeutrinoMassLossOFF()
Definition: supernova.h:555
double neutrino_mass_loss(const double mass, _UNUSED Star *s) const override
Definition: supernova.h:558
NeutrinoMassLossOFF(_UNUSED Star *s)
Definition: supernova.h:556
Definition: pairinstability.h:129
Definition: supernova.h:537
double pisn(const double mass, Star *s) override
Definition: supernova.cpp:394
int set_preSN_Masses(Star *s) override
Definition: supernova.cpp:382
PisnOFF()
Definition: supernova.h:539
Definition: supernova.h:521
int set_preSN_Masses(Star *s) override
PISN options.
Definition: supernova.cpp:363
PisnON()
Definition: supernova.h:523
double pisn(const double mass, Star *s) override
Definition: supernova.cpp:374
Definition: star.h:39
Definition: sevnlog.h:43
Definition: supernova.h:256
const PairInstability * get_pairinstability() const
Definition: supernova.h:454
double get_Mejected() const
Definition: supernova.h:393
double Mejected
Definition: supernova.h:421
virtual ~supernova()
Definition: supernova.cpp:42
void initialise_remnant(Star *s, double Mass_remnant, Lookup::Remnants Remnant_type)
Definition: supernova.cpp:53
PairInstability * pairinstability
Definition: supernova.h:487
double get_AverageRemnant() const
Definition: supernova.h:390
void remnant_properties(Star *s)
Definition: supernova.cpp:215
virtual void explosion_SNI(Star *s)
Definition: supernova.cpp:289
double get_fallback_frac() const
Definition: supernova.h:377
Lookup::Remnants remnant_type
Definition: supernova.h:423
double pisn_correction
Definition: supernova.h:420
virtual void explosion(Star *s)=0
virtual void ECSN(Star *s)
Definition: supernova.cpp:173
Kicks * kick
Definition: supernova.h:486
static supernova * Instance(std::string const &name, Star *s)
Definition: supernova.cpp:90
void Register(supernova *ptr)
Definition: supernova.h:426
double M_neutrinos
Definition: supernova.h:419
virtual double neutrino_mass_loss(const double mass, Star *s) const
Definition: supernova.cpp:114
virtual void CCexplosion(Star *s)
Definition: supernova.cpp:182
int _set_preSN_Masses(Star *s, bool allow_pisn)
Definition: supernova.cpp:329
double get_pisncorrection() const
Definition: supernova.h:379
double Mremnant
Definition: supernova.h:421
void set_staremnant(Star *s)
Definition: supernova.cpp:192
virtual Lookup::Remnants set_remnant_type_after_explosion(Star *s, double mremnant, Lookup::SNExplosionType sntype)
Definition: supernova.cpp:260
virtual void WDformation(Star *s)
Definition: supernova.cpp:143
void set_Average_for_Unified(Star *s, double default_Average_Mremnant, double default_Average_Mejected)
Definition: supernova.cpp:303
void main(Star *s)
Definition: supernova.cpp:118
Lookup::SNExplosionType sn_type
Definition: supernova.h:424
virtual double pisn(const double mass, Star *s)=0
double Mremnant_preCorrection
Definition: supernova.h:421
double get_Mremnant() const
Definition: supernova.h:383
double get_remnant_type() const
Definition: supernova.h:394
double get_Mremnant_preCorrection() const
Definition: supernova.h:386
double get_preSN_Mass(size_t massid) const
Definition: supernova.cpp:310
static std::vector< int > & GetUsed()
Definition: supernova.h:499
utilities::MassContainer * Mass_preSN
Definition: supernova.h:492
double get_AverageEjected() const
Definition: supernova.h:391
double fallback_frac
Definition: supernova.h:419
double Mass_corrections_after_explosion(const double mass, Star *s)
Definition: supernova.cpp:353
virtual int set_preSN_Masses(Star *s)=0
double Average_ejected
Definition: supernova.h:422
double Average_remnant
Definition: supernova.h:422
double get_M_neutrinos() const
Definition: supernova.h:381
virtual std::string name() const
Definition: supernova.h:266
virtual supernova * instance(_UNUSED Star *s)=0
static std::map< std::string, supernova * > & GetStaticMap()
Definition: supernova.h:494
NeutrinoMassLoss * neutrinomassloss
Definition: supernova.h:488
SevnLogging svlog
Definition: supernova.h:474
Remnants
NOTICE, the order is important (mass ordered): WD, NS, BH.
Definition: lookup_and_phases.h:78
SNExplosionType
Definition: lookup_and_phases.h:54
@ Unknown
Definition: lookup_and_phases.h:55
std::mt19937_64 mtrand
Definition: utilities.cpp:9
Definition: utilities.h:163
#define _UNUSED
Definition: supernova.h:253