Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

SeBa_hist.h

Go to the documentation of this file.
00001 
00006 //-----------------------------------------------------------------------------
00007 //   version 1:  Sept 1998   Simon Portegies Zwart   spz@grape.c.u-tokyo.ac.jp
00008 //                                                   University of Tokyo
00009 //.............................................................................
00010 //   non-local functions: 
00011 //-----------------------------------------------------------------------------
00012 
00013 #include "stdinc.h"
00014 #include "node.h"
00015 #include "double_star.h"
00016 #include "main_sequence.h"
00017 //
00018 // SeBa_hist.h
00019 //
00020 
00021 #ifndef    _SeBa_HIST
00022 #  define  _SeBa_HIST
00023 
00024 // (SPZ+GN:  1 Aug 2000) Dangerous enum names... 
00025 // i.e., current_time = 2 but not lvalue
00026 enum binary_parameter {identity=0, bin_type, current_time,
00027                        primary_mass, primary_radius,
00028                        secondary_mass, secondary_radius,
00029                        semi_major_axis, eccentricity, mass_ratio
00030                       };
00031 
00032 /*-----------------------------------------------------------------------------
00033  * SeBa_hist  --  a linked list of SeBa histories.
00034  *-----------------------------------------------------------------------------
00035  */
00036 class SeBa_hist {
00037     protected:
00038 
00039     int  number;
00040     real time;
00041 
00042     binary_type bin_tpe;
00043     real semi;
00044     real ecc;
00045 
00046     char label_prim[255];
00047     stellar_type tpe_prim;
00048     real m_prim;
00049     real r_prim;
00050     
00051     char label_sec[255];
00052     stellar_type tpe_sec;
00053     real m_sec;
00054     real r_sec;
00055 
00056     SeBa_hist * past;
00057     SeBa_hist * future;
00058 
00059     public:
00060        SeBa_hist(SeBa_hist* s=NULL) {
00061            if (s) {
00062               past=s;
00063               past->future=this;
00064               future = NULL;
00065            }
00066            else {
00067               past=NULL;
00068               future=NULL;
00069           }
00070 
00071            number = 0;
00072            time   = 0;
00073            bin_tpe = Detached;
00074            strcpy(label_prim, "1a");
00075            strcpy(label_sec, "1b");
00076            tpe_prim = tpe_sec = Main_Sequence;
00077            m_prim=m_sec=r_prim=r_sec=0;
00078        }
00079        ~SeBa_hist(){
00080 
00081          if (future!=NULL) {
00082              SeBa_hist *tmp = future;
00083              future = NULL;
00084              delete tmp;
00085          }
00086 
00087          if (past)
00088             past->future = NULL;
00089        }
00090 
00091        SeBa_hist* get_past() {return past;}
00092        void set_past(SeBa_hist *sb) {past = sb;}
00093        SeBa_hist* get_future() {return future;}
00094        SeBa_hist* get_first() {
00095            if (past!=NULL)
00096               return past->get_first();
00097            else
00098               return this;
00099        }
00100        SeBa_hist* get_last() {
00101            if (future!=NULL)
00102               return future->get_last();
00103            else 
00104               return this;
00105        }
00106 
00107        void set_future(SeBa_hist* f) {future = f;}
00108        void set_last(SeBa_hist* f) {
00109             if(future!=NULL) 
00110               future->set_last(f);
00111             else 
00112               future=f;
00113        }
00114 
00115        real get_time()              {return time;}
00116        int get_number()             {return number;}
00117        int set_number(int n)        {number = n;}
00118 
00119        real set_stellar_radius(bool);
00120        void move_SeBa_hist_to(SeBa_hist*);
00121        bool read_SeBa_hist(istream&);
00122 
00123        void put_history(ostream&, bool);
00124        void put_single_reverse(ostream&);
00125        void put_first_formed_left(char*, real);
00126 
00127        bool binary_contains(char*, char *, binary_type);
00128        bool binary_limits(binary_parameter, real, real);
00129        real get_parameter(binary_parameter);
00130        binary_type get_binary_type() { return bin_tpe;}
00131        stellar_type get_primary_type() { return tpe_prim;}
00132        stellar_type get_secondary_type() { return tpe_sec;}
00133        char* get_label_prim() {return label_prim;}
00134        char* get_label_sec() {return label_sec;}
00135 
00136        SeBa_hist* get_SeBa_hist_at_time(real);
00137 
00138     void add_to_SeBa_hist(SeBa_hist *next_hi);
00139                                   
00140        void put_state(ostream&);
00141        friend ostream& operator<<(ostream& s, SeBa_hist&);
00142 
00143        bool operator == (SeBa_hist& ha) const;
00144        bool operator != (SeBa_hist& ha) const;
00145 
00146 //       friend SeBa_hist& operator == (SeBa_hist&);
00147 //       friend istream& operator>>(istream& s, cluster_table& table);
00148 };
00149 
00150 #define for_all_SeBa_hist(SeBa_hist, base, SeBa_hist_next)                    \
00151         for (SeBa_hist* SeBa_hist_next = base;                                \
00152              SeBa_hist_next != NULL;                            \
00153              SeBa_hist_next = SeBa_hist_next->get_future())
00154 
00155 
00156 SeBa_hist* get_history(SeBa_hist *hi, istream& is);
00157 
00158 bool scenarios_identical(SeBa_hist* hi, SeBa_hist* ha);
00159 void put_state(SeBa_hist * hi, ostream & s);
00160 
00161 #endif

Generated at Sun Feb 24 09:57:15 2002 for STARLAB by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001