From 052a65c31c742c4f4f0545491a934d200b4020a5 Mon Sep 17 00:00:00 2001 From: Jay Robson Date: Wed, 17 Jan 2024 11:21:40 +1100 Subject: [PATCH] added a proper clock, adjusted values --- src/main.cpp | 25 ++++++++++++++++++++++--- src/reactor/control/control_rod.cpp | 12 +----------- src/reactor/coolant/heater.cpp | 2 +- src/reactor/coolant/pipe.cpp | 4 ++-- src/reactor/coolant/vessel.cpp | 1 - src/reactor/fuel/fuel_rod.cpp | 18 ++++-------------- 6 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 639238e..9386505 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,14 @@ #include #include #include +#include + +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; diff --git a/src/reactor/control/control_rod.cpp b/src/reactor/control/control_rod.cpp index 5b4a27d..778ce69 100644 --- a/src/reactor/control/control_rod.cpp +++ b/src/reactor/control/control_rod.cpp @@ -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) diff --git a/src/reactor/coolant/heater.cpp b/src/reactor/coolant/heater.cpp index b840bcd..4928c9c 100644 --- a/src/reactor/coolant/heater.cpp +++ b/src/reactor/coolant/heater.cpp @@ -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) diff --git a/src/reactor/coolant/pipe.cpp b/src/reactor/coolant/pipe.cpp index 7eaa5ad..cbd2f47 100644 --- a/src/reactor/coolant/pipe.cpp +++ b/src/reactor/coolant/pipe.cpp @@ -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; } diff --git a/src/reactor/coolant/vessel.cpp b/src/reactor/coolant/vessel.cpp index 3754e63..468bf0b 100644 --- a/src/reactor/coolant/vessel.cpp +++ b/src/reactor/coolant/vessel.cpp @@ -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; } diff --git a/src/reactor/fuel/fuel_rod.cpp b/src/reactor/fuel/fuel_rod.cpp index d125660..a92cd89 100644 --- a/src/reactor/fuel/fuel_rod.cpp +++ b/src/reactor/fuel/fuel_rod.cpp @@ -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); }