From 908c7ff435e8acbb954b98ad5db5fc528556559e Mon Sep 17 00:00:00 2001 From: Mark Abraham Date: Mon, 27 Sep 2021 09:21:47 +0000 Subject: [PATCH] Use ObservablesReducer for LINCS RMSD computation --- src/gromacs/mdlib/constr.cpp | 91 ++++++++---------- src/gromacs/mdlib/constr.h | 30 +++--- src/gromacs/mdlib/lincs.cpp | 95 +++++++++++++------ src/gromacs/mdlib/lincs.h | 5 +- src/gromacs/mdlib/md_support.cpp | 2 - src/gromacs/mdlib/md_support.h | 2 - src/gromacs/mdlib/stat.cpp | 11 +-- src/gromacs/mdlib/stat.h | 2 - src/gromacs/mdlib/tests/constrtestrunners.cpp | 3 +- src/gromacs/mdlib/tests/energyoutput.cpp | 2 +- src/gromacs/mdlib/update_vv.cpp | 3 - src/gromacs/mdrun/md.cpp | 58 +++++------ src/gromacs/mdrun/mimic.cpp | 2 - src/gromacs/mdrun/minimize.cpp | 1 - src/gromacs/mdrun/rerun.cpp | 2 - src/gromacs/mdrun/runner.cpp | 3 +- .../computeglobalselement.cpp | 2 - 17 files changed, 158 insertions(+), 156 deletions(-) diff --git a/src/gromacs/mdlib/constr.cpp b/src/gromacs/mdlib/constr.cpp index 798f4f12f1..9f7ee8146c 100644 --- a/src/gromacs/mdlib/constr.cpp +++ b/src/gromacs/mdlib/constr.cpp @@ -99,18 +99,19 @@ namespace gmx class Constraints::Impl { public: - Impl(const gmx_mtop_t& mtop_p, - const t_inputrec& ir_p, - pull_t* pull_work, - FILE* log_p, - const t_commrec* cr_p, - bool useUpdateGroups, - const gmx_multisim_t* ms, - t_nrnb* nrnb, - gmx_wallcycle* wcycle_p, - bool pbcHandlingRequired, - int numConstraints, - int numSettles); + Impl(const gmx_mtop_t& mtop_p, + const t_inputrec& ir_p, + pull_t* pull_work, + FILE* log_p, + const t_commrec* cr_p, + bool useUpdateGroups, + const gmx_multisim_t* ms, + t_nrnb* nrnb, + gmx_wallcycle* wcycle_p, + bool pbcHandlingRequired, + ObservablesReducerBuilder* observablesReducerBuilder, + int numConstraints, + int numSettles); ~Impl(); void setConstraints(gmx_localtop_t* top, int numAtoms, @@ -819,18 +820,6 @@ bool Constraints::Impl::apply(bool bLog, return bOK; } // namespace gmx -ArrayRef Constraints::rmsdData() const -{ - if (impl_->lincsd) - { - return lincs_rmsdData(impl_->lincsd); - } - else - { - return {}; - } -} - real Constraints::rmsd() const { if (impl_->lincsd) @@ -1077,34 +1066,36 @@ static std::vector> makeAtomToConstraintMappings(const gmx_mtop return mapping; } -Constraints::Constraints(const gmx_mtop_t& mtop, - const t_inputrec& ir, - pull_t* pull_work, - FILE* log, - const t_commrec* cr, - const bool useUpdateGroups, - const gmx_multisim_t* ms, - t_nrnb* nrnb, - gmx_wallcycle* wcycle, - bool pbcHandlingRequired, - int numConstraints, - int numSettles) : - impl_(new Impl(mtop, ir, pull_work, log, cr, useUpdateGroups, ms, nrnb, wcycle, pbcHandlingRequired, numConstraints, numSettles)) +Constraints::Constraints(const gmx_mtop_t& mtop, + const t_inputrec& ir, + pull_t* pull_work, + FILE* log, + const t_commrec* cr, + const bool useUpdateGroups, + const gmx_multisim_t* ms, + t_nrnb* nrnb, + gmx_wallcycle* wcycle, + bool pbcHandlingRequired, + ObservablesReducerBuilder* observablesReducerBuilder, + int numConstraints, + int numSettles) : + impl_(new Impl(mtop, ir, pull_work, log, cr, useUpdateGroups, ms, nrnb, wcycle, pbcHandlingRequired, observablesReducerBuilder, numConstraints, numSettles)) { } -Constraints::Impl::Impl(const gmx_mtop_t& mtop_p, - const t_inputrec& ir_p, - pull_t* pull_work, - FILE* log_p, - const t_commrec* cr_p, - const bool useUpdateGroups, - const gmx_multisim_t* ms_p, - t_nrnb* nrnb_p, - gmx_wallcycle* wcycle_p, - bool pbcHandlingRequired, - int numConstraints, - int numSettles) : +Constraints::Impl::Impl(const gmx_mtop_t& mtop_p, + const t_inputrec& ir_p, + pull_t* pull_work, + FILE* log_p, + const t_commrec* cr_p, + const bool useUpdateGroups, + const gmx_multisim_t* ms_p, + t_nrnb* nrnb_p, + gmx_wallcycle* wcycle_p, + bool pbcHandlingRequired, + ObservablesReducerBuilder* observablesReducerBuilder, + int numConstraints, + int numSettles) : ncon_tot(numConstraints), mtop(mtop_p), pbcHandlingRequired_(pbcHandlingRequired), @@ -1163,7 +1154,7 @@ Constraints::Impl::Impl(const gmx_mtop_t& mtop_p, if (ir.eConstrAlg == ConstraintAlgorithm::Lincs) { lincsd = init_lincs( - log, mtop, nflexcon, at2con_mt, mayHaveSplitConstraints, ir.nLincsIter, ir.nProjOrder); + log, mtop, nflexcon, at2con_mt, mayHaveSplitConstraints, ir.nLincsIter, ir.nProjOrder, observablesReducerBuilder); } if (ir.eConstrAlg == ConstraintAlgorithm::Shake) diff --git a/src/gromacs/mdlib/constr.h b/src/gromacs/mdlib/constr.h index dc4d4f8503..ad8ff74589 100644 --- a/src/gromacs/mdlib/constr.h +++ b/src/gromacs/mdlib/constr.h @@ -76,6 +76,7 @@ template class ArrayRefWithPadding; template class ListOfLists; +class ObservablesReducerBuilder; //! Describes supported flavours of constrained updates. enum class ConstraintVariable : int @@ -101,18 +102,19 @@ private: * * Private to enforce use of makeConstraints() factory * function. */ - Constraints(const gmx_mtop_t& mtop, - const t_inputrec& ir, - pull_t* pull_work, - FILE* log, - const t_commrec* cr, - bool useUpdateGroups, - const gmx_multisim_t* ms, - t_nrnb* nrnb, - gmx_wallcycle* wcycle, - bool pbcHandlingRequired, - int numConstraints, - int numSettles); + Constraints(const gmx_mtop_t& mtop, + const t_inputrec& ir, + pull_t* pull_work, + FILE* log, + const t_commrec* cr, + bool useUpdateGroups, + const gmx_multisim_t* ms, + t_nrnb* nrnb, + gmx_wallcycle* wcycle, + bool pbcHandlingRequired, + ObservablesReducerBuilder* observablesReducerBuilder, + int numConstraints, + int numSettles); public: /*! \brief This member type helps implement a factory @@ -197,10 +199,6 @@ public: //! Getter for use by domain decomposition. ArrayRef> atom2settle_moltype() const; - /*! \brief Return the data for reduction for determining - * constraint RMS relative deviations, or an empty ArrayRef - * when not supported for any active constraints. */ - ArrayRef rmsdData() const; /*! \brief Return the RMSD of the constraints when available. */ real rmsd() const; diff --git a/src/gromacs/mdlib/lincs.cpp b/src/gromacs/mdlib/lincs.cpp index bc476f1d7d..3c2f2d2547 100644 --- a/src/gromacs/mdlib/lincs.cpp +++ b/src/gromacs/mdlib/lincs.cpp @@ -53,6 +53,7 @@ #include #include +#include #include #include "gromacs/domdec/domdec.h" @@ -68,6 +69,7 @@ #include "gromacs/mdtypes/commrec.h" #include "gromacs/mdtypes/inputrec.h" #include "gromacs/mdtypes/md_enums.h" +#include "gromacs/mdtypes/observablesreducer.h" #include "gromacs/pbcutil/pbc.h" #include "gromacs/pbcutil/pbc_simd.h" #include "gromacs/simd/simd.h" @@ -207,8 +209,24 @@ public: /*! @} */ //! The Lagrange multipliers times -1. std::vector> mlambda; - //! Storage for the constraint RMS relative deviation output. - std::array rmsdData = { { 0 } }; + /*! \brief Callback used after constraining to require reduction + * of values later used to compute the constraint RMS relative + * deviation, so the latter can be output. */ + std::optional callbackToRequireReduction; + /*! \brief View used for reducing the components of the global + * relative RMS constraint deviation. + * + * Can be written any time, but that is only useful when followed + * by a call of the callbackToRequireReduction. Useful to read + * only from the callback that the ObservablesReducer will later + * make after reduction. */ + ArrayRef rmsdReductionBuffer; + /*! \brief The value of the constraint RMS deviation after it has + * been computed. + * + * When DD is active, filled by the ObservablesReducer, otherwise + * filled directly here. */ + std::optional constraintRmsDeviation; }; /*! \brief Define simd_width for memory allocation used for SIMD code */ @@ -218,16 +236,11 @@ static const int simd_width = GMX_SIMD_REAL_WIDTH; static const int simd_width = 1; #endif -ArrayRef lincs_rmsdData(Lincs* lincsd) -{ - return lincsd->rmsdData; -} - real lincs_rmsd(const Lincs* lincsd) { - if (lincsd->rmsdData[0] > 0) + if (lincsd->constraintRmsDeviation.has_value()) { - return std::sqrt(lincsd->rmsdData[1] / lincsd->rmsdData[0]); + return real(lincsd->constraintRmsDeviation.value()); } else { @@ -1439,7 +1452,8 @@ Lincs* init_lincs(FILE* fplog, ArrayRef> atomToConstraintsPerMolType, bool bPLINCS, int nIter, - int nProjOrder) + int nProjOrder, + ObservablesReducerBuilder* observablesReducerBuilder) { // TODO this should become a unique_ptr Lincs* li; @@ -1548,6 +1562,29 @@ Lincs* init_lincs(FILE* fplog, } } + if (observablesReducerBuilder) + { + ObservablesReducerBuilder::CallbackFromBuilder callbackFromBuilder = + [li](ObservablesReducerBuilder::CallbackToRequireReduction c, gmx::ArrayRef v) { + li->callbackToRequireReduction = std::move(c); + li->rmsdReductionBuffer = v; + }; + + // Make the callback that runs afer reduction. + ObservablesReducerBuilder::CallbackAfterReduction callbackAfterReduction = [li](gmx::Step /*step*/) { + if (li->rmsdReductionBuffer[0] > 0) + { + li->constraintRmsDeviation = + std::sqrt(li->rmsdReductionBuffer[1] / li->rmsdReductionBuffer[0]); + } + }; + + const int reductionValuesRequired = 2; + observablesReducerBuilder->addSubscriber(reductionValuesRequired, + std::move(callbackFromBuilder), + std::move(callbackAfterReduction)); + } + return li; } @@ -2136,9 +2173,6 @@ void set_lincs(const InteractionDefinitions& idef, } set_lincs_matrix(li, invmass, lambda); - - li->rmsdData[0] = 0.0; - li->rmsdData[1] = 0.0; } //! Issues a warning when LINCS constraints cannot be satisfied. @@ -2300,11 +2334,6 @@ bool constrain_lincs(bool computeRmsd, if (lincsd->nc == 0 && cr->dd == nullptr) { - if (computeRmsd) - { - lincsd->rmsdData = { { 0 } }; - } - return bOK; } @@ -2410,15 +2439,27 @@ bool constrain_lincs(bool computeRmsd, if (computeRmsd) { - // This is reduced across domains in compute_globals and - // reported to the log file. - lincsd->rmsdData[0] = deviations.numConstraints; - lincsd->rmsdData[1] = deviations.sumSquaredDeviation; - } - else - { - // This is never read - lincsd->rmsdData = { { 0 } }; + if (lincsd->callbackToRequireReduction.has_value()) + { + // This is reduced across domains in compute_globals and + // reported to the log file. + lincsd->rmsdReductionBuffer[0] = deviations.numConstraints; + lincsd->rmsdReductionBuffer[1] = deviations.sumSquaredDeviation; + + // Call the ObservablesReducer via the callback it + // gave us for the purpose. + ObservablesReducerStatus status = + lincsd->callbackToRequireReduction.value()(ReductionRequirement::Soon); + GMX_RELEASE_ASSERT(status == ObservablesReducerStatus::ReadyToReduce, + "The LINCS RMSD is computed after observables have been " + "reduced, please reorder them."); + } + else + { + // Compute the deviation directly + lincsd->constraintRmsDeviation = + std::sqrt(deviations.sumSquaredDeviation / deviations.numConstraints); + } } if (printDebugOutput) { diff --git a/src/gromacs/mdlib/lincs.h b/src/gromacs/mdlib/lincs.h index fcaf91a985..d588a687dc 100644 --- a/src/gromacs/mdlib/lincs.h +++ b/src/gromacs/mdlib/lincs.h @@ -69,7 +69,7 @@ enum class ConstraintVariable : int; class Lincs; template class ListOfLists; - +class ObservablesReducerBuilder; /*! \brief Return the data for determining constraint RMS relative deviations. */ ArrayRef lincs_rmsdData(Lincs* lincsd); @@ -84,7 +84,8 @@ Lincs* init_lincs(FILE* fplog, ArrayRef> atomsToConstraintsPerMolType, bool bPLINCS, int nIter, - int nProjOrder); + int nProjOrder, + ObservablesReducerBuilder* observablesReducerBuilder); /*! \brief Destructs the lincs object when it is not nullptr. */ void done_lincs(Lincs* li); diff --git a/src/gromacs/mdlib/md_support.cpp b/src/gromacs/mdlib/md_support.cpp index 1d25bc85c5..c56dcf430f 100644 --- a/src/gromacs/mdlib/md_support.cpp +++ b/src/gromacs/mdlib/md_support.cpp @@ -299,7 +299,6 @@ void compute_globals(gmx_global_stat* gstat, tensor shake_vir, tensor total_vir, tensor pres, - gmx::ArrayRef constraintsRmsdData, gmx::SimulationSignaller* signalCoordinator, const matrix lastbox, gmx_bool* bSumEkinhOld, @@ -369,7 +368,6 @@ void compute_globals(gmx_global_stat* gstat, shake_vir, *ir, ekind, - constraintsRmsdData, bStopCM ? vcm : nullptr, signalBuffer, *bSumEkinhOld, diff --git a/src/gromacs/mdlib/md_support.h b/src/gromacs/mdlib/md_support.h index f257e4df3b..99e4385280 100644 --- a/src/gromacs/mdlib/md_support.h +++ b/src/gromacs/mdlib/md_support.h @@ -60,7 +60,6 @@ namespace gmx { template class ArrayRef; -class Constraints; class MDLogger; class ObservablesReducer; class SimulationSignaller; @@ -128,7 +127,6 @@ void compute_globals(gmx_global_stat* gstat, tensor shake_vir, tensor total_vir, tensor pres, - gmx::ArrayRef constraintsRmsdData, gmx::SimulationSignaller* signalCoordinator, const matrix lastbox, gmx_bool* bSumEkinhOld, diff --git a/src/gromacs/mdlib/stat.cpp b/src/gromacs/mdlib/stat.cpp index 3f10a0ab3a..fb05d82065 100644 --- a/src/gromacs/mdlib/stat.cpp +++ b/src/gromacs/mdlib/stat.cpp @@ -148,7 +148,6 @@ void global_stat(const gmx_global_stat& gs, tensor svir, const t_inputrec& inputrec, gmx_ekindata_t* ekind, - gmx::ArrayRef constraintsRmsdData, t_vcm* vcm, gmx::ArrayRef sig, bool bSumEkinhOld, @@ -157,7 +156,7 @@ void global_stat(const gmx_global_stat& gs, gmx::ObservablesReducer* observablesReducer) /* instead of current system, gmx_booleans for summing virial, kinetic energy, and other terms */ { - int ie = 0, ifv = 0, isv = 0, irmsd = 0; + int ie = 0, ifv = 0, isv = 0; int idedl = 0, idedlo = 0, idvdll = 0, idvdlnl = 0, iepl = 0, icm = 0, imass = 0, ica = 0; int isig = -1; int icj = -1, ici = -1, icx = -1; @@ -244,10 +243,6 @@ void global_stat(const gmx_global_stat& gs, if (bEner) { ie = add_binr(rb, nener, copyenerd.data()); - if (!constraintsRmsdData.empty()) - { - irmsd = add_binr(rb, 2, constraintsRmsdData.data()); - } for (auto key : gmx::keysOf(inn)) { inn[key] = add_binr(rb, enerd->grpp.nener, enerd->grpp.energyGroupPairTerms[key].data()); @@ -338,10 +333,6 @@ void global_stat(const gmx_global_stat& gs, if (bEner) { extract_binr(rb, ie, nener, copyenerd.data()); - if (!constraintsRmsdData.empty()) - { - extract_binr(rb, irmsd, constraintsRmsdData); - } for (auto key : gmx::keysOf(inn)) { extract_binr(rb, inn[key], enerd->grpp.nener, enerd->grpp.energyGroupPairTerms[key].data()); diff --git a/src/gromacs/mdlib/stat.h b/src/gromacs/mdlib/stat.h index eb48f9d665..ec854a7c2a 100644 --- a/src/gromacs/mdlib/stat.h +++ b/src/gromacs/mdlib/stat.h @@ -53,7 +53,6 @@ namespace gmx { template class ArrayRef; -class Constraints; class ObservablesReducer; } // namespace gmx @@ -71,7 +70,6 @@ void global_stat(const gmx_global_stat& gs, tensor svir, const t_inputrec& inputrec, gmx_ekindata_t* ekind, - gmx::ArrayRef constraintsRmsdData, t_vcm* vcm, gmx::ArrayRef sig, bool bSumEkinhOld, diff --git a/src/gromacs/mdlib/tests/constrtestrunners.cpp b/src/gromacs/mdlib/tests/constrtestrunners.cpp index 125ce3a420..71e73bc6a6 100644 --- a/src/gromacs/mdlib/tests/constrtestrunners.cpp +++ b/src/gromacs/mdlib/tests/constrtestrunners.cpp @@ -138,7 +138,8 @@ void LincsConstraintsRunner::applyConstraints(ConstraintsTestData* testData, t_p at2con_mt, false, testData->ir_.nLincsIter, - testData->ir_.nProjOrder); + testData->ir_.nProjOrder, + nullptr); set_lincs(*testData->idef_, testData->numAtoms_, testData->invmass_, diff --git a/src/gromacs/mdlib/tests/energyoutput.cpp b/src/gromacs/mdlib/tests/energyoutput.cpp index 66817384e9..c5b714a908 100644 --- a/src/gromacs/mdlib/tests/energyoutput.cpp +++ b/src/gromacs/mdlib/tests/energyoutput.cpp @@ -362,7 +362,7 @@ public: // TODO This object will always return zero as RMSD value. // It is more relevant to have non-zero value for testing. constraints_ = makeConstraints( - mtop_, inputrec_, nullptr, false, nullptr, &cr_, false, nullptr, nullptr, nullptr, false); + mtop_, inputrec_, nullptr, false, nullptr, &cr_, false, nullptr, nullptr, nullptr, false, nullptr); } /*! \brief Helper function to generate synthetic data to output diff --git a/src/gromacs/mdlib/update_vv.cpp b/src/gromacs/mdlib/update_vv.cpp index 8f8709e2f8..58bca1a17e 100644 --- a/src/gromacs/mdlib/update_vv.cpp +++ b/src/gromacs/mdlib/update_vv.cpp @@ -206,7 +206,6 @@ void integrateVVFirstStep(int64_t step, shake_vir, total_vir, pres, - (bCalcEner && constr != nullptr) ? constr->rmsdData() : gmx::ArrayRef{}, nullSignaller, state->box, bSumEkinhOld, @@ -288,7 +287,6 @@ void integrateVVFirstStep(int64_t step, nullptr, nullptr, nullptr, - gmx::ArrayRef{}, nullSignaller, state->box, bSumEkinhOld, @@ -452,7 +450,6 @@ void integrateVVSecondStep(int64_t step, shake_vir, total_vir, pres, - gmx::ArrayRef{}, nullSignaller, lastbox, bSumEkinhOld, diff --git a/src/gromacs/mdrun/md.cpp b/src/gromacs/mdrun/md.cpp index 7a649b7b4a..970bcd6781 100644 --- a/src/gromacs/mdrun/md.cpp +++ b/src/gromacs/mdrun/md.cpp @@ -661,7 +661,6 @@ void gmx::LegacySimulator::do_md() shake_vir, total_vir, pres, - gmx::ArrayRef{}, &nullSignaller, state->box, &bSumEkinhOld, @@ -708,7 +707,6 @@ void gmx::LegacySimulator::do_md() shake_vir, total_vir, pres, - gmx::ArrayRef{}, &nullSignaller, state->box, &bSumEkinhOld, @@ -1052,7 +1050,6 @@ void gmx::LegacySimulator::do_md() nullptr, nullptr, nullptr, - gmx::ArrayRef{}, &nullSignaller, state->box, &bSumEkinhOld, @@ -1662,35 +1659,32 @@ void gmx::LegacySimulator::do_md() bool doIntraSimSignal = true; SimulationSignaller signaller(&signals, cr, ms, doInterSimSignal, doIntraSimSignal); - compute_globals( - gstat, - cr, - ir, - fr, - ekind, - makeConstArrayRef(state->x), - makeConstArrayRef(state->v), - state->box, - md, - nrnb, - &vcm, - wcycle, - enerd, - force_vir, - shake_vir, - total_vir, - pres, - (!EI_VV(ir->eI) && bCalcEner && constr != nullptr) ? constr->rmsdData() - : gmx::ArrayRef{}, - &signaller, - lastbox, - &bSumEkinhOld, - (bGStat ? CGLO_GSTAT : 0) | (!EI_VV(ir->eI) && bCalcEner ? CGLO_ENERGY : 0) - | (!EI_VV(ir->eI) && bStopCM ? CGLO_STOPCM : 0) - | (!EI_VV(ir->eI) ? CGLO_TEMPERATURE : 0) - | (!EI_VV(ir->eI) ? CGLO_PRESSURE : 0) | CGLO_CONSTRAINT, - step, - &observablesReducer); + compute_globals(gstat, + cr, + ir, + fr, + ekind, + makeConstArrayRef(state->x), + makeConstArrayRef(state->v), + state->box, + md, + nrnb, + &vcm, + wcycle, + enerd, + force_vir, + shake_vir, + total_vir, + pres, + &signaller, + lastbox, + &bSumEkinhOld, + (bGStat ? CGLO_GSTAT : 0) | (!EI_VV(ir->eI) && bCalcEner ? CGLO_ENERGY : 0) + | (!EI_VV(ir->eI) && bStopCM ? CGLO_STOPCM : 0) + | (!EI_VV(ir->eI) ? CGLO_TEMPERATURE : 0) + | (!EI_VV(ir->eI) ? CGLO_PRESSURE : 0) | CGLO_CONSTRAINT, + step, + &observablesReducer); if (!EI_VV(ir->eI) && bStopCM) { process_and_stopcm_grp( diff --git a/src/gromacs/mdrun/mimic.cpp b/src/gromacs/mdrun/mimic.cpp index 82f4bf7465..96b3666369 100644 --- a/src/gromacs/mdrun/mimic.cpp +++ b/src/gromacs/mdrun/mimic.cpp @@ -357,7 +357,6 @@ void gmx::LegacySimulator::do_mimic() shake_vir, total_vir, pres, - gmx::ArrayRef{}, &nullSignaller, state->box, &bSumEkinhOld, @@ -640,7 +639,6 @@ void gmx::LegacySimulator::do_mimic() nullptr, nullptr, nullptr, - constr != nullptr ? constr->rmsdData() : gmx::ArrayRef{}, &signaller, state->box, &bSumEkinhOld, diff --git a/src/gromacs/mdrun/minimize.cpp b/src/gromacs/mdrun/minimize.cpp index e3ade12b7d..42b34a45eb 100644 --- a/src/gromacs/mdrun/minimize.cpp +++ b/src/gromacs/mdrun/minimize.cpp @@ -1050,7 +1050,6 @@ void EnergyEvaluator::run(em_state_t* ems, rvec mu_tot, tensor vir, tensor pres, shake_vir, *inputrec, nullptr, - gmx::ArrayRef{}, nullptr, std::vector(1, terminate), FALSE, diff --git a/src/gromacs/mdrun/rerun.cpp b/src/gromacs/mdrun/rerun.cpp index 14eb21ffad..3ee37edb73 100644 --- a/src/gromacs/mdrun/rerun.cpp +++ b/src/gromacs/mdrun/rerun.cpp @@ -406,7 +406,6 @@ void gmx::LegacySimulator::do_rerun() shake_vir, total_vir, pres, - gmx::ArrayRef{}, &nullSignaller, state->box, &bSumEkinhOld, @@ -755,7 +754,6 @@ void gmx::LegacySimulator::do_rerun() shake_vir, total_vir, pres, - constr != nullptr ? constr->rmsdData() : gmx::ArrayRef{}, &signaller, state->box, &bSumEkinhOld, diff --git a/src/gromacs/mdrun/runner.cpp b/src/gromacs/mdrun/runner.cpp index 5daf1606ca..8c3fbdf517 100644 --- a/src/gromacs/mdrun/runner.cpp +++ b/src/gromacs/mdrun/runner.cpp @@ -1975,7 +1975,8 @@ int Mdrunner::mdrunner() ms, &nrnb, wcycle.get(), - fr->bMolPBC); + fr->bMolPBC, + &observablesReducerBuilder); /* Energy terms and groups */ gmx_enerdata_t enerd(mtop.groups.groups[SimulationAtomGroupType::EnergyOutput].size(), diff --git a/src/gromacs/modularsimulator/computeglobalselement.cpp b/src/gromacs/modularsimulator/computeglobalselement.cpp index 4c3894dd6d..6586f9a6fa 100644 --- a/src/gromacs/modularsimulator/computeglobalselement.cpp +++ b/src/gromacs/modularsimulator/computeglobalselement.cpp @@ -304,8 +304,6 @@ void ComputeGlobalsElement::compute(gmx::Step step, energyData_->constraintVirial(step), energyData_->totalVirial(step), energyData_->pressure(step), - (((flags & CGLO_ENERGY) != 0) && constr_ != nullptr) ? constr_->rmsdData() - : gmx::ArrayRef{}, signaller, lastbox, energyData_->needToSumEkinhOld(), -- 2.22.0