{
//! \brief Build a Simulator object
-std::unique_ptr<ISimulator> SimulatorBuilder::build(bool useModularSimulator, BoxDeformation* deform)
-
+std::unique_ptr<ISimulator> SimulatorBuilder::build(bool useModularSimulator)
{
// TODO: Reduce protocol complexity.
// Investigate individual paramters. Identify default-constructable parameters and clarify
simulatorEnv_->fplog_, simulatorEnv_->commRec_, simulatorEnv_->multisimCommRec_,
simulatorEnv_->logger_, legacyInput_->numFile, legacyInput_->filenames,
simulatorEnv_->outputEnv_, simulatorConfig_->mdrunOptions_,
- simulatorConfig_->startingBehavior_, constraintsParam_->vsite, constraintsParam_->constr,
- constraintsParam_->enforcedRotation, deform, simulatorModules_->outputProvider,
- simulatorModules_->mdModulesNotifier, legacyInput_->inputrec,
- interactiveMD_->imdSession, centerOfMassPulling_->pull_work, ionSwapping_->ionSwap,
- topologyData_->top_global, simulatorStateData_->globalState_p,
+ simulatorConfig_->startingBehavior_, constraintsParam_->vsite,
+ constraintsParam_->constr, constraintsParam_->enforcedRotation, boxDeformation_->deform,
+ simulatorModules_->outputProvider, simulatorModules_->mdModulesNotifier,
+ legacyInput_->inputrec, interactiveMD_->imdSession, centerOfMassPulling_->pull_work,
+ ionSwapping_->ionSwap, topologyData_->top_global, simulatorStateData_->globalState_p,
simulatorStateData_->observablesHistory_p, topologyData_->mdAtoms, profiling_->nrnb,
profiling_->wallCycle, legacyInput_->forceRec, simulatorStateData_->enerdata_p,
simulatorStateData_->ekindata_p, simulatorConfig_->runScheduleWork_,
simulatorEnv_->fplog_, simulatorEnv_->commRec_, simulatorEnv_->multisimCommRec_,
simulatorEnv_->logger_, legacyInput_->numFile, legacyInput_->filenames,
simulatorEnv_->outputEnv_, simulatorConfig_->mdrunOptions_,
- simulatorConfig_->startingBehavior_, constraintsParam_->vsite, constraintsParam_->constr,
- constraintsParam_->enforcedRotation, deform, simulatorModules_->outputProvider,
- simulatorModules_->mdModulesNotifier, legacyInput_->inputrec,
- interactiveMD_->imdSession, centerOfMassPulling_->pull_work, ionSwapping_->ionSwap,
- topologyData_->top_global,
- simulatorStateData_->globalState_p,
+ simulatorConfig_->startingBehavior_, constraintsParam_->vsite,
+ constraintsParam_->constr, constraintsParam_->enforcedRotation, boxDeformation_->deform,
+ simulatorModules_->outputProvider, simulatorModules_->mdModulesNotifier,
+ legacyInput_->inputrec, interactiveMD_->imdSession, centerOfMassPulling_->pull_work,
+ ionSwapping_->ionSwap, topologyData_->top_global, simulatorStateData_->globalState_p,
simulatorStateData_->observablesHistory_p, topologyData_->mdAtoms, profiling_->nrnb,
profiling_->wallCycle, legacyInput_->forceRec, simulatorStateData_->enerdata_p,
simulatorStateData_->ekindata_p, simulatorConfig_->runScheduleWork_,
class LegacyInput
{
public:
- LegacyInput(int filenamesSize,
- const t_filenm* filenamesData,
- t_inputrec* inputRec,
- t_forcerec* forceRec) :
+ LegacyInput(int filenamesSize, const t_filenm* filenamesData, t_inputrec* inputRec, t_forcerec* forceRec) :
numFile(filenamesSize),
filenames(filenamesData),
inputrec(inputRec),
MDAtoms* mdAtoms;
};
+// Design note: The client may own the BoxDeformation via std::unique_ptr, but we are not
+// transferring ownership at this time. (Maybe be the subject of future changes.)
+class BoxDeformationHandle
+{
+public:
+ BoxDeformationHandle(BoxDeformation* boxDeformation) : deform(boxDeformation) {}
+ BoxDeformation* deform;
+};
+
/*! \libinternal
* \brief Class preparing the creation of Simulator objects
*
topologyData_ = std::make_unique<TopologyData>(topologyData);
}
+ void add(BoxDeformationHandle&& boxDeformation)
+ {
+ boxDeformation_ = std::make_unique<BoxDeformationHandle>(boxDeformation);
+ }
+
/*! \brief Build a Simulator object based on input data
*
* Return a pointer to a simulation object. The use of a parameter
*
* \return Unique pointer to a Simulator object
*/
- std::unique_ptr<ISimulator> build(bool useModularSimulator, BoxDeformation* deform);
+ std::unique_ptr<ISimulator> build(bool useModularSimulator);
private:
// Note: we use std::unique_ptr instead of std::optional because we want to
std::unique_ptr<CenterOfMassPulling> centerOfMassPulling_;
std::unique_ptr<IonSwapping> ionSwapping_;
std::unique_ptr<TopologyData> topologyData_;
+ std::unique_ptr<BoxDeformationHandle> boxDeformation_;
};
} // namespace gmx