#include <memory>
+#include "gromacs/applied_forces/densityfitting.h"
#include "gromacs/applied_forces/electricfield.h"
#include "gromacs/imd/imd.h"
+#include "gromacs/mdrunutility/mdmodulenotification.h"
#include "gromacs/mdtypes/iforceprovider.h"
#include "gromacs/mdtypes/imdmodule.h"
#include "gromacs/mdtypes/imdoutputprovider.h"
public:
Impl()
- : field_(createElectricFieldModule()),
+ : densityFitting_(DensityFittingModuleInfo::create(¬ifier_)),
+ field_(createElectricFieldModule()),
imd_(createInteractiveMolecularDynamicsModule()),
swapCoordinates_(createSwapCoordinatesModule())
{
// Create a section for applied-forces modules
auto appliedForcesOptions = options->addSection(OptionSection("applied-forces"));
field_->mdpOptionProvider()->initMdpOptions(&appliedForcesOptions);
+ densityFitting_->mdpOptionProvider()->initMdpOptions(&appliedForcesOptions);
// In future, other sections would also go here.
}
bool bAppendFiles, const gmx_output_env_t *oenv) override
{
field_->outputProvider()->initOutput(fplog, nfile, fnm, bAppendFiles, oenv);
+ densityFitting_->outputProvider()->initOutput(fplog, nfile, fnm, bAppendFiles, oenv);
}
void finishOutput() override
{
field_->outputProvider()->finishOutput();
+ densityFitting_->outputProvider()->finishOutput();
}
+ std::unique_ptr<IMDModule> densityFitting_;
std::unique_ptr<IMDModule> field_;
std::unique_ptr<ForceProviders> forceProviders_;
std::unique_ptr<IMDModule> imd_;
std::vector< std::shared_ptr<IMDModule> > modules_;
//! Manages resources and notifies the MD modules when available
- MDModules::notifier_type notifier_;
+ MdModulesNotifier notifier_;
};
MDModules::MDModules() : impl_(new Impl)
{
auto appliedForcesScope = rules->scopedTransform("/applied-forces");
impl_->field_->mdpOptionProvider()->initMdpTransform(appliedForcesScope.rules());
+ impl_->densityFitting_->mdpOptionProvider()->initMdpTransform(appliedForcesScope.rules());
}
void MDModules::buildMdpOutput(KeyValueTreeObjectBuilder *builder)
{
impl_->field_->mdpOptionProvider()->buildMdpOutput(builder);
+ impl_->densityFitting_->mdpOptionProvider()->buildMdpOutput(builder);
}
void MDModules::assignOptionsToModules(const KeyValueTreeObject ¶ms,
"Force providers initialized multiple times");
impl_->forceProviders_ = std::make_unique<ForceProviders>();
impl_->field_->initForceProviders(impl_->forceProviders_.get());
+ impl_->densityFitting_->initForceProviders(impl_->forceProviders_.get());
for (auto && module : impl_->modules_)
{
module->initForceProviders(impl_->forceProviders_.get());
impl_->modules_.emplace_back(std::move(module));
}
-const MDModules::notifier_type &MDModules::notifier()
+const MdModulesNotifier &MDModules::notifier()
{
return impl_->notifier_;
}