00001 /* 00002 * star_cluster.h: derived class for element evolution systems. 00003 * functions as derived class for the real elements. 00004 *............................................................................. 00005 * version 1: Jan 1994 Simon F. Portegies Zwart 00006 * version 2: 00007 *............................................................................. 00008 * This file includes: 00009 * 1) definition of class star_cluster 00010 * 00011 *............................................................................. 00012 */ 00013 #ifndef _STAR_CLUSTER 00014 # define _STAR_CLUSTER 00015 00016 #include "stdinc.h" 00017 #include "base_element.h" 00018 #include "cluster_support.h" 00019 #include "star.h" 00020 #include "double_star.h" 00021 #include "single_star.h" 00022 #include "scatter3_support.h" 00023 00024 #include "node.h" 00025 //#include "main_sequence.h" 00026 #include "double_support.h" 00027 00028 /*----------------------------------------------------------------------------- 00029 * star_cluster -- class for evolving cluster of stars and double_stars 00030 *----------------------------------------------------------------------------- 00031 */ 00032 class star_cluster 00033 { 00034 protected: 00035 00036 base_element * cluster; 00037 base_element * halo; 00038 00039 bool field; 00040 00041 real cluster_age; 00042 real dead_time; 00043 00044 real core_radius; 00045 real halfm_radius; 00046 real tidal_radius; 00047 00048 real core_density; // n/pc^3 00049 00050 real total_mass; 00051 real v_disp; 00052 00053 int n_singles; 00054 int n_doubles; 00055 int nh_singles; 00056 int nh_doubles; 00057 00058 int n_single_esc; 00059 int n_double_esc; 00060 int n_multiple_esc; 00061 00062 int n_scatter; 00063 int n_collision; 00064 int n_capture; 00065 00066 initial_cluster init; 00067 00068 public: 00069 00070 star_cluster(initial_cluster&); 00071 00072 base_element* get_cluster() {return cluster;} 00073 base_element* get_halo() {return halo;} 00074 bool get_field() {return field;} 00075 real get_cluster_age() {return cluster_age;} 00076 void set_cluster_age(real t) {cluster_age=t;} 00077 real get_core_density() {return core_density;} 00078 real get_core_radius() {return core_radius;} 00079 real get_halfm_radius() {return halfm_radius;} 00080 real get_tidal_radius() {return tidal_radius;} 00081 real get_core_volume() {return (4./3.)*PI*pow(core_radius, 3);} 00082 int no_of_elements() {return n_singles+n_doubles;} 00083 real get_velocity_dispersion() {return v_disp;} 00084 /* 00085 void inc_n_singles() {n_singles++;} 00086 void inc_n_doubles() {n_doubles++;} 00087 void dec_n_singles() {n_singles--;} 00088 void dec_n_doubles() {n_doubles--;} 00089 */ 00090 void inc_n_scatter() {n_scatter++;} 00091 void inc_n_capture() {n_capture++;} 00092 void inc_n_collision() {n_collision++;} 00093 int get_n_singles() {return n_singles;} 00094 int get_n_doubles() {return n_doubles;} 00095 int get_n_single_esc() {return n_single_esc;} 00096 int get_n_double_esc() {return n_double_esc;} 00097 00098 real get_dead_time() {return dead_time;} 00099 void inc_dead_time(real dt) {dead_time += dt;} 00100 void reset_dead_time() {dead_time = 0;} 00101 00102 void set_initial_cluster(initial_cluster& initial) {init=initial;} 00103 void setup_star_cluster(); 00104 void calculate_equilibrium_velocities(); 00105 real escape_velocity(); 00106 void randomize_maxwellian_velocities(); 00107 real random_maxwellian_velocity(const real); 00108 void freeze(); 00109 real velocity_dispersion(); 00110 //real get_total_energy(); 00111 //real get_potential_energy(); 00112 //real get_kinetic_energy(); 00113 real get_total_mass(); 00114 real obtain_total_mass(); 00115 real get_scatter_cross_section(base_element*); 00116 void count_number_of_elements(); 00117 void update_cluster_parameters(); 00118 // Escaper handling 00119 void delete_escaper_from_cluster(base_element*); 00120 void add_new_particle_to_cluster(int); 00121 void remove_escapers(); 00122 double_init& halo_guest(); 00123 00124 void evolve_element(real); 00125 void put_cluster() { 00126 //cluster->put_star(cout, cluster); 00127 00128 } 00129 void print_roche(); 00130 void put_state(); 00131 void put_hrd(ostream &); 00132 void dump(ostream &); //char*); 00133 void dump(char*); //char*); 00134 void test_maxwellian_velocities(); 00135 00136 // Profiler 00137 void make_profile(); 00138 00139 00140 }; 00141 00142 #define put_element put_node 00143 00144 #endif // _STAR_CLUSTER