made some tweaks
This commit is contained in:
parent
5c4b8954a0
commit
a30687306b
25
src/main.cpp
25
src/main.cpp
|
@ -20,21 +20,28 @@ int main()
|
||||||
|
|
||||||
sim::reactor::reactor<5, 5> reactor = sim::reactor::builder<5, 5>(
|
sim::reactor::reactor<5, 5> reactor = sim::reactor::builder<5, 5>(
|
||||||
sim::reactor::fuel::fuel_rod(100, 400),
|
sim::reactor::fuel::fuel_rod(100, 400),
|
||||||
sim::reactor::control::control_rod(1000),
|
sim::reactor::control::control_rod(1000, 0.1),
|
||||||
sim::reactor::coolant::pipe(), {
|
sim::reactor::coolant::pipe(), {
|
||||||
" P ",
|
" PPP ",
|
||||||
" FCF ",
|
"PFCFP",
|
||||||
"PCPCP",
|
"PCPCP",
|
||||||
" FCF ",
|
"PFCFP",
|
||||||
" P "
|
" PPP "
|
||||||
});
|
});
|
||||||
|
|
||||||
|
double secs = 0;
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
reactor.update(1);
|
reactor.update(0.01);
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Reactor Core: " << secs << " s\n";
|
||||||
|
|
||||||
|
secs += 0.01;
|
||||||
|
|
||||||
erase();
|
erase();
|
||||||
display::draw_text(1, 0, "Reactor Core:");
|
display::draw_text(1, 0, ss.str().c_str());
|
||||||
|
|
||||||
const int X = 3, Y = 4;
|
const int X = 3, Y = 4;
|
||||||
const int W = 32, H = 8;
|
const int W = 32, H = 8;
|
||||||
|
@ -76,10 +83,10 @@ int main()
|
||||||
reactor.move_cursor(1);
|
reactor.move_cursor(1);
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
reactor.update_selected(0.001);
|
reactor.update_selected(0.01);
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
reactor.update_selected(-0.001);
|
reactor.update_selected(-0.01);
|
||||||
break;
|
break;
|
||||||
case ' ':
|
case ' ':
|
||||||
reactor.toggle_selected();
|
reactor.toggle_selected();
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
|
||||||
#include "control_rod.hpp"
|
#include "control_rod.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
using namespace sim::reactor::control;
|
using namespace sim::reactor::control;
|
||||||
|
|
||||||
control_rod::control_rod(double limit)
|
control_rod::control_rod(double limit, double max)
|
||||||
{
|
{
|
||||||
this->limit = limit;
|
this->limit = limit;
|
||||||
|
this->max = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
void control_rod::display(std::ostream& o) const
|
void control_rod::display(std::ostream& o) const
|
||||||
|
@ -38,7 +41,7 @@ void control_rod::update(double secs)
|
||||||
{
|
{
|
||||||
update_rod();
|
update_rod();
|
||||||
|
|
||||||
double m = (1 - absorbed / limit) * inserted;
|
double m = 1 - std::pow(0.5, (1 - absorbed / limit) * inserted * max);
|
||||||
double r_fast = vals[val_t::N_FAST] * m;
|
double r_fast = vals[val_t::N_FAST] * m;
|
||||||
double r_slow = vals[val_t::N_SLOW] * m;
|
double r_slow = vals[val_t::N_SLOW] * m;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ class control_rod : public sim::reactor::rod
|
||||||
double inserted = 1;
|
double inserted = 1;
|
||||||
double absorbed = 0;
|
double absorbed = 0;
|
||||||
double limit;
|
double limit;
|
||||||
|
double max;
|
||||||
|
|
||||||
virtual double get_k(sim::reactor::rod::val_t type) const;
|
virtual double get_k(sim::reactor::rod::val_t type) const;
|
||||||
virtual void display(std::ostream& o) const;
|
virtual void display(std::ostream& o) const;
|
||||||
|
@ -20,7 +21,7 @@ class control_rod : public sim::reactor::rod
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
control_rod(double limit);
|
control_rod(double limit, double max);
|
||||||
|
|
||||||
virtual void update(double secs);
|
virtual void update(double secs);
|
||||||
void set_reactivity(double a);
|
void set_reactivity(double a);
|
||||||
|
|
|
@ -10,7 +10,7 @@ class pipe : public sim::reactor::rod
|
||||||
{
|
{
|
||||||
virtual double get_k(sim::reactor::rod::val_t type) const;
|
virtual double get_k(sim::reactor::rod::val_t type) const;
|
||||||
|
|
||||||
virtual const char* get_name() const { return "Coolant Pipe"; }
|
virtual const char* get_name() const { return "Coolant"; }
|
||||||
virtual bool should_display() const { return true; }
|
virtual bool should_display() const { return true; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -11,6 +11,7 @@ fuel_rod::fuel_rod(double fuel, double mass) : s(fuel, mass)
|
||||||
void fuel_rod::display(std::ostream& o) const
|
void fuel_rod::display(std::ostream& o) const
|
||||||
{
|
{
|
||||||
o << "Fuel: " << s.get_fuel() << " / " << s.get_mass() << "\n";
|
o << "Fuel: " << s.get_fuel() << " / " << s.get_mass() << "\n";
|
||||||
|
o << "Efficiency: " << s.get_efficiency() << "\n";
|
||||||
o << "Energy: " << s.get_energy() << "\n";
|
o << "Energy: " << s.get_energy() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
using namespace sim::reactor::fuel;
|
using namespace sim::reactor::fuel;
|
||||||
|
|
||||||
static const double Xe_135_M = 1e4;
|
|
||||||
static const double NEUTRON_BG = 1e-10;
|
static const double NEUTRON_BG = 1e-10;
|
||||||
|
|
||||||
sample::sample(double fuel, double mass)
|
sample::sample(double fuel, double mass)
|
||||||
|
@ -45,14 +44,28 @@ void sample::update(double secs)
|
||||||
slow_neutrons = 0;
|
slow_neutrons = 0;
|
||||||
|
|
||||||
// deal with these edge cases
|
// deal with these edge cases
|
||||||
if(neutrons_fuel > fuel) neutrons_fuel = fuel;
|
|
||||||
if(neutrons_xenon > xe_135) neutrons_xenon = xe_135;
|
if(neutrons_fuel > fuel)
|
||||||
if(neutrons_iodine > i_135) neutrons_iodine = i_135;
|
{
|
||||||
|
slow_neutrons += neutrons_fuel - fuel;
|
||||||
|
neutrons_fuel = fuel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(neutrons_xenon > xe_135)
|
||||||
|
{
|
||||||
|
slow_neutrons += neutrons_xenon - xe_135;
|
||||||
|
neutrons_xenon = xe_135;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(neutrons_iodine > i_135)
|
||||||
|
{
|
||||||
|
slow_neutrons += neutrons_iodine - i_135;
|
||||||
|
neutrons_iodine = i_135;
|
||||||
|
}
|
||||||
|
|
||||||
// sim::reactor::fuelulate fuel use
|
// sim::reactor::fuelulate fuel use
|
||||||
fuel -= neutrons_fuel;
|
fuel -= neutrons_fuel;
|
||||||
energy += neutrons_fuel;
|
energy += neutrons_fuel;
|
||||||
fast_neutrons += neutrons_fuel * 3;
|
|
||||||
waste.add_fissile(neutrons_fuel * 2);
|
waste.add_fissile(neutrons_fuel * 2);
|
||||||
|
|
||||||
// do the poison
|
// do the poison
|
||||||
|
@ -61,11 +74,6 @@ void sample::update(double secs)
|
||||||
i_135 -= neutrons_iodine;
|
i_135 -= neutrons_iodine;
|
||||||
}
|
}
|
||||||
|
|
||||||
double sample::get_volume() const
|
|
||||||
{
|
|
||||||
return mass + xe_135 * Xe_135_M;
|
|
||||||
}
|
|
||||||
|
|
||||||
double sample::extract_energy()
|
double sample::extract_energy()
|
||||||
{
|
{
|
||||||
double v = energy;
|
double v = energy;
|
||||||
|
|
|
@ -10,6 +10,8 @@ namespace sim::reactor::fuel
|
||||||
|
|
||||||
class sample
|
class sample
|
||||||
{
|
{
|
||||||
|
constexpr static const double Xe_135_M = 1e3;
|
||||||
|
|
||||||
sim::reactor::fuel::waste waste;
|
sim::reactor::fuel::waste waste;
|
||||||
|
|
||||||
double fuel = 0;
|
double fuel = 0;
|
||||||
|
@ -36,8 +38,8 @@ public:
|
||||||
constexpr double get_fuel() const { return fuel; }
|
constexpr double get_fuel() const { return fuel; }
|
||||||
constexpr double get_mass() const { return mass; }
|
constexpr double get_mass() const { return mass; }
|
||||||
constexpr double get_energy() const { return energy; }
|
constexpr double get_energy() const { return energy; }
|
||||||
|
constexpr double get_volume() const { return mass + xe_135 * Xe_135_M; }
|
||||||
double get_volume() const;
|
constexpr double get_efficiency() const { return fuel / get_volume(); }
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& o, const sample& s)
|
friend std::ostream& operator<<(std::ostream& o, const sample& s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,10 +4,13 @@
|
||||||
|
|
||||||
using namespace sim::reactor::fuel;
|
using namespace sim::reactor::fuel;
|
||||||
|
|
||||||
|
static const double SLOWDOWN_M = 1.0 / 4.0;
|
||||||
|
|
||||||
void waste::update(double secs)
|
void waste::update(double secs)
|
||||||
{
|
{
|
||||||
double hl = 1;
|
double hl = 1;
|
||||||
double next[waste::N - 1] = {0};
|
double next_h[waste::N - 1] = {0};
|
||||||
|
double next_l[waste::N - 1] = {0};
|
||||||
|
|
||||||
for(int i = 0; i < waste::N - 1; i++)
|
for(int i = 0; i < waste::N - 1; i++)
|
||||||
{
|
{
|
||||||
|
@ -15,7 +18,8 @@ void waste::update(double secs)
|
||||||
double h = high[i] * m;
|
double h = high[i] * m;
|
||||||
double l = low[i] * m;
|
double l = low[i] * m;
|
||||||
|
|
||||||
next[i] += h + l;
|
next_h[i] += h * (1 - SLOWDOWN_M);
|
||||||
|
next_l[i] += l + h * SLOWDOWN_M;
|
||||||
high[i] -= h;
|
high[i] -= h;
|
||||||
low[i] -= l;
|
low[i] -= l;
|
||||||
|
|
||||||
|
@ -26,7 +30,8 @@ void waste::update(double secs)
|
||||||
|
|
||||||
for(int i = 0; i < waste::N - 1; i++)
|
for(int i = 0; i < waste::N - 1; i++)
|
||||||
{
|
{
|
||||||
low[i + 1] += next[i];
|
high[i + 1] += next_h[i];
|
||||||
|
low[i + 1] += next_l[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public:
|
||||||
|
|
||||||
o << r.get_name() << "\n";
|
o << r.get_name() << "\n";
|
||||||
r.display(o);
|
r.display(o);
|
||||||
o << "Heat: " << r.get(val_t::HEAT) << "\n";
|
// o << "Heat: " << r.get(val_t::HEAT) << "\n";
|
||||||
o << "Fast: " << r.get(val_t::N_FAST) << "\n";
|
o << "Fast: " << r.get(val_t::N_FAST) << "\n";
|
||||||
o << "Slow: " << r.get(val_t::N_SLOW) << "\n";
|
o << "Slow: " << r.get(val_t::N_SLOW) << "\n";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue