added a proper clock, adjusted values
This commit is contained in:
parent
69b97b23dd
commit
052a65c31c
25
src/main.cpp
25
src/main.cpp
|
@ -12,6 +12,14 @@
|
|||
#include <sstream>
|
||||
#include <unistd.h>
|
||||
#include <curses.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
unsigned long get_now()
|
||||
{
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, nullptr);
|
||||
return (unsigned long)tv.tv_sec * 1000000 + tv.tv_usec;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
|
@ -24,7 +32,7 @@ int main()
|
|||
|
||||
sim::reactor::coolant::vessel vessel(200, 400, sim::coolant::WATER);
|
||||
sim::reactor::reactor<5, 5> reactor = sim::reactor::builder<5, 5>(
|
||||
sim::reactor::fuel::fuel_rod(1000, 4000),
|
||||
sim::reactor::fuel::fuel_rod(2000, 4000),
|
||||
sim::reactor::control::control_rod(10000, 1),
|
||||
sim::reactor::coolant::pipe(vessel), {
|
||||
"# #",
|
||||
|
@ -35,6 +43,7 @@ int main()
|
|||
});
|
||||
|
||||
double secs = 0;
|
||||
long clock = get_now();
|
||||
|
||||
for(;;)
|
||||
{
|
||||
|
@ -65,9 +74,9 @@ int main()
|
|||
ss << s << "s\n\n";
|
||||
}
|
||||
|
||||
reactor.update(1);
|
||||
reactor.update(0.01);
|
||||
vessel.update();
|
||||
secs += 1;
|
||||
secs += 0.01;
|
||||
|
||||
ss << "Vessel\n" << vessel << "\n";
|
||||
|
||||
|
@ -129,6 +138,16 @@ int main()
|
|||
reactor.toggle_selected();
|
||||
break;
|
||||
}
|
||||
|
||||
long now = get_now();
|
||||
|
||||
while(clock + 10000 > now)
|
||||
{
|
||||
usleep(clock + 10000 - now);
|
||||
now = get_now();
|
||||
}
|
||||
|
||||
clock += 10000;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -19,17 +19,7 @@ void control_rod::display(std::ostream& o) const
|
|||
|
||||
double control_rod::get_k(val_t type) const
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case val_t::HEAT:
|
||||
return 1.0 / 16.0;
|
||||
case val_t::N_SLOW:
|
||||
return 1.0 / 4.0;
|
||||
case val_t::N_FAST:
|
||||
return 1.0 / 2.0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0.5;
|
||||
}
|
||||
|
||||
void control_rod::set_reactivity(double a)
|
||||
|
|
|
@ -7,7 +7,7 @@ void heater::update(double secs)
|
|||
{
|
||||
update_rod(secs);
|
||||
|
||||
vals[val_t::HEAT] += rate * secs;
|
||||
vals_in[val_t::HEAT] += rate * secs;
|
||||
}
|
||||
|
||||
void heater::update_selected(double a)
|
||||
|
|
|
@ -25,7 +25,7 @@ void pipe::update(double secs)
|
|||
vals[val_t::HEAT] = v;
|
||||
|
||||
v = vals[val_t::N_FAST];
|
||||
vals[val_t::N_FAST] -= v;
|
||||
vals[val_t::N_SLOW] += v;
|
||||
vals_in[val_t::N_FAST] -= v;
|
||||
vals_in[val_t::N_SLOW] += v;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,6 @@ std::ostream& operator<<(std::ostream& o, const vessel& v)
|
|||
o << "Steam: " << v.get_steam() << " g\n";
|
||||
o << "Heat: " << v.get_heat() << " C\n";
|
||||
o << "Pressure: " << v.get_pressure() << " Pa\n";
|
||||
o << "Vapor Pressure: " << v.fluid.vapor_pressure.calc_p(v.get_heat()) << " Pa\n";
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
@ -17,17 +17,7 @@ void fuel_rod::display(std::ostream& o) const
|
|||
|
||||
double fuel_rod::get_k(val_t type) const
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case val_t::HEAT:
|
||||
return 1.0 / 16.0;
|
||||
case val_t::N_SLOW:
|
||||
return 1.0 / 4.0;
|
||||
case val_t::N_FAST:
|
||||
return 1.0 / 2.0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0.5;
|
||||
}
|
||||
|
||||
void fuel_rod::update(double secs)
|
||||
|
@ -36,9 +26,9 @@ void fuel_rod::update(double secs)
|
|||
|
||||
s.add_slow_neutrons(vals[val_t::N_SLOW]);
|
||||
|
||||
vals[val_t::HEAT] += s.extract_energy();
|
||||
vals[val_t::N_FAST] += s.extract_fast_neutrons();
|
||||
vals[val_t::N_SLOW] = 0;
|
||||
vals_in[val_t::HEAT] += s.extract_energy();
|
||||
vals_in[val_t::N_FAST] += s.extract_fast_neutrons();
|
||||
vals_in[val_t::N_SLOW] -= vals[val_t::N_SLOW];
|
||||
|
||||
s.update(secs);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue