#include "gromacs/utility/smalloc.h"
#include "gromacs/utility/stringutil.h"
+#include "energydrifttracker.h"
+
//! Labels for energy file quantities
//! \{
static const char* conrmsd_nm[] = { "Constr. rmsd", "Constr.2 rmsd" };
FILE* fp_dhdl,
bool isRerun,
const StartingBehavior startingBehavior,
+ const bool simulationsShareState,
const MdModulesNotifier& mdModulesNotifier)
{
const char* ener_nm[F_NRE];
{
numTemperatures_ = 0;
}
+
+ if (EI_MD(ir->eI) && !simulationsShareState)
+ {
+ conservedEnergyTracker_ = std::make_unique<EnergyDriftTracker>(mtop->natoms);
+ }
}
EnergyOutput::~EnergyOutput()
store_dhdl, dE_ + fep->lambda_start_n, time);
}
}
+
+ if (conservedEnergyTracker_)
+ {
+ conservedEnergyTracker_->addPoint(
+ time, bEner_[F_ECONSERVED] ? enerd->term[F_ECONSERVED] : enerd->term[F_ETOT]);
+ }
}
void EnergyOutput::recordNonEnergyStep()
return ebin_->nener;
}
+void EnergyOutput::printEnergyConservation(FILE* fplog, int simulationPart, bool usingMdIntegrator) const
+{
+ if (fplog == nullptr)
+ {
+ return;
+ }
+
+ if (conservedEnergyTracker_)
+ {
+ std::string partName = formatString("simulation part #%d", simulationPart);
+ fprintf(fplog, "\n%s\n", conservedEnergyTracker_->energyDriftString(partName).c_str());
+ }
+ else if (usingMdIntegrator)
+ {
+ fprintf(fplog,
+ "\nCannot report drift of the conserved energy quantity because simulations share "
+ "state\n\n");
+ }
+}
+
} // namespace gmx