added graphite control rod, added speed control
This commit is contained in:
parent
f9b48f37a3
commit
8f687a5ff8
32
src/main.cpp
32
src/main.cpp
|
@ -44,15 +44,11 @@ int main()
|
||||||
|
|
||||||
double secs = 0;
|
double secs = 0;
|
||||||
long clock = get_now();
|
long clock = get_now();
|
||||||
double speed = 10000;
|
double speed = 1;
|
||||||
int framerate = 100;
|
int framerate = 100;
|
||||||
int extra = 100;
|
|
||||||
|
|
||||||
speed /= extra;
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "Reactor Core\n\n";
|
ss << "Reactor Core\n\n";
|
||||||
|
|
||||||
|
@ -79,16 +75,26 @@ years: ss << years << "y ";
|
||||||
days: ss << days << "d ";
|
days: ss << days << "d ";
|
||||||
hours: ss << hours << "h ";
|
hours: ss << hours << "h ";
|
||||||
mins: ss << mins << "m ";
|
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);
|
skip *= 2;
|
||||||
vessel.update();
|
|
||||||
secs += speed / framerate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < skip; i++)
|
||||||
|
{
|
||||||
|
reactor.update(speed / framerate / skip);
|
||||||
|
vessel.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
secs += speed / framerate;
|
||||||
|
|
||||||
ss << "Vessel\n" << vessel << "\n";
|
ss << "Vessel\n" << vessel << "\n";
|
||||||
|
|
||||||
erase();
|
erase();
|
||||||
|
@ -148,6 +154,12 @@ secs: ss << s << "s\n\n";
|
||||||
case ' ':
|
case ' ':
|
||||||
reactor.toggle_selected();
|
reactor.toggle_selected();
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
speed *= 10;
|
||||||
|
break;
|
||||||
|
case 'g':
|
||||||
|
speed /= 10;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
long now = get_now();
|
long now = get_now();
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "rod.hpp"
|
#include "rod.hpp"
|
||||||
#include "fuel/fuel_rod.hpp"
|
#include "fuel/fuel_rod.hpp"
|
||||||
#include "control/control_rod.hpp"
|
#include "control/control_rod.hpp"
|
||||||
|
#include "control/graphite_rod.hpp"
|
||||||
#include "coolant/pipe.hpp"
|
#include "coolant/pipe.hpp"
|
||||||
#include "coolant/heater.hpp"
|
#include "coolant/heater.hpp"
|
||||||
#include "reactor.hpp"
|
#include "reactor.hpp"
|
||||||
|
@ -30,6 +31,9 @@ reactor<W, H> builder(fuel::fuel_rod fr, control::control_rod cr, coolant::pipe
|
||||||
case 'C':
|
case 'C':
|
||||||
r = new control::control_rod(cr);
|
r = new control::control_rod(cr);
|
||||||
break;
|
break;
|
||||||
|
case 'G':
|
||||||
|
r = new control::graphite_rod();
|
||||||
|
break;
|
||||||
case 'H':
|
case 'H':
|
||||||
r = new coolant::heater();
|
r = new coolant::heater();
|
||||||
break;
|
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 << "Level: " << v.get_level() << " L\n";
|
||||||
o << "Steam: " << v.get_steam() << " g\n";
|
o << "Steam: " << v.get_steam() << " g\n";
|
||||||
o << "Heat: " << v.get_heat() << " C\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;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ class vessel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
const double volume; //litres
|
const double volume; // litres
|
||||||
const sim::coolant::fluid_t fluid;
|
const sim::coolant::fluid_t fluid;
|
||||||
|
|
||||||
vessel(double level, double volume, sim::coolant::fluid_t fluid);
|
vessel(double level, double volume, sim::coolant::fluid_t fluid);
|
||||||
|
|
Loading…
Reference in New Issue