fast-nuclear-sim/src/main.cpp

60 lines
1.1 KiB
C++
Raw Normal View History

2024-01-13 15:21:17 +11:00
2024-01-14 17:07:45 +11:00
#include "reactor/reactor.hpp"
#include "reactor/control/control_rod.hpp"
#include "reactor/fuel/fuel_rod.hpp"
#include "reactor/coolant/pipe.hpp"
2024-01-14 16:57:13 +11:00
#include "display.hpp"
2024-01-13 15:21:17 +11:00
2024-01-13 21:54:21 +11:00
#include <sstream>
2024-01-13 15:21:17 +11:00
#include <unistd.h>
2024-01-13 21:54:21 +11:00
#include <curses.h>
2024-01-13 15:21:17 +11:00
int main()
{
2024-01-13 21:54:21 +11:00
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
nodelay(stdscr, TRUE);
curs_set(0);
2024-01-14 17:07:45 +11:00
sim::reactor::reactor<2, 2> reactor({
new sim::reactor::fuel::fuel_rod(100, 400), new sim::reactor::fuel::fuel_rod(100, 400),
new sim::reactor::control::control_rod(1000), new sim::reactor::coolant::pipe()
2024-01-14 16:57:13 +11:00
});
2024-01-14 17:07:45 +11:00
((sim::reactor::control::control_rod*)reactor.rods[0][1])->set_reactivity(0.99);
2024-01-13 15:21:17 +11:00
for(;;)
{
2024-01-13 17:33:53 +11:00
for(int i = 0; i < 1e3; i++)
2024-01-13 15:21:17 +11:00
{
2024-01-13 17:33:53 +11:00
reactor.update(1e-3);
2024-01-13 15:21:17 +11:00
}
2024-01-13 21:54:21 +11:00
erase();
2024-01-14 16:57:13 +11:00
display::draw_text(1, 0, "Reactor Core:");
2024-01-13 21:54:21 +11:00
const int X = 3, Y = 4;
const int W = 32, H = 8;
2024-01-14 16:57:13 +11:00
for(int x = 0; x < reactor.width; x++)
for(int y = 0; y < reactor.height; y++)
2024-01-13 21:54:21 +11:00
{
std::stringstream ss;
2024-01-14 16:57:13 +11:00
ss << *reactor.rods[x][y];
2024-01-13 21:54:21 +11:00
int px = X + (H - 1) * y;
int py = Y + (W - 1) * x;
2024-01-14 16:57:13 +11:00
display::draw_text(px + 1, py + 2, ss.str().c_str());
display::draw_box(px, py, H, W);
2024-01-13 21:54:21 +11:00
}
refresh();
2024-01-13 15:21:17 +11:00
}
return 0;
}