fast-nuclear-sim/src/reactor/rod.cpp

49 lines
814 B
C++
Raw Normal View History

2024-01-14 16:57:13 +11:00
#include "rod.hpp"
2024-01-15 12:45:22 +11:00
#include <cmath>
2024-01-14 17:07:45 +11:00
using namespace sim::reactor;
2024-01-14 16:57:13 +11:00
double rod::get(val_t type) const
{
return vals[type];
}
void rod::add(val_t type, double v)
{
vals_in[type] += v;
}
2024-01-15 16:30:54 +11:00
double rod::extract(val_t type, double s, double k, double o)
2024-01-14 16:57:13 +11:00
{
2024-01-15 16:30:54 +11:00
double v = (1 - std::pow(0.5, s * -std::log2(1 - k * get_k(type)))) * 0.5 * (get(type) - o);
2024-01-14 16:57:13 +11:00
vals_in[type] -= v;
return v;
}
2024-01-14 17:50:43 +11:00
void rod::interact(rod* o, double secs)
2024-01-14 16:57:13 +11:00
{
for(int i = 0; i < rod::VAL_N; i++)
{
val_t v = (val_t)i;
2024-01-15 16:30:54 +11:00
add(v, o->extract(v, secs, get_k(v), get(v)));
2024-01-14 16:57:13 +11:00
}
}
2024-01-15 16:30:54 +11:00
void rod::update_rod(double secs)
2024-01-14 16:57:13 +11:00
{
for(int i = 0; i < rod::VAL_N; i++)
{
val_t v = (val_t)i;
vals[v] += vals_in[v];
vals_in[v] = 0;
}
2024-01-15 16:30:54 +11:00
// decay the free neutrons
double m = std::pow(0.5, secs / 879.4);
vals[val_t::N_FAST] *= m;
vals[val_t::N_SLOW] *= m;
2024-01-14 16:57:13 +11:00
}