Program Listing for File YRECIO.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/StellarEvolution/YRECIO.h)
#ifndef __YRECIO_H
#define __YRECIO_H
#include "../Core/SharedLibraryExportMacros.h"
#include "StellarEvolution.h"
#include "Common.h"
#include "AstronomicalConstants.h"
#include "dirent_hacked.h"
#include "Error.h"
#include <fstream>
#include <string>
#include <cassert>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/base_object.hpp>
class LIB_LOCAL YRECHeader {
private:
double track_mass;
int age_col,
radius_col,
envelope_mass_col,
rad_conv_boundary_col,
rad_inertia_col,
conv_inertia_col,
log_luminosity_col;
public:
YRECHeader(std::ifstream &track, const std::string &filename);
double get_mass() const {return track_mass;}
int get_age_col() const {return age_col;}
int get_radius_col() const {return radius_col;}
int get_log_luminosity_col() const {return log_luminosity_col;}
int get_envelope_mass_col() const {return envelope_mass_col;}
int get_core_boundary_col() const {return rad_conv_boundary_col;}
int get_rad_inertia_col() const {return rad_inertia_col;}
int get_conv_inertia_col() const {return conv_inertia_col;}
};
class LIB_LOCAL EvolutionIterator {
public:
EvolutionIterator() {}
std::list<double>::iterator mass_iter;
std::list< std::valarray<double> >::iterator age_iter,
radius_iter,
luminosity_iter,
rad_mass_iter,
core_boundary_iter,
conv_inertia_iter,
rad_inertia_iter;
EvolutionIterator(const EvolutionIterator &orig);
EvolutionIterator &operator=(const EvolutionIterator &rhs);
EvolutionIterator &operator++();
EvolutionIterator operator++(int);
bool operator==(const EvolutionIterator &rhs);
bool operator!=(const EvolutionIterator &rhs) {return !((*this)==rhs);}
};
class LIB_PUBLIC YRECEvolution : public StellarEvolution {
private:
std::list<double> mass_list;
std::list< std::valarray<double> >
ages,
radii,
luminosities,
rad_masses,
core_boundaries,
conv_inertias,
rad_inertias;
void read_model_file(const std::string &filename);
EvolutionIterator begin();
EvolutionIterator end();
void move(EvolutionIterator &dest, EvolutionIterator &source);
void sort_masses();
public:
YRECEvolution(){};
YRECEvolution(
const std::string &model_directory,
double smooth_radius=-2.0,
double smooth_conv_inertia=0,
double smooth_rad_inertia=2.0,
double smooth_rad_mass=2.0,
double smooth_core_env_boundary=3.5,
int radius_nodes=-1000,
int conv_inertia_nodes=-1000,
int rad_inertia_nodes=-1000,
int rad_mass_nodes=-1000,
int core_env_boundary_nodes=-5000);
};
#endif