GMX_ASSERT(stopHandlerBuilder_, "Runner must provide StopHandlerBuilder to simulator.");
SimulatorBuilder simulatorBuilder;
+ simulatorBuilder.add(SimulatorStateData(globalState.get(), &observablesHistory, &enerd, &ekind));
simulatorBuilder.add(MembedHolder(membed));
simulatorBuilder.add(std::move(stopHandlerBuilder_));
useModularSimulator, fplog, cr, ms, mdlog, static_cast<int>(filenames.size()),
filenames.data(), oenv, mdrunOptions, startingBehavior, vsite.get(), constr.get(),
enforcedRotation ? enforcedRotation->getLegacyEnfrot() : nullptr, deform.get(),
- mdModules_->outputProvider(), mdModules_->notifier(), inputrec, imdSession.get(), pull_work,
- swap, &mtop, globalState.get(), &observablesHistory, mdAtoms.get(), &nrnb, wcycle,
- fr, &enerd, &ekind, &runScheduleWork, replExParams, walltime_accounting, doRerun);
+ mdModules_->outputProvider(), mdModules_->notifier(), inputrec, imdSession.get(),
+ pull_work, swap, &mtop, mdAtoms.get(), &nrnb, wcycle, fr, &runScheduleWork,
+ replExParams, walltime_accounting, doRerun);
simulator->run();
if (fr->pmePpCommGpu)
pull_t* pull_work,
t_swap* swap,
gmx_mtop_t* top_global,
- t_state* state_global,
- ObservablesHistory* observablesHistory,
MDAtoms* mdAtoms,
t_nrnb* nrnb,
gmx_wallcycle* wcycle,
t_forcerec* fr,
- gmx_enerdata_t* enerd,
- gmx_ekindata_t* ekind,
MdrunScheduleWorkload* runScheduleWork,
const ReplicaExchangeParameters& replExParams,
gmx_walltime_accounting* walltime_accounting,
{
throw APIError("You must add a MembedHolder before calling build().");
}
+ if (!simulatorStateData_)
+ {
+ throw APIError("Simulator State Data has not been added to the builder");
+ }
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, state_global, observablesHistory, mdAtoms, nrnb,
- wcycle, fr, enerd, ekind, runScheduleWork, replExParams, membedHolder_->membed(),
- walltime_accounting, std::move(stopHandlerBuilder_), doRerun));
+ 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));
}
// 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, state_global, observablesHistory, mdAtoms, nrnb, wcycle,
- fr, enerd, ekind, runScheduleWork, replExParams, membedHolder_->membed(),
- walltime_accounting, std::move(stopHandlerBuilder_), doRerun));
+ 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));
}
+
} // namespace gmx
#include <memory>
#include "gromacs/mdlib/vsite.h"
+#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/mdmodulenotification.h"
class energyhistory_t;
gmx_membed_t* membed_;
};
+// TODO: Reconsider the name.
+struct SimulatorStateData
+{
+ t_state* globalState_p;
+ ObservablesHistory* observablesHistory_p;
+ gmx_enerdata_t* enerdata_p;
+ gmx_ekindata_t* ekindata_p;
+
+ SimulatorStateData(t_state* globalState,
+ ObservablesHistory* observablesHistory,
+ gmx_enerdata_t* enerdata,
+ gmx_ekindata_t* ekindata) :
+ globalState_p(globalState),
+ observablesHistory_p(observablesHistory),
+ enerdata_p(enerdata),
+ ekindata_p(ekindata)
+ {
+ }
+
+ SimulatorStateData(const SimulatorStateData& simulatorStateData) = default;
+};
+
/*! \libinternal
* \brief Class preparing the creation of Simulator objects
*
stopHandlerBuilder_ = std::move(stopHandlerBuilder);
}
+ void add(SimulatorStateData&& simulatorStateData)
+ {
+ simulatorStateData_ = std::make_unique<SimulatorStateData>(simulatorStateData);
+ }
+
/*! \brief Build a Simulator object based on input data
*
* Return a pointer to a simulation object. The use of a parameter
pull_t* pull_work,
t_swap* swap,
gmx_mtop_t* top_global,
- t_state* state_global,
- ObservablesHistory* observablesHistory,
MDAtoms* mdAtoms,
t_nrnb* nrnb,
gmx_wallcycle* wcycle,
t_forcerec* fr,
- gmx_enerdata_t* enerd,
- gmx_ekindata_t* ekind,
MdrunScheduleWorkload* runScheduleWork,
const ReplicaExchangeParameters& replExParams,
gmx_walltime_accounting* walltime_accounting,
private:
std::unique_ptr<MembedHolder> membedHolder_;
std::unique_ptr<StopHandlerBuilder> stopHandlerBuilder_;
+ std::unique_ptr<SimulatorStateData> simulatorStateData_;
};
} // namespace gmx