added graphite control rod, added speed control
This commit is contained in:
parent
d01de129e0
commit
7e641d244e
32
src/main.cpp
32
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();
|
||||
|
|
|
@ -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<W, H> 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;
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
#include "graphite_rod.hpp"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue