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