simulatorBuilder.add(SimulatorStateData(globalState.get(), &observablesHistory, &enerd, &ekind));
simulatorBuilder.add(MembedHolder(membed));
simulatorBuilder.add(std::move(stopHandlerBuilder_));
+ simulatorBuilder.add(SimulatorConfig(mdrunOptions, startingBehavior, &runScheduleWork));
+
// build and run simulator object based on user-input
auto simulator = simulatorBuilder.build(
useModularSimulator, fplog, cr, ms, mdlog, static_cast<int>(filenames.size()),
- filenames.data(), oenv, mdrunOptions, startingBehavior, vsite.get(), constr.get(),
+ filenames.data(), oenv, vsite.get(), constr.get(),
enforcedRotation ? enforcedRotation->getLegacyEnfrot() : nullptr, deform.get(),
- mdModules_->outputProvider(), mdModules_->notifier(), inputrec, imdSession.get(),
- pull_work, swap, &mtop, mdAtoms.get(), &nrnb, wcycle, fr, &runScheduleWork,
- replExParams, walltime_accounting, doRerun);
+ mdModules_->outputProvider(), mdModules_->notifier(), inputrec, imdSession.get(), pull_work,
+ swap, &mtop, mdAtoms.get(), &nrnb, wcycle, fr, replExParams, walltime_accounting);
simulator->run();
if (fr->pmePpCommGpu)
#include <memory>
+#include "gromacs/mdtypes/mdrunoptions.h"
#include "gromacs/mdtypes/state.h"
#include "gromacs/modularsimulator/modularsimulator.h"
#include "gromacs/topology/topology.h"
int nfile,
const t_filenm* fnm,
const gmx_output_env_t* oenv,
- const MdrunOptions& mdrunOptions,
- StartingBehavior startingBehavior,
VirtualSitesHandler* vsite,
Constraints* constr,
gmx_enfrot* enforcedRotation,
t_nrnb* nrnb,
gmx_wallcycle* wcycle,
t_forcerec* fr,
- MdrunScheduleWorkload* runScheduleWork,
const ReplicaExchangeParameters& replExParams,
- gmx_walltime_accounting* walltime_accounting,
- bool doRerun)
+ gmx_walltime_accounting* walltime_accounting)
{
if (!stopHandlerBuilder_)
{
{
throw APIError("Simulator State Data has not been added to the builder");
}
+ if (!simulatorConfig_)
+ {
+ throw APIError("Simulator config should be set before building the simulator");
+ }
if (useModularSimulator)
{
// NOLINTNEXTLINE(modernize-make-unique): make_unique does not work with private constructor
return std::unique_ptr<ModularSimulator>(new ModularSimulator(
- fplog, cr, ms, mdlog, nfile, fnm, oenv, mdrunOptions, startingBehavior, vsite,
- constr, enforcedRotation, deform, outputProvider, mdModulesNotifier, inputrec,
- imdSession, pull_work, swap, top_global, simulatorStateData_->globalState_p,
- simulatorStateData_->observablesHistory_p, mdAtoms, nrnb, wcycle, fr,
- simulatorStateData_->enerdata_p, simulatorStateData_->ekindata_p, runScheduleWork,
- replExParams, membedHolder_->membed(), walltime_accounting,
- std::move(stopHandlerBuilder_), doRerun));
+ fplog, cr, ms, mdlog, nfile, fnm, oenv, simulatorConfig_->mdrunOptions_,
+ simulatorConfig_->startingBehavior_, vsite, constr, enforcedRotation, deform,
+ outputProvider, mdModulesNotifier, inputrec, imdSession, pull_work, swap, top_global,
+ simulatorStateData_->globalState_p, simulatorStateData_->observablesHistory_p, mdAtoms,
+ nrnb, wcycle, fr, simulatorStateData_->enerdata_p, simulatorStateData_->ekindata_p,
+ simulatorConfig_->runScheduleWork_, replExParams, membedHolder_->membed(), walltime_accounting,
+ std::move(stopHandlerBuilder_), simulatorConfig_->mdrunOptions_.rerun));
}
// NOLINTNEXTLINE(modernize-make-unique): make_unique does not work with private constructor
return std::unique_ptr<LegacySimulator>(new LegacySimulator(
- fplog, cr, ms, mdlog, nfile, fnm, oenv, mdrunOptions, startingBehavior, vsite, constr,
- enforcedRotation, deform, outputProvider, mdModulesNotifier, inputrec, imdSession,
- pull_work, swap, top_global, simulatorStateData_->globalState_p,
- simulatorStateData_->observablesHistory_p, mdAtoms, nrnb, wcycle, fr,
- simulatorStateData_->enerdata_p, simulatorStateData_->ekindata_p, runScheduleWork, replExParams,
- membedHolder_->membed(), walltime_accounting, std::move(stopHandlerBuilder_), doRerun));
+ fplog, cr, ms, mdlog, nfile, fnm, oenv, simulatorConfig_->mdrunOptions_,
+ simulatorConfig_->startingBehavior_, vsite, constr, enforcedRotation, deform,
+ outputProvider, mdModulesNotifier, inputrec, imdSession, pull_work, swap, top_global,
+ simulatorStateData_->globalState_p, simulatorStateData_->observablesHistory_p, mdAtoms,
+ nrnb, wcycle, fr, simulatorStateData_->enerdata_p, simulatorStateData_->ekindata_p,
+ simulatorConfig_->runScheduleWork_, replExParams, membedHolder_->membed(), walltime_accounting,
+ std::move(stopHandlerBuilder_), simulatorConfig_->mdrunOptions_.rerun));
}
-
} // namespace gmx
class StopHandlerBuilder;
struct MdrunOptions;
+struct SimulatorConfig
+{
+public:
+ SimulatorConfig(const MdrunOptions& mdrunOptions,
+ StartingBehavior startingBehavior,
+ MdrunScheduleWorkload* runScheduleWork) :
+ mdrunOptions_(mdrunOptions),
+ startingBehavior_(startingBehavior),
+ runScheduleWork_(runScheduleWork)
+ {
+ }
+ // TODO: Specify copy and move semantics.
+
+ const MdrunOptions& mdrunOptions_;
+ StartingBehavior startingBehavior_;
+ MdrunScheduleWorkload* runScheduleWork_;
+};
+
/*! \brief Membed SimulatorBuilder parameter type.
*
* Does not (yet) encapsulate ownership semantics of resources. Simulator is
simulatorStateData_ = std::make_unique<SimulatorStateData>(simulatorStateData);
}
+ void add(SimulatorConfig&& simulatorConfig)
+ {
+ // Note: SimulatorConfig appears to the compiler to be trivially copyable,
+ // but this may not be safe and may change in the future.
+ simulatorConfig_ = std::make_unique<SimulatorConfig>(simulatorConfig);
+ }
/*! \brief Build a Simulator object based on input data
*
* Return a pointer to a simulation object. The use of a parameter
int nfile,
const t_filenm* fnm,
const gmx_output_env_t* oenv,
- const MdrunOptions& mdrunOptions,
- StartingBehavior startingBehavior,
VirtualSitesHandler* vsite,
Constraints* constr,
gmx_enfrot* enforcedRotation,
t_nrnb* nrnb,
gmx_wallcycle* wcycle,
t_forcerec* fr,
- MdrunScheduleWorkload* runScheduleWork,
const ReplicaExchangeParameters& replExParams,
- gmx_walltime_accounting* walltime_accounting,
- bool doRerun);
+ gmx_walltime_accounting* walltime_accounting);
private:
+ std::unique_ptr<SimulatorConfig> simulatorConfig_;
std::unique_ptr<MembedHolder> membedHolder_;
std::unique_ptr<StopHandlerBuilder> stopHandlerBuilder_;
std::unique_ptr<SimulatorStateData> simulatorStateData_;