Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

makeheavystar.C

Go to the documentation of this file.
00001 
00008 
00009 // Kimberly Engle, November 1997
00010 
00011 #include "node.h"
00012 
00013 #ifdef TOOLBOX
00014 
00015 // double_mass: Double the mass of a star to approximate a binary.
00016 //                Only the mass is modified at this stage.
00017 
00018 local void double_mass(node* original, real mass_ratio)
00019 {
00020     // Set new masses.
00021 
00022     original->set_mass(mass_ratio*original->get_mass());
00023     //    putiq(original->get_log_story(), "mass_doubled", 1);
00024 }
00025 
00026 local void mkheavystar(node* b, real fraction_doubled, real lower_limit,
00027                        real mass_ratio)
00028 {
00029  
00030     real sum = 0;
00031     b->set_mass(0);
00032 
00033     PRI(6); putrq(b->get_log_story(),
00034                   "fraction_of_masses_doubled", fraction_doubled);
00035 
00036     for_all_daughters(node, b, bi) {
00037         sum += fraction_doubled;
00038         if (sum >= 1) {
00039             sum -= 1;
00040 
00041             double_mass(bi, mass_ratio);
00042             putrq(bi->get_log_story(), "mass_doubled", 1);
00043         }
00044         else putiq(bi->get_log_story(), "mass_doubled", 0);
00045 
00046         b->inc_mass(bi->get_mass());
00047     }
00048 }
00049 
00050 void main(int argc, char ** argv)
00051 {
00052     real fraction_doubled = 0.1;
00053     real lower_limit = 1;
00054     int random_seed = 0;
00055     real mass_ratio = 2;
00056     //    char seedlog[64];
00057 
00058     check_help();
00059 
00060     extern char *poptarg;
00061     int c;
00062     char* param_string = "f:l:q:s:";
00063 
00064     while ((c = pgetopt(argc, argv, param_string)) != -1)
00065         switch(c) {
00066 
00067             case 'f': fraction_doubled = atof(poptarg);
00068                       break;
00069             case 'l': lower_limit = atof(poptarg);
00070                       break;
00071             case 'q': mass_ratio = atof(poptarg);
00072                       break;
00073             case 's': random_seed = atoi(poptarg);
00074                       break;
00075             case '?': params_to_usage(cerr, argv[0], param_string);
00076                       get_help();
00077                       exit(1);
00078         }
00079 
00080     if (fraction_doubled < 0 || fraction_doubled > 1)
00081         err_exit("mkheavystar: Illegal doubling fraction");
00082     //    if (lower_limit <= 0 || lower_limit > 1)
00083     //  err_exit("mkheavystar: Illegal mass ratio limit");
00084 
00085     node* b;
00086     b = get_node(cin);
00087 
00088     b->log_history(argc, argv);
00089 
00090     //    int actual_seed = srandinter(random_seed);
00091 
00092     //    sprintf(seedlog,
00093     //            "       random number generator seed = %d",actual_seed);
00094     //    b->log_comment(seedlog);
00095 
00096     mkheavystar(b, fraction_doubled, lower_limit, mass_ratio);
00097 
00098     put_node(cout, *b);
00099 
00100 }
00101 #endif

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