00001
00002
00003
00004
00005
00006
00007
00008
00009
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
00022 #include "cluster_support.h"
00023
00024 class single_star;
00025
00026
00027
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;}
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
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
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
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
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
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
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
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
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
00241 virtual void adjust_triple_after_wind_loss(star *,
00242 const real, const real) {}
00243
00244
00245 virtual real get_total_mass(node *) {return 0;}
00246 virtual void set_total_mass(node *, const real) {}
00247
00248
00249 virtual void first_roche_lobe_contact_story(stellar_type) {}
00250
00251
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
00259
00260 #define N_S_PTR ((star *)n->get_starbase())
00261
00262
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
00272
00273 #endif // _STAR