Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

star.h

00001 /*
00002  *    star.h: base class for base class ::star
00003  *
00004  *.....................................................................
00005  *    version 1:  Jan 1994   Simon F. Portegies Zwart
00006  *    version 2:
00007  *...................................................................
00008  *     This file includes:
00009  *  1) definition of class base_element
00010  *
00011  *....................................................................
00012  */
00013 
00014 #ifndef  _STAR
00015 #  define  _STAR
00016 
00017 #include  "starbase.h"
00018 #include  "node.h"
00019 
00020 #include "stdinc.h"
00021 //#include "constants.h"
00022 #include "cluster_support.h"
00023 
00024 class single_star;
00025 
00026 /*-----------------------------------------------------------------------------
00027  *  star  --  a base class for all element evolution.
00028  *-----------------------------------------------------------------------------
00029  */
00030 class  star : public starbase
00031     {
00032 
00033     public:
00034    
00035         star(node* n);
00036         star(star& st);
00037 
00038         virtual ~star() {}
00039 
00040         virtual  istream& scan_star_story(istream&);
00041         virtual  ostream& print_star_story(ostream&,
00042                                            int short_output = 0);
00043 
00044         bool  is_binary();
00045         bool  is_binary_component();
00046         bool  is_star_in_binary();
00047         star* get_binary();
00048         star* get_companion();
00049         star* get_companion(star*);
00050         star* get_primary();
00051         star* get_secondary();
00052         star* get_initial_primary();
00053         star* get_initial_secondary();
00054 
00055         real  get_m_conv_star_to_dyn()      {return m_conv_star_to_dyn;}
00056         real  get_r_conv_star_to_dyn()      {return r_conv_star_to_dyn;}
00057         real  get_t_conv_star_to_dyn()      {return t_conv_star_to_dyn;}
00058 
00059         void  set_m_conv_star_to_dyn(const real mf)
00060             {m_conv_star_to_dyn = mf;}
00061         void  set_r_conv_star_to_dyn(const real rf)
00062             {r_conv_star_to_dyn = rf;}
00063         void  set_t_conv_star_to_dyn(const real tf)
00064             {t_conv_star_to_dyn = tf;}
00065 
00066 
00067         virtual void  evolve_element(const real) {}
00068         virtual void instantaneous_element() {}
00069 
00070         virtual int no_of_elements() {return 0;}
00071         virtual int   get_identity(){return 0;}
00072         virtual stellar_type get_element_type(){return NAS;}
00073         virtual binary_type get_bin_type(){return Unknown_Binary_Type;}
00074         virtual void  set_identity(const int){}
00075 
00076         virtual real  get_current_time(){return 0;}
00077         virtual real  get_relative_age(){return 0;}
00078         virtual real  get_previous_current_time(){return 0;}
00079         virtual real  get_previous_total_mass(){return 0;} //ss.h and s.h
00080         virtual void  set_relative_age(const real){}
00081         virtual void  set_current_time(const real){}
00082 
00083         virtual star_type_spec get_spec_type(star_type_spec) {return NAC;}
00084         virtual void set_spec_type(star_type_spec, bool on = true) {}
00085         virtual void set_first_contact(bool) {}
00086 
00087         virtual real  get_total_mass(){return 0;}
00088         virtual real  get_envelope_mass(){return 0;}
00089         virtual real  get_radius(){return 0;}
00090         virtual real  get_effective_radius(){return 0;}
00091         virtual real  get_luminosity(){return 0;}
00092         virtual void  set_luminosity(real){}
00093         virtual real  get_magnetic_field(){return 0;}
00094         virtual void  set_magnetic_field(real){}
00095         virtual real  get_rotation_period(){return 0;}
00096         virtual void  set_rotation_period(real){}
00097 
00098         virtual mass_transfer_type get_current_mass_transfer_type() {
00099           return Unknown;} 
00100         
00101         virtual void  set_velocity(const real){}
00102         virtual void  set_anomal_velocity(const vec){}
00103         virtual void  set_effective_radius(const real){}
00104 
00105         virtual void  set_previous_radius(const real){}
00106         virtual void  set_rotational_velocity(const real) {} 
00107 
00108         virtual real  get_evolve_timestep(){return 0;}
00109 
00110         virtual void  initialize(int, real, real, real, real){}
00111         virtual void  initialize(double_init&, const int){}
00112 
00113         virtual void  clean(){}
00114 
00115         virtual bool  remnant(){return false;}
00116         virtual bool  magnetic(){return false;}
00117         virtual bool  hydrogen_envelope_star() {return true;}
00118         virtual bool  giant_star()             {return false;}
00119         
00120 
00121         virtual void refresh_memory(){}
00122         virtual void recall_memory(){}
00123 
00124         virtual void put_element(){}
00125         virtual void read_element(){}
00126  
00127         virtual real sudden_mass_loss() {return 0;}
00128 
00129         virtual void adjust_binary_after_wind_loss(star *, 
00130                                 const real, const real) {}
00131         virtual real get_semi(){return 0;}
00132         virtual real get_eccentricity(){return 0;}
00133         virtual void set_semi(real){}
00134         virtual void set_eccentricity(real){}
00135         virtual real get_donor_timescale(){return 0;}
00136         virtual void calculate_velocities(){}
00137         virtual real get_period() {return 0;}
00138         virtual void set_bin_type(binary_type){}
00139         virtual void post_sn_companion_velocity(star*, const real){}
00140 
00141 //              star virtual functions
00142         virtual real get_relative_mass(){return 0;}
00143         virtual real get_core_mass(){return 0;}
00144         virtual real get_COcore_mass(){return 0;}
00145         virtual real get_previous_radius(){return 0;}
00146         virtual real get_core_radius(){return 0;}
00147         virtual void set_core_mass(const real){}
00148         virtual void set_COcore_mass(const real){}
00149         virtual void set_envelope_mass(const real){}
00150         virtual void set_relative_mass(const real){}
00151         virtual real zeta(star*, star*){return 0;}
00152         virtual real zeta_adiabatic(){return 0;}
00153         virtual real zeta_thermal(){return 0;}
00154         virtual real angular_momentum() {return 0;}
00155         virtual void stellar_wind(const real){}
00156         virtual void update_wind_constant(){}
00157 
00158         virtual real wind_velocity(){return 0;}
00159         virtual real get_velocity(){return 0;}
00160         virtual vec get_anomal_velocity(){return 0;}
00161         virtual void set_star_id(const int){}
00162         
00163         virtual bool low_mass_star() {return false;}
00164         virtual bool medium_mass_star() {return false;}
00165         virtual bool high_mass_star() {return false;}
00166 
00167 
00168 //              Virtual definitions for class star
00169         virtual real  nucleair_evolution_timescale(){return 0;}
00170         virtual real  nucleair_evolution_time(){return 0;}
00171         virtual real  nucleair_evolution_time(const real) {
00172                       return 0;}
00173         virtual real  kelvin_helmholds_timescale(){return 0;}
00174         virtual real  dynamic_timescale(){return 0;}
00175         virtual real  main_sequence_time(){return 0;}
00176         virtual real  hertzsprung_gap_time(const real){return 0;}
00177         virtual real  helium_giant_time(const real){return 0;}
00178         virtual real  base_giant_branch_time(const real){return 0;}
00179         virtual real  base_giant_time(const real){return 0;}
00180         virtual real  helium_time(){return 0;}
00181         virtual void  post_constructor() {}
00182         
00183 
00184 //              Luminosities
00185         virtual real  base_main_sequence_luminosity(){return 0;}
00186         virtual real  base_giant_branch_luminosity(){return 0;}
00187         virtual real  giant_luminosity(){return 0;}
00188         virtual real  base_agb_luminosity(const real){return 0;}
00189         virtual real  agb_luminosity(){return 0;}
00190         virtual real  helium_giant_luminosity(){return 0;}
00191         virtual real  maximum_luminosity(){return 0;}
00192 
00193 //              Appearence.
00194         virtual real stellar_radius(const real, const real){return 0;}
00195         virtual void update() {}
00196         virtual real bolometric_correction() {return 0;}
00197         virtual real temperature() {return 1;}
00198         virtual real magnitude() {return 0;}
00199         
00200 //              binary evolution.
00201         virtual real mdot_according_to_roche_radius_change(
00202                         star*,star*) {return 0;}
00203         virtual real mass_transfer_timescale(mass_transfer_type&)
00204                                              {return 0;}
00205         virtual real accretion_limit(const real, const real) {return 0;}
00206         virtual star* reduce_mass(const real) {return NULL;}
00207         virtual star* subtrac_mass_from_donor(const real, real&){return NULL;}
00208 
00209         virtual void add_mass_to_core(const real) {} 
00210 
00211         virtual real add_mass_to_accretor(real, const real) {return 0;}
00212         virtual real add_mass_to_accretor(const real) {return 0;}
00213         virtual void adjust_accretor_age(const real,
00214                                          const bool rejuvenate=true){}
00215         virtual void adjust_next_update_age(){}
00216         virtual real roche_radius(star*){return 0;}
00217         virtual void spiral_in(star*, star*) {}
00218 
00219 //              Spiral in and common envelope.
00220         virtual star* merge_elements(star*){return 0;}
00221         virtual void merge_elements(star*, star*){}
00222         virtual real accrete_from_stellar_wind(const real, const real) 
00223                      {return 0;}
00224 
00225 //              Energy
00226         virtual real potential_energy() {return 0;}
00227         virtual real kinetic_energy() {return 0;}
00228         virtual real total_energy() {return 0;}
00229         virtual real tf2_energy_diss(const real) {return 0;}
00230         virtual real tf3_energy_diss(const real) {return 0;}
00231 
00232 //              output
00233         virtual void dump(ostream &, bool brief = true){}
00234         virtual void dump(char*, bool brief = true){}
00235         virtual void print_status(){}
00236         virtual void print_roche(){}
00237         virtual void put_state(){}
00238         virtual void put_hrd(ostream&){}
00239     
00240 //              Tripel evolution
00241         virtual void adjust_triple_after_wind_loss(star *,
00242                                        const real, const real) {}
00243 
00244 //              STARLAB routines.
00245         virtual real get_total_mass(node *) {return 0;}
00246         virtual void set_total_mass(node *, const real) {}
00247 
00248         //IO functions for starlab
00249         virtual void first_roche_lobe_contact_story(stellar_type) {}
00250 
00251         // Pure virtual functions
00252         virtual void detect_spectral_features()=0;
00253         virtual void evolve_core_mass(const real dt)=0;
00254         virtual real gyration_radius_sq()=0;
00255         
00256     };
00257 
00258 // Shorthand for conversion from node pointer to hydro pointer:
00259 
00260 #define N_S_PTR ((star *)n->get_starbase())
00261 
00262 // note: automatic conversion from star to dyn scaling
00263 
00264 inline  real get_m_conv_star_to_dyn(node * n)
00265     {return N_S_PTR->get_m_conv_star_to_dyn();}
00266 inline  real get_r_conv_star_to_dyn(node * n)
00267     {return N_S_PTR->get_r_conv_star_to_dyn();}
00268 inline  real get_t_conv_star_to_dyn(node * n)
00269     {return N_S_PTR->get_t_conv_star_to_dyn();}
00270 
00271 // note: automatic conversion from dyn to hydro scaling
00272 
00273 #endif          // _STAR

Generated on Wed Jul 20 12:43:36 2005 for Starlab by  doxygen 1.4.3