6#include "../Global/fmodule.h"
7#include "../Global/CheckedIO.h"
8#include "../Global/SimulationContext.h"
9#include "../Global/RestartTrim.h"
21 long long* b_rstrec,
long long* b_rnewp,
22 long long* b_wrplid); }
64 r5pars_.carg2len =
static_cast<int>(path.size());
70 char* buf_ptr =
nullptr;
78 static const bool trim = [] {
79 const char* t = std::getenv(
"ADS_MEMBUF_TRIM");
80 return t && *t ==
'1';
87 if (
const char* t = std::getenv(
"ADS_MEMBUF_TRACE"); t && *t ==
'1') {
88 int sz = 0, dumps = 0;
long long r = 0, n = 0, w = 0;
90 std::cout <<
"[MEMBUF] capture " << buf_sz / 1048576.0 <<
" MB"
92 <<
" rstrec=" << r / 1048576.0 <<
" MB"
93 <<
" rnewp=" << n / 1048576.0 <<
" MB"
94 <<
" wrplid=" << w / 1048576.0 <<
" MB"
95 <<
" (per dump " << (dumps ? r / 1048576.0 / dumps : 0.0) <<
" MB)"
98 if (buf_sz > 0 && buf_ptr)
99 return std::vector<char>(buf_ptr, buf_ptr + buf_sz);
104 if (data.empty())
return;
124 std::cerr <<
"FATAL: restart buffer has no complete restart record and no "
125 <<
"cached base is available — restoring it would abend in RELAP."
130 if (spliced.empty()) {
131 std::cerr <<
"FATAL: could not splice the restart base onto a buffer."
142 ads_membuf_set_(
const_cast<char*
>(data.data()),
static_cast<int>(data.size()));
bool read_file_verified(const std::string &path, std::vector< char > &out)
Read an entire binary file into out, verifying the byte count.
static SolverCallback * s_active_callback
void ads_membuf_get_trimmed_(char **ptr, int *size)
void ads_set_cache_mode_(int *mode)
void ads_membuf_get_(char **ptr, int *sz)
SolverCallback * getActiveSolverCallback()
Get the currently active SolverCallback (set during runSequence). Used by extern "C" trampoline funct...
void ads_membuf_set_(char *ptr, int sz)
void ads_membuf_stats_(int *sz, int *dumps, long long *b_rstrec, long long *b_rnewp, long long *b_wrplid)
ThermalHydraulicSolver * getActiveSolver()
Get the currently active ThermalHydraulicSolver (set during runSequence). Returns nullptr when no seq...
static ThermalHydraulicSolver * s_active_solver
void ads_set_membuf_mode_(int mode)
RELAP5 implementation of ThermalHydraulicSolver.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
std::vector< char > base_cache_
void setNewRestart(bool v) override
Sets r5pars_.cnewrst.
std::vector< char > checkpoint() override
Copy the Fortran in-memory restart buffer.
void restore(const std::vector< char > &data) override
Load data into the Fortran in-memory restart buffer.
void setMembufMode(int mode) override
Forwards to ads_set_membuf_mode_()
void setThermoCacheMode(int mode) override
Forwards to ads_set_cache_mode_()
void runSequence(SolverCallback &cb) override
Run one RELAP5 sequence: registers cb and this solver as the active pair, calls relap5_() (blocking),...
void setTerminateAll(bool v) override
Sets r5pars_.terminateall.
bool isTerminateAll() const override
r5pars_.terminateall
double currentTime() const override
r5pars_.timesno [s]
void setInputDeck(const std::string &path) override
Copy path into r5pars_.carg2 (truncated to the array size minus one) and set r5pars_....
int stopFlag() const override
r5pars_.csnostop
void setBranchCount(int n) override
Sets r5pars_.cnbranch.
void setGenNode(bool v) override
Sets r5pars_.cgennode.
std::string getProjectDirectory()
Callback interface that the engine implements to receive notifications from the solver.
Abstract interface for thermal-hydraulic solvers.
int size
Total number of MPI processes.
std::vector< char > splice_base(const std::vector< char > &hdr_base, const std::vector< char > &body)
Put the cached base back in front of a base-less transfer.
std::vector< char > extract_header_and_base(const std::vector< char > &buf)
[header][complete base], the run-wide constant that is cached per rank and published as <project>/res...
bool has_complete_restart(const std::vector< char > &buf)
Does this buffer contain a complete restart dump (the base)?
Scheduler SScheduler
Simulation scheduling, parses CLI options.