Gromacs
2025-dev-20241002-88a4191
|
#include <cstdint>
#include <cstdio>
#include <functional>
#include <memory>
#include <vector>
#include "gromacs/compat/pointers.h"
#include "gromacs/mdlib/sighandler.h"
#include "gromacs/mdlib/simulationsignal.h"
#include "gromacs/utility/basedefinitions.h"
#include "gromacs/utility/real.h"
Declares StopHandler, a helper class and two stop conditions.
These classes encapsulate the setting and handling of stop signals.
StopHandler lives during the lifetime of do_md. It checks via registered stop conditions whether the simulation should be stopped at the next possible step or at the next possible neighbor-searching step. It communicates this via signal to all ranks and communicates this to do_md via stoppingAfterCurrentStep().
StopHandlerBuilder is owned by the runner, and allows to register stop conditions at a higher level, outside of do_md. Within do_md, it is creating a StopHandler object by binding local data and passing a reference to the stop conditions.
Here, we are implementing two stop conditions: StopConditionTime sets a stop condition based on the elapsed time (only relevant if the -maxh flag was set), while StopConditionSignal sets stop conditions via signals received from the operating systems (SIGINT / SIGTERM).
The stop conditions are stored as function pointers created by a lambda expression. They bind to required local data, in the case of StopConditionTime and StopConditionSignal these are partially owned by do_md. This requires these function pointers to be deleted at the end of do_md(). This is achieved by having the do_md() specific function pointers owned by StopHandler, which in turn is owned (via unique_ptr) by do_md().
Classes | |
class | gmx::StopHandler |
Class handling the stop signal. More... | |
class | gmx::StopConditionSignal |
Class setting the stop signal based on gmx_get_stop_condition() More... | |
class | gmx::StopConditionTime |
Class setting the stop signal based on maximal run time. More... | |
class | gmx::StopHandlerBuilder |
Class preparing the creation of a StopHandler. More... | |
Enumerations | |
enum | gmx::StopSignal : int { noSignal = 0, stopAtNextNSStep = 1, stopImmediately = -1 } |
Stop signals. More... | |
Functions | |
static StopSignal | gmx::convertToStopSignal (signed char sig) |
Convert signed char (as used by SimulationSignal) to StopSignal enum. More... | |