diff --git a/src/main.cpp b/src/main.cpp index 74e6664..5542917 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,15 +44,11 @@ int main() double secs = 0; long clock = get_now(); - double speed = 10000; + double speed = 1; int framerate = 100; - int extra = 100; - - speed /= extra; for(;;) { - std::stringstream ss; ss << "Reactor Core\n\n"; @@ -79,15 +75,25 @@ years: ss << years << "y "; days: ss << days << "d "; hours: ss << hours << "h "; mins: ss << mins << "m "; -secs: ss << s << "s\n\n"; +secs: ss << s << "s\n"; + + ss << "Speed: " << speed << "x\n\n"; } - for(int i = 0; i < extra; i++) + int skip = 1; + + while(speed / framerate / skip > 1) { - reactor.update(speed / framerate); - vessel.update(); - secs += speed / framerate; + skip *= 2; } + + for(int i = 0; i < skip; i++) + { + reactor.update(speed / framerate / skip); + vessel.update(); + } + + secs += speed / framerate; ss << "Vessel\n" << vessel << "\n"; @@ -148,6 +154,12 @@ secs: ss << s << "s\n\n"; case ' ': reactor.toggle_selected(); break; + case 't': + speed *= 10; + break; + case 'g': + speed /= 10; + break; } long now = get_now(); diff --git a/src/reactor/builder.hpp b/src/reactor/builder.hpp index cc2f858..16f2c84 100644 --- a/src/reactor/builder.hpp +++ b/src/reactor/builder.hpp @@ -4,6 +4,7 @@ #include "rod.hpp" #include "fuel/fuel_rod.hpp" #include "control/control_rod.hpp" +#include "control/graphite_rod.hpp" #include "coolant/pipe.hpp" #include "coolant/heater.hpp" #include "reactor.hpp" @@ -30,6 +31,9 @@ reactor builder(fuel::fuel_rod fr, control::control_rod cr, coolant::pipe case 'C': r = new control::control_rod(cr); break; + case 'G': + r = new control::graphite_rod(); + break; case 'H': r = new coolant::heater(); break; diff --git a/src/reactor/control/graphite_rod.cpp b/src/reactor/control/graphite_rod.cpp new file mode 100644 index 0000000..129889a --- /dev/null +++ b/src/reactor/control/graphite_rod.cpp @@ -0,0 +1,41 @@ + +#include "graphite_rod.hpp" + +#include + +using namespace sim::reactor::control; + +void graphite_rod::display(std::ostream& o) const +{ + o << "Inserted: " << (inserted * 100) << "%\n"; +}; + +double graphite_rod::get_k(val_t type) const +{ + if(type == val_t::HEAT) return 0.5; + + return inserted * 0.5; +} + +void graphite_rod::set_reactivity(double a) +{ + inserted = a; +} + +void graphite_rod::update(double secs) +{ + update_rod(secs); + + double v = vals[val_t::N_FAST]; + vals_in[val_t::N_FAST] -= v; + vals_in[val_t::N_SLOW] += v; +} + +void graphite_rod::update_selected(double a) +{ + inserted += a; + + if(inserted > 1) inserted = 1; + if(inserted < 0) inserted = 0; +} + diff --git a/src/reactor/control/graphite_rod.hpp b/src/reactor/control/graphite_rod.hpp new file mode 100644 index 0000000..a0583ef --- /dev/null +++ b/src/reactor/control/graphite_rod.hpp @@ -0,0 +1,29 @@ + +#pragma once + +#include "../rod.hpp" + +namespace sim::reactor::control +{ + +class graphite_rod : public sim::reactor::rod +{ + double inserted = 0; + + virtual double get_k(sim::reactor::rod::val_t type) const; + virtual void display(std::ostream& o) const; + + virtual const char* get_name() const { return "Graphite Rod"; } + +public: + + virtual void update(double secs); + void set_reactivity(double a); + + virtual bool should_display() const { return true; } + virtual bool should_select() const { return true; } + virtual void update_selected(double a); +}; + +} + diff --git a/src/reactor/coolant/vessel.cpp b/src/reactor/coolant/vessel.cpp index a2d9a4d..1521ac5 100644 --- a/src/reactor/coolant/vessel.cpp +++ b/src/reactor/coolant/vessel.cpp @@ -55,7 +55,7 @@ std::ostream& operator<<(std::ostream& o, const vessel& v) o << "Level: " << v.get_level() << " L\n"; o << "Steam: " << v.get_steam() << " g\n"; o << "Heat: " << v.get_heat() << " C\n"; - o << "Pressure: " << v.get_pressure() << " Pa\n"; + o << "Pressure: " << (v.get_pressure() * 0.001) << " kPa\n"; return o; } diff --git a/src/reactor/coolant/vessel.hpp b/src/reactor/coolant/vessel.hpp index 43d0206..25a4bec 100644 --- a/src/reactor/coolant/vessel.hpp +++ b/src/reactor/coolant/vessel.hpp @@ -16,7 +16,7 @@ class vessel public: - const double volume; //litres + const double volume; // litres const sim::coolant::fluid_t fluid; vessel(double level, double volume, sim::coolant::fluid_t fluid);