Skip to content

Commit

Permalink
Make a lot of stuff mutable
Browse files Browse the repository at this point in the history
  • Loading branch information
hombit committed Nov 22, 2024
1 parent 49aa716 commit dfeb8f3
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 50 deletions.
60 changes: 30 additions & 30 deletions cpp/include/freddi_state.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,11 +267,11 @@ class FreddiState {
protected:
std::shared_ptr<const DiskStructure> str_;
CurrentState current_;
DiskOptionalStructure opt_str_;
mutable DiskOptionalStructure opt_str_;
std::unique_ptr<BasicWind> wind_;
std::shared_ptr<BasicFreddiIrradiationSource> disk_irr_source_;
RocheLobe star_roche_lobe_;
IrradiatedStar star_;
mutable IrradiatedStar star_;
public:
FreddiState(const FreddiArguments& args, const wunc_t& wunc);
explicit FreddiState(const FreddiState&);
Expand Down Expand Up @@ -362,19 +362,19 @@ class FreddiState {
template <DiskIntegrationRegion Region> double integrate(const vecd& x, const std::function<double (size_t)>& func) const {
return trapz(x, func, region_first<Region>(), region_last<Region>());
}
template <DiskIntegrationRegion Region> double lazy_integrate(boost::optional<double>& x, const vecd& values) {
template <DiskIntegrationRegion Region> double lazy_integrate(boost::optional<double>& x, const vecd& values) const {
if (!x) {
x = integrate<Region>(values);
}
return *x;
}
template<DiskIntegrationRegion Region> double lazy_integrate(boost::optional<double> &opt, const vecd& x, const std::function<double (size_t)>& values) {
template<DiskIntegrationRegion Region> double lazy_integrate(boost::optional<double> &opt, const vecd& x, const std::function<double (size_t)>& values) const {
if (!opt) {
opt = integrate<Region>(x, values);
}
return *opt;
}
template <DiskIntegrationRegion Region> double I_lambda(double lambda) {
template <DiskIntegrationRegion Region> double I_lambda(double lambda) const {
const vecd* T;
if constexpr(Region == HotRegion) {
T = &Tph();
Expand All @@ -385,27 +385,27 @@ class FreddiState {
}
return integrate<Region>([T, lambda](const size_t i) -> double { return Spectrum::Planck_lambda((*T)[i], lambda); });
}
double lazy_magnitude(boost::optional<double>& m, double lambda, double F0);
virtual const vecd& Qx();
double lazy_magnitude(boost::optional<double>& m, double lambda, double F0) const;
virtual const vecd& Qx() const;
public:
double Lx();
double Fx();
const vecd& W();
const vecd& Sigma();
const vecd& Tph();
const vecd& Tph_vis();
const vecd& Tph_X();
const vecd& Tirr();
const vecd& Kirr();
const vecd& Height();
double Lx() const;
double Fx() const;
const vecd& W() const;
const vecd& Sigma() const;
const vecd& Tph() const;
const vecd& Tph_vis() const;
const vecd& Tph_X() const;
const vecd& Tirr() const;
const vecd& Kirr() const;
const vecd& Height() const;
double Luminosity(const vecd& T, double nu1, double nu2) const;
inline double magnitude(const double lambda, const double F0) {
inline double magnitude(const double lambda, const double F0) const {
return -2.5 * std::log10(I_lambda<HotRegion>(lambda) * cosiOverD2() / F0);
}
template <DiskIntegrationRegion Region> double flux_region(double lambda) {
template <DiskIntegrationRegion Region> double flux_region(double lambda) const {
return I_lambda<Region>(lambda) * m::pow<2>(lambda) / GSL_CONST_CGSM_SPEED_OF_LIGHT * cosiOverD2();
}
template <DiskIntegrationRegion Region> double flux_region(const EnergyPassband& passband) {
template <DiskIntegrationRegion Region> double flux_region(const EnergyPassband& passband) const {
const double intens = trapz(
passband.lambdas,
[this, &passband](const size_t i) -> double {
Expand All @@ -415,18 +415,18 @@ class FreddiState {
passband.data.size() - 1);
return intens * cosiOverD2() / passband.t_dnu;
}
inline double flux(const double lambda) { return flux_region<HotRegion>(lambda); }
inline double flux(const EnergyPassband& passband) { return flux_region<HotRegion>(passband); }
double flux_star(double lambda, double phase);
double flux_star(const EnergyPassband& passband, double phase);
inline double flux_star(double lambda) { return flux_star(lambda, phase_opt()); }
inline double flux_star(const EnergyPassband& passband) { return flux_star(passband, phase_opt()); }
inline double Mdisk() { return lazy_integrate<HotRegion>(opt_str_.Mdisk, Sigma()); }
double Mdot_wind();
inline double flux(const double lambda) const { return flux_region<HotRegion>(lambda); }
inline double flux(const EnergyPassband& passband) const { return flux_region<HotRegion>(passband); }
double flux_star(double lambda, double phase) const;
double flux_star(const EnergyPassband& passband, double phase) const;
inline double flux_star(double lambda) const { return flux_star(lambda, phase_opt()); }
inline double flux_star(const EnergyPassband& passband) const { return flux_star(passband, phase_opt()); }
inline double Mdisk() const { return lazy_integrate<HotRegion>(opt_str_.Mdisk, Sigma()); }
double Mdot_wind() const;
double Sigma_minus(double r) const;
double Sigma_plus(double r) const;
double R_cooling_front(double r);
double v_cooling_front(double r);
double R_cooling_front(double r) const;
double v_cooling_front(double r) const;
};

#endif //FREDDI_FREDDI_STATE_HPP
4 changes: 2 additions & 2 deletions cpp/include/ns/ns_evolution.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ class FreddiNeutronStarEvolution: public FreddiEvolution {
double Fx_ns();
// angular_dist_ns_
public:
inline double angular_dist_ns(const double mu) { return ns_irr_source_->angular_dist(mu); }
inline double angular_dist_ns(const double mu) const { return ns_irr_source_->angular_dist(mu); }
// fp_
public:
inline double fp(double radius) const { return (*fp_)(*this, radius); }
Expand All @@ -227,7 +227,7 @@ class FreddiNeutronStarEvolution: public FreddiEvolution {
public:
FreddiNeutronStarEvolution(const FreddiNeutronStarArguments& args);
explicit FreddiNeutronStarEvolution(const FreddiNeutronStarEvolution&) = default;
virtual const vecd& Qx() override;
virtual const vecd& Qx() const override;
virtual double Lbol_disk() const override;
public:
using iterator = EvolutionIterator<FreddiNeutronStarEvolution>;
Expand Down
34 changes: 17 additions & 17 deletions cpp/src/freddi_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,20 +168,20 @@ double FreddiState::phase_opt() const {
}


double FreddiState::Lx() {
double FreddiState::Lx() const {
if (!opt_str_.Lx) {
opt_str_.Lx = Luminosity(Tph_X(), args().flux->emin, args().flux->emax) / m::pow<4>(args().flux->colourfactor);
}
return *opt_str_.Lx;
}


double FreddiState::Fx() {
double FreddiState::Fx() const {
return Lx() * angular_dist_disk(cosi()) / (FOUR_M_PI * m::pow<2>(distance()));
}


const vecd& FreddiState::W() {
const vecd& FreddiState::W() const {
if (!opt_str_.W) {
auto x = wunc()(h(), F(), first(), last());
x.resize(Nx(), 0.0);
Expand All @@ -191,7 +191,7 @@ const vecd& FreddiState::W() {
}


const vecd& FreddiState::Sigma() {
const vecd& FreddiState::Sigma() const {
if (!opt_str_.Sigma) {
vecd x(Nx());
const vecd& WW = W();
Expand All @@ -204,7 +204,7 @@ const vecd& FreddiState::Sigma() {
}


const vecd& FreddiState::Tph() {
const vecd& FreddiState::Tph() const {
if (!opt_str_.Tph) {
vecd x(Nx());
const vecd& Tvis = Tph_vis();
Expand All @@ -218,7 +218,7 @@ const vecd& FreddiState::Tph() {
}


const vecd& FreddiState::Tirr() {
const vecd& FreddiState::Tirr() const {
if (!opt_str_.Tirr) {
vecd x(Nx());
const vecd& QxQx = Qx();
Expand All @@ -231,7 +231,7 @@ const vecd& FreddiState::Tirr() {
}


const vecd& FreddiState::Qx() {
const vecd& FreddiState::Qx() const {
if (!opt_str_.Qx) {
vecd x(Nx());
const vecd& K = Kirr();
Expand All @@ -246,7 +246,7 @@ const vecd& FreddiState::Qx() {
}


const vecd& FreddiState::Kirr() {
const vecd& FreddiState::Kirr() const {
if(!opt_str_.Kirr) {
vecd x(Nx());
const vecd& H = Height();
Expand All @@ -262,7 +262,7 @@ const vecd& FreddiState::Kirr() {
}


const vecd& FreddiState::Height() {
const vecd& FreddiState::Height() const {
if (!opt_str_.Height) {
vecd x(Nx());
for (size_t i = first(); i <= last(); i++) {
Expand All @@ -277,7 +277,7 @@ const vecd& FreddiState::Height() {
}


const vecd& FreddiState::Tph_vis() {
const vecd& FreddiState::Tph_vis() const {
if (!opt_str_.Tph_vis) {
vecd x(Nx(), 0.0);
for (size_t i = first(); i <= last(); i++) {
Expand All @@ -289,7 +289,7 @@ const vecd& FreddiState::Tph_vis() {
return *opt_str_.Tph_vis;
}

const vecd& FreddiState::Tph_X() {
const vecd& FreddiState::Tph_X() const {
if (!opt_str_.Tph_X) {
vecd x(Nx(), 0.0);
const double Mdot = std::fabs((F()[first()+1] - F()[first()]) / (h()[first()+1] - h()[first()]));
Expand Down Expand Up @@ -328,7 +328,7 @@ const vecd& FreddiState::Tph_X() {
*/


double FreddiState::lazy_magnitude(boost::optional<double>& m, double lambda, double F0) {
double FreddiState::lazy_magnitude(boost::optional<double>& m, double lambda, double F0) const {
if (!m) {
m = magnitude(lambda, F0);
}
Expand All @@ -352,16 +352,16 @@ IrradiatedStar::sources_t FreddiState::star_irr_sources() {
}


double FreddiState::flux_star(const double lambda, const double phase) {
double FreddiState::flux_star(const double lambda, const double phase) const {
return star_.luminosity({inclination(), phase}, lambda) / (FOUR_M_PI * m::pow<2>(distance()));
}

double FreddiState::flux_star(const EnergyPassband& passband, const double phase) {
double FreddiState::flux_star(const EnergyPassband& passband, const double phase) const {
return star_.luminosity({inclination(), phase}, passband) / (FOUR_M_PI * m::pow<2>(distance()));
}


double FreddiState::Mdot_wind() {
double FreddiState::Mdot_wind() const {
auto dMdot_dh = [this](const size_t i) -> double {
double dFdh;
if (i == first()) {
Expand Down Expand Up @@ -701,7 +701,7 @@ double FreddiState::Sigma_plus(double r) const {
* std::pow(args().basic->Mx / GSL_CONST_CGSM_SOLAR_MASS, -0.37);
}

double FreddiState::v_cooling_front(double r) {
double FreddiState::v_cooling_front(double r) const {
// The cooling-front velocity depends on the ratio between the current Sigma and critical Sigmas
// Ludwig et al., A&A 290, 473-486 (1994), section 3
// units: cm/s
Expand All @@ -714,7 +714,7 @@ double FreddiState::v_cooling_front(double r) {
* std::pow(args().basic->Mx / GSL_CONST_CGSM_SOLAR_MASS, -0.012);
}

double FreddiState::R_cooling_front(double r) {
double FreddiState::R_cooling_front(double r) const {
// previous location of Rhot moves with the cooling-front velocity:
return R()[last()] - v_cooling_front(r) * args().calc->tau;
//return R()[last()] - v_cooling_front(R()[last()]) * args().calc->tau ;
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/ns/ns_evolution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ vecd FreddiNeutronStarEvolution::windC() const {
}


const vecd& FreddiNeutronStarEvolution::Qx() {
const vecd& FreddiNeutronStarEvolution::Qx() const {
if (!opt_str_.Qx) {
vecd x(Nx());
const vecd& K = Kirr();
Expand Down

0 comments on commit dfeb8f3

Please sign in to comment.