From 176671b9dcd6975f55a4e70a244f4d962db2d9f5 Mon Sep 17 00:00:00 2001 From: Magnus Lundborg Date: Thu, 20 Aug 2020 12:15:28 +0000 Subject: [PATCH] Make it possible to use FEP lambda states as a reaction coordinate in AWH. Atom masses and constraints cannot be perturbed (yet). It is possible to use a multidimensional bias where the lambda state is one dimension. An AWH FEP lambda state dimension is always using a discrete Gibbs sampler (umbrella), even if another dimension is using a convolved bias potential. --- docs/reference-manual/special/awh.rst | 63 +- docs/release-notes/2021/major/features.rst | 8 + docs/user-guide/mdp-options.rst | 12 +- src/gromacs/awh/awh.cpp | 211 +++- src/gromacs/awh/awh.h | 75 +- src/gromacs/awh/bias.cpp | 95 +- src/gromacs/awh/bias.h | 69 +- src/gromacs/awh/biasgrid.cpp | 179 ++- src/gromacs/awh/biasgrid.h | 67 +- src/gromacs/awh/biasparams.cpp | 44 +- src/gromacs/awh/biasparams.h | 2 +- src/gromacs/awh/biasstate.cpp | 236 +++- src/gromacs/awh/biasstate.h | 65 +- src/gromacs/awh/coordstate.cpp | 5 + src/gromacs/awh/coordstate.h | 4 + src/gromacs/awh/dimparams.h | 33 +- src/gromacs/awh/pointstate.cpp | 10 +- src/gromacs/awh/pointstate.h | 9 +- src/gromacs/awh/read_params.cpp | 485 +++++--- src/gromacs/awh/read_params.h | 6 + src/gromacs/awh/tests/CMakeLists.txt | 1 + src/gromacs/awh/tests/bias.cpp | 12 +- .../awh/tests/bias_fep_lambda_state.cpp | 379 ++++++ src/gromacs/awh/tests/biasstate.cpp | 2 + ...BiasFepLambdaStateTest_ForcesBiasPmf_0.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_1.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_2.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_3.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_4.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_5.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_6.xml | 1056 +++++++++++++++++ ...BiasFepLambdaStateTest_ForcesBiasPmf_7.xml | 1056 +++++++++++++++++ ...ithParameters_BiasTest_ForcesBiasPmf_0.xml | 46 +- ...ithParameters_BiasTest_ForcesBiasPmf_1.xml | 46 +- ...ithParameters_BiasTest_ForcesBiasPmf_2.xml | 76 +- ...ithParameters_BiasTest_ForcesBiasPmf_3.xml | 76 +- ...ithParameters_BiasTest_ForcesBiasPmf_4.xml | 46 +- ...ithParameters_BiasTest_ForcesBiasPmf_5.xml | 46 +- ...ithParameters_BiasTest_ForcesBiasPmf_6.xml | 76 +- ...ithParameters_BiasTest_ForcesBiasPmf_7.xml | 76 +- src/gromacs/gmxana/gmx_awh.cpp | 10 +- src/gromacs/gmxpreprocess/grompp.cpp | 6 +- src/gromacs/gmxpreprocess/readir.cpp | 2 +- src/gromacs/mdlib/enerdata_utils.cpp | 2 +- src/gromacs/mdlib/sim_util.cpp | 57 +- src/gromacs/mdrun/md.cpp | 8 + src/gromacs/mdtypes/awh_params.h | 3 +- src/gromacs/mdtypes/enerdata.h | 2 +- 48 files changed, 10437 insertions(+), 661 deletions(-) create mode 100644 src/gromacs/awh/tests/bias_fep_lambda_state.cpp create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_0.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_1.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_2.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_3.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_4.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_5.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_6.xml create mode 100644 src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_7.xml diff --git a/docs/reference-manual/special/awh.rst b/docs/reference-manual/special/awh.rst index 1a76aa321b..faa9f41979 100644 --- a/docs/reference-manual/special/awh.rst +++ b/docs/reference-manual/special/awh.rst @@ -20,22 +20,9 @@ Basics of the method ^^^^^^^^^^^^^^^^^^^^ Rather than biasing the reaction coordinate :math:`\xi(x)` directly, AWH -acts on a *reference coordinate* :math:`\lambda`. The reaction -coordinate :math:`\xi(x)` is coupled to :math:`\lambda` with a harmonic -potential - -.. math:: Q(\xi,\lambda) = \frac{1}{2} \beta k (\xi - \lambda)^2, - :label: eqnawhbasic - -so that for large force constants :math:`k`, -:math:`\xi \approx \lambda`. Note the use of dimensionless energies for -compatibility with previously published work. Units of energy are -obtained by multiplication with :math:`k_BT=1/\beta`. In the simulation, -:math:`\lambda` samples the user-defined sampling interval :math:`I`. -For a multidimensional reaction coordinate :math:`\xi`, the sampling -interval is the Cartesian product :math:`I=\Pi_{\mu} I_{\mu}` (a rectangular -domain). The connection between atom coordinates and :math:`\lambda` is -established through the extended ensemble \ :ref:`68 `, +acts on a *reference coordinate* :math:`\lambda`. The fundamentals of the +method is based on the connection between atom coordinates and :math:`\lambda` and +is established through the extended ensemble \ :ref:`68 `, .. math:: P(x,\lambda) = \frac{1}{\mathcal{Z}}e^{g(\lambda) - Q(\xi(x),\lambda) - V(x)}, :label: eqawhpxlambda @@ -56,6 +43,18 @@ where :math:`F(\lambda)` is the free energy .. math:: F(\lambda) = -\ln \int e^{- Q(\xi(x),\lambda) - V(x)} dx. :label: eqawhflambda +The reaction coordinate :math:`\xi(x)` is commonly coupled to +:math:`\lambda` with a harmonic potential + +.. math:: Q(\xi,\lambda) = \frac{1}{2} \beta k (\xi - \lambda)^2, + :label: eqnawhbasic + +so that for large force constants :math:`k`, +:math:`\xi \approx \lambda`. Note the use of dimensionless energies for +compatibility with previously published work. Units of energy are +obtained by multiplication with :math:`k_BT=1/\beta`. In the simulation, +:math:`\lambda` samples the user-defined sampling interval :math:`I`. + Being the convolution of the PMF with the Gaussian defined by the harmonic potential, :math:`F(\lambda)` is a smoothened version of the PMF. :eq:`Eq. %s ` shows that in order to obtain @@ -64,6 +63,17 @@ determined accurately. Thus, AWH adaptively calculates :math:`F(\lambda)` and simultaneously converges :math:`P(\lambda)` toward :math:`\rho(\lambda)`. +It is also possible to directly control the :math:`\lambda` state +of, e.g., alchemical free energy perturbations. In that case there is no harmonic +potential and :math:`\lambda` changes in discrete steps along the reaction coordinate +depending on the biased free energy difference between the :math:`\lambda` states. +N.b., it is not yet possible to use AWH in combination with perturbed masses or +constraints. + +For a multidimensional reaction coordinate :math:`\xi`, the sampling +interval is the Cartesian product :math:`I=\Pi_{\mu} I_{\mu}` (a rectangular +domain). + The free energy update ^^^^^^^^^^^^^^^^^^^^^^ @@ -126,15 +136,23 @@ implies :math:`\Delta g_n(\lambda) < 0` (assuming Secondly, the normalization of the histogram :math:`N_n=\sum_\lambda W_n(\lambda)`, determines the update size :math:`| \Delta F(\lambda) |`. For instance, for a single sample -:math:`\omega(\lambda|x)`, the shape of the update is approximately a +:math:`\omega(\lambda|x)`, and using a harmonic potential +(:see :eq:`Eq. %s `), +the shape of the update is approximately a Gaussian function of width :math:`\sigma=1/\sqrt{\beta k}` and height :math:`\propto 1/N_n` :ref:`137 `, .. math:: | \Delta F_n(\lambda) | \propto \frac{1}{N_n} e^{-\frac{1}{2} \beta k (\xi(x) - \lambda)^2}. :label: eqawhdfsize -Therefore, as samples accumulate in :math:`W(\lambda)` and :math:`N_n` -grows, the updates get smaller, allowing for the free energy to +When directly controlling the lambda state of the system, the shape of +the update is instead + +.. math:: | \Delta F_n(\lambda) | \propto \frac{1}{N_n} P_n(\lambda | x). + :label: eqawhdfsizelambda + +Therefore, in both cases, as samples accumulate in :math:`W(\lambda)` and +:math:`N_n` grows, the updates get smaller, allowing for the free energy to converge. Note that quantity of interest to the user is not :math:`F(\lambda)` but @@ -165,6 +183,13 @@ different in the two cases. This choice does not affect the internals of the AWH algorithm, only what force and potential AWH returns to the MD engine. +Along a bias dimension directly controlling the +:math:`\lambda` state of the system, such as when controlling free energy +perturbations, the Monte-Carlo sampling alternative is always used, even if +a convolved bias potential is chosen to be used along the other dimensions +(if there are more than one). + + .. _fig-awhbiasevolution1: .. figure:: plots/awh-traj.* diff --git a/docs/release-notes/2021/major/features.rst b/docs/release-notes/2021/major/features.rst index 7a5626f7ca..ac0c3462de 100644 --- a/docs/release-notes/2021/major/features.rst +++ b/docs/release-notes/2021/major/features.rst @@ -23,3 +23,11 @@ drift when large coordinate values are present. This allows for accurate simulations of systems with SETTLE up to 1000 nm in size (but note that constraining with LINCS and SHAKE still introduces significant drift, which limits the system size to 100 to 200 nm). + +FEP using AWH +""""""""""""" + +It is now possible to control the lambda state of a free energy perturbation +simulation using the Accelerated Weight Histogram method. This can be used +as one of multiple AWH dimensions, where the other(s) are coupled to pull +coordinates. diff --git a/docs/user-guide/mdp-options.rst b/docs/user-guide/mdp-options.rst index 9281ac4e0e..90addbe696 100644 --- a/docs/user-guide/mdp-options.rst +++ b/docs/user-guide/mdp-options.rst @@ -2040,8 +2040,14 @@ AWH adaptive biasing .. mdp-value:: pull - The module providing the reaction coordinate for this dimension. - Currently AWH can only act on pull coordinates. + The pull module is providing the reaction coordinate for this dimension. + + .. mdp-value:: fep-lambda + + The free energy lambda state is the reaction coordinate for this dimension. + The lambda states to use are specified by :mdp:`fep-lambdas`, :mdp:`vdw-lambdas`, + :mdp:`coul-lambdas` etc. This is not compatible with delta-lambda. It also requires + calc-lambda-neighbors to be -1. .. mdp:: awh1-dim1-coord-index @@ -2073,7 +2079,7 @@ AWH adaptive biasing .. mdp:: awh1-dim1-diffusion - (10\ :sup:`-5`) [nm\ :sup:`2`/ps] or [rad\ :sup:`2`/ps] + (10\ :sup:`-5`) [nm\ :sup:`2`/ps], [rad\ :sup:`2`/ps] or [ps\ :sup:`-1`] Estimated diffusion constant for this coordinate dimension determining the initial biasing rate. This needs only be a rough estimate and should not critically affect the results unless it is set to something very low, leading to slow convergence, diff --git a/src/gromacs/awh/awh.cpp b/src/gromacs/awh/awh.cpp index 65c9837b4d..490e7312cb 100644 --- a/src/gromacs/awh/awh.cpp +++ b/src/gromacs/awh/awh.cpp @@ -39,6 +39,7 @@ * * \author Viveca Lindahl * \author Berk Hess + * \author Magnus Lundborg * \ingroup module_awh */ @@ -69,6 +70,7 @@ #include "gromacs/pulling/pull.h" #include "gromacs/timing/wallcycle.h" #include "gromacs/trajectory/energyframe.h" +#include "gromacs/utility/arrayref.h" #include "gromacs/utility/exceptions.h" #include "gromacs/utility/gmxassert.h" #include "gromacs/utility/pleasecite.h" @@ -105,13 +107,67 @@ struct BiasCoupledToSystem /* Here AWH can be extended to work on other coordinates than pull. */ }; +/*! \brief Checks whether any dimension uses pulling as a coordinate provider. + * + * \param[in] awhBiasParams The bias params to check. + * \returns true if any dimension of the bias is linked to pulling. + */ +static bool anyDimUsesPull(const AwhBiasParams& awhBiasParams) +{ + for (int d = 0; d < awhBiasParams.ndim; d++) + { + const AwhDimParams& awhDimParams = awhBiasParams.dimParams[d]; + if (awhDimParams.eCoordProvider == eawhcoordproviderPULL) + { + return true; + } + } + return false; +} + +/*! \brief Checks whether any dimension uses pulling as a coordinate provider. + * + * \param[in] awhParams The AWH params to check. + * \returns true if any dimension of awh is linked to pulling. + */ +static bool anyDimUsesPull(const AwhParams& awhParams) +{ + for (int k = 0; k < awhParams.numBias; k++) + { + const AwhBiasParams& awhBiasParams = awhParams.awhBiasParams[k]; + if (anyDimUsesPull(awhBiasParams)) + { + return true; + } + } + return false; +} + +/*! \brief Checks whether any dimension uses pulling as a coordinate provider. + * + * \param[in] biasCoupledToSystem The AWH biases to check. + * \returns true if any dimension of the provided biases is linked to pulling. + */ +static bool anyDimUsesPull(const ArrayRef biasCoupledToSystem) +{ + for (const auto& biasCts : biasCoupledToSystem) + { + if (!biasCts.pullCoordIndex_.empty()) + { + return true; + } + } + return false; +} + BiasCoupledToSystem::BiasCoupledToSystem(Bias bias, const std::vector& pullCoordIndex) : bias_(std::move(bias)), pullCoordIndex_(pullCoordIndex) { /* We already checked for this in grompp, but check again here. */ - GMX_RELEASE_ASSERT(static_cast(bias_.ndim()) == pullCoordIndex_.size(), - "The bias dimensionality should match the number of pull coordinates."); + GMX_RELEASE_ASSERT( + static_cast(bias_.ndim()) == pullCoordIndex_.size() + bias_.hasFepLambdaDimension() ? 1 : 0, + "The bias dimensionality should match the number of pull and lambda coordinates."); } Awh::Awh(FILE* fplog, @@ -120,18 +176,24 @@ Awh::Awh(FILE* fplog, const gmx_multisim_t* multiSimRecord, const AwhParams& awhParams, const std::string& biasInitFilename, - pull_t* pull_work) : + pull_t* pull_work, + int numFepLambdaStates, + int fepLambdaState) : seed_(awhParams.seed), nstout_(awhParams.nstOut), commRecord_(commRecord), multiSimRecord_(multiSimRecord), pull_(pull_work), - potentialOffset_(0) + potentialOffset_(0), + numFepLambdaStates_(numFepLambdaStates), + fepLambdaState_(fepLambdaState) { - /* We already checked for this in grompp, but check again here. */ - GMX_RELEASE_ASSERT(inputRecord.pull != nullptr, "With AWH we should have pull parameters"); - GMX_RELEASE_ASSERT(pull_work != nullptr, - "With AWH pull should be initialized before initializing AWH"); + if (anyDimUsesPull(awhParams)) + { + GMX_RELEASE_ASSERT(inputRecord.pull != nullptr, "With AWH we should have pull parameters"); + GMX_RELEASE_ASSERT(pull_work != nullptr, + "With AWH pull should be initialized before initializing AWH"); + } if (fplog != nullptr) { @@ -163,15 +225,29 @@ Awh::Awh(FILE* fplog, for (int d = 0; d < awhBiasParams.ndim; d++) { const AwhDimParams& awhDimParams = awhBiasParams.dimParams[d]; - GMX_RELEASE_ASSERT(awhDimParams.eCoordProvider == eawhcoordproviderPULL, - "Currently only the pull code is supported as coordinate provider"); - const t_pull_coord& pullCoord = inputRecord.pull->coord[awhDimParams.coordIndex]; - GMX_RELEASE_ASSERT(pullCoord.eGeom != epullgDIRPBC, - "Pull geometry 'direction-periodic' is not supported by AWH"); - double conversionFactor = pull_coordinate_is_angletype(&pullCoord) ? DEG2RAD : 1; - dimParams.emplace_back(conversionFactor, awhDimParams.forceConstant, beta); - - pullCoordIndex.push_back(awhDimParams.coordIndex); + if (awhDimParams.eCoordProvider != eawhcoordproviderPULL + && awhDimParams.eCoordProvider != eawhcoordproviderFREE_ENERGY_LAMBDA) + { + GMX_THROW( + InvalidInputError("Currently only the pull code and lambda are supported " + "as coordinate providers")); + } + if (awhDimParams.eCoordProvider == eawhcoordproviderPULL) + { + const t_pull_coord& pullCoord = inputRecord.pull->coord[awhDimParams.coordIndex]; + if (pullCoord.eGeom == epullgDIRPBC) + { + GMX_THROW(InvalidInputError( + "Pull geometry 'direction-periodic' is not supported by AWH")); + } + double conversionFactor = pull_coordinate_is_angletype(&pullCoord) ? DEG2RAD : 1; + pullCoordIndex.push_back(awhDimParams.coordIndex); + dimParams.emplace_back(conversionFactor, awhDimParams.forceConstant, beta); + } + else + { + dimParams.emplace_back(awhDimParams.forceConstant, beta, numFepLambdaStates_); + } } /* Construct the bias and couple it to the system. */ @@ -207,16 +283,21 @@ bool Awh::isOutputStep(int64_t step) const return (nstout_ > 0 && step % nstout_ == 0); } -real Awh::applyBiasForcesAndUpdateBias(PbcType pbcType, - const real* masses, - const matrix box, - gmx::ForceWithVirial* forceWithVirial, - double t, - int64_t step, - gmx_wallcycle* wallcycle, - FILE* fplog) +real Awh::applyBiasForcesAndUpdateBias(PbcType pbcType, + const real* masses, + ArrayRef neighborLambdaEnergies, + ArrayRef neighborLambdaDhdl, + const matrix box, + gmx::ForceWithVirial* forceWithVirial, + double t, + int64_t step, + gmx_wallcycle* wallcycle, + FILE* fplog) { - GMX_ASSERT(forceWithVirial, "Need a valid ForceWithVirial object"); + if (anyDimUsesPull(biasCoupledToSystem_)) + { + GMX_ASSERT(forceWithVirial, "Need a valid ForceWithVirial object"); + } wallcycle_start(wallcycle, ewcAWH); @@ -233,10 +314,20 @@ real Awh::applyBiasForcesAndUpdateBias(PbcType pbcType, /* Update the AWH coordinate values with those of the corresponding * pull coordinates. */ - awh_dvec coordValue = { 0, 0, 0, 0 }; + awh_dvec coordValue = { 0, 0, 0, 0 }; + int numLambdaDimsCounted = 0; for (int d = 0; d < biasCts.bias_.ndim(); d++) { - coordValue[d] = get_pull_coord_value(pull_, biasCts.pullCoordIndex_[d], &pbc); + if (!biasCts.bias_.isFepLambdaDimension(d)) + { + coordValue[d] = get_pull_coord_value( + pull_, biasCts.pullCoordIndex_[d - numLambdaDimsCounted], &pbc); + } + else + { + coordValue[d] = fepLambdaState_; + numLambdaDimsCounted += 1; + } } /* Perform an AWH biasing step: this means, at regular intervals, @@ -249,8 +340,8 @@ real Awh::applyBiasForcesAndUpdateBias(PbcType pbcType, * to supports bias sharing within a single simulation. */ gmx::ArrayRef biasForce = biasCts.bias_.calcForceAndUpdateBias( - coordValue, &biasPotential, &biasPotentialJump, commRecord_, multiSimRecord_, t, - step, seed_, fplog); + coordValue, neighborLambdaEnergies, neighborLambdaDhdl, &biasPotential, + &biasPotentialJump, commRecord_, multiSimRecord_, t, step, seed_, fplog); awhPotential += biasPotential; @@ -261,10 +352,20 @@ real Awh::applyBiasForcesAndUpdateBias(PbcType pbcType, * The bias potential is returned at the end of this function, * so that it can be added externally to the correct energy data block. */ + numLambdaDimsCounted = 0; for (int d = 0; d < biasCts.bias_.ndim(); d++) { - apply_external_pull_coord_force(pull_, biasCts.pullCoordIndex_[d], biasForce[d], masses, - forceWithVirial); + if (!biasCts.bias_.dimParams()[d].isFepLambdaDimension()) + { + apply_external_pull_coord_force(pull_, biasCts.pullCoordIndex_[d - numLambdaDimsCounted], + biasForce[d], masses, forceWithVirial); + } + else + { + int umbrellaGridpointIndex = biasCts.bias_.state().coordState().umbrellaGridpoint(); + fepLambdaState_ = biasCts.bias_.getGridCoordValue(umbrellaGridpointIndex)[d]; + numLambdaDimsCounted += 1; + } } if (isOutputStep(step)) @@ -359,7 +460,7 @@ const char* Awh::externalPotentialString() void Awh::registerAwhWithPull(const AwhParams& awhParams, pull_t* pull_work) { - GMX_RELEASE_ASSERT(pull_work, "Need a valid pull object"); + GMX_RELEASE_ASSERT(!anyDimUsesPull(awhParams) || pull_work, "Need a valid pull object"); for (int k = 0; k < awhParams.numBias; k++) { @@ -367,8 +468,11 @@ void Awh::registerAwhWithPull(const AwhParams& awhParams, pull_t* pull_work) for (int d = 0; d < biasParams.ndim; d++) { - register_external_pull_potential(pull_work, biasParams.dimParams[d].coordIndex, - Awh::externalPotentialString()); + if (biasParams.dimParams[d].eCoordProvider == eawhcoordproviderPULL) + { + register_external_pull_potential(pull_work, biasParams.dimParams[d].coordIndex, + Awh::externalPotentialString()); + } } } } @@ -412,6 +516,38 @@ void Awh::writeToEnergyFrame(int64_t step, t_enxframe* frame) const } } +bool Awh::hasFepLambdaDimension() const +{ + return std::any_of( + std::begin(biasCoupledToSystem_), std::end(biasCoupledToSystem_), + [](const auto& coupledBias) { return coupledBias.bias_.hasFepLambdaDimension(); }); +} + +bool Awh::needForeignEnergyDifferences(const int64_t step) const +{ + /* If there is no FEP lambda dimension at all in any bias there will be no need for foreign + * energy differences */ + if (!hasFepLambdaDimension()) + { + return false; + } + if (step == 0) + { + return true; + } + /* Check whether the bias(es) that has/have a FEP lambda dimension should sample coordinates + * this step. Since the biases may have different sampleCoordStep it is necessary to check + * this combination. */ + for (const auto& biasCts : biasCoupledToSystem_) + { + if (biasCts.bias_.hasFepLambdaDimension() && biasCts.bias_.isSampleCoordStep(step)) + { + return true; + } + } + return false; +} + std::unique_ptr prepareAwhModule(FILE* fplog, const t_inputrec& inputRecord, t_state* stateGlobal, @@ -431,8 +567,9 @@ std::unique_ptr prepareAwhModule(FILE* fplog, GMX_THROW(InvalidInputError("AWH biasing does not support shell particles.")); } - auto awh = std::make_unique(fplog, inputRecord, commRecord, multiSimRecord, - *inputRecord.awhParams, biasInitFilename, pull_work); + auto awh = std::make_unique( + fplog, inputRecord, commRecord, multiSimRecord, *inputRecord.awhParams, biasInitFilename, + pull_work, inputRecord.fepvals->n_lambda, inputRecord.fepvals->init_fep_state); if (startingFromCheckpoint) { diff --git a/src/gromacs/awh/awh.h b/src/gromacs/awh/awh.h index 8ed456c27c..d8bdfb71ed 100644 --- a/src/gromacs/awh/awh.h +++ b/src/gromacs/awh/awh.h @@ -46,6 +46,7 @@ * * \author Viveca Lindahl * \author Berk Hess + * \author Magnus Lundborg */ /*! \libinternal \file @@ -84,6 +85,8 @@ enum class PbcType : int; namespace gmx { +template +class ArrayRef; struct AwhHistory; struct AwhParams; class Bias; @@ -115,13 +118,19 @@ public: * in the user input. This allows AWH to later apply the bias force to * these coordinate in \ref Awh::applyBiasForcesAndUpdateBias. * - * \param[in,out] fplog General output file, normally md.log, can be nullptr. - * \param[in] inputRecord General input parameters (as set up by grompp). - * \param[in] commRecord Struct for communication, can be nullptr. - * \param[in] multiSimRecord Multi-sim handler - * \param[in] awhParams AWH input parameters, consistent with the relevant parts of \p inputRecord (as set up by grompp). - * \param[in] biasInitFilename Name of file to read PMF and target from. - * \param[in,out] pull_work Pointer to a pull struct which AWH will couple to, has to be initialized, is assumed not to change during the lifetime of the Awh object. + * \param[in,out] fplog General output file, normally md.log, can be nullptr. + * \param[in] inputRecord General input parameters (as set up by grompp). + * \param[in] commRecord Struct for communication, can be nullptr. + * \param[in] multiSimRecord Multi-sim handler + * \param[in] awhParams AWH input parameters, consistent with the relevant + * parts of \p inputRecord (as set up by grompp). + * \param[in] biasInitFilename Name of file to read PMF and target from. + * \param[in,out] pull_work Pointer to a pull struct which AWH will + * couple to, has to be initialized, is assumed not to change during the + * lifetime of the Awh object. + * \param[in] numLambdaStates The number of free energy lambda states. + * \param[in] lambdaState The initial free energy lambda state of the system. + * \throws InvalidInputError If there is user input (or combinations thereof) that is not allowed. */ Awh(FILE* fplog, const t_inputrec& inputRecord, @@ -129,7 +138,9 @@ public: const gmx_multisim_t* multiSimRecord, const AwhParams& awhParams, const std::string& biasInitFilename, - pull_t* pull_work); + pull_t* pull_work, + int numLambdaStates, + int lambdaState); ~Awh(); @@ -152,8 +163,20 @@ public: * since AWH needs the current coordinate values (the pull code checks * for this). * - * \param[in] masses Atoms masses. * \param[in] pbcType Type of periodic boundary conditions. + * \param[in] masses Atoms masses. + * \param[in] neighborLambdaEnergies An array containing the energy of the system + * in neighboring lambdas. The array is of length numLambdas+1, where numLambdas is + * the number of free energy lambda states. Element 0 in the array is the energy + * of the current state and elements 1..numLambdas contain the energy of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. * \param[in] box Box vectors. * \param[in,out] forceWithVirial Force and virial buffers, should cover at least the local atoms. * \param[in] t Time. @@ -162,14 +185,16 @@ public: * \param[in,out] fplog General output file, normally md.log, can be nullptr. * \returns the potential energy for the bias. */ - real applyBiasForcesAndUpdateBias(PbcType pbcType, - const real* masses, - const matrix box, - gmx::ForceWithVirial* forceWithVirial, - double t, - int64_t step, - gmx_wallcycle* wallcycle, - FILE* fplog); + real applyBiasForcesAndUpdateBias(PbcType pbcType, + const real* masses, + ArrayRef neighborLambdaEnergies, + ArrayRef neighborLambdaDhdl, + const matrix box, + gmx::ForceWithVirial* forceWithVirial, + double t, + int64_t step, + gmx_wallcycle* wallcycle, + FILE* fplog); /*! \brief * Update the AWH history in preparation for writing to checkpoint file. @@ -229,6 +254,16 @@ public: */ static void registerAwhWithPull(const AwhParams& awhParams, pull_t* pull_work); + /*! \brief Get the current free energy lambda state. + * \returns The value of lambdaState_. + */ + int fepLambdaState() const { return fepLambdaState_; } + + /*! \brief Returns if foreign energy differences are required during this step. + * \param[in] step The current MD step. + */ + bool needForeignEnergyDifferences(int64_t step) const; + private: /*! \brief Returns whether we need to write output at the current step. * @@ -236,6 +271,10 @@ private: */ bool isOutputStep(int64_t step) const; + /*! \brief Returns true if AWH has a bias with a free energy lambda state dimension at all. + */ + bool hasFepLambdaDimension() const; + private: std::vector biasCoupledToSystem_; /**< AWH biases and definitions of their coupling to the system. */ const int64_t seed_; /**< Random seed for MC jumping with umbrella type bias potential. */ @@ -244,6 +283,8 @@ private: const gmx_multisim_t* multiSimRecord_; /**< Handler for multi-simulations. */ pull_t* pull_; /**< Pointer to the pull working data. */ double potentialOffset_; /**< The offset of the bias potential which changes due to bias updates. */ + const int numFepLambdaStates_; /**< The number of free energy lambda states of the system. */ + int fepLambdaState_; /**< The current free energy lambda state. */ }; /*! \brief Makes an Awh and prepares to use it if the user input diff --git a/src/gromacs/awh/bias.cpp b/src/gromacs/awh/bias.cpp index 006dee4e87..31bdf4f52b 100644 --- a/src/gromacs/awh/bias.cpp +++ b/src/gromacs/awh/bias.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2015,2016,2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2015,2016,2017,2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -102,15 +102,17 @@ void Bias::doSkippedUpdatesForAllPoints() } } -gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec coordValue, - double* awhPotential, - double* potentialJump, - const t_commrec* commRecord, - const gmx_multisim_t* ms, - double t, - int64_t step, - int64_t seed, - FILE* fplog) +gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec coordValue, + ArrayRef neighborLambdaEnergies, + ArrayRef neighborLambdaDhdl, + double* awhPotential, + double* potentialJump, + const t_commrec* commRecord, + const gmx_multisim_t* ms, + double t, + int64_t step, + int64_t seed, + FILE* fplog) { if (step < 0) { @@ -126,29 +128,35 @@ gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec c * the bias in the current neighborhood needs to be up-to-date * and the probablity weights need to be calculated. */ - const bool sampleCoord = params_.isSampleCoordStep(step); - const bool moveUmbrella = (sampleCoord || step == 0); - double convolvedBias = 0; - if (params_.convolveForce || moveUmbrella || sampleCoord) + const bool isSampleCoordStep = params_.isSampleCoordStep(step); + const bool moveUmbrella = (isSampleCoordStep || step == 0); + double convolvedBias = 0; + const CoordState& coordState = state_.coordState(); + + if (params_.convolveForce || moveUmbrella || isSampleCoordStep) { if (params_.skipUpdates()) { state_.doSkippedUpdatesInNeighborhood(params_, grid_); } + convolvedBias = state_.updateProbabilityWeightsAndConvolvedBias( + dimParams_, grid_, moveUmbrella ? neighborLambdaEnergies : ArrayRef{}, + &probWeightNeighbor); - convolvedBias = - state_.updateProbabilityWeightsAndConvolvedBias(dimParams_, grid_, &probWeightNeighbor); - - if (sampleCoord) + if (isSampleCoordStep) { - updateForceCorrelationGrid(probWeightNeighbor, t); + updateForceCorrelationGrid(probWeightNeighbor, neighborLambdaDhdl, t); - state_.sampleCoordAndPmf(grid_, probWeightNeighbor, convolvedBias); + state_.sampleCoordAndPmf(dimParams_, grid_, probWeightNeighbor, convolvedBias); + } + /* Set the umbrella grid point (for the lambda axis) to the + * current grid point. */ + if (params_.convolveForce && grid_.hasLambdaAxis()) + { + state_.setUmbrellaGridpointToGridpoint(); } } - const CoordState& coordState = state_.coordState(); - /* Set the bias force and get the potential contribution from this bias. * The potential jump occurs at different times depending on how * the force is applied (and how the potential is normalized). @@ -159,7 +167,9 @@ gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec c double potential; if (params_.convolveForce) { - state_.calcConvolvedForce(dimParams_, grid_, probWeightNeighbor, tempForce_, biasForce_); + state_.calcConvolvedForce(dimParams_, grid_, probWeightNeighbor, + moveUmbrella ? neighborLambdaDhdl : ArrayRef{}, + tempForce_, biasForce_); potential = -convolvedBias * params_.invBeta; } @@ -170,7 +180,8 @@ gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec c "AWH bias grid point for the umbrella reference value is outside of the " "target region."); potential = state_.calcUmbrellaForceAndPotential( - dimParams_, grid_, coordState.umbrellaGridpoint(), biasForce_); + dimParams_, grid_, coordState.umbrellaGridpoint(), + moveUmbrella ? neighborLambdaDhdl : ArrayRef{}, biasForce_); /* Moving the umbrella results in a force correction and * a new potential. The umbrella center is sampled as often as @@ -179,9 +190,11 @@ gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec c */ if (moveUmbrella) { - double newPotential = state_.moveUmbrella(dimParams_, grid_, probWeightNeighbor, - biasForce_, step, seed, params_.biasIndex); - *potentialJump = newPotential - potential; + const bool onlySampleUmbrellaGridpoint = false; + double newPotential = state_.moveUmbrella(dimParams_, grid_, probWeightNeighbor, + neighborLambdaDhdl, biasForce_, step, seed, + params_.biasIndex, onlySampleUmbrellaGridpoint); + *potentialJump = newPotential - potential; } } @@ -198,6 +211,14 @@ gmx::ArrayRef Bias::calcForceAndUpdateBias(const awh_dvec c *potentialJump = newPotential - potential; } } + /* If there is a lambda axis it is still controlled using an umbrella even if the force + * is convolved in the other dimensions. */ + if (moveUmbrella && params_.convolveForce && grid_.hasLambdaAxis()) + { + const bool onlySampleUmbrellaGridpoint = true; + state_.moveUmbrella(dimParams_, grid_, probWeightNeighbor, neighborLambdaDhdl, biasForce_, + step, seed, params_.biasIndex, onlySampleUmbrellaGridpoint); + } /* Return the potential. */ *awhPotential = potential; @@ -383,7 +404,9 @@ void Bias::printInitializationToLog(FILE* fplog) const } } -void Bias::updateForceCorrelationGrid(gmx::ArrayRef probWeightNeighbor, double t) +void Bias::updateForceCorrelationGrid(gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, + double t) { if (forceCorrelationGrid_ == nullptr) { @@ -403,7 +426,8 @@ void Bias::updateForceCorrelationGrid(gmx::ArrayRef probWeightNeig We actually add the force normalized by beta which has the units of 1/length. This means that the resulting correlation time integral is directly in units of friction time/length^2 which is really what we're interested in. */ - state_.calcUmbrellaForceAndPotential(dimParams_, grid_, indexNeighbor, forceFromNeighbor); + state_.calcUmbrellaForceAndPotential(dimParams_, grid_, indexNeighbor, neighborLambdaDhdl, + forceFromNeighbor); /* Note: we might want to give a whole list of data to add instead and have this loop in the data adding function */ forceCorrelationGrid_->addData(indexNeighbor, weightNeighbor, forceFromNeighbor, t); @@ -426,4 +450,17 @@ int Bias::writeToEnergySubblocks(t_enxsubblock* subblock) const return writer_->writeToEnergySubblocks(*this, subblock); } +bool Bias::isFepLambdaDimension(int dim) const +{ + GMX_ASSERT(dim < ndim(), "Requested dimension out of range."); + + return dimParams_[dim].isFepLambdaDimension(); +} + +bool Bias::isSampleCoordStep(const int64_t step) const +{ + return params_.isSampleCoordStep(step); +} + + } // namespace gmx diff --git a/src/gromacs/awh/bias.h b/src/gromacs/awh/bias.h index de16d7a7c6..d034aea1cf 100644 --- a/src/gromacs/awh/bias.h +++ b/src/gromacs/awh/bias.h @@ -159,7 +159,8 @@ public: * \param[in] mdTimeStep The MD time step. * \param[in] numSharingSimulations The number of simulations to share the bias across. * \param[in] biasInitFilename Name of file to read PMF and target from. - * \param[in] thisRankWillDoIO Tells whether this MPI rank will do I/O (checkpointing, AWH output), normally (only) the master rank does I/O. + * \param[in] thisRankWillDoIO Tells whether this MPI rank will do I/O (checkpointing, AWH output), + * normally (only) the master rank does I/O. * \param[in] disableUpdateSkips If to disable update skips, useful for testing. */ Bias(int biasIndexInCollection, @@ -192,6 +193,18 @@ public: * - reweight samples to extract the PMF. * * \param[in] coordValue The current coordinate value(s). + * \param[in] neighborLambdaEnergies An array containing the energy of the system + * in neighboring lambdas. The array is of length numLambdas+1, where numLambdas is + * the number of free energy lambda states. Element 0 in the array is the energy + * of the current state and elements 1..numLambdas contain the energy of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. * \param[out] awhPotential Bias potential. * \param[out] potentialJump Change in bias potential for this bias. * \param[in] commRecord Struct for intra-simulation communication. @@ -202,15 +215,17 @@ public: * \param[in,out] fplog Log file. * \returns a reference to the bias force, size \ref ndim(), valid until the next call of this method or destruction of Bias, whichever comes first. */ - gmx::ArrayRef calcForceAndUpdateBias(const awh_dvec coordValue, - double* awhPotential, - double* potentialJump, - const t_commrec* commRecord, - const gmx_multisim_t* ms, - double t, - int64_t step, - int64_t seed, - FILE* fplog); + gmx::ArrayRef calcForceAndUpdateBias(const awh_dvec coordValue, + ArrayRef neighborLambdaEnergies, + ArrayRef neighborLambdaDhdl, + double* awhPotential, + double* potentialJump, + const t_commrec* commRecord, + const gmx_multisim_t* ms, + double t, + int64_t step, + int64_t seed, + FILE* fplog); /*! \brief * Calculates the convolved bias for a given coordinate value. @@ -301,9 +316,17 @@ private: * Collect samples for the force correlation analysis on the grid. * * \param[in] probWeightNeighbor Probability weight of the neighboring points. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. * \param[in] t The time. */ - void updateForceCorrelationGrid(gmx::ArrayRef probWeightNeighbor, double t); + void updateForceCorrelationGrid(gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, + double t); public: /*! \brief Return a const reference to the force correlation grid. @@ -328,6 +351,30 @@ public: */ int writeToEnergySubblocks(t_enxsubblock* subblock) const; + /*! \brief Returns true if the bias has a free energy lambda state dimension at all. + */ + bool hasFepLambdaDimension() const + { + return std::any_of(std::begin(dimParams_), std::end(dimParams_), + [](const auto& dimParam) { return dimParam.isFepLambdaDimension(); }); + } + + /*! \brief Returns whether the specified dimension is a free energy lambda + * state dimension. + * + * \param[in] dim The dimension to check. + * + * \returns true if the specified dimension is a free energy lambda state dimension. + */ + bool isFepLambdaDimension(int dim) const; + + /*! \brief + * Returns whether we should sample the coordinate. + * + * \param[in] step The MD step number. + */ + bool isSampleCoordStep(int64_t step) const; + /* Data members. */ private: const std::vector dimParams_; /**< Parameters for each dimension. */ diff --git a/src/gromacs/awh/biasgrid.cpp b/src/gromacs/awh/biasgrid.cpp index 028abc811a..f4db1606ce 100644 --- a/src/gromacs/awh/biasgrid.cpp +++ b/src/gromacs/awh/biasgrid.cpp @@ -51,6 +51,7 @@ #include #include +#include #include "gromacs/math/functions.h" #include "gromacs/math/utilities.h" @@ -194,6 +195,69 @@ double getDeviationFromPointAlongGridAxis(const BiasGrid& grid, int dimIndex, in return getDeviationPeriodic(value, coordValue, grid.axis(dimIndex).period()); } +double getDeviationFromPointAlongGridAxis(const BiasGrid& grid, int dimIndex, int pointIndex1, int pointIndex2) +{ + double coordValue1 = grid.point(pointIndex1).coordValue[dimIndex]; + double coordValue2 = grid.point(pointIndex2).coordValue[dimIndex]; + + return getDeviationPeriodic(coordValue1, coordValue2, grid.axis(dimIndex).period()); +} + +bool pointsAlongLambdaAxis(const BiasGrid& grid, int pointIndex1, int pointIndex2) +{ + if (!grid.hasLambdaAxis()) + { + return false; + } + if (pointIndex1 == pointIndex2) + { + return true; + } + const int numDimensions = grid.numDimensions(); + for (int d = 0; d < numDimensions; d++) + { + if (grid.axis(d).isFepLambdaAxis()) + { + if (getDeviationFromPointAlongGridAxis(grid, d, pointIndex1, pointIndex2) == 0) + { + return false; + } + } + else + { + if (getDeviationFromPointAlongGridAxis(grid, d, pointIndex1, pointIndex2) != 0) + { + return false; + } + } + } + return true; +} + +bool pointsHaveDifferentLambda(const BiasGrid& grid, int pointIndex1, int pointIndex2) +{ + if (!grid.hasLambdaAxis()) + { + return false; + } + if (pointIndex1 == pointIndex2) + { + return false; + } + const int numDimensions = grid.numDimensions(); + for (int d = 0; d < numDimensions; d++) + { + if (grid.axis(d).isFepLambdaAxis()) + { + if (getDeviationFromPointAlongGridAxis(grid, d, pointIndex1, pointIndex2) != 0) + { + return true; + } + } + } + return false; +} + void linearArrayIndexToMultiDim(int indexLinear, int numDimensions, const awh_ivec numPointsDim, awh_ivec indexMulti) { for (int d = 0; d < numDimensions; d++) @@ -515,6 +579,30 @@ bool BiasGrid::covers(const awh_dvec value) const return valueIsInGrid(value, axis()); } +std::optional BiasGrid::lambdaAxisIndex() const +{ + for (size_t i = 0; i < axis_.size(); i++) + { + if (axis_[i].isFepLambdaAxis()) + { + return i; + } + } + return {}; +} + +int BiasGrid::numFepLambdaStates() const +{ + for (size_t i = 0; i < axis_.size(); i++) + { + if (axis_[i].isFepLambdaAxis()) + { + return axis_[i].numPoints(); + } + } + return 0; +} + int GridAxis::nearestIndex(double value) const { /* Get the point distance to the origin. This may by an out of index range for the axis. */ @@ -586,12 +674,21 @@ void setNeighborsOfGridPoint(int pointIndex, const BiasGrid& grid, std::vector 0) { @@ -645,7 +749,8 @@ void BiasGrid::initPoints() GridAxis::GridAxis(double origin, double end, double period, double pointDensity) : origin_(origin), - period_(period) + period_(period), + isFepLambdaAxis_(false) { length_ = getIntervalLengthPeriodic(origin_, end, period_); @@ -686,14 +791,24 @@ GridAxis::GridAxis(double origin, double end, double period, double pointDensity } } -GridAxis::GridAxis(double origin, double end, double period, int numPoints) : +GridAxis::GridAxis(double origin, double end, double period, int numPoints, bool isFepLambdaAxis) : origin_(origin), period_(period), - numPoints_(numPoints) + numPoints_(numPoints), + isFepLambdaAxis_(isFepLambdaAxis) { - length_ = getIntervalLengthPeriodic(origin_, end, period_); - spacing_ = numPoints_ > 1 ? length_ / (numPoints_ - 1) : period_; - numPointsInPeriod_ = static_cast(std::round(period_ / spacing_)); + if (isFepLambdaAxis) + { + length_ = end - origin_; + spacing_ = 1; + numPointsInPeriod_ = numPoints; + } + else + { + length_ = getIntervalLengthPeriodic(origin_, end, period_); + spacing_ = numPoints_ > 1 ? length_ / (numPoints_ - 1) : period_; + numPointsInPeriod_ = static_cast(std::round(period_ / spacing_)); + } } BiasGrid::BiasGrid(const std::vector& dimParams, const AwhDimParams* awhDimParams) @@ -705,12 +820,20 @@ BiasGrid::BiasGrid(const std::vector& dimParams, const AwhDimParams* { double origin = dimParams[d].scaleUserInputToInternal(awhDimParams[d].origin); double end = dimParams[d].scaleUserInputToInternal(awhDimParams[d].end); - period[d] = dimParams[d].scaleUserInputToInternal(awhDimParams[d].period); - static_assert(c_numPointsPerSigma >= 1.0, - "The number of points per sigma should be at least 1.0 to get a uniformly " - "covering the reaction using Gaussians"); - double pointDensity = std::sqrt(dimParams[d].betak) * c_numPointsPerSigma; - axis_.emplace_back(origin, end, period[d], pointDensity); + if (awhDimParams[d].eCoordProvider == eawhcoordproviderPULL) + { + period[d] = dimParams[d].scaleUserInputToInternal(awhDimParams[d].period); + static_assert( + c_numPointsPerSigma >= 1.0, + "The number of points per sigma should be at least 1.0 to get a uniformly " + "covering the reaction using Gaussians"); + double pointDensity = std::sqrt(dimParams[d].betak) * c_numPointsPerSigma; + axis_.emplace_back(origin, end, period[d], pointDensity); + } + else + { + axis_.emplace_back(origin, end, 0, dimParams[d].numFepLambdaStates, true); + } numPoints *= axis_[d].numPoints(); } @@ -743,9 +866,10 @@ void mapGridToDataGrid(std::vector* gridpointToDatapoint, /* Count the number of points for each dimension. Each dimension has its own stride. */ - int stride = 1; - int numPointsCounted = 0; - std::vector numPoints(grid.numDimensions()); + int stride = 1; + int numPointsCounted = 0; + std::vector numPoints(grid.numDimensions()); + std::vector isFepLambdaAxis(grid.numDimensions()); for (int d = grid.numDimensions() - 1; d >= 0; d--) { int numPointsInDim = 0; @@ -764,7 +888,8 @@ void mapGridToDataGrid(std::vector* gridpointToDatapoint, numPointsCounted = (numPointsCounted == 0) ? numPointsInDim : numPointsCounted * numPointsInDim; - numPoints[d] = numPointsInDim; + numPoints[d] = numPointsInDim; + isFepLambdaAxis[d] = grid.axis(d).isFepLambdaAxis(); } if (numPointsCounted != numDataPoints) @@ -781,7 +906,15 @@ void mapGridToDataGrid(std::vector* gridpointToDatapoint, /* The data grid has the data that was read and the properties of the AWH grid */ for (int d = 0; d < grid.numDimensions(); d++) { - axis_.emplace_back(data[d][0], data[d][numDataPoints - 1], grid.axis(d).period(), numPoints[d]); + if (isFepLambdaAxis[d]) + { + axis_.emplace_back(data[d][0], data[d][numDataPoints - 1], 0, numPoints[d], true); + } + else + { + axis_.emplace_back(data[d][0], data[d][numDataPoints - 1], grid.axis(d).period(), + numPoints[d], false); + } } /* Map each grid point to a data point. No interpolation, just pick the nearest one. diff --git a/src/gromacs/awh/biasgrid.h b/src/gromacs/awh/biasgrid.h index d86505ac77..9fd994daa7 100644 --- a/src/gromacs/awh/biasgrid.h +++ b/src/gromacs/awh/biasgrid.h @@ -55,6 +55,7 @@ #define GMX_AWH_BIASGRID_H #include +#include #include #include "dimparams.h" /* This is needed for awh_dvec */ @@ -90,10 +91,11 @@ public: * \param[in] end End value. * \param[in] period Period, pass 0 if not periodic. * \param[in] numPoints The number of points. + * \param[in] isFepLambdaAxis If this axis is controlling lambda. */ - GridAxis(double origin, double end, double period, int numPoints); + GridAxis(double origin, double end, double period, int numPoints, bool isFepLambdaAxis); - /*! \brief Returns if the axis has periodic boundaries. + /*! \brief Returns whether the axis has periodic boundaries. */ bool isPeriodic() const { return period_ > 0; } @@ -135,6 +137,10 @@ public: */ int nearestIndex(double value) const; + /*! \brief Returns whether this axis is coupled to the free energy lambda state. + */ + bool isFepLambdaAxis() const { return isFepLambdaAxis_; } + private: double origin_; /**< Interval start value */ double length_; /**< Interval length */ @@ -142,6 +148,7 @@ private: double spacing_; /**< Point spacing */ int numPoints_; /**< Number of points in the interval */ int numPointsInPeriod_; /**< Number of points in a period (0 if no periodicity) */ + bool isFepLambdaAxis_; /**< If this axis is coupled to the system's free energy lambda state */ }; /*! \internal @@ -186,7 +193,8 @@ public: /*! \brief Construct a grid using AWH input parameters. * - * \param[in] dimParams Dimension parameters including the expected inverse variance of the coordinate living on the grid (determines the grid spacing). + * \param[in] dimParams Dimension parameters including the expected inverse variance of the + * coordinate living on the grid (determines the grid spacing). * \param[in] awhDimParams Dimension params from inputrec. */ BiasGrid(const std::vector& dimParams, const AwhDimParams* awhDimParams); @@ -237,6 +245,27 @@ public: */ bool covers(const awh_dvec value) const; + /*! \brief Returns true if the grid has a free energy lambda state axis at all. + */ + bool hasLambdaAxis() const + { + return std::any_of(std::begin(axis_), std::end(axis_), + [](const auto& axis) { return axis.isFepLambdaAxis(); }); + } + + /*! \brief + * Returns the index of a free energy lambda state axis (there can be + * no more than one) if there is one. + */ + std::optional lambdaAxisIndex() const; + + /*! \brief + * Returns the number of free energy lambda states in the grid (the number + * of points along a free energy lambda state axis) or 0 if there are no free energy + * lambda state axes. + */ + int numFepLambdaStates() const; + private: std::vector point_; /**< Points on the grid */ std::vector axis_; /**< Axes, one for each dimension. */ @@ -335,6 +364,38 @@ void mapGridToDataGrid(std::vector* gridpointToDatapoint, */ double getDeviationFromPointAlongGridAxis(const BiasGrid& grid, int dimIndex, int pointIndex, double value); +/*! \brief + * Get the deviation from one point to another along one dimension in the grid. + * + * \param[in] grid The grid. + * \param[in] dimIndex Dimensional index in [0, ndim -1]. + * \param[in] pointIndex1 Grid point index of the first point. + * \param[in] pointIndex2 Grid point index of the second point. + * \returns the deviation of the two points along the given axis. + */ +double getDeviationFromPointAlongGridAxis(const BiasGrid& grid, int dimIndex, int pointIndex1, int pointIndex2); + +/*! \brief + * Checks whether two points are along a free energy lambda state axis. + * + * \param[in] grid The grid. + * \param[in] pointIndex1 Grid point index of the first point. + * \param[in] pointIndex2 Grid point index of the second point. + * \returns true if the two points are along a free energy lambda state axis. + */ +bool pointsAlongLambdaAxis(const BiasGrid& grid, int pointIndex1, int pointIndex2); + +/*! \brief + * Checks whether two points are different in the free energy lambda state + * dimension (if any). + * + * \param[in] grid The grid. + * \param[in] pointIndex1 Grid point index of the first point. + * \param[in] pointIndex2 Grid point index of the second point. + * \returns true if the two points have different lambda values. + */ +bool pointsHaveDifferentLambda(const BiasGrid& grid, int pointIndex1, int pointIndex2); + } // namespace gmx #endif diff --git a/src/gromacs/awh/biasparams.cpp b/src/gromacs/awh/biasparams.cpp index d5afec9f5f..ab3b647496 100644 --- a/src/gromacs/awh/biasparams.cpp +++ b/src/gromacs/awh/biasparams.cpp @@ -124,20 +124,28 @@ int64_t calcCheckCoveringInterval(const AwhParams& awhParams, int minNumSamplesCover = 0; for (size_t d = 0; d < gridAxis.size(); d++) { - GMX_RELEASE_ASSERT(dimParams[d].betak > 0, - "Inverse temperature (beta) and force constant (k) should be positive."); - double sigma = 1.0 / std::sqrt(dimParams[d].betak); - - /* The additional sample is here because to cover a discretized - axis of length sigma one needs two samples, one for each - end point. */ - GMX_RELEASE_ASSERT(gridAxis[d].length() / sigma < std::numeric_limits::max(), - "The axis length in units of sigma should fit in an int"); - int numSamplesCover = static_cast(std::ceil(gridAxis[d].length() / sigma)) + 1; - + int numSamplesCover; + if (!dimParams[d].isFepLambdaDimension()) + { + GMX_RELEASE_ASSERT( + dimParams[d].betak > 0, + "Inverse temperature (beta) and force constant (k) should be positive."); + double sigma = 1.0 / std::sqrt(dimParams[d].betak); + + /* The additional sample is here because to cover a discretized + axis of length sigma one needs two samples, one for each + end point. */ + GMX_RELEASE_ASSERT(gridAxis[d].length() / sigma < std::numeric_limits::max(), + "The axis length in units of sigma should fit in an int"); + numSamplesCover = static_cast(std::ceil(gridAxis[d].length() / sigma)) + 1; + } + else + { + numSamplesCover = dimParams[d].numFepLambdaStates; + } /* The minimum number of samples needed for simultaneously - covering all axes is limited by the axis requiring most - samples. */ + covering all axes is limited by the axis requiring most + samples. */ minNumSamplesCover = std::max(minNumSamplesCover, numSamplesCover); } @@ -255,12 +263,16 @@ double getInitialHistogramSizeEstimate(const std::vector& dimParams, std::vector x; for (size_t d = 0; d < gridAxis.size(); d++) { - double axisLength = gridAxis[d].length(); + double axisLength = gridAxis[d].isFepLambdaAxis() ? 1.0 : gridAxis[d].length(); if (axisLength > 0) { crossingTime += awhBiasParams.dimParams[d].diffusion / (axisLength * axisLength); /* The sigma of the Gaussian distribution in the umbrella */ - double sigma = 1. / std::sqrt(dimParams[d].betak); + double sigma = 1.; + if (dimParams[d].betak != 0) + { + sigma /= std::sqrt(dimParams[d].betak); + } x.push_back(sigma / axisLength); } } @@ -334,6 +346,8 @@ BiasParams::BiasParams(const AwhParams& awhParams, for (int d = 0; d < awhBiasParams.ndim; d++) { + /* The spacing in FEP dimensions is 1. The calculated coverRadius will be in lambda states + * (cf points in other dimensions). */ double coverRadiusInNm = 0.5 * awhBiasParams.dimParams[d].coverDiameter; double spacing = gridAxis[d].spacing(); coverRadius_[d] = spacing > 0 ? static_cast(std::round(coverRadiusInNm / spacing)) : 0; diff --git a/src/gromacs/awh/biasparams.h b/src/gromacs/awh/biasparams.h index 812963c27a..6b24e2bd09 100644 --- a/src/gromacs/awh/biasparams.h +++ b/src/gromacs/awh/biasparams.h @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2015,2016,2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2015,2016,2017,2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. diff --git a/src/gromacs/awh/biasstate.cpp b/src/gromacs/awh/biasstate.cpp index c63749e889..24dec6dca8 100644 --- a/src/gromacs/awh/biasstate.cpp +++ b/src/gromacs/awh/biasstate.cpp @@ -53,6 +53,7 @@ #include #include +#include #include "gromacs/fileio/gmxfio.h" #include "gromacs/fileio/xvgr.h" @@ -207,12 +208,15 @@ double freeEnergyMinimumValue(gmx::ArrayRef pointState) * w(point|value) = exp(bias(point) - U(value,point)), * where U is a harmonic umbrella potential. * - * \param[in] dimParams The bias dimensions parameters - * \param[in] points The point state. - * \param[in] grid The grid. - * \param[in] pointIndex Point to evaluate probability weight for. - * \param[in] pointBias Bias for the point (as a log weight). - * \param[in] value Coordinate value. + * \param[in] dimParams The bias dimensions parameters + * \param[in] points The point state. + * \param[in] grid The grid. + * \param[in] pointIndex Point to evaluate probability weight for. + * \param[in] pointBias Bias for the point (as a log weight). + * \param[in] value Coordinate value. + * \param[in] neighborLambdaEnergies The energy of the system in neighboring lambdas states. Can be + * empty when there are no free energy lambda state dimensions. + * \param[in] gridpointIndex The index of the current grid point. * \returns the log of the biased probability weight. */ double biasedLogWeightFromPoint(const std::vector& dimParams, @@ -220,11 +224,13 @@ double biasedLogWeightFromPoint(const std::vector& dimParams, const BiasGrid& grid, int pointIndex, double pointBias, - const awh_dvec value) + const awh_dvec value, + gmx::ArrayRef neighborLambdaEnergies, + int gridpointIndex) { double logWeight = detail::c_largeNegativeExponent; - /* Only points in the target reigon have non-zero weight */ + /* Only points in the target region have non-zero weight */ if (points[pointIndex].inTargetRegion()) { logWeight = pointBias; @@ -232,14 +238,62 @@ double biasedLogWeightFromPoint(const std::vector& dimParams, /* Add potential for all parameter dimensions */ for (size_t d = 0; d < dimParams.size(); d++) { - double dev = getDeviationFromPointAlongGridAxis(grid, d, pointIndex, value[d]); - logWeight -= 0.5 * dimParams[d].betak * dev * dev; + if (dimParams[d].isFepLambdaDimension()) + { + /* If this is not a sampling step or if this function is called from + * calcConvolvedBias(), when writing energy subblocks, neighborLambdaEnergies will + * be empty. No convolution is required along the lambda dimension. */ + if (!neighborLambdaEnergies.empty()) + { + const int pointLambdaIndex = grid.point(pointIndex).coordValue[d]; + const int gridpointLambdaIndex = grid.point(gridpointIndex).coordValue[d]; + logWeight -= dimParams[d].beta + * (neighborLambdaEnergies[pointLambdaIndex] + - neighborLambdaEnergies[gridpointLambdaIndex]); + } + } + else + { + double dev = getDeviationFromPointAlongGridAxis(grid, d, pointIndex, value[d]); + logWeight -= 0.5 * dimParams[d].betak * dev * dev; + } } } - return logWeight; } +/*! \brief + * Calculates the marginal distribution (marginal probability) for each value along + * a free energy lambda axis. + * The marginal distribution of one coordinate dimension value is the sum of the probability + * distribution of all values (herein all neighbor values) with the same value in the dimension + * of interest. + * \param[in] grid The bias grid. + * \param[in] neighbors The points to use for the calculation of the marginal distribution. + * \param[in] probWeightNeighbor Probability weights of the neighbors. + * \returns The calculated marginal distribution in a 1D array with + * as many elements as there are points along the axis of interest. + */ +std::vector calculateFELambdaMarginalDistribution(const BiasGrid& grid, + gmx::ArrayRef neighbors, + gmx::ArrayRef probWeightNeighbor) +{ + const std::optional lambdaAxisIndex = grid.lambdaAxisIndex(); + GMX_RELEASE_ASSERT(lambdaAxisIndex, + "There must be a free energy lambda axis in order to calculate the free " + "energy lambda marginal distribution."); + const int numFepLambdaStates = grid.numFepLambdaStates(); + std::vector lambdaMarginalDistribution(numFepLambdaStates, 0); + + for (size_t i = 0; i < neighbors.size(); i++) + { + const int neighbor = neighbors[i]; + const int lambdaState = grid.point(neighbor).coordValue[lambdaAxisIndex.value()]; + lambdaMarginalDistribution[lambdaState] += probWeightNeighbor[i]; + } + return lambdaMarginalDistribution; +} + } // namespace void BiasState::calcConvolvedPmf(const std::vector& dimParams, @@ -267,7 +321,7 @@ void BiasState::calcConvolvedPmf(const std::vector& dimParams, Note that this function only adds point within the target > 0 region. Sum weights, take the logarithm last to get the free energy. */ double logWeight = biasedLogWeightFromPoint(dimParams, points_, grid, neighbor, - biasNeighbor, point.coordValue); + biasNeighbor, point.coordValue, {}, m); freeEnergyWeights += std::exp(logWeight); } @@ -416,19 +470,31 @@ int BiasState::warnForHistogramAnomalies(const BiasGrid& grid, int biasIndex, do double BiasState::calcUmbrellaForceAndPotential(const std::vector& dimParams, const BiasGrid& grid, int point, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef force) const { double potential = 0; for (size_t d = 0; d < dimParams.size(); d++) { - double deviation = - getDeviationFromPointAlongGridAxis(grid, d, point, coordState_.coordValue()[d]); - - double k = dimParams[d].k; + if (dimParams[d].isFepLambdaDimension()) + { + if (!neighborLambdaDhdl.empty()) + { + const int coordpointLambdaIndex = grid.point(point).coordValue[d]; + force[d] = neighborLambdaDhdl[coordpointLambdaIndex]; + /* The potential should not be affected by the lambda dimension. */ + } + } + else + { + double deviation = + getDeviationFromPointAlongGridAxis(grid, d, point, coordState_.coordValue()[d]); + double k = dimParams[d].k; - /* Force from harmonic potential 0.5*k*dev^2 */ - force[d] = -k * deviation; - potential += 0.5 * k * deviation * deviation; + /* Force from harmonic potential 0.5*k*dev^2 */ + force[d] = -k * deviation; + potential += 0.5 * k * deviation * deviation; + } } return potential; @@ -437,6 +503,7 @@ double BiasState::calcUmbrellaForceAndPotential(const std::vector& di void BiasState::calcConvolvedForce(const std::vector& dimParams, const BiasGrid& grid, gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef forceWorkBuffer, gmx::ArrayRef force) const { @@ -454,7 +521,7 @@ void BiasState::calcConvolvedForce(const std::vector& dimParams, int indexNeighbor = neighbor[n]; /* Get the umbrella force from this point. The returned potential is ignored here. */ - calcUmbrellaForceAndPotential(dimParams, grid, indexNeighbor, forceFromNeighbor); + calcUmbrellaForceAndPotential(dimParams, grid, indexNeighbor, neighborLambdaDhdl, forceFromNeighbor); /* Add the weighted umbrella force to the convolved force. */ for (size_t d = 0; d < dimParams.size(); d++) @@ -467,18 +534,25 @@ void BiasState::calcConvolvedForce(const std::vector& dimParams, double BiasState::moveUmbrella(const std::vector& dimParams, const BiasGrid& grid, gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef biasForce, int64_t step, int64_t seed, - int indexSeed) + int indexSeed, + bool onlySampleUmbrellaGridpoint) { /* Generate and set a new coordinate reference value */ coordState_.sampleUmbrellaGridpoint(grid, coordState_.gridpointIndex(), probWeightNeighbor, step, seed, indexSeed); + if (onlySampleUmbrellaGridpoint) + { + return 0; + } + std::vector newForce(dimParams.size()); - double newPotential = - calcUmbrellaForceAndPotential(dimParams, grid, coordState_.umbrellaGridpoint(), newForce); + double newPotential = calcUmbrellaForceAndPotential( + dimParams, grid, coordState_.umbrellaGridpoint(), neighborLambdaDhdl, newForce); /* A modification of the reference value at time t will lead to a different force over t-dt/2 to t and over t to t+dt/2. For high switching rates @@ -923,7 +997,17 @@ bool BiasState::isSamplingRegionCovered(const BiasParams& params, double weightThreshold = 1; for (int d = 0; d < grid.numDimensions(); d++) { - weightThreshold *= grid.axis(d).spacing() * std::sqrt(dimParams[d].betak * 0.5 * M_1_PI); + if (grid.axis(d).isFepLambdaAxis()) + { + /* TODO: Verify that a threshold of 1.0 is OK. With a very high sample weight 1.0 can be + * reached quickly even in regions with low probability. Should the sample weight be + * taken into account here? */ + weightThreshold *= 1.0; + } + else + { + weightThreshold *= grid.axis(d).spacing() * std::sqrt(dimParams[d].betak * 0.5 * M_1_PI); + } } /* Project the sampling weights onto each dimension */ @@ -1154,6 +1238,7 @@ void BiasState::updateFreeEnergyAndAddSamplesToHistogram(const std::vector& dimParams, const BiasGrid& grid, + gmx::ArrayRef neighborLambdaEnergies, std::vector>* weight) const { /* Only neighbors of the current coordinate value will have a non-negligible chance of getting sampled */ @@ -1179,9 +1264,9 @@ double BiasState::updateProbabilityWeightsAndConvolvedBias(const std::vector& dimParams, double weightSum = 0; for (int neighbor : gridPoint.neighbor) { + /* No convolution is required along the lambda dimension. */ + if (pointsHaveDifferentLambda(grid, point, neighbor)) + { + continue; + } double logWeight = biasedLogWeightFromPoint(dimParams, points_, grid, neighbor, - points_[neighbor].bias(), coordValue); + points_[neighbor].bias(), coordValue, {}, point); weightSum += std::exp(logWeight); } @@ -1284,9 +1398,10 @@ void BiasState::sampleProbabilityWeights(const BiasGrid& grid, gmx::ArrayRef probWeightNeighbor, - double convolvedBias) +void BiasState::sampleCoordAndPmf(const std::vector& dimParams, + const BiasGrid& grid, + gmx::ArrayRef probWeightNeighbor, + double convolvedBias) { /* Sampling-based deconvolution extracting the PMF. * Update the PMF histogram with the current coordinate value. @@ -1301,13 +1416,60 @@ void BiasState::sampleCoordAndPmf(const BiasGrid& grid, * it works (mainly because how the PMF histogram is rescaled). */ - /* Only save coordinate data that is in range (the given index is always - * in range even if the coordinate value is not). - */ - if (grid.covers(coordState_.coordValue())) + const int gridPointIndex = coordState_.gridpointIndex(); + const std::optional lambdaAxisIndex = grid.lambdaAxisIndex(); + + /* Update the PMF of points along a lambda axis with their bias. */ + if (lambdaAxisIndex) { - /* Save PMF sum and keep a histogram of the sampled coordinate values */ - points_[coordState_.gridpointIndex()].samplePmf(convolvedBias); + const std::vector& neighbors = grid.point(gridPointIndex).neighbor; + + std::vector lambdaMarginalDistribution = + calculateFELambdaMarginalDistribution(grid, neighbors, probWeightNeighbor); + + awh_dvec coordValueAlongLambda = { coordState_.coordValue()[0], coordState_.coordValue()[1], + coordState_.coordValue()[2], coordState_.coordValue()[3] }; + for (size_t i = 0; i < neighbors.size(); i++) + { + const int neighbor = neighbors[i]; + double bias; + if (pointsAlongLambdaAxis(grid, gridPointIndex, neighbor)) + { + const double neighborLambda = grid.point(neighbor).coordValue[lambdaAxisIndex.value()]; + if (neighbor == gridPointIndex) + { + bias = convolvedBias; + } + else + { + coordValueAlongLambda[lambdaAxisIndex.value()] = neighborLambda; + bias = calcConvolvedBias(dimParams, grid, coordValueAlongLambda); + } + + const double probWeight = lambdaMarginalDistribution[neighborLambda]; + const double weightedBias = bias - std::log(probWeight); + + if (neighbor == gridPointIndex && grid.covers(coordState_.coordValue())) + { + points_[neighbor].samplePmf(weightedBias); + } + else + { + points_[neighbor].updatePmfUnvisited(weightedBias); + } + } + } + } + else + { + /* Only save coordinate data that is in range (the given index is always + * in range even if the coordinate value is not). + */ + if (grid.covers(coordState_.coordValue())) + { + /* Save PMF sum and keep a histogram of the sampled coordinate values */ + points_[gridPointIndex].samplePmf(convolvedBias); + } } /* Save probability weights for the update */ diff --git a/src/gromacs/awh/biasstate.h b/src/gromacs/awh/biasstate.h index c086a2ffa8..622f96f12c 100644 --- a/src/gromacs/awh/biasstate.h +++ b/src/gromacs/awh/biasstate.h @@ -215,12 +215,19 @@ public: * \param[in] dimParams The bias dimensions parameters. * \param[in] grid The grid. * \param[in] point Point for umbrella center. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. * \param[in,out] force Force vector to set. * Returns the umbrella potential. */ double calcUmbrellaForceAndPotential(const std::vector& dimParams, const BiasGrid& grid, int point, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef force) const; /*! \brief @@ -232,12 +239,19 @@ public: * \param[in] dimParams The bias dimensions parameters. * \param[in] grid The grid. * \param[in] probWeightNeighbor Probability weights of the neighbors. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. * \param[in] forceWorkBuffer Force work buffer, values only used internally. * \param[in,out] force Bias force vector to set. */ void calcConvolvedForce(const std::vector& dimParams, const BiasGrid& grid, gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef forceWorkBuffer, gmx::ArrayRef force) const; @@ -250,22 +264,32 @@ public: * This function should only be called when the bias force is not being convolved. * It is assumed that the probability distribution has been updated. * - * \param[in] dimParams Bias dimension parameters. - * \param[in] grid The grid. - * \param[in] probWeightNeighbor Probability weights of the neighbors. - * \param[in,out] biasForce The AWH bias force. - * \param[in] step Step number, needed for the random number generator. - * \param[in] seed Random seed. - * \param[in] indexSeed Second random seed, should be the bias Index. + * \param[in] dimParams Bias dimension parameters. + * \param[in] grid The grid. + * \param[in] probWeightNeighbor Probability weights of the neighbors. + * \param[in] neighborLambdaDhdl An array containing the dHdL at the neighboring lambda + * points. The array is of length numLambdas+1, where numLambdas is the number of free + * energy lambda states. Element 0 in the array is the dHdL + * of the current state and elements 1..numLambdas contain the dHdL of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. + * \param[in,out] biasForce The AWH bias force. + * \param[in] step Step number, needed for the random number generator. + * \param[in] seed Random seed. + * \param[in] indexSeed Second random seed, should be the bias Index. + * \param[in] onlySampleUmbrellaGridpoint Only sample the umbrella gridpoint without calculating + * force and potential. * \returns the new potential value. */ double moveUmbrella(const std::vector& dimParams, const BiasGrid& grid, gmx::ArrayRef probWeightNeighbor, + ArrayRef neighborLambdaDhdl, gmx::ArrayRef biasForce, int64_t step, int64_t seed, - int indexSeed); + int indexSeed, + bool onlySampleUmbrellaGridpoint); private: /*! \brief @@ -413,14 +437,21 @@ public: * it here since this saves us from doing extra exponential function evaluations * later on. * - * \param[in] dimParams The bias dimensions parameters - * \param[in] grid The grid. - * \param[out] weight Probability weights of the neighbors, SIMD aligned. + * \param[in] dimParams The bias dimensions parameters + * \param[in] grid The grid. + * \param[in] neighborLambdaEnergies An array containing the energy of the system + * in neighboring lambdas. The array is of length numLambdas+1, where numLambdas is + * the number of free energy lambda states. Element 0 in the array is the energy + * of the current state and elements 1..numLambdas contain the energy of the system in the + * neighboring lambda states (also including the current state). When there are no free + * energy lambda state dimensions this can be empty. + * \param[out] weight Probability weights of the neighbors, SIMD aligned. * \returns the convolved bias. */ double updateProbabilityWeightsAndConvolvedBias(const std::vector& dimParams, const BiasGrid& grid, + ArrayRef neighborLambdaEnergies, std::vector>* weight) const; /*! \brief @@ -441,13 +472,15 @@ public: * These samples do not affect the (future) sampling and are thus * pure observables. Statisics of these are stored in the energy file. * + * \param[in] dimParams The bias dimensions parameters * \param[in] grid The grid. * \param[in] probWeightNeighbor Probability weights of the neighbors. * \param[in] convolvedBias The convolved bias. */ - void sampleCoordAndPmf(const BiasGrid& grid, - gmx::ArrayRef probWeightNeighbor, - double convolvedBias); + void sampleCoordAndPmf(const std::vector& dimParams, + const BiasGrid& grid, + gmx::ArrayRef probWeightNeighbor, + double convolvedBias); /*! \brief * Calculates the convolved bias for a given coordinate value. * @@ -494,6 +527,10 @@ public: */ inline HistogramSize histogramSize() const { return histogramSize_; } + /*! \brief Sets the umbrella grid point to the current grid point + */ + void setUmbrellaGridpointToGridpoint() { coordState_.setUmbrellaGridpointToGridpoint(); } + /* Data members */ private: CoordState coordState_; /**< The Current coordinate state */ diff --git a/src/gromacs/awh/coordstate.cpp b/src/gromacs/awh/coordstate.cpp index 40b38da953..6de8832213 100644 --- a/src/gromacs/awh/coordstate.cpp +++ b/src/gromacs/awh/coordstate.cpp @@ -194,4 +194,9 @@ void CoordState::restoreFromHistory(const AwhBiasStateHistory& stateHistory) umbrellaGridpoint_ = stateHistory.umbrellaGridpoint; } +void CoordState::setUmbrellaGridpointToGridpoint() +{ + umbrellaGridpoint_ = gridpointIndex_; +} + } // namespace gmx diff --git a/src/gromacs/awh/coordstate.h b/src/gromacs/awh/coordstate.h index f924ef449d..f38ce86de9 100644 --- a/src/gromacs/awh/coordstate.h +++ b/src/gromacs/awh/coordstate.h @@ -126,6 +126,10 @@ public: */ int umbrellaGridpoint() const { return umbrellaGridpoint_; } + /*! \brief Sets the umbrella grid point to the current grid point + */ + void setUmbrellaGridpointToGridpoint(); + private: awh_dvec coordValue_; /**< Current coordinate value in (nm or rad) */ int gridpointIndex_; /**< The grid point index for the current coordinate value */ diff --git a/src/gromacs/awh/dimparams.h b/src/gromacs/awh/dimparams.h index 8478d19ec7..41f23ac55a 100644 --- a/src/gromacs/awh/dimparams.h +++ b/src/gromacs/awh/dimparams.h @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2015,2016,2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2015,2016,2017,2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -73,14 +73,33 @@ struct DimParams /*! \brief * Constructor. * - * \param[in] conversionFactor Conversion factor from user coordinate units to bias internal units (=DEG2RAD for angles). + * \param[in] conversionFactor Conversion factor from user coordinate units to bias internal + * units (=DEG2RAD for angles). * \param[in] forceConstant The harmonic force constant. * \param[in] beta 1/(k_B T). */ DimParams(double conversionFactor, double forceConstant, double beta) : k(forceConstant), + beta(beta), betak(beta * forceConstant), - userCoordUnitsToInternal(conversionFactor) + userCoordUnitsToInternal(conversionFactor), + numFepLambdaStates(0) + { + } + + /*! \brief + * Constructor for lambda dimension. + * + * \param[in] forceConstant The harmonic force constant. + * \param[in] beta 1/(k_B T). + * \param[in] numFepLambdaStates Number of lambda states in the system. + */ + DimParams(double forceConstant, double beta, int numFepLambdaStates) : + k(forceConstant), + beta(beta), + betak(beta * forceConstant), + userCoordUnitsToInternal(1.0), + numFepLambdaStates(numFepLambdaStates) { } @@ -98,9 +117,17 @@ struct DimParams */ double scaleUserInputToInternal(double value) const { return value * userCoordUnitsToInternal; } + /*! \brief Returns if this dimension has lambda states and thereby is a dimension coupled to lambda. + * + * \returns true if this dimension is related to the lambda state of the system. + */ + bool isFepLambdaDimension() const { return numFepLambdaStates > 0; } + const double k; /**< Force constant (kJ/mol/nm^2) for each coordinate dimension. */ + const double beta; /**< 1/(k_B T). */ const double betak; /**< Inverse variance (1/nm^2) for each coordinate dimension. */ const double userCoordUnitsToInternal; /**< Conversion factor coordinate units. */ + const double numFepLambdaStates; /**< Number of lambda points in this dimension. */ }; } // namespace gmx diff --git a/src/gromacs/awh/pointstate.cpp b/src/gromacs/awh/pointstate.cpp index 5878860cb8..2266fdcf20 100644 --- a/src/gromacs/awh/pointstate.cpp +++ b/src/gromacs/awh/pointstate.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2015,2016,2017,2019, by the GROMACS development team, led by + * Copyright (c) 2015,2016,2017,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -74,4 +74,12 @@ void PointState::samplePmf(double convolvedBias) } } +void PointState::updatePmfUnvisited(double bias) +{ + if (inTargetRegion()) + { + logPmfSum_ = expSum(logPmfSum_, -bias); + } +} + } // namespace gmx diff --git a/src/gromacs/awh/pointstate.h b/src/gromacs/awh/pointstate.h index a66a6371c2..a893140b6b 100644 --- a/src/gromacs/awh/pointstate.h +++ b/src/gromacs/awh/pointstate.h @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2015,2016,2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2015,2016,2017,2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -322,6 +322,13 @@ public: */ void samplePmf(double convolvedBias); + /*! \brief Update the PMF histogram of unvisited coordinate values + * (along a lambda axis) + * + * \param[in] bias The bias to update with. + */ + void updatePmfUnvisited(double bias); + private: /*! \brief Update the free energy estimate of a point. * diff --git a/src/gromacs/awh/read_params.cpp b/src/gromacs/awh/read_params.cpp index 9681110562..0eb30ee0f8 100644 --- a/src/gromacs/awh/read_params.cpp +++ b/src/gromacs/awh/read_params.cpp @@ -52,6 +52,7 @@ #include "gromacs/pbcutil/pbc.h" #include "gromacs/pulling/pull.h" #include "gromacs/random/seed.h" +#include "gromacs/topology/mtop_util.h" #include "gromacs/utility/cstringutil.h" #include "gromacs/utility/fatalerror.h" #include "gromacs/utility/smalloc.h" @@ -70,7 +71,203 @@ const char* eawhgrowth_names[eawhgrowthNR + 1] = { "exp-linear", "linear", nullp const char* eawhpotential_names[eawhpotentialNR + 1] = { "convolved", "umbrella", nullptr }; -const char* eawhcoordprovider_names[eawhcoordproviderNR + 1] = { "pull", nullptr }; +const char* eawhcoordprovider_names[eawhcoordproviderNR + 1] = { "pull", "fep-lambda", nullptr }; + +namespace +{ +/*! \brief + * Check the parameters of an AWH bias pull dimension. + * + * \param[in] prefix Prefix for dimension parameters. + * \param[in,out] dimParams AWH dimensional parameters. + * \param[in] pull_params Pull parameters. + * \param[in,out] wi Struct for bookeeping warnings. + */ +void checkPullDimParams(const std::string& prefix, + AwhDimParams* dimParams, + const pull_params_t* pull_params, + warninp_t wi) +{ + if (dimParams->coordIndex < 0) + { + gmx_fatal(FARGS, + "Failed to read a valid coordinate index for %s-coord-index. " + "Note that the pull coordinate indexing starts at 1.", + prefix.c_str()); + } + if (dimParams->coordIndex >= pull_params->ncoord) + { + gmx_fatal(FARGS, + "The given AWH coordinate index (%d) is larger than the number of pull " + "coordinates (%d)", + dimParams->coordIndex + 1, pull_params->ncoord); + } + if (pull_params->coord[dimParams->coordIndex].rate != 0) + { + auto message = formatString( + "Setting pull-coord%d-rate (%g) is incompatible with AWH biasing this coordinate", + dimParams->coordIndex + 1, pull_params->coord[dimParams->coordIndex].rate); + warning_error(wi, message); + } + + if (gmx_within_tol(dimParams->end - dimParams->origin, 0, GMX_REAL_EPS)) + { + auto message = formatString( + "The given interval length given by %s-start (%g) and %s-end (%g) is zero. " + "This will result in only one point along this axis in the coordinate value grid.", + prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end); + warning(wi, message); + } + + if (dimParams->forceConstant <= 0) + { + warning_error(wi, "The force AWH bias force constant should be > 0"); + } + + /* Grid params for each axis */ + int eGeom = pull_params->coord[dimParams->coordIndex].eGeom; + + /* Check that the requested interval is in allowed range */ + if (eGeom == epullgDIST) + { + if (dimParams->origin < 0 || dimParams->end < 0) + { + gmx_fatal(FARGS, + "%s-start (%g) or %s-end (%g) set to a negative value. With pull " + "geometry distance coordinate values are non-negative. " + "Perhaps you want to use geometry %s instead?", + prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, + EPULLGEOM(epullgDIR)); + } + } + else if (eGeom == epullgANGLE || eGeom == epullgANGLEAXIS) + { + if (dimParams->origin < 0 || dimParams->end > 180) + { + gmx_fatal(FARGS, + "%s-start (%g) and %s-end (%g) are outside of the allowed range " + "0 to 180 deg for pull geometries %s and %s ", + prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, + EPULLGEOM(epullgANGLE), EPULLGEOM(epullgANGLEAXIS)); + } + } + else if (eGeom == epullgDIHEDRAL) + { + if (dimParams->origin < -180 || dimParams->end > 180) + { + gmx_fatal(FARGS, + "%s-start (%g) and %s-end (%g) are outside of the allowed range " + "-180 to 180 deg for pull geometry %s. ", + prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, + EPULLGEOM(epullgDIHEDRAL)); + } + } +} + +/*! \brief + * Check parameters of an AWH bias in a free energy lambda state dimension. + * + * \param[in] prefix Prefix for dimension parameters. + * \param[in,out] dimParams AWH dimensional parameters. + * \param[in] lambdaParams The free energy lambda related parameters. + * \param[in] efep This is the type of FEP calculation (efep enumerator). + * \param[in,out] wi Struct for bookeeping warnings. + */ +void checkFepLambdaDimParams(const std::string& prefix, + const AwhDimParams* dimParams, + const t_lambda* lambdaParams, + const int efep, + warninp_t wi) +{ + std::string opt; + + if (!lambdaParams) + { + gmx_fatal(FARGS, + "There must be free energy input if using AWH to steer the free energy lambda " + "state."); + } + + if (lambdaParams->lambda_neighbors != -1) + { + gmx_fatal(FARGS, + "When running AWH coupled to the free energy lambda state all lambda states " + "should be used as neighbors in order to get correct probabilities, i.e. " + "calc-lambda-neighbors (%d) must be %d.", + lambdaParams->lambda_neighbors, -1); + } + + if (efep == efepSLOWGROWTH || lambdaParams->delta_lambda != 0) + { + gmx_fatal(FARGS, + "AWH coupled to the free energy lambda state is not compatible with slow-growth " + "and delta-lambda must be 0."); + } + + if (efep == efepEXPANDED) + { + gmx_fatal(FARGS, + "AWH is not treated like other expanded ensemble methods. Do not use expanded."); + } + + if (dimParams->origin < 0) + { + opt = prefix + "-start"; + gmx_fatal(FARGS, + "When running AWH coupled to the free energy lambda state the lower lambda state " + "for AWH, %s (%.0f), must be >= 0.", + opt.c_str(), dimParams->origin); + } + if (dimParams->end >= lambdaParams->n_lambda) + { + opt = prefix + "-end"; + gmx_fatal(FARGS, + "When running AWH coupled to the free energy lambda state the upper lambda state " + "for AWH, %s (%.0f), must be < n_lambda (%d).", + opt.c_str(), dimParams->origin, lambdaParams->n_lambda); + } + if (gmx_within_tol(dimParams->end - dimParams->origin, 0, GMX_REAL_EPS)) + { + auto message = formatString( + "The given interval length given by %s-start (%g) and %s-end (%g) is zero. " + "This will result in only one lambda point along this free energy lambda state " + "axis in the coordinate value grid.", + prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end); + warning(wi, message); + } + + if (dimParams->forceConstant != 0) + { + warning_error( + wi, + "The force AWH bias force constant is not used with free energy lambda state as " + "coordinate provider."); + } +} + +/*! \brief + * Check that AWH FEP is not combined with incompatible decoupling. + * + * \param[in] mtop System topology. + * \param[in,out] wi Struct for bookeeping warnings. + */ +void checkFepLambdaDimDecouplingConsistency(const gmx_mtop_t& mtop, warninp_t wi) +{ + if (haveFepPerturbedMasses(mtop)) + { + warning(wi, + "Masses may not be perturbed when using the free energy lambda state as AWH " + "coordinate provider. If you are using fep-lambdas to specify lambda states " + "make sure that you also specify mass-lambdas without perturbation."); + } + if (havePerturbedConstraints(mtop)) + { + warning(wi, + "Constraints may not be perturbed when using the free energy lambda state as AWH " + "coordinate provider. If you are using fep-lambdas to specify lambda states " + "make sure that you also specify mass-lambdas without perturbation."); + } +} /*! \brief * Read parameters of an AWH bias dimension. @@ -81,19 +278,20 @@ const char* eawhcoordprovider_names[eawhcoordproviderNR + 1] = { "pull", nullptr * \param[in,out] wi Struct for bookeeping warnings. * \param[in] bComment True if comments should be printed. */ -static void readDimParams(std::vector* inp, - const std::string& prefix, - AwhDimParams* dimParams, - warninp_t wi, - bool bComment) +void readDimParams(std::vector* inp, + const std::string& prefix, + AwhDimParams* dimParams, + warninp_t wi, + bool bComment) { std::string opt; if (bComment) { printStringNoNewline( - inp, "The provider of the reaction coordinate, currently only pull is supported"); + inp, + "The provider of the reaction coordinate, " + "currently only 'pull' and 'fep-lambda' (free energy lambda state) is supported"); } - opt = prefix + "-coord-provider"; dimParams->eCoordProvider = get_eeenum(inp, opt, eawhcoordprovider_names, wi); @@ -104,13 +302,6 @@ static void readDimParams(std::vector* inp, opt = prefix + "-coord-index"; int coordIndexInput; coordIndexInput = get_eint(inp, opt, 1, wi); - if (coordIndexInput < 1) - { - gmx_fatal(FARGS, - "Failed to read a valid coordinate index for %s. " - "Note that the pull coordinate indexing starts at 1.", - opt.c_str()); - } /* The pull coordinate indices start at 1 in the input file, at 0 internally */ dimParams->coordIndex = coordIndexInput - 1; @@ -119,12 +310,10 @@ static void readDimParams(std::vector* inp, { printStringNoNewline(inp, "Start and end values for each coordinate dimension"); } - opt = prefix + "-start"; dimParams->origin = get_ereal(inp, opt, 0., wi); - - opt = prefix + "-end"; - dimParams->end = get_ereal(inp, opt, 0., wi); + opt = prefix + "-end"; + dimParams->end = get_ereal(inp, opt, 0., wi); if (bComment) { @@ -136,7 +325,7 @@ static void readDimParams(std::vector* inp, if (bComment) { - printStringNoNewline(inp, "Estimated diffusion constant (nm^2/ps or rad^2/ps)"); + printStringNoNewline(inp, "Estimated diffusion constant (nm^2/ps, rad^2/ps or ps^-1)"); } opt = prefix + "-diffusion"; dimParams->diffusion = get_ereal(inp, opt, 0, wi); @@ -145,7 +334,8 @@ static void readDimParams(std::vector* inp, { printStringNoNewline(inp, "Diameter that needs to be sampled around a point before it is " - "considered covered."); + "considered covered. In FEP dimensions the cover diameter is " + "specified in lambda states."); } opt = prefix + "-cover-diameter"; dimParams->coverDiameter = get_ereal(inp, opt, 0, wi); @@ -156,107 +346,36 @@ static void readDimParams(std::vector* inp, * * \param[in] prefix Prefix for dimension parameters. * \param[in,out] dimParams AWH dimensional parameters. - * \param[in] pull_params Pull parameters. + * \param[in] ir Input parameter struct. * \param[in,out] wi Struct for bookeeping warnings. */ -static void checkDimParams(const std::string& prefix, - AwhDimParams* dimParams, - const pull_params_t* pull_params, - warninp_t wi) +void checkDimParams(const std::string& prefix, AwhDimParams* dimParams, const t_inputrec* ir, warninp_t wi) { - std::string opt; - - /* The pull settings need to be consistent with the AWH settings */ - if (!(pull_params->coord[dimParams->coordIndex].eType == epullEXTERNAL)) - { - gmx_fatal(FARGS, "AWH biasing can only be applied to pull type %s", EPULLTYPE(epullEXTERNAL)); - } - - if (dimParams->coordIndex >= pull_params->ncoord) - { - gmx_fatal(FARGS, - "The given AWH coordinate index (%d) is larger than the number of pull " - "coordinates (%d)", - dimParams->coordIndex + 1, pull_params->ncoord); - } - if (pull_params->coord[dimParams->coordIndex].rate != 0) - { - auto message = formatString( - "Setting pull-coord%d-rate (%g) is incompatible with AWH biasing this coordinate", - dimParams->coordIndex + 1, pull_params->coord[dimParams->coordIndex].rate); - warning_error(wi, message); - } - - /* BiasGrid params for each axis */ - int eGeom = pull_params->coord[dimParams->coordIndex].eGeom; - - if (gmx_within_tol(dimParams->end - dimParams->origin, 0, GMX_REAL_EPS)) - { - auto message = formatString( - "The given interval length given by %s-start (%g) and %s-end (%g) is zero. " - "This will result in only one point along this axis in the coordinate value grid.", - prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end); - warning(wi, message); - } - /* Check that the requested interval is in allowed range */ - if (eGeom == epullgDIST) + if (dimParams->eCoordProvider == eawhcoordproviderPULL) { - if (dimParams->origin < 0 || dimParams->end < 0) + if (!ir->bPull) { gmx_fatal(FARGS, - "%s-start (%g) or %s-end (%g) set to a negative value. With pull geometry " - "distance coordinate values are non-negative. " - "Perhaps you want to use geometry %s instead?", - prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, - EPULLGEOM(epullgDIR)); + "AWH biasing along a pull dimension is only compatible with COM pulling " + "turned on"); } + checkPullDimParams(prefix, dimParams, ir->pull, wi); } - else if (eGeom == epullgANGLE || eGeom == epullgANGLEAXIS) + else if (dimParams->eCoordProvider == eawhcoordproviderFREE_ENERGY_LAMBDA) { - if (dimParams->origin < 0 || dimParams->end > 180) + if (ir->efep == efepNO) { gmx_fatal(FARGS, - "%s-start (%g) and %s-end (%g) are outside of the allowed range 0 to 180 deg " - "for pull geometries %s and %s ", - prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, - EPULLGEOM(epullgANGLE), EPULLGEOM(epullgANGLEAXIS)); + "AWH biasing along a free energy lambda state dimension is only compatible " + "with free energy turned on"); } + checkFepLambdaDimParams(prefix, dimParams, ir->fepvals, ir->efep, wi); } - else if (eGeom == epullgDIHEDRAL) - { - if (dimParams->origin < -180 || dimParams->end > 180) - { - gmx_fatal(FARGS, - "%s-start (%g) and %s-end (%g) are outside of the allowed range -180 to 180 " - "deg for pull geometry %s. ", - prefix.c_str(), dimParams->origin, prefix.c_str(), dimParams->end, - EPULLGEOM(epullgDIHEDRAL)); - } - } - - opt = prefix + "-force-constant"; - if (dimParams->forceConstant <= 0) - { - warning_error(wi, "The force AWH bias force constant should be > 0"); - } - - opt = prefix + "-diffusion"; - if (dimParams->diffusion <= 0) - { - const double diffusion_default = 1e-5; - auto message = formatString( - "%s not explicitly set by user. You can choose to use a default " - "value (%g nm^2/ps or rad^2/ps) but this may very well be " - "non-optimal for your system!", - opt.c_str(), diffusion_default); - warning(wi, message); - dimParams->diffusion = diffusion_default; - } - - opt = prefix + "-cover-diameter"; - if (dimParams->coverDiameter < 0) + else { - gmx_fatal(FARGS, "%s (%g) cannot be negative.", opt.c_str(), dimParams->coverDiameter); + gmx_fatal(FARGS, + "AWH biasing can only be applied to pull and free energy lambda state " + "coordinates"); } } @@ -266,7 +385,7 @@ static void checkDimParams(const std::string& prefix, * \param[in] awhBiasParams AWH bias parameters. * \param[in,out] wi Struct for bookkeeping warnings. */ -static void checkInputConsistencyAwhBias(const AwhBiasParams& awhBiasParams, warninp_t wi) +void checkInputConsistencyAwhBias(const AwhBiasParams& awhBiasParams, warninp_t wi) { /* Covering diameter and sharing warning. */ for (int d = 0; d < awhBiasParams.ndim; d++) @@ -289,11 +408,11 @@ static void checkInputConsistencyAwhBias(const AwhBiasParams& awhBiasParams, war * \param[in,out] wi Struct for bookeeping warnings. * \param[in] bComment True if comments should be printed. */ -static void readBiasParams(std::vector* inp, - AwhBiasParams* awhBiasParams, - const std::string& prefix, - warninp_t wi, - bool bComment) +void readBiasParams(std::vector* inp, + AwhBiasParams* awhBiasParams, + const std::string& prefix, + warninp_t wi, + bool bComment) { if (bComment) { @@ -389,10 +508,7 @@ static void readBiasParams(std::vector* inp, * \param[in] ir Input parameter struct. * \param[in,out] wi Struct for bookeeping warnings. */ -static void checkBiasParams(const AwhBiasParams* awhBiasParams, - const std::string& prefix, - const t_inputrec* ir, - warninp_t wi) +void checkBiasParams(const AwhBiasParams* awhBiasParams, const std::string& prefix, const t_inputrec* ir, warninp_t wi) { std::string opt = prefix + "-error-init"; if (awhBiasParams->errorInitial <= 0) @@ -487,7 +603,7 @@ static void checkBiasParams(const AwhBiasParams* awhBiasParams, for (int d = 0; d < awhBiasParams->ndim; d++) { std::string prefixdim = prefix + formatString("-dim%d", d + 1); - checkDimParams(prefixdim, &awhBiasParams->dimParams[d], ir->pull, wi); + checkDimParams(prefixdim, &awhBiasParams->dimParams[d], ir, wi); } /* Check consistencies here that cannot be checked at read time at a lower level. */ @@ -500,7 +616,7 @@ static void checkBiasParams(const AwhBiasParams* awhBiasParams, * \param[in] awhParams AWH parameters. * \param[in,out] wi Struct for bookkeeping warnings. */ -static void checkInputConsistencyAwh(const AwhParams& awhParams, warninp_t wi) +void checkInputConsistencyAwh(const AwhParams& awhParams, warninp_t wi) { /* Each pull coord can map to at most 1 AWH coord. * Check that we have a shared bias when requesting multisim sharing. @@ -520,11 +636,19 @@ static void checkInputConsistencyAwh(const AwhParams& awhParams, warninp_t wi) { for (int d1 = 0; d1 < awhBiasParams1.ndim; d1++) { + if (awhBiasParams1.dimParams[d1].eCoordProvider == eawhcoordproviderFREE_ENERGY_LAMBDA) + { + continue; + } const AwhBiasParams& awhBiasParams2 = awhParams.awhBiasParams[k2]; /* d1 is the reference dimension of the reference AWH. d2 is the dim index of the AWH to compare with. */ for (int d2 = 0; d2 < awhBiasParams2.ndim; d2++) { + if (awhBiasParams2.dimParams[d2].eCoordProvider == eawhcoordproviderFREE_ENERGY_LAMBDA) + { + continue; + } /* Give an error if (d1, k1) is different from (d2, k2) but the pull coordinate is the same */ if ((d1 != d2 || k1 != k2) && (awhBiasParams1.dimParams[d1].coordIndex == awhBiasParams2.dimParams[d2].coordIndex)) @@ -559,6 +683,7 @@ static void checkInputConsistencyAwh(const AwhParams& awhParams, warninp_t wi) "this (yet)"); } } +} // namespace AwhParams* readAwhParams(std::vector* inp, warninp_t wi) { @@ -626,11 +751,6 @@ void checkAwhParams(const AwhParams* awhParams, const t_inputrec* ir, warninp_t { std::string opt; - if (!ir->bPull) - { - gmx_fatal(FARGS, "AWH biasing is only compatible with COM pulling turned on"); - } - opt = "awh-nstout"; if (awhParams->nstOut <= 0) { @@ -827,6 +947,71 @@ static void checkInputConsistencyInterval(const AwhParams* awhParams, warninp_t } } +/*! \brief + * Sets AWH parameters, for one AWH pull dimension. + * + * \param[in,out] dimParams AWH dimension parameters. + * \param[in] biasIndex The index of the bias containing this AWH pull dimension. + * \param[in] dimIndex The index of this AWH pull dimension. + * \param[in] pull_params Pull parameters. + * \param[in,out] pull_work Pull working struct to register AWH bias in. + * \param[in] pbc A pbc information structure. + * \param[in] compressibility Compressibility matrix for pressure coupling, + * pass all 0 without pressure coupling. + * \param[in,out] wi Struct for bookeeping warnings. + * + */ +static void setStateDependentAwhPullDimParams(AwhDimParams* dimParams, + const int biasIndex, + const int dimIndex, + const pull_params_t* pull_params, + pull_t* pull_work, + const t_pbc& pbc, + const tensor& compressibility, + warninp_t wi) +{ + const t_pull_coord& pullCoordParams = pull_params->coord[dimParams->coordIndex]; + + if (pullCoordParams.eGeom == epullgDIRPBC) + { + gmx_fatal(FARGS, + "AWH does not support pull geometry '%s'. " + "If the maximum distance between the groups is always " + "less than half the box size, " + "you can use geometry '%s' instead.", + EPULLGEOM(epullgDIRPBC), EPULLGEOM(epullgDIR)); + } + + dimParams->period = get_pull_coord_period(pullCoordParams, pbc, dimParams->end - dimParams->origin); + // We would like to check for scaling, but we don't have the full inputrec available here + if (dimParams->period > 0 + && !(pullCoordParams.eGeom == epullgANGLE || pullCoordParams.eGeom == epullgDIHEDRAL)) + { + bool coordIsScaled = false; + for (int d2 = 0; d2 < DIM; d2++) + { + if (pullCoordParams.vec[d2] != 0 && norm2(compressibility[d2]) != 0) + { + coordIsScaled = true; + } + } + if (coordIsScaled) + { + std::string mesg = gmx::formatString( + "AWH dimension %d of bias %d is periodic with pull geometry '%s', " + "while you should are applying pressure scaling to the " + "corresponding box vector, this is not supported.", + dimIndex + 1, biasIndex + 1, EPULLGEOM(pullCoordParams.eGeom)); + warning(wi, mesg.c_str()); + } + } + + /* The initial coordinate value, converted to external user units. */ + dimParams->coordValueInit = get_pull_coord_value(pull_work, dimParams->coordIndex, &pbc); + + dimParams->coordValueInit *= pull_conversion_factor_internal2userinput(&pullCoordParams); +} + void setStateDependentAwhParams(AwhParams* awhParams, const pull_params_t* pull_params, pull_t* pull_work, @@ -834,6 +1019,8 @@ void setStateDependentAwhParams(AwhParams* awhParams, PbcType pbcType, const tensor& compressibility, const t_grpopts* inputrecGroupOptions, + const real initLambda, + const gmx_mtop_t& mtop, warninp_t wi) { /* The temperature is not really state depenendent but is not known @@ -862,53 +1049,23 @@ void setStateDependentAwhParams(AwhParams* awhParams, AwhBiasParams* awhBiasParams = &awhParams->awhBiasParams[k]; for (int d = 0; d < awhBiasParams->ndim; d++) { - AwhDimParams* dimParams = &awhBiasParams->dimParams[d]; - const t_pull_coord& pullCoordParams = pull_params->coord[dimParams->coordIndex]; - - if (pullCoordParams.eGeom == epullgDIRPBC) + AwhDimParams* dimParams = &awhBiasParams->dimParams[d]; + if (dimParams->eCoordProvider == eawhcoordproviderPULL) { - gmx_fatal(FARGS, - "AWH does not support pull geometry '%s'. " - "If the maximum distance between the groups is always less than half the " - "box size, " - "you can use geometry '%s' instead.", - EPULLGEOM(epullgDIRPBC), EPULLGEOM(epullgDIR)); + setStateDependentAwhPullDimParams(dimParams, k, d, pull_params, pull_work, pbc, + compressibility, wi); } - - dimParams->period = - get_pull_coord_period(pullCoordParams, pbc, dimParams->end - dimParams->origin); - // We would like to check for scaling, but we don't have the full inputrec available here - if (dimParams->period > 0 - && !(pullCoordParams.eGeom == epullgANGLE || pullCoordParams.eGeom == epullgDIHEDRAL)) + else { - bool coordIsScaled = false; - for (int d2 = 0; d2 < DIM; d2++) - { - if (pullCoordParams.vec[d2] != 0 && norm2(compressibility[d2]) != 0) - { - coordIsScaled = true; - } - } - if (coordIsScaled) - { - std::string mesg = gmx::formatString( - "AWH dimension %d of bias %d is periodic with pull geometry '%s', " - "while you should are applying pressure scaling to the corresponding " - "box vector, this is not supported.", - d + 1, k + 1, EPULLGEOM(pullCoordParams.eGeom)); - warning(wi, mesg.c_str()); - } + dimParams->coordValueInit = initLambda; + checkFepLambdaDimDecouplingConsistency(mtop, wi); } - - /* The initial coordinate value, converted to external user units. */ - dimParams->coordValueInit = get_pull_coord_value(pull_work, dimParams->coordIndex, &pbc); - - dimParams->coordValueInit *= pull_conversion_factor_internal2userinput(&pullCoordParams); } } checkInputConsistencyInterval(awhParams, wi); - /* Register AWH as external potential with pull to check consistency. */ + /* Register AWH as external potential with pull (for AWH dimensions that use pull as + * reaction coordinate provider) to check consistency. */ Awh::registerAwhWithPull(*awhParams, pull_work); } diff --git a/src/gromacs/awh/read_params.h b/src/gromacs/awh/read_params.h index 72e28b7131..7da77f1fdd 100644 --- a/src/gromacs/awh/read_params.h +++ b/src/gromacs/awh/read_params.h @@ -52,6 +52,7 @@ struct t_grpopts; struct t_inputrec; +struct gmx_mtop_t; struct pull_params_t; struct pull_t; enum class PbcType : int; @@ -87,6 +88,9 @@ void checkAwhParams(const AwhParams* awhParams, const t_inputrec* inputrec, warn * \param[in] pbcType Periodic boundary conditions enum. * \param[in] compressibility Compressibility matrix for pressure coupling, pass all 0 without pressure coupling * \param[in] inputrecGroupOptions Parameters for atom groups. + * \param[in] initLambda The starting lambda, to allow using free energy lambda as reaction coordinate + * provider in any dimension. + * \param[in] mtop The system topology. * \param[in,out] wi Struct for bookeeping warnings. * * \note This function currently relies on the function set_pull_init to have been called. @@ -98,6 +102,8 @@ void setStateDependentAwhParams(AwhParams* awhParams, PbcType pbcType, const tensor& compressibility, const t_grpopts* inputrecGroupOptions, + real initLambda, + const gmx_mtop_t& mtop, warninp_t wi); } // namespace gmx diff --git a/src/gromacs/awh/tests/CMakeLists.txt b/src/gromacs/awh/tests/CMakeLists.txt index bb18d9568c..bbce544ace 100644 --- a/src/gromacs/awh/tests/CMakeLists.txt +++ b/src/gromacs/awh/tests/CMakeLists.txt @@ -37,4 +37,5 @@ gmx_add_unit_test(AwhTest awh-test bias.cpp biasgrid.cpp biasstate.cpp + bias_fep_lambda_state.cpp ) diff --git a/src/gromacs/awh/tests/bias.cpp b/src/gromacs/awh/tests/bias.cpp index 4d5b54a8ee..c59fb1327f 100644 --- a/src/gromacs/awh/tests/bias.cpp +++ b/src/gromacs/awh/tests/bias.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2017,2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -100,6 +100,7 @@ static AwhTestParameters getAwhTestParameters(int eawhgrowth, int eawhpotential) awhDimParams.end = 1.5; awhDimParams.coordValueInit = awhDimParams.origin; awhDimParams.coverDiameter = 0; + awhDimParams.eCoordProvider = eawhcoordproviderPULL; AwhBiasParams& awhBiasParams = params.awhBiasParams; @@ -228,8 +229,9 @@ TEST_P(BiasTest, ForcesBiasPmf) awh_dvec coordValue = { coord, 0, 0, 0 }; double potential = 0; - gmx::ArrayRef biasForce = bias.calcForceAndUpdateBias( - coordValue, &potential, &potentialJump, nullptr, nullptr, step, step, seed_, nullptr); + gmx::ArrayRef biasForce = + bias.calcForceAndUpdateBias(coordValue, {}, {}, &potential, &potentialJump, nullptr, + nullptr, step, step, seed_, nullptr); force.push_back(biasForce[0]); pot.push_back(potential); @@ -313,8 +315,8 @@ TEST(BiasTest, DetectsCovering) awh_dvec coordValue = { coord, 0, 0, 0 }; double potential = 0; double potentialJump = 0; - bias.calcForceAndUpdateBias(coordValue, &potential, &potentialJump, nullptr, nullptr, step, - step, params.awhParams.seed, nullptr); + bias.calcForceAndUpdateBias(coordValue, {}, {}, &potential, &potentialJump, nullptr, + nullptr, step, step, params.awhParams.seed, nullptr); inInitialStage = bias.state().inInitialStage(); if (!inInitialStage) diff --git a/src/gromacs/awh/tests/bias_fep_lambda_state.cpp b/src/gromacs/awh/tests/bias_fep_lambda_state.cpp new file mode 100644 index 0000000000..1e4b452a81 --- /dev/null +++ b/src/gromacs/awh/tests/bias_fep_lambda_state.cpp @@ -0,0 +1,379 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2017,2018,2019,2020, by the GROMACS development team, led by + * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, + * and including many others, as listed in the AUTHORS file in the + * top-level source directory and at http://www.gromacs.org. + * + * GROMACS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * GROMACS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GROMACS; if not, see + * http://www.gnu.org/licenses, or write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * If you want to redistribute modifications to GROMACS, please + * consider that scientific software is very special. Version + * control is crucial - bugs must be traceable. We will be happy to + * consider code for inclusion in the official distribution, but + * derived work must not be called official GROMACS. Details are found + * in the README & COPYING files - if they are missing, get the + * official version at http://www.gromacs.org. + * + * To help us fund GROMACS development, we humbly ask that you cite + * the research papers on the package. Check out http://www.gromacs.org. + */ +#include "gmxpre.h" + +#include + +#include +#include +#include +#include + +#include +#include + +#include "gromacs/awh/bias.h" +#include "gromacs/awh/correlationgrid.h" +#include "gromacs/awh/pointstate.h" +#include "gromacs/mdtypes/awh_params.h" +#include "gromacs/utility/stringutil.h" + +#include "testutils/refdata.h" +#include "testutils/testasserts.h" + +namespace gmx +{ + +namespace test +{ + +//! The number of lambda states to use in the tests. +const int numLambdaStates = 16; + +/*! \internal \brief + * Struct that gathers all input for setting up and using a Bias + */ +struct AwhFepLambdaStateTestParameters +{ + AwhFepLambdaStateTestParameters() = default; + //! Move constructor + AwhFepLambdaStateTestParameters(AwhFepLambdaStateTestParameters&& o) noexcept : + beta(o.beta), + awhDimParams(o.awhDimParams), + awhBiasParams(o.awhBiasParams), + awhParams(o.awhParams), + dimParams(std::move(o.dimParams)) + { + awhBiasParams.dimParams = &awhDimParams; + awhParams.awhBiasParams = &awhBiasParams; + } + double beta; //!< 1/(kB*T) + + AwhDimParams awhDimParams; //!< Dimension parameters pointed to by \p awhBiasParams + AwhBiasParams awhBiasParams; //!< Bias parameters pointed to by \[ awhParams + AwhParams awhParams; //!< AWH parameters, this is the struct to actually use + + std::vector dimParams; //!< Dimension parameters for setting up Bias +}; + +/*! \internal \brief Helper function to fill an array with random values (between lowerBound and + * upperBound) from randomEngine. + */ +static void randomArrayFill(ArrayRef array, + std::default_random_engine randomEngine, + double lowerBound, + double upperBound) +{ + std::uniform_real_distribution unif(lowerBound, upperBound); + for (size_t i = 0; i < array.size(); i++) + { + array[i] = unif(randomEngine); + } +} + +//! Helper function to set up the C-style AWH parameters for the test +static AwhFepLambdaStateTestParameters getAwhTestParameters(int eawhgrowth, int eawhpotential) +{ + AwhFepLambdaStateTestParameters params; + + params.beta = 0.4; + + AwhDimParams& awhDimParams = params.awhDimParams; + + awhDimParams.period = 0; + awhDimParams.diffusion = 1e-4; + awhDimParams.origin = 0; + awhDimParams.end = numLambdaStates - 1; + awhDimParams.coordValueInit = awhDimParams.origin; + awhDimParams.coverDiameter = 0; + awhDimParams.eCoordProvider = eawhcoordproviderFREE_ENERGY_LAMBDA; + + AwhBiasParams& awhBiasParams = params.awhBiasParams; + + awhBiasParams.ndim = 1; + awhBiasParams.dimParams = &awhDimParams; + awhBiasParams.eTarget = eawhtargetCONSTANT; + awhBiasParams.targetBetaScaling = 0; + awhBiasParams.targetCutoff = 0; + awhBiasParams.eGrowth = eawhgrowth; + awhBiasParams.bUserData = FALSE; + awhBiasParams.errorInitial = 1.0 / params.beta; + awhBiasParams.shareGroup = 0; + awhBiasParams.equilibrateHistogram = FALSE; + + double k = 1000; + int64_t seed = 93471803; + + params.dimParams.emplace_back(k, params.beta, numLambdaStates); + + AwhParams& awhParams = params.awhParams; + + awhParams.numBias = 1; + awhParams.awhBiasParams = &awhBiasParams; + awhParams.seed = seed; + awhParams.nstOut = 0; + awhParams.nstSampleCoord = 1; + awhParams.numSamplesUpdateFreeEnergy = 10; + awhParams.ePotential = eawhpotential; + awhParams.shareBiasMultisim = FALSE; + + return params; +} + +//! Convenience typedef: growth type enum, potential type enum, disable update skips +typedef std::tuple BiasTestParameters; + +/*! \brief Test fixture for testing Bias updates + */ +class BiasFepLambdaStateTest : public ::testing::TestWithParam +{ +public: + //! Random seed for AWH MC sampling + int64_t seed_; + + //! The awh Bias + std::unique_ptr bias_; + + BiasFepLambdaStateTest() + { + /* We test all combinations of: + * eawhgrowth: + * eawhgrowthLINEAR: final, normal update phase + * ewahgrowthEXP_LINEAR: intial phase, updated size is constant + * eawhpotential (test both, but for the FEP lambda state dimension MC will in practice be used, + * except that eawhpotentialCONVOLVED also gives a potential output): + * eawhpotentialUMBRELLA: MC on lambda state + * eawhpotentialCONVOLVED: MD on a convolved potential landscape (falling back to MC on lambda state) + * disableUpdateSkips (should not affect the results): + * BiasParams::DisableUpdateSkips::yes: update the point state for every sample + * BiasParams::DisableUpdateSkips::no: update the point state at an interval > 1 sample + * + * Note: It would be nice to explicitly check that eawhpotential + * and disableUpdateSkips do not affect the point state. + * But the reference data will also ensure this. + */ + int eawhgrowth; + int eawhpotential; + BiasParams::DisableUpdateSkips disableUpdateSkips; + std::tie(eawhgrowth, eawhpotential, disableUpdateSkips) = GetParam(); + + /* Set up a basic AWH setup with a single, 1D bias with parameters + * such that we can measure the effects of different parameters. + */ + const AwhFepLambdaStateTestParameters params = getAwhTestParameters(eawhgrowth, eawhpotential); + + seed_ = params.awhParams.seed; + + double mdTimeStep = 0.1; + + bias_ = std::make_unique(-1, params.awhParams, params.awhBiasParams, params.dimParams, + params.beta, mdTimeStep, 1, "", Bias::ThisRankWillDoIO::No, + disableUpdateSkips); + } +}; + +TEST_P(BiasFepLambdaStateTest, ForcesBiasPmf) +{ + gmx::test::TestReferenceData data; + gmx::test::TestReferenceChecker checker(data.rootChecker()); + + Bias& bias = *bias_; + + /* Make strings with the properties we expect to be different in the tests. + * These also helps to interpret the reference data. + */ + std::vector props; + props.push_back(formatString("stage: %s", bias.state().inInitialStage() ? "initial" : "final")); + props.push_back(formatString("convolve forces: %s", bias.params().convolveForce ? "yes" : "no")); + props.push_back(formatString("skip updates: %s", bias.params().skipUpdates() ? "yes" : "no")); + + SCOPED_TRACE(gmx::formatString("%s, %s, %s", props[0].c_str(), props[1].c_str(), props[2].c_str())); + + std::vector force, pot; + + double potentialJump = 0; + double mdTimeStep = 0.1; + double energyNoiseMagnitude = 1.0; + double dhdlNoiseMagnitude = 1.5; + int nSteps = 501; + std::default_random_engine randomEngine; + randomEngine.seed(1234); + + /* Some energies to use as base values (to which some noise is added later on). */ + std::vector lambdaEnergyBase(numLambdaStates); + std::vector lambdaDhdlBase(numLambdaStates); + const double magnitude = 12.0; + for (int i = 0; i < numLambdaStates; i++) + { + lambdaEnergyBase[i] = magnitude * std::sin(i * 0.1); + lambdaDhdlBase[i] = magnitude * std::cos(i * 0.1); + } + + for (int step = 0; step < nSteps; step++) + { + /* Create some noise and add it to the base values */ + std::vector neighborLambdaEnergyNoise(numLambdaStates); + std::vector neighborLambdaDhdlNoise(numLambdaStates); + randomArrayFill(neighborLambdaEnergyNoise, randomEngine, -energyNoiseMagnitude, energyNoiseMagnitude); + randomArrayFill(neighborLambdaDhdlNoise, randomEngine, -dhdlNoiseMagnitude, dhdlNoiseMagnitude); + std::vector neighborLambdaEnergies(numLambdaStates); + std::vector neighborLambdaDhdl(numLambdaStates); + for (int i = 0; i < numLambdaStates; i++) + { + neighborLambdaEnergies[i] = lambdaEnergyBase[i] + neighborLambdaEnergyNoise[i]; + neighborLambdaDhdl[i] = lambdaDhdlBase[i] + neighborLambdaDhdlNoise[i]; + } + + int umbrellaGridpointIndex = bias.state().coordState().umbrellaGridpoint(); + awh_dvec coordValue = { bias.getGridCoordValue(umbrellaGridpointIndex)[0], 0, 0, 0 }; + double potential = 0; + gmx::ArrayRef biasForce = bias.calcForceAndUpdateBias( + coordValue, neighborLambdaEnergies, neighborLambdaDhdl, &potential, &potentialJump, + nullptr, nullptr, step * mdTimeStep, step, seed_, nullptr); + + force.push_back(biasForce[0]); + pot.push_back(potential); + } + + /* When skipping updates, ensure all skipped updates are performed here. + * This should result in the same bias state as at output in a normal run. + */ + if (bias.params().skipUpdates()) + { + bias.doSkippedUpdatesForAllPoints(); + } + + std::vector pointBias, logPmfsum; + for (auto& point : bias.state().points()) + { + pointBias.push_back(point.bias()); + logPmfsum.push_back(point.logPmfSum()); + } + + constexpr int ulpTol = 10; + + checker.checkSequence(props.begin(), props.end(), "Properties"); + checker.setDefaultTolerance(absoluteTolerance(magnitude * GMX_DOUBLE_EPS * ulpTol)); + checker.checkSequence(force.begin(), force.end(), "Force"); + checker.checkSequence(pot.begin(), pot.end(), "Potential"); + checker.setDefaultTolerance(relativeToleranceAsUlp(1.0, ulpTol)); + checker.checkSequence(pointBias.begin(), pointBias.end(), "PointBias"); + checker.checkSequence(logPmfsum.begin(), logPmfsum.end(), "PointLogPmfsum"); +} + +/* Scan initial/final phase, MC/convolved force and update skip (not) allowed + * Both the convolving and skipping should not affect the bias and PMF. + * It would be nice if the test would explicitly check for this. + * Currently this is tested through identical reference data. + */ +INSTANTIATE_TEST_CASE_P(WithParameters, + BiasFepLambdaStateTest, + ::testing::Combine(::testing::Values(eawhgrowthLINEAR, eawhgrowthEXP_LINEAR), + ::testing::Values(eawhpotentialUMBRELLA, eawhpotentialCONVOLVED), + ::testing::Values(BiasParams::DisableUpdateSkips::yes, + BiasParams::DisableUpdateSkips::no))); + +// Test that we detect coverings and exit the initial stage at the correct step +TEST(BiasFepLambdaStateTest, DetectsCovering) +{ + const AwhFepLambdaStateTestParameters params = + getAwhTestParameters(eawhgrowthEXP_LINEAR, eawhpotentialCONVOLVED); + + const double mdTimeStep = 0.1; + + Bias bias(-1, params.awhParams, params.awhBiasParams, params.dimParams, params.beta, mdTimeStep, + 1, "", Bias::ThisRankWillDoIO::No); + + const int64_t exitStepRef = 380; + + bool inInitialStage = bias.state().inInitialStage(); + + double energyNoiseMagnitude = 1.0; + double dhdlNoiseMagnitude = 1.5; + std::default_random_engine randomEngine; + randomEngine.seed(1234); + + /* Some energies to use as base values (to which some noise is added later on). */ + std::vector lambdaEnergyBase(numLambdaStates); + std::vector lambdaDhdlBase(numLambdaStates); + const double magnitude = 12.0; + for (int i = 0; i < numLambdaStates; i++) + { + lambdaEnergyBase[i] = magnitude * std::sin(i * 0.1); + lambdaDhdlBase[i] = magnitude * std::cos(i * 0.1); + } + + int64_t step; + /* Normally this loop exits at exitStepRef, but we extend with failure */ + for (step = 0; step <= 2 * exitStepRef; step++) + { + /* Create some noise and add it to the base values */ + std::vector neighborLambdaEnergyNoise(numLambdaStates); + std::vector neighborLambdaDhdlNoise(numLambdaStates); + randomArrayFill(neighborLambdaEnergyNoise, randomEngine, -energyNoiseMagnitude, energyNoiseMagnitude); + randomArrayFill(neighborLambdaDhdlNoise, randomEngine, -dhdlNoiseMagnitude, dhdlNoiseMagnitude); + std::vector neighborLambdaEnergies(numLambdaStates); + std::vector neighborLambdaDhdl(numLambdaStates); + for (int i = 0; i < numLambdaStates; i++) + { + neighborLambdaEnergies[i] = lambdaEnergyBase[i] + neighborLambdaEnergyNoise[i]; + neighborLambdaDhdl[i] = lambdaDhdlBase[i] + neighborLambdaDhdlNoise[i]; + } + + int umbrellaGridpointIndex = bias.state().coordState().umbrellaGridpoint(); + awh_dvec coordValue = { bias.getGridCoordValue(umbrellaGridpointIndex)[0], 0, 0, 0 }; + + double potential = 0; + double potentialJump = 0; + bias.calcForceAndUpdateBias(coordValue, neighborLambdaEnergies, neighborLambdaDhdl, + &potential, &potentialJump, nullptr, nullptr, step, step, + params.awhParams.seed, nullptr); + + inInitialStage = bias.state().inInitialStage(); + if (!inInitialStage) + { + break; + } + } + + EXPECT_EQ(false, inInitialStage); + if (!inInitialStage) + { + EXPECT_EQ(exitStepRef, step); + } +} + +} // namespace test +} // namespace gmx diff --git a/src/gromacs/awh/tests/biasstate.cpp b/src/gromacs/awh/tests/biasstate.cpp index cdb08acd00..60fe0d44d0 100644 --- a/src/gromacs/awh/tests/biasstate.cpp +++ b/src/gromacs/awh/tests/biasstate.cpp @@ -92,6 +92,7 @@ static AwhTestParameters getAwhTestParameters() awhDimParams0.end = 1.5; awhDimParams0.coordValueInit = awhDimParams0.origin; awhDimParams0.coverDiameter = 0; + awhDimParams0.eCoordProvider = eawhcoordproviderPULL; AwhDimParams& awhDimParams1 = awhBiasParams.dimParams[1]; @@ -101,6 +102,7 @@ static AwhTestParameters getAwhTestParameters() awhDimParams1.end = 1.3; awhDimParams1.coordValueInit = awhDimParams1.origin; awhDimParams1.coverDiameter = 0; + awhDimParams1.eCoordProvider = eawhcoordproviderPULL; awhBiasParams.ndim = 2; awhBiasParams.eTarget = eawhtargetCONSTANT; diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_0.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_0.xml new file mode 100644 index 0000000000..73dca47643 --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_0.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: final + convolve forces: no + skip updates: no + + + 501 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.618843635924877 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.407865034776886 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.787055710383672 + 11.484463217937368 + 11.150299212615359 + 7.9854380397522462 + 7.9854380397522462 + 12.407865034776886 + 12.636619251512844 + 11.681645921797619 + 12.407865034776886 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6024448199752941 + 11.11936220278454 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.876409458086407 + 10.92143612837118 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.787055710383672 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 11.11936220278454 + 10.540556840057921 + 11.495530169773147 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.681645921797619 + 12.636619251512844 + 12.407865034776886 + 12.407865034776886 + 8.8909476519676431 + 8.8909476519676431 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 11.876409458086407 + 8.4507330206875295 + 7.4957596909723048 + 11.150299212615359 + 11.484463217937368 + 11.787055710383672 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 9.889523596492225 + 8.6319577743306972 + 12.105272542330583 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.785832700507417 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 7.4957596909723048 + 7.8299236962943137 + 11.787055710383672 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.484463217937368 + 12.105272542330583 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 11.453526208106549 + 12.742029040098897 + 12.105272542330583 + 10.847706720169054 + 11.150299212615359 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 12.407865034776886 + 12.074335532499765 + 11.453526208106549 + 8.2701383275744256 + 7.6024448199752941 + 11.11936220278454 + 10.540556840057921 + 10.207027337780797 + 12.074335532499765 + 12.074335532499765 + 11.11936220278454 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6333818298061127 + 10.816769710338235 + 11.11936220278454 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 12.105272542330583 + 12.105272542330583 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 12.636619251512844 + 11.379053429351316 + 11.379053429351316 + 11.681645921797619 + 6.2294405202606695 + 6.2294405202606695 + 9.9060287852367068 + 9.3745732085462272 + 10.587906626094059 + 11.348116419520498 + 8.1647285389883741 + 8.2701383275744256 + 11.453526208106549 + 10.785832700507417 + 8.6010207644998786 + 9.889523596492225 + 13.362838364492113 + 12.407865034776886 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 10.618843635924877 + 10.92143612837118 + 11.452891705061662 + 11.787055710383672 + 12.742029040098897 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 12.121219715705681 + 9.268714272099011 + 8.6010207644998786 + 11.348116419520498 + 11.379053429351316 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 7.6333818298061127 + 8.1647285389883741 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 12.105272542330583 + 11.876409458086407 + 10.618843635924877 + 10.847706720169054 + 8.6319577743306972 + 8.9345502667770003 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.11936220278454 + 12.074335532499765 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 12.074335532499765 + 12.742029040098897 + 11.787055710383672 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.453526208106549 + 10.785832700507417 + 11.11936220278454 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 7.1844138499758952 + 5.895911017983547 + 10.816769710338235 + 11.484463217937368 + 12.121219715705681 + 12.121219715705681 + 11.453526208106549 + 10.587906626094059 + 8.4030946900865189 + 8.9345502667770003 + 11.787055710383672 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.742029040098897 + 12.742029040098897 + 9.7652513140669175 + 9.4310873087449067 + 9.4310873087449067 + 9.4310873087449067 + 11.150299212615359 + 11.150299212615359 + 7.4957596909723048 + 8.4507330206875295 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 12.407865034776886 + 9.889523596492225 + 8.9345502667770003 + 6.2294405202606695 + 6.5636045255826794 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 12.074335532499765 + 11.495530169773147 + 10.540556840057921 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.11936220278454 + 12.074335532499765 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 6.4000390266268736 + 7.3550123563420993 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.484463217937368 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 10.92143612837118 + 8.4030946900865189 + 9.268714272099011 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.484463217937368 + 11.484463217937368 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.742029040098897 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 10.92143612837118 + 10.92143612837118 + 11.787055710383672 + 11.484463217937368 + 11.484463217937368 + 8.2701383275744256 + 7.9359743222524166 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 10.540556840057921 + 8.5187524437411657 + 9.4310873087449067 + 11.452891705061662 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 9.5724992829595852 + 10.861002114951933 + 12.407865034776886 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 12.407865034776886 + 12.407865034776886 + 10.540556840057921 + 10.540556840057921 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 9.4310873087449067 + + + 501 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16 + -2.9581412974089889 + -2.8246290310544016 + -2.8377550587114126 + -2.7807132483932633 + -2.7730438576965382 + -2.7530943926215756 + -2.7508149584848902 + -2.7469978091585223 + -2.7452501953880741 + -2.7434830854330015 + -2.7422859611327945 + -2.7423485956208657 + -2.7414859306831203 + -2.7399531430550184 + -2.7407368669517913 + -2.7401802010430738 + + + 16 + 9.795538595485068 + 9.6620263291304571 + 9.6751523567874607 + 9.6181105464693228 + 9.6104411557726053 + 9.5904916906976396 + 9.5882122565609738 + 9.5843951072345863 + 9.5826474934641475 + 9.5808803835090632 + 9.5796832592088723 + 9.5797458936969182 + 9.5788832287591763 + 9.5773504411310704 + 9.5781341650278762 + 9.577577499119128 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_1.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_1.xml new file mode 100644 index 0000000000..189b92798a --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_1.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: final + convolve forces: no + skip updates: yes + + + 501 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.618843635924877 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.407865034776886 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.787055710383672 + 11.484463217937368 + 11.150299212615359 + 7.9854380397522462 + 7.9854380397522462 + 12.407865034776886 + 12.636619251512844 + 11.681645921797619 + 12.407865034776886 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6024448199752941 + 11.11936220278454 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.876409458086407 + 10.92143612837118 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.787055710383672 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 11.11936220278454 + 10.540556840057921 + 11.495530169773147 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.681645921797619 + 12.636619251512844 + 12.407865034776886 + 12.407865034776886 + 8.8909476519676431 + 8.8909476519676431 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 11.876409458086407 + 8.4507330206875295 + 7.4957596909723048 + 11.150299212615359 + 11.484463217937368 + 11.787055710383672 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 9.889523596492225 + 8.6319577743306972 + 12.105272542330583 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.785832700507417 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 7.4957596909723048 + 7.8299236962943137 + 11.787055710383672 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.484463217937368 + 12.105272542330583 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 11.453526208106549 + 12.742029040098897 + 12.105272542330583 + 10.847706720169054 + 11.150299212615359 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 12.407865034776886 + 12.074335532499765 + 11.453526208106549 + 8.2701383275744256 + 7.6024448199752941 + 11.11936220278454 + 10.540556840057921 + 10.207027337780797 + 12.074335532499765 + 12.074335532499765 + 11.11936220278454 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6333818298061127 + 10.816769710338235 + 11.11936220278454 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 12.105272542330583 + 12.105272542330583 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 12.636619251512844 + 11.379053429351316 + 11.379053429351316 + 11.681645921797619 + 6.2294405202606695 + 6.2294405202606695 + 9.9060287852367068 + 9.3745732085462272 + 10.587906626094059 + 11.348116419520498 + 8.1647285389883741 + 8.2701383275744256 + 11.453526208106549 + 10.785832700507417 + 8.6010207644998786 + 9.889523596492225 + 13.362838364492113 + 12.407865034776886 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 10.618843635924877 + 10.92143612837118 + 11.452891705061662 + 11.787055710383672 + 12.742029040098897 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 12.121219715705681 + 9.268714272099011 + 8.6010207644998786 + 11.348116419520498 + 11.379053429351316 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 7.6333818298061127 + 8.1647285389883741 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 12.105272542330583 + 11.876409458086407 + 10.618843635924877 + 10.847706720169054 + 8.6319577743306972 + 8.9345502667770003 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.11936220278454 + 12.074335532499765 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 12.074335532499765 + 12.742029040098897 + 11.787055710383672 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.453526208106549 + 10.785832700507417 + 11.11936220278454 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 7.1844138499758952 + 5.895911017983547 + 10.816769710338235 + 11.484463217937368 + 12.121219715705681 + 12.121219715705681 + 11.453526208106549 + 10.587906626094059 + 8.4030946900865189 + 8.9345502667770003 + 11.787055710383672 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.742029040098897 + 12.742029040098897 + 9.7652513140669175 + 9.4310873087449067 + 9.4310873087449067 + 9.4310873087449067 + 11.150299212615359 + 11.150299212615359 + 7.4957596909723048 + 8.4507330206875295 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 12.407865034776886 + 9.889523596492225 + 8.9345502667770003 + 6.2294405202606695 + 6.5636045255826794 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 12.074335532499765 + 11.495530169773147 + 10.540556840057921 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.11936220278454 + 12.074335532499765 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 6.4000390266268736 + 7.3550123563420993 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.484463217937368 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 10.92143612837118 + 8.4030946900865189 + 9.268714272099011 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.484463217937368 + 11.484463217937368 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.742029040098897 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 10.92143612837118 + 10.92143612837118 + 11.787055710383672 + 11.484463217937368 + 11.484463217937368 + 8.2701383275744256 + 7.9359743222524166 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 10.540556840057921 + 8.5187524437411657 + 9.4310873087449067 + 11.452891705061662 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 9.5724992829595852 + 10.861002114951933 + 12.407865034776886 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 12.407865034776886 + 12.407865034776886 + 10.540556840057921 + 10.540556840057921 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 9.4310873087449067 + + + 501 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16 + -2.9581412974089889 + -2.8246290310544016 + -2.8377550587114126 + -2.7807132483932633 + -2.7730438576965382 + -2.7530943926215756 + -2.7508149584848902 + -2.7469978091585223 + -2.7452501953880741 + -2.7434830854330015 + -2.7422859611327945 + -2.7423485956208657 + -2.7414859306831203 + -2.7399531430550184 + -2.7407368669517913 + -2.7401802010430738 + + + 16 + 9.795538595485068 + 9.6620263291304571 + 9.6751523567874607 + 9.6181105464693228 + 9.6104411557726053 + 9.5904916906976396 + 9.5882122565609738 + 9.5843951072345863 + 9.5826474934641475 + 9.5808803835090632 + 9.5796832592088723 + 9.5797458936969182 + 9.5788832287591763 + 9.5773504411310704 + 9.5781341650278762 + 9.577577499119128 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_2.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_2.xml new file mode 100644 index 0000000000..95ff4bccde --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_2.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: final + convolve forces: yes + skip updates: no + + + 501 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331162891429148 + 11.331162891429148 + 11.331162891429146 + 11.331162891429146 + 11.331162891429148 + 11.331162891429146 + 11.331162891429146 + 11.33116289142915 + 11.331162891429148 + 11.331162891429146 + 11.330554209108147 + 11.330554209108149 + 11.330554209108149 + 11.330554209108147 + 11.330554209108149 + 11.330554209108149 + 11.330554209108147 + 11.330554209108147 + 11.330554209108149 + 11.330554209108147 + 11.329944452952775 + 11.329944452952777 + 11.329944452952777 + 11.329944452952775 + 11.329944452952777 + 11.329944452952777 + 11.329944452952775 + 11.329944452952777 + 11.329944452952775 + 11.329944452952773 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360288 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.32872174071615 + 11.328721740716151 + 11.32872174071615 + 11.32872174071615 + 11.328721740716151 + 11.32872174071615 + 11.328721740716151 + 11.328721740716153 + 11.32872174071615 + 11.328721740716151 + 11.328108795393918 + 11.328108795393916 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393916 + 11.328108795393918 + 11.328108795393918 + 11.327494797755103 + 11.327494797755103 + 11.327494797755104 + 11.327494797755104 + 11.327494797755103 + 11.327494797755106 + 11.327494797755104 + 11.327494797755103 + 11.327494797755103 + 11.327494797755103 + 11.3268797531491 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.3268797531491 + 11.326263666913031 + 11.326263666913027 + 11.326263666913029 + 11.326263666913027 + 11.326263666913027 + 11.326263666913031 + 11.326263666913029 + 11.326263666913027 + 11.326263666913029 + 11.326263666913027 + 11.325646544371667 + 11.325646544371665 + 11.325646544371665 + 11.325646544371665 + 11.325646544371669 + 11.325646544371665 + 11.325646544371669 + 11.325646544371667 + 11.325646544371665 + 11.325646544371665 + 11.325028390837332 + 11.325028390837332 + 11.325028390837328 + 11.325028390837332 + 11.325028390837332 + 11.32502839083733 + 11.32502839083733 + 11.32502839083733 + 11.325028390837332 + 11.325028390837332 + 11.324409211609749 + 11.324409211609749 + 11.324409211609748 + 11.324409211609748 + 11.324409211609749 + 11.324409211609749 + 11.324409211609748 + 11.324409211609746 + 11.324409211609748 + 11.324409211609749 + 11.323789011976004 + 11.323789011976002 + 11.323789011976004 + 11.323789011976002 + 11.323789011976004 + 11.323789011976004 + 11.323789011976004 + 11.323789011976006 + 11.323789011976004 + 11.323789011976002 + 11.323167797210406 + 11.323167797210408 + 11.323167797210406 + 11.323167797210409 + 11.323167797210406 + 11.323167797210409 + 11.323167797210406 + 11.323167797210408 + 11.323167797210408 + 11.323167797210409 + 11.322545572574406 + 11.322545572574407 + 11.322545572574406 + 11.322545572574407 + 11.322545572574406 + 11.322545572574407 + 11.322545572574407 + 11.322545572574409 + 11.322545572574407 + 11.322545572574407 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316503 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316503 + 11.321298114672162 + 11.321298114672164 + 11.321298114672162 + 11.321298114672162 + 11.321298114672162 + 11.321298114672164 + 11.321298114672164 + 11.321298114672162 + 11.321298114672162 + 11.321298114672164 + 11.320672891863701 + 11.320672891863699 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320672891863705 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320046680100225 + 11.320046680100225 + 11.320046680100223 + 11.320046680100223 + 11.320046680100223 + 11.320046680100221 + 11.320046680100221 + 11.320046680100221 + 11.320046680100223 + 11.320046680100225 + 11.319419484577555 + 11.319419484577555 + 11.319419484577555 + 11.319419484577553 + 11.319419484577553 + 11.319419484577555 + 11.319419484577553 + 11.319419484577555 + 11.319419484577555 + 11.319419484577553 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.318162162970877 + 11.318162162970875 + 11.318162162970877 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.317532047211269 + 11.317532047211268 + 11.317532047211269 + 11.317532047211266 + 11.317532047211269 + 11.317532047211268 + 11.317532047211269 + 11.317532047211266 + 11.317532047211269 + 11.317532047211269 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316900968341109 + 11.316900968341107 + 11.316900968341107 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316268931488539 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488542 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.313731306333944 + 11.313731306333942 + 11.313731306333942 + 11.313731306333944 + 11.313731306333944 + 11.313731306333942 + 11.313731306333942 + 11.313731306333942 + 11.313731306333944 + 11.313731306333944 + 11.313094556007526 + 11.313094556007528 + 11.313094556007526 + 11.313094556007526 + 11.313094556007526 + 11.313094556007526 + 11.313094556007528 + 11.313094556007528 + 11.313094556007526 + 11.313094556007524 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.312456878176308 + 11.312456878176308 + 11.311818277870776 + 11.311818277870779 + 11.311818277870778 + 11.311818277870779 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870781 + 11.311178760107209 + 11.311178760107209 + 11.311178760107209 + 11.311178760107207 + 11.311178760107209 + 11.311178760107206 + 11.311178760107209 + 11.311178760107206 + 11.311178760107206 + 11.311178760107209 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887635 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.309896992199794 + 11.309896992199796 + 11.309896992199794 + 11.309896992199794 + 11.309896992199794 + 11.309896992199796 + 11.309896992199794 + 11.309896992199793 + 11.309896992199796 + 11.309896992199794 + 11.309254752017051 + 11.309254752017052 + 11.309254752017052 + 11.309254752017051 + 11.309254752017052 + 11.309254752017056 + 11.309254752017056 + 11.309254752017052 + 11.309254752017051 + 11.309254752017051 + 11.308611614298391 + 11.308611614298391 + 11.308611614298391 + 11.308611614298387 + 11.308611614298391 + 11.308611614298385 + 11.308611614298391 + 11.308611614298385 + 11.308611614298391 + 11.308611614298391 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988324 + 11.307967583988324 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307322666016885 + 11.307322666016884 + 11.307322666016884 + 11.307322666016884 + 11.307322666016884 + 11.307322666016885 + 11.307322666016884 + 11.307322666016885 + 11.307322666016884 + 11.307322666016885 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306676865299544 + 11.306676865299542 + 11.306676865299545 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306030186737198 + 11.306030186737198 + 11.306030186737198 + 11.306030186737198 + 11.306030186737196 + 11.306030186737198 + 11.306030186737196 + 11.306030186737198 + 11.306030186737198 + 11.306030186737196 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.305382635216112 + 11.305382635216114 + 11.305382635216116 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.304734215607887 + 11.304734215607887 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.304734215607892 + 11.304084932769417 + 11.30408493276942 + 11.30408493276942 + 11.304084932769417 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542855 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.302783796755563 + 11.302783796755563 + 11.302783796755563 + 11.302783796755563 + 11.302783796755564 + 11.302783796755564 + 11.302783796755563 + 11.302783796755564 + 11.302783796755563 + 11.302783796755563 + 11.302131953220115 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220115 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220115 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734226 + 11.301479265734224 + 11.301479265734224 + + + 501 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9414276019729915 + 6.9340252851965136 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9340252851965136 + 6.9414276019729915 + 6.937951424136366 + 6.937951424136366 + 6.9513536780404817 + 6.9513536780404817 + 6.937951424136366 + 6.9513536780404817 + 6.9513536780404817 + 6.9321205465116007 + 6.937951424136366 + 6.9513536780404817 + 6.9264840928509583 + 6.9612501694630389 + 6.9391397469176175 + 6.9283827044702084 + 6.9612501694630389 + 6.9391397469176175 + 6.9411932330686001 + 6.9313102331123568 + 6.9612501694630389 + 6.9411932330686001 + 6.9312632745043148 + 6.9711172111785462 + 6.9252837567321794 + 6.9312632745043148 + 6.9711172111785462 + 6.9711172111785462 + 6.9417006573982079 + 6.9711172111785462 + 6.9417006573982079 + 6.926916157079531 + 6.9809549374046798 + 6.9331209951034181 + 6.9809549374046798 + 6.9809549374046798 + 6.9476806540317995 + 6.9442639735959224 + 6.9809549374046798 + 6.9331209951034181 + 6.9476806540317995 + 6.9476806540317995 + 6.9311796289722993 + 6.9907634816419577 + 6.9235436976485722 + 6.9468296602865509 + 6.9907634816419577 + 6.9311796289722993 + 6.9907634816419577 + 6.9253153260906055 + 6.9468296602865509 + 6.9907634816419577 + 6.9493976824829842 + 6.9206590497395437 + 6.9493976824829842 + 7.0005429766767922 + 7.0005429766767922 + 6.9235230066919744 + 6.9493976824829842 + 6.9203684075030001 + 7.0005429766767922 + 6.9541728878362026 + 6.9341538594290517 + 7.0102935545845666 + 6.957420713992426 + 6.957420713992426 + 6.9519680054341411 + 6.9190964309145375 + 6.957420713992426 + 6.9519680054341411 + 6.9519680054341411 + 6.9519680054341411 + 6.9345052760011674 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 6.9310796496048734 + 6.9310530697331068 + 7.0297084837838488 + 6.9639195964006202 + 7.0297084837838488 + 7.0297084837838488 + 6.9156319061415186 + 6.9348602301954818 + 7.0297084837838488 + 6.9201499384998595 + 7.0297084837838488 + 6.9671705782083553 + 7.0393730956988154 + 7.0393730956988154 + 7.0393730956988154 + 6.9352187061305628 + 7.0393730956988154 + 6.9352187061305628 + 6.9671705782083553 + 6.9596924348231139 + 7.0393730956988154 + 7.0490093117398764 + 7.0490093117398764 + 6.9622716179654089 + 7.0490093117398764 + 7.0490093117398764 + 6.9704225379629703 + 6.9704225379629703 + 6.9704225379629703 + 7.0490093117398764 + 7.0490093117398764 + 6.9736754392005658 + 6.9309933944894722 + 6.9359461599776555 + 6.9648529316098449 + 6.9736754392005658 + 6.9736754392005658 + 7.0586172604738149 + 6.916796832536698 + 7.0586172604738149 + 6.9736754392005658 + 7.068197069775084 + 6.9674363423988783 + 6.9309801493708134 + 6.936315106406906 + 6.9099221125279726 + 6.9309801493708134 + 7.068197069775084 + 6.9130815477175878 + 6.9309801493708134 + 6.9674363423988783 + 6.9309702069176513 + 7.0777488668289603 + 6.9700218172034134 + 6.9801839217674866 + 6.9700218172034134 + 6.9801839217674866 + 6.9309702069176513 + 7.0777488668289603 + 6.9083944066192071 + 6.9801839217674866 + 6.9309635547993285 + 7.0872727781347074 + 6.9726093231217039 + 7.0872727781347074 + 6.9726093231217039 + 7.0872727781347074 + 7.0872727781347074 + 6.9370633599887013 + 7.0872727781347074 + 7.0872727781347074 + 6.9866957401662688 + 7.0967689295087499 + 6.9866957401662688 + 6.9751988274782484 + 6.9866957401662688 + 7.0967689295087499 + 7.0967689295087499 + 7.0967689295087499 + 6.9866957401662688 + 6.9751988274782484 + 7.1062374460878397 + 6.9309600724401133 + 7.1062374460878397 + 7.1062374460878397 + 6.9899528122985775 + 6.9378253241337084 + 6.91326026429003 + 7.1062374460878397 + 7.1062374460878397 + 6.9777902978227004 + 6.9122709879096034 + 6.9932106133682534 + 6.9122709879096034 + 7.1156784523322516 + 6.9002947318506971 + 7.1156784523322516 + 6.9049849024228882 + 6.9101500318940552 + 6.9309632177332627 + 6.9122709879096034 + 6.9007787595552497 + 6.9386008751375776 + 6.9309696044292037 + 6.9309696044292037 + 6.9007177283853665 + 6.982979007793034 + 6.982979007793034 + 7.1250920720289699 + 6.9964691089738711 + 6.9386008751375776 + 6.9102994269491713 + 7.1344784282948837 + 7.1344784282948837 + 6.9855761836340067 + 6.9855761836340067 + 6.999728265001453 + 6.9079519070249056 + 7.1344784282948837 + 7.1344784282948837 + 6.9389937072960794 + 6.9881751978908504 + 7.1438376435799853 + 6.9881751978908504 + 7.1438376435799853 + 7.0029880476226891 + 7.0029880476226891 + 7.1438376435799853 + 7.0029880476226891 + 7.1438376435799853 + 6.9393898901810269 + 7.1531698396705785 + 6.9397894085777345 + 6.9397894085777345 + 6.8961572203942083 + 6.9310080917707664 + 6.9083371552713153 + 7.0062484232931439 + 7.1531698396705785 + 6.9397894085777345 + 7.1531698396705785 + 7.16247513769249 + 6.9933786165057956 + 7.16247513769249 + 6.9401922473263999 + 7.16247513769249 + 7.0095093587504742 + 7.16247513769249 + 6.9401922473263999 + 7.16247513769249 + 7.16247513769249 + 7.0127708210126416 + 7.0127708210126416 + 7.0127708210126416 + 6.8932010392253575 + 6.9063841333105636 + 7.1717536581142713 + 7.1717536581142713 + 6.9959829588358495 + 6.9959829588358495 + 7.0127708210126416 + 6.9985890155234483 + 6.9024944945572306 + 7.0160327773761422 + 7.0160327773761422 + 6.8916102562066435 + 7.181005520750424 + 6.9410078255140917 + 7.181005520750424 + 7.181005520750424 + 6.9310753171762984 + 7.1902308447646064 + 6.9311040560598176 + 7.1902308447646064 + 7.0192951954142293 + 7.1902308447646064 + 6.9311040560598176 + 7.0011967560946831 + 7.1902308447646064 + 6.9311040560598176 + 7.1902308447646064 + 7.1994297486728627 + 7.1994297486728627 + 7.1994297486728627 + 7.0038061502896802 + 7.0225580429751382 + 7.1994297486728627 + 7.0225580429751382 + 7.0225580429751382 + 7.1994297486728627 + 6.9418365045588546 + 7.2086023503468297 + 6.9422557195828993 + 7.2086023503468297 + 7.2086023503468297 + 7.2086023503468297 + 7.0258212881803246 + 6.9311709581977112 + 7.0064171680614873 + 6.9422557195828993 + 7.2086023503468297 + 7.0090297795749628 + 7.2177487670169693 + 7.2177487670169693 + 6.8981672650228711 + 7.0290848994227009 + 7.2177487670169693 + 7.2177487670169693 + 7.2177487670169693 + 7.0290848994227009 + 7.0290848994227009 + 7.2268691152757745 + 6.93125034750497 + 7.2268691152757745 + 7.2268691152757745 + 7.2268691152757745 + 6.9431038264692226 + 6.93125034750497 + 6.93125034750497 + 7.2268691152757745 + 7.0116439552056518 + 7.0142596655386722 + 7.2359635110810041 + 7.2359635110810041 + 7.2359635110810041 + 7.0142596655386722 + 6.8792401036454294 + 6.9312946954931149 + 7.0356130949373874 + 6.9435326888275135 + 6.9435326888275135 + 6.9439647375496367 + 6.9313421301248006 + 6.8949442401667236 + 6.8810530022941006 + 7.2450320697588868 + 6.9439647375496367 + 6.9439647375496367 + 7.2450320697588868 + 7.2450320697588868 + 7.0168768813676046 + 7.0194955736933657 + 7.2540749060073484 + 7.2540749060073484 + 7.0421423820248545 + 6.8977089489300063 + 6.9443999580180069 + 7.0194955736933657 + 6.9443999580180069 + 6.8815587695612903 + 7.2540749060073484 + 6.8801188424585034 + 7.2630921338992263 + 7.0454073587248853 + 7.2630921338992263 + 6.8766678653427782 + 7.0221157137231058 + 6.9448383356685719 + 7.2630921338992263 + 7.2630921338992263 + 7.0454073587248853 + 7.2720838668854784 + 7.0486725174219416 + 7.2720838668854784 + 7.2720838668854784 + 7.2720838668854784 + 7.0486725174219416 + 7.2720838668854784 + 6.8786804914314157 + 7.0486725174219416 + 7.2720838668854784 + 7.0273602227475687 + 6.8750529497439317 + 7.2810502177983984 + 6.8712010677788289 + 6.9457245045269387 + 7.0519378283601242 + 7.0519378283601242 + 6.9315625029080579 + 7.0273602227475687 + 6.8836797956320863 + 7.2899912988548232 + 7.2899912988548232 + 7.2899912988548232 + 7.0299845351777002 + 7.2899912988548232 + 6.9461722668731056 + 7.2899912988548232 + 6.9316251969529468 + 7.2899912988548232 + 7.2899912988548232 + 6.9316909083828238 + 7.0326101821804086 + 7.0326101821804086 + 6.9466231286779232 + 7.2989072216593396 + 6.8690695323135085 + 7.0326101821804086 + 7.0326101821804086 + 7.0326101821804086 + 6.9466231286779232 + 7.0617343809148849 + 7.307798097207483 + 7.307798097207483 + 7.307798097207483 + 7.307798097207483 + 6.8874978225812722 + 6.8705683918912204 + 6.9470770756430058 + 7.307798097207483 + 7.0617343809148849 + 7.3166640358889357 + 7.3166640358889357 + 7.0650000083831532 + 7.0650000083831532 + 6.9475340935226884 + 7.0650000083831532 + 6.9318313377872798 + 7.3166640358889357 + 7.0650000083831532 + 7.3166640358889357 + 7.3255051474907216 + 7.3255051474907216 + 7.3255051474907216 + 7.0404948538365808 + 6.9479941681239001 + 7.3255051474907216 + 7.0682656431414852 + 7.3255051474907216 + 7.3255051474907216 + 6.8853891472814439 + 7.3343215412003939 + 6.9484572853060156 + 7.0715312569533948 + 6.9484572853060156 + 6.8662309122613756 + 7.3343215412003939 + 6.8843379345018096 + 7.3343215412003939 + 7.0715312569533948 + 6.8892167430757576 + 6.9489234309807211 + 6.9489234309807211 + 7.343113325609214 + 7.343113325609214 + 7.0747968218296808 + 7.343113325609214 + 7.0747968218296808 + 7.0747968218296808 + 7.343113325609214 + 6.8749264504672771 + 6.8658058562408755 + 7.351880608715339 + 7.351880608715339 + 6.8658058562408755 + 7.0780623100267395 + 7.351880608715339 + 7.0780623100267395 + 7.0780623100267395 + 7.351880608715339 + 7.351880608715339 + 7.0813276940448873 + 7.0813276940448873 + 7.0510247708499243 + 7.3606234979269844 + 6.9322344212561973 + 6.8684345757381813 + 7.0510247708499243 + 7.3606234979269844 + 6.9322344212561973 + 7.0813276940448873 + 7.369342100065599 + 7.0845929466266933 + 7.369342100065599 + 7.369342100065599 + 7.0536601110339667 + 7.0536601110339667 + 7.369342100065599 + 7.0536601110339667 + 7.369342100065599 + 7.0845929466266933 + 7.0878580407553073 + 7.378036521369018 + 7.0562965428761348 + 7.378036521369018 + 6.8699646020805814 + 7.378036521369018 + 7.378036521369018 + 7.0562965428761348 + 7.0562965428761348 + 6.9508180186621047 + 7.3867068674946186 + 7.3867068674946186 + 7.0911229496528039 + 7.0911229496528039 + 7.3867068674946186 + 7.3867068674946186 + 7.3867068674946186 + 6.9325114866103688 + 7.0911229496528039 + 7.3867068674946186 + + + 16 + -2.9581412974089889 + -2.8246290310544016 + -2.8377550587114126 + -2.7807132483932633 + -2.7730438576965382 + -2.7530943926215756 + -2.7508149584848902 + -2.7469978091585223 + -2.7452501953880741 + -2.7434830854330015 + -2.7422859611327945 + -2.7423485956208657 + -2.7414859306831203 + -2.7399531430550184 + -2.7407368669517913 + -2.7401802010430738 + + + 16 + 9.795538595485068 + 9.6620263291304571 + 9.6751523567874607 + 9.6181105464693228 + 9.6104411557726053 + 9.5904916906976396 + 9.5882122565609738 + 9.5843951072345863 + 9.5826474934641475 + 9.5808803835090632 + 9.5796832592088723 + 9.5797458936969182 + 9.5788832287591763 + 9.5773504411310704 + 9.5781341650278762 + 9.577577499119128 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_3.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_3.xml new file mode 100644 index 0000000000..52ac3d86f6 --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_3.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: final + convolve forces: yes + skip updates: yes + + + 501 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331162891429148 + 11.331162891429148 + 11.331162891429146 + 11.331162891429146 + 11.331162891429148 + 11.331162891429146 + 11.331162891429146 + 11.33116289142915 + 11.331162891429148 + 11.331162891429146 + 11.330554209108147 + 11.330554209108149 + 11.330554209108149 + 11.330554209108147 + 11.330554209108149 + 11.330554209108149 + 11.330554209108147 + 11.330554209108147 + 11.330554209108149 + 11.330554209108147 + 11.329944452952775 + 11.329944452952777 + 11.329944452952777 + 11.329944452952775 + 11.329944452952777 + 11.329944452952777 + 11.329944452952775 + 11.329944452952777 + 11.329944452952775 + 11.329944452952773 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360288 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.329333628360287 + 11.32872174071615 + 11.328721740716151 + 11.32872174071615 + 11.32872174071615 + 11.328721740716151 + 11.32872174071615 + 11.328721740716151 + 11.328721740716153 + 11.32872174071615 + 11.328721740716151 + 11.328108795393918 + 11.328108795393916 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393918 + 11.328108795393916 + 11.328108795393918 + 11.328108795393918 + 11.327494797755103 + 11.327494797755103 + 11.327494797755104 + 11.327494797755104 + 11.327494797755103 + 11.327494797755106 + 11.327494797755104 + 11.327494797755103 + 11.327494797755103 + 11.327494797755103 + 11.3268797531491 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.326879753149099 + 11.3268797531491 + 11.326263666913031 + 11.326263666913027 + 11.326263666913029 + 11.326263666913027 + 11.326263666913027 + 11.326263666913031 + 11.326263666913029 + 11.326263666913027 + 11.326263666913029 + 11.326263666913027 + 11.325646544371667 + 11.325646544371665 + 11.325646544371665 + 11.325646544371665 + 11.325646544371669 + 11.325646544371665 + 11.325646544371669 + 11.325646544371667 + 11.325646544371665 + 11.325646544371665 + 11.325028390837332 + 11.325028390837332 + 11.325028390837328 + 11.325028390837332 + 11.325028390837332 + 11.32502839083733 + 11.32502839083733 + 11.32502839083733 + 11.325028390837332 + 11.325028390837332 + 11.324409211609749 + 11.324409211609749 + 11.324409211609748 + 11.324409211609748 + 11.324409211609749 + 11.324409211609749 + 11.324409211609748 + 11.324409211609746 + 11.324409211609748 + 11.324409211609749 + 11.323789011976004 + 11.323789011976002 + 11.323789011976004 + 11.323789011976002 + 11.323789011976004 + 11.323789011976004 + 11.323789011976004 + 11.323789011976006 + 11.323789011976004 + 11.323789011976002 + 11.323167797210406 + 11.323167797210408 + 11.323167797210406 + 11.323167797210409 + 11.323167797210406 + 11.323167797210409 + 11.323167797210406 + 11.323167797210408 + 11.323167797210408 + 11.323167797210409 + 11.322545572574406 + 11.322545572574407 + 11.322545572574406 + 11.322545572574407 + 11.322545572574406 + 11.322545572574407 + 11.322545572574407 + 11.322545572574409 + 11.322545572574407 + 11.322545572574407 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316503 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316505 + 11.321922343316503 + 11.321298114672162 + 11.321298114672164 + 11.321298114672162 + 11.321298114672162 + 11.321298114672162 + 11.321298114672164 + 11.321298114672164 + 11.321298114672162 + 11.321298114672162 + 11.321298114672164 + 11.320672891863701 + 11.320672891863699 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320672891863705 + 11.320672891863701 + 11.320672891863701 + 11.320672891863701 + 11.320046680100225 + 11.320046680100225 + 11.320046680100223 + 11.320046680100223 + 11.320046680100223 + 11.320046680100221 + 11.320046680100221 + 11.320046680100221 + 11.320046680100223 + 11.320046680100225 + 11.319419484577555 + 11.319419484577555 + 11.319419484577555 + 11.319419484577553 + 11.319419484577553 + 11.319419484577555 + 11.319419484577553 + 11.319419484577555 + 11.319419484577555 + 11.319419484577553 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318791310478117 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.318162162970877 + 11.318162162970875 + 11.318162162970877 + 11.318162162970875 + 11.318162162970875 + 11.318162162970875 + 11.317532047211269 + 11.317532047211268 + 11.317532047211269 + 11.317532047211266 + 11.317532047211269 + 11.317532047211268 + 11.317532047211269 + 11.317532047211266 + 11.317532047211269 + 11.317532047211269 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316900968341109 + 11.316900968341107 + 11.316900968341107 + 11.316900968341111 + 11.316900968341111 + 11.316900968341111 + 11.316268931488539 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.316268931488542 + 11.316268931488541 + 11.316268931488541 + 11.316268931488541 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767935 + 11.315635941767937 + 11.315635941767935 + 11.315635941767937 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.315002004279844 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.314367124110948 + 11.313731306333944 + 11.313731306333942 + 11.313731306333942 + 11.313731306333944 + 11.313731306333944 + 11.313731306333942 + 11.313731306333942 + 11.313731306333942 + 11.313731306333944 + 11.313731306333944 + 11.313094556007526 + 11.313094556007528 + 11.313094556007526 + 11.313094556007526 + 11.313094556007526 + 11.313094556007526 + 11.313094556007528 + 11.313094556007528 + 11.313094556007526 + 11.313094556007524 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.31245687817631 + 11.312456878176308 + 11.312456878176308 + 11.311818277870776 + 11.311818277870779 + 11.311818277870778 + 11.311818277870779 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870776 + 11.311818277870781 + 11.311178760107209 + 11.311178760107209 + 11.311178760107209 + 11.311178760107207 + 11.311178760107209 + 11.311178760107206 + 11.311178760107209 + 11.311178760107206 + 11.311178760107206 + 11.311178760107209 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.310538329887635 + 11.310538329887637 + 11.310538329887637 + 11.310538329887637 + 11.309896992199794 + 11.309896992199796 + 11.309896992199794 + 11.309896992199794 + 11.309896992199794 + 11.309896992199796 + 11.309896992199794 + 11.309896992199793 + 11.309896992199796 + 11.309896992199794 + 11.309254752017051 + 11.309254752017052 + 11.309254752017052 + 11.309254752017051 + 11.309254752017052 + 11.309254752017056 + 11.309254752017056 + 11.309254752017052 + 11.309254752017051 + 11.309254752017051 + 11.308611614298391 + 11.308611614298391 + 11.308611614298391 + 11.308611614298387 + 11.308611614298391 + 11.308611614298385 + 11.308611614298391 + 11.308611614298385 + 11.308611614298391 + 11.308611614298391 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988324 + 11.307967583988324 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307967583988326 + 11.307322666016885 + 11.307322666016884 + 11.307322666016884 + 11.307322666016884 + 11.307322666016884 + 11.307322666016885 + 11.307322666016884 + 11.307322666016885 + 11.307322666016884 + 11.307322666016885 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306676865299544 + 11.306676865299542 + 11.306676865299545 + 11.306676865299542 + 11.306676865299542 + 11.306676865299542 + 11.306030186737198 + 11.306030186737198 + 11.306030186737198 + 11.306030186737198 + 11.306030186737196 + 11.306030186737198 + 11.306030186737196 + 11.306030186737198 + 11.306030186737198 + 11.306030186737196 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.305382635216112 + 11.305382635216114 + 11.305382635216116 + 11.305382635216114 + 11.305382635216114 + 11.305382635216114 + 11.304734215607887 + 11.304734215607887 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.30473421560789 + 11.304734215607892 + 11.304084932769417 + 11.30408493276942 + 11.30408493276942 + 11.304084932769417 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.30408493276942 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542855 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.303434791542854 + 11.302783796755563 + 11.302783796755563 + 11.302783796755563 + 11.302783796755563 + 11.302783796755564 + 11.302783796755564 + 11.302783796755563 + 11.302783796755564 + 11.302783796755563 + 11.302783796755563 + 11.302131953220115 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220115 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220114 + 11.302131953220115 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734224 + 11.301479265734226 + 11.301479265734224 + 11.301479265734224 + + + 501 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9414276019729915 + 6.9340252851965136 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9340252851965136 + 6.9414276019729915 + 6.937951424136366 + 6.937951424136366 + 6.9513536780404817 + 6.9513536780404817 + 6.937951424136366 + 6.9513536780404817 + 6.9513536780404817 + 6.9321205465116007 + 6.937951424136366 + 6.9513536780404817 + 6.9264840928509583 + 6.9612501694630389 + 6.9391397469176175 + 6.9283827044702084 + 6.9612501694630389 + 6.9391397469176175 + 6.9411932330686001 + 6.9313102331123568 + 6.9612501694630389 + 6.9411932330686001 + 6.9312632745043148 + 6.9711172111785462 + 6.9252837567321794 + 6.9312632745043148 + 6.9711172111785462 + 6.9711172111785462 + 6.9417006573982079 + 6.9711172111785462 + 6.9417006573982079 + 6.926916157079531 + 6.9809549374046798 + 6.9331209951034181 + 6.9809549374046798 + 6.9809549374046798 + 6.9476806540317995 + 6.9442639735959224 + 6.9809549374046798 + 6.9331209951034181 + 6.9476806540317995 + 6.9476806540317995 + 6.9311796289722993 + 6.9907634816419577 + 6.9235436976485722 + 6.9468296602865509 + 6.9907634816419577 + 6.9311796289722993 + 6.9907634816419577 + 6.9253153260906055 + 6.9468296602865509 + 6.9907634816419577 + 6.9493976824829842 + 6.9206590497395437 + 6.9493976824829842 + 7.0005429766767922 + 7.0005429766767922 + 6.9235230066919744 + 6.9493976824829842 + 6.9203684075030001 + 7.0005429766767922 + 6.9541728878362026 + 6.9341538594290517 + 7.0102935545845666 + 6.957420713992426 + 6.957420713992426 + 6.9519680054341411 + 6.9190964309145375 + 6.957420713992426 + 6.9519680054341411 + 6.9519680054341411 + 6.9519680054341411 + 6.9345052760011674 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 7.0200153467327207 + 6.9310796496048734 + 6.9310530697331068 + 7.0297084837838488 + 6.9639195964006202 + 7.0297084837838488 + 7.0297084837838488 + 6.9156319061415186 + 6.9348602301954818 + 7.0297084837838488 + 6.9201499384998595 + 7.0297084837838488 + 6.9671705782083553 + 7.0393730956988154 + 7.0393730956988154 + 7.0393730956988154 + 6.9352187061305628 + 7.0393730956988154 + 6.9352187061305628 + 6.9671705782083553 + 6.9596924348231139 + 7.0393730956988154 + 7.0490093117398764 + 7.0490093117398764 + 6.9622716179654089 + 7.0490093117398764 + 7.0490093117398764 + 6.9704225379629703 + 6.9704225379629703 + 6.9704225379629703 + 7.0490093117398764 + 7.0490093117398764 + 6.9736754392005658 + 6.9309933944894722 + 6.9359461599776555 + 6.9648529316098449 + 6.9736754392005658 + 6.9736754392005658 + 7.0586172604738149 + 6.916796832536698 + 7.0586172604738149 + 6.9736754392005658 + 7.068197069775084 + 6.9674363423988783 + 6.9309801493708134 + 6.936315106406906 + 6.9099221125279726 + 6.9309801493708134 + 7.068197069775084 + 6.9130815477175878 + 6.9309801493708134 + 6.9674363423988783 + 6.9309702069176513 + 7.0777488668289603 + 6.9700218172034134 + 6.9801839217674866 + 6.9700218172034134 + 6.9801839217674866 + 6.9309702069176513 + 7.0777488668289603 + 6.9083944066192071 + 6.9801839217674866 + 6.9309635547993285 + 7.0872727781347074 + 6.9726093231217039 + 7.0872727781347074 + 6.9726093231217039 + 7.0872727781347074 + 7.0872727781347074 + 6.9370633599887013 + 7.0872727781347074 + 7.0872727781347074 + 6.9866957401662688 + 7.0967689295087499 + 6.9866957401662688 + 6.9751988274782484 + 6.9866957401662688 + 7.0967689295087499 + 7.0967689295087499 + 7.0967689295087499 + 6.9866957401662688 + 6.9751988274782484 + 7.1062374460878397 + 6.9309600724401133 + 7.1062374460878397 + 7.1062374460878397 + 6.9899528122985775 + 6.9378253241337084 + 6.91326026429003 + 7.1062374460878397 + 7.1062374460878397 + 6.9777902978227004 + 6.9122709879096034 + 6.9932106133682534 + 6.9122709879096034 + 7.1156784523322516 + 6.9002947318506971 + 7.1156784523322516 + 6.9049849024228882 + 6.9101500318940552 + 6.9309632177332627 + 6.9122709879096034 + 6.9007787595552497 + 6.9386008751375776 + 6.9309696044292037 + 6.9309696044292037 + 6.9007177283853665 + 6.982979007793034 + 6.982979007793034 + 7.1250920720289699 + 6.9964691089738711 + 6.9386008751375776 + 6.9102994269491713 + 7.1344784282948837 + 7.1344784282948837 + 6.9855761836340067 + 6.9855761836340067 + 6.999728265001453 + 6.9079519070249056 + 7.1344784282948837 + 7.1344784282948837 + 6.9389937072960794 + 6.9881751978908504 + 7.1438376435799853 + 6.9881751978908504 + 7.1438376435799853 + 7.0029880476226891 + 7.0029880476226891 + 7.1438376435799853 + 7.0029880476226891 + 7.1438376435799853 + 6.9393898901810269 + 7.1531698396705785 + 6.9397894085777345 + 6.9397894085777345 + 6.8961572203942083 + 6.9310080917707664 + 6.9083371552713153 + 7.0062484232931439 + 7.1531698396705785 + 6.9397894085777345 + 7.1531698396705785 + 7.16247513769249 + 6.9933786165057956 + 7.16247513769249 + 6.9401922473263999 + 7.16247513769249 + 7.0095093587504742 + 7.16247513769249 + 6.9401922473263999 + 7.16247513769249 + 7.16247513769249 + 7.0127708210126416 + 7.0127708210126416 + 7.0127708210126416 + 6.8932010392253575 + 6.9063841333105636 + 7.1717536581142713 + 7.1717536581142713 + 6.9959829588358495 + 6.9959829588358495 + 7.0127708210126416 + 6.9985890155234483 + 6.9024944945572306 + 7.0160327773761422 + 7.0160327773761422 + 6.8916102562066435 + 7.181005520750424 + 6.9410078255140917 + 7.181005520750424 + 7.181005520750424 + 6.9310753171762984 + 7.1902308447646064 + 6.9311040560598176 + 7.1902308447646064 + 7.0192951954142293 + 7.1902308447646064 + 6.9311040560598176 + 7.0011967560946831 + 7.1902308447646064 + 6.9311040560598176 + 7.1902308447646064 + 7.1994297486728627 + 7.1994297486728627 + 7.1994297486728627 + 7.0038061502896802 + 7.0225580429751382 + 7.1994297486728627 + 7.0225580429751382 + 7.0225580429751382 + 7.1994297486728627 + 6.9418365045588546 + 7.2086023503468297 + 6.9422557195828993 + 7.2086023503468297 + 7.2086023503468297 + 7.2086023503468297 + 7.0258212881803246 + 6.9311709581977112 + 7.0064171680614873 + 6.9422557195828993 + 7.2086023503468297 + 7.0090297795749628 + 7.2177487670169693 + 7.2177487670169693 + 6.8981672650228711 + 7.0290848994227009 + 7.2177487670169693 + 7.2177487670169693 + 7.2177487670169693 + 7.0290848994227009 + 7.0290848994227009 + 7.2268691152757745 + 6.93125034750497 + 7.2268691152757745 + 7.2268691152757745 + 7.2268691152757745 + 6.9431038264692226 + 6.93125034750497 + 6.93125034750497 + 7.2268691152757745 + 7.0116439552056518 + 7.0142596655386722 + 7.2359635110810041 + 7.2359635110810041 + 7.2359635110810041 + 7.0142596655386722 + 6.8792401036454294 + 6.9312946954931149 + 7.0356130949373874 + 6.9435326888275135 + 6.9435326888275135 + 6.9439647375496367 + 6.9313421301248006 + 6.8949442401667236 + 6.8810530022941006 + 7.2450320697588868 + 6.9439647375496367 + 6.9439647375496367 + 7.2450320697588868 + 7.2450320697588868 + 7.0168768813676046 + 7.0194955736933657 + 7.2540749060073484 + 7.2540749060073484 + 7.0421423820248545 + 6.8977089489300063 + 6.9443999580180069 + 7.0194955736933657 + 6.9443999580180069 + 6.8815587695612903 + 7.2540749060073484 + 6.8801188424585034 + 7.2630921338992263 + 7.0454073587248853 + 7.2630921338992263 + 6.8766678653427782 + 7.0221157137231058 + 6.9448383356685719 + 7.2630921338992263 + 7.2630921338992263 + 7.0454073587248853 + 7.2720838668854784 + 7.0486725174219416 + 7.2720838668854784 + 7.2720838668854784 + 7.2720838668854784 + 7.0486725174219416 + 7.2720838668854784 + 6.8786804914314157 + 7.0486725174219416 + 7.2720838668854784 + 7.0273602227475687 + 6.8750529497439317 + 7.2810502177983984 + 6.8712010677788289 + 6.9457245045269387 + 7.0519378283601242 + 7.0519378283601242 + 6.9315625029080579 + 7.0273602227475687 + 6.8836797956320863 + 7.2899912988548232 + 7.2899912988548232 + 7.2899912988548232 + 7.0299845351777002 + 7.2899912988548232 + 6.9461722668731056 + 7.2899912988548232 + 6.9316251969529468 + 7.2899912988548232 + 7.2899912988548232 + 6.9316909083828238 + 7.0326101821804086 + 7.0326101821804086 + 6.9466231286779232 + 7.2989072216593396 + 6.8690695323135085 + 7.0326101821804086 + 7.0326101821804086 + 7.0326101821804086 + 6.9466231286779232 + 7.0617343809148849 + 7.307798097207483 + 7.307798097207483 + 7.307798097207483 + 7.307798097207483 + 6.8874978225812722 + 6.8705683918912204 + 6.9470770756430058 + 7.307798097207483 + 7.0617343809148849 + 7.3166640358889357 + 7.3166640358889357 + 7.0650000083831532 + 7.0650000083831532 + 6.9475340935226884 + 7.0650000083831532 + 6.9318313377872798 + 7.3166640358889357 + 7.0650000083831532 + 7.3166640358889357 + 7.3255051474907216 + 7.3255051474907216 + 7.3255051474907216 + 7.0404948538365808 + 6.9479941681239001 + 7.3255051474907216 + 7.0682656431414852 + 7.3255051474907216 + 7.3255051474907216 + 6.8853891472814439 + 7.3343215412003939 + 6.9484572853060156 + 7.0715312569533948 + 6.9484572853060156 + 6.8662309122613756 + 7.3343215412003939 + 6.8843379345018096 + 7.3343215412003939 + 7.0715312569533948 + 6.8892167430757576 + 6.9489234309807211 + 6.9489234309807211 + 7.343113325609214 + 7.343113325609214 + 7.0747968218296808 + 7.343113325609214 + 7.0747968218296808 + 7.0747968218296808 + 7.343113325609214 + 6.8749264504672771 + 6.8658058562408755 + 7.351880608715339 + 7.351880608715339 + 6.8658058562408755 + 7.0780623100267395 + 7.351880608715339 + 7.0780623100267395 + 7.0780623100267395 + 7.351880608715339 + 7.351880608715339 + 7.0813276940448873 + 7.0813276940448873 + 7.0510247708499243 + 7.3606234979269844 + 6.9322344212561973 + 6.8684345757381813 + 7.0510247708499243 + 7.3606234979269844 + 6.9322344212561973 + 7.0813276940448873 + 7.369342100065599 + 7.0845929466266933 + 7.369342100065599 + 7.369342100065599 + 7.0536601110339667 + 7.0536601110339667 + 7.369342100065599 + 7.0536601110339667 + 7.369342100065599 + 7.0845929466266933 + 7.0878580407553073 + 7.378036521369018 + 7.0562965428761348 + 7.378036521369018 + 6.8699646020805814 + 7.378036521369018 + 7.378036521369018 + 7.0562965428761348 + 7.0562965428761348 + 6.9508180186621047 + 7.3867068674946186 + 7.3867068674946186 + 7.0911229496528039 + 7.0911229496528039 + 7.3867068674946186 + 7.3867068674946186 + 7.3867068674946186 + 6.9325114866103688 + 7.0911229496528039 + 7.3867068674946186 + + + 16 + -2.9581412974089889 + -2.8246290310544016 + -2.8377550587114126 + -2.7807132483932633 + -2.7730438576965382 + -2.7530943926215756 + -2.7508149584848902 + -2.7469978091585223 + -2.7452501953880741 + -2.7434830854330015 + -2.7422859611327945 + -2.7423485956208657 + -2.7414859306831203 + -2.7399531430550184 + -2.7407368669517913 + -2.7401802010430738 + + + 16 + 9.795538595485068 + 9.6620263291304571 + 9.6751523567874607 + 9.6181105464693228 + 9.6104411557726053 + 9.5904916906976396 + 9.5882122565609738 + 9.5843951072345863 + 9.5826474934641475 + 9.5808803835090632 + 9.5796832592088723 + 9.5797458936969182 + 9.5788832287591763 + 9.5773504411310704 + 9.5781341650278762 + 9.577577499119128 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_4.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_4.xml new file mode 100644 index 0000000000..797223a0c9 --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_4.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: initial + convolve forces: no + skip updates: no + + + 501 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.618843635924877 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.407865034776886 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.787055710383672 + 11.484463217937368 + 11.150299212615359 + 7.9854380397522462 + 7.9854380397522462 + 12.407865034776886 + 12.636619251512844 + 11.681645921797619 + 12.407865034776886 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6024448199752941 + 11.11936220278454 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.876409458086407 + 10.92143612837118 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.787055710383672 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 11.11936220278454 + 10.540556840057921 + 11.495530169773147 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.681645921797619 + 12.636619251512844 + 12.407865034776886 + 12.407865034776886 + 8.8909476519676431 + 8.8909476519676431 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 11.876409458086407 + 8.4507330206875295 + 7.4957596909723048 + 11.150299212615359 + 11.484463217937368 + 11.787055710383672 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 9.889523596492225 + 8.6319577743306972 + 12.105272542330583 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.785832700507417 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 7.4957596909723048 + 7.8299236962943137 + 11.787055710383672 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.484463217937368 + 12.105272542330583 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 11.453526208106549 + 12.742029040098897 + 12.105272542330583 + 10.847706720169054 + 11.150299212615359 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 12.407865034776886 + 12.074335532499765 + 11.453526208106549 + 8.2701383275744256 + 7.6024448199752941 + 11.11936220278454 + 10.540556840057921 + 10.207027337780797 + 12.074335532499765 + 12.074335532499765 + 11.11936220278454 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6333818298061127 + 10.816769710338235 + 11.11936220278454 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 12.105272542330583 + 12.105272542330583 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 12.636619251512844 + 11.379053429351316 + 11.379053429351316 + 11.681645921797619 + 6.2294405202606695 + 6.2294405202606695 + 9.9060287852367068 + 9.3745732085462272 + 10.587906626094059 + 11.348116419520498 + 8.1647285389883741 + 8.2701383275744256 + 11.453526208106549 + 10.785832700507417 + 8.6010207644998786 + 9.889523596492225 + 13.362838364492113 + 12.407865034776886 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 10.618843635924877 + 10.92143612837118 + 11.452891705061662 + 11.787055710383672 + 12.742029040098897 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 12.121219715705681 + 9.268714272099011 + 8.6010207644998786 + 11.348116419520498 + 11.379053429351316 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 7.6333818298061127 + 8.1647285389883741 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 12.105272542330583 + 11.876409458086407 + 10.618843635924877 + 10.847706720169054 + 8.6319577743306972 + 8.9345502667770003 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.11936220278454 + 12.074335532499765 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 12.074335532499765 + 12.742029040098897 + 11.787055710383672 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.453526208106549 + 10.785832700507417 + 11.11936220278454 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 7.1844138499758952 + 5.895911017983547 + 10.816769710338235 + 11.484463217937368 + 12.121219715705681 + 12.121219715705681 + 11.453526208106549 + 10.587906626094059 + 8.4030946900865189 + 8.9345502667770003 + 11.787055710383672 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.742029040098897 + 12.742029040098897 + 9.7652513140669175 + 9.4310873087449067 + 9.4310873087449067 + 9.4310873087449067 + 11.150299212615359 + 11.150299212615359 + 7.4957596909723048 + 8.4507330206875295 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 12.407865034776886 + 9.889523596492225 + 8.9345502667770003 + 6.2294405202606695 + 6.5636045255826794 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 12.074335532499765 + 11.495530169773147 + 10.540556840057921 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.11936220278454 + 12.074335532499765 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 6.4000390266268736 + 7.3550123563420993 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.484463217937368 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 10.92143612837118 + 8.4030946900865189 + 9.268714272099011 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.484463217937368 + 11.484463217937368 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.074335532499765 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 10.92143612837118 + 10.92143612837118 + 11.787055710383672 + 11.484463217937368 + 11.484463217937368 + 8.2701383275744256 + 7.9359743222524166 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 10.540556840057921 + 8.5187524437411657 + 9.4310873087449067 + 11.452891705061662 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 9.5724992829595852 + 10.861002114951933 + 12.407865034776886 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 12.407865034776886 + 12.407865034776886 + 10.540556840057921 + 10.540556840057921 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 9.4310873087449067 + + + 501 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16 + -2.9609406022688112 + -2.8254853588504654 + -2.8388142854965275 + -2.7808707305637332 + -2.7730760637757532 + -2.7527961218476045 + -2.750478498847527 + -2.7465971997542016 + -2.7448201329604163 + -2.7430231881398033 + -2.7418058217996886 + -2.7418695159782902 + -2.7409922499818697 + -2.7394334874951958 + -2.7402304975580041 + -2.7396643957984965 + + + 16 + 9.7725264428930814 + 9.6370711994747449 + 9.6504001261207897 + 9.5924565711879861 + 9.5846619044000256 + 9.5643819624718809 + 9.5620643394718012 + 9.5581830403784735 + 9.5564059735846918 + 9.5546090287640624 + 9.553391662423957 + 9.5534553566025338 + 9.5525780906061382 + 9.5510193281194482 + 9.5518163381822738 + 9.5512502364227903 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_5.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_5.xml new file mode 100644 index 0000000000..1bb1ad6ab1 --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_5.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: initial + convolve forces: no + skip updates: yes + + + 501 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.618843635924877 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.407865034776886 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.787055710383672 + 11.484463217937368 + 11.150299212615359 + 7.9854380397522462 + 7.9854380397522462 + 12.407865034776886 + 12.636619251512844 + 11.681645921797619 + 12.407865034776886 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6024448199752941 + 11.11936220278454 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.876409458086407 + 10.92143612837118 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.787055710383672 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 11.11936220278454 + 10.540556840057921 + 11.495530169773147 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.681645921797619 + 12.636619251512844 + 12.407865034776886 + 12.407865034776886 + 8.8909476519676431 + 8.8909476519676431 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 11.876409458086407 + 8.4507330206875295 + 7.4957596909723048 + 11.150299212615359 + 11.484463217937368 + 11.787055710383672 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 9.889523596492225 + 8.6319577743306972 + 12.105272542330583 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.785832700507417 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 7.4957596909723048 + 7.8299236962943137 + 11.787055710383672 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.484463217937368 + 12.105272542330583 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 11.453526208106549 + 12.742029040098897 + 12.105272542330583 + 10.847706720169054 + 11.150299212615359 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.150299212615359 + 12.407865034776886 + 12.074335532499765 + 11.453526208106549 + 8.2701383275744256 + 7.6024448199752941 + 11.11936220278454 + 10.540556840057921 + 10.207027337780797 + 12.074335532499765 + 12.074335532499765 + 11.11936220278454 + 12.407865034776886 + 12.105272542330583 + 12.105272542330583 + 12.105272542330583 + 10.816769710338235 + 11.11936220278454 + 7.9359743222524166 + 7.6333818298061127 + 10.816769710338235 + 11.11936220278454 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 12.105272542330583 + 12.105272542330583 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 12.636619251512844 + 11.379053429351316 + 11.379053429351316 + 11.681645921797619 + 6.2294405202606695 + 6.2294405202606695 + 9.9060287852367068 + 9.3745732085462272 + 10.587906626094059 + 11.348116419520498 + 8.1647285389883741 + 8.2701383275744256 + 11.453526208106549 + 10.785832700507417 + 8.6010207644998786 + 9.889523596492225 + 13.362838364492113 + 12.407865034776886 + 11.150299212615359 + 11.484463217937368 + 12.01580992711963 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 10.618843635924877 + 10.92143612837118 + 11.452891705061662 + 11.787055710383672 + 12.742029040098897 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 12.121219715705681 + 9.268714272099011 + 8.6010207644998786 + 11.348116419520498 + 11.379053429351316 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 10.847706720169054 + 7.6333818298061127 + 8.1647285389883741 + 11.681645921797619 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.105272542330583 + 12.105272542330583 + 11.876409458086407 + 10.618843635924877 + 10.847706720169054 + 8.6319577743306972 + 8.9345502667770003 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.11936220278454 + 12.074335532499765 + 12.407865034776886 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.105272542330583 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.787055710383672 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.816769710338235 + 12.074335532499765 + 12.742029040098897 + 11.787055710383672 + 12.407865034776886 + 12.407865034776886 + 11.452891705061662 + 10.92143612837118 + 10.618843635924877 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.452891705061662 + 11.787055710383672 + 11.453526208106549 + 10.785832700507417 + 11.11936220278454 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 7.1844138499758952 + 5.895911017983547 + 10.816769710338235 + 11.484463217937368 + 12.121219715705681 + 12.121219715705681 + 11.453526208106549 + 10.587906626094059 + 8.4030946900865189 + 8.9345502667770003 + 11.787055710383672 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 11.452891705061662 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.742029040098897 + 12.742029040098897 + 9.7652513140669175 + 9.4310873087449067 + 9.4310873087449067 + 9.4310873087449067 + 11.150299212615359 + 11.150299212615359 + 7.4957596909723048 + 8.4507330206875295 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 12.407865034776886 + 9.889523596492225 + 8.9345502667770003 + 6.2294405202606695 + 6.5636045255826794 + 11.484463217937368 + 10.847706720169054 + 10.816769710338235 + 12.074335532499765 + 11.495530169773147 + 10.540556840057921 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.407865034776886 + 11.787055710383672 + 11.787055710383672 + 11.11936220278454 + 11.11936220278454 + 11.452891705061662 + 11.11936220278454 + 12.074335532499765 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 6.4000390266268736 + 7.3550123563420993 + 13.362838364492113 + 13.362838364492113 + 12.742029040098897 + 11.484463217937368 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 10.92143612837118 + 8.4030946900865189 + 9.268714272099011 + 11.787055710383672 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.484463217937368 + 11.484463217937368 + 10.816769710338235 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.452891705061662 + 12.407865034776886 + 12.074335532499765 + 11.11936220278454 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 10.92143612837118 + 10.92143612837118 + 11.787055710383672 + 11.484463217937368 + 11.484463217937368 + 8.2701383275744256 + 7.9359743222524166 + 10.92143612837118 + 10.92143612837118 + 11.150299212615359 + 11.379053429351316 + 12.01580992711963 + 12.121219715705681 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 10.540556840057921 + 8.5187524437411657 + 9.4310873087449067 + 11.452891705061662 + 9.4310873087449067 + 9.1284948162986037 + 11.150299212615359 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 12.105272542330583 + 12.407865034776886 + 11.11936220278454 + 9.5724992829595852 + 10.861002114951933 + 12.407865034776886 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 11.150299212615359 + 11.150299212615359 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.407865034776886 + 12.407865034776886 + 12.407865034776886 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 12.407865034776886 + 12.407865034776886 + 10.540556840057921 + 10.540556840057921 + 11.452891705061662 + 12.407865034776886 + 13.362838364492113 + 12.742029040098897 + 11.787055710383672 + 11.452891705061662 + 11.150299212615359 + 10.847706720169054 + 11.150299212615359 + 11.452891705061662 + 11.452891705061662 + 11.11936220278454 + 10.816769710338235 + 11.150299212615359 + 9.4310873087449067 + + + 501 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 16 + -2.9609406022688112 + -2.8254853588504654 + -2.8388142854965275 + -2.7808707305637332 + -2.7730760637757532 + -2.7527961218476045 + -2.750478498847527 + -2.7465971997542016 + -2.7448201329604163 + -2.7430231881398033 + -2.7418058217996886 + -2.7418695159782902 + -2.7409922499818697 + -2.7394334874951958 + -2.7402304975580041 + -2.7396643957984965 + + + 16 + 9.7725264428930814 + 9.6370711994747449 + 9.6504001261207897 + 9.5924565711879861 + 9.5846619044000256 + 9.5643819624718809 + 9.5620643394718012 + 9.5581830403784735 + 9.5564059735846918 + 9.5546090287640624 + 9.553391662423957 + 9.5534553566025338 + 9.5525780906061382 + 9.5510193281194482 + 9.5518163381822738 + 9.5512502364227903 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_6.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_6.xml new file mode 100644 index 0000000000..4c95766e8a --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_6.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: initial + convolve forces: yes + skip updates: no + + + 501 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331162469912046 + 11.331162469912046 + 11.331162469912048 + 11.331162469912048 + 11.331162469912046 + 11.331162469912048 + 11.331162469912048 + 11.331162469912046 + 11.331162469912046 + 11.331162469912048 + 11.330552942021511 + 11.330552942021514 + 11.330552942021512 + 11.330552942021514 + 11.330552942021514 + 11.330552942021512 + 11.330552942021511 + 11.330552942021512 + 11.330552942021514 + 11.330552942021511 + 11.329941913727538 + 11.32994191372754 + 11.32994191372754 + 11.329941913727538 + 11.32994191372754 + 11.32994191372754 + 11.329941913727541 + 11.32994191372754 + 11.329941913727541 + 11.329941913727538 + 11.329329387929416 + 11.329329387929418 + 11.329329387929416 + 11.329329387929416 + 11.329329387929418 + 11.329329387929418 + 11.329329387929416 + 11.329329387929418 + 11.329329387929418 + 11.329329387929418 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328099855452026 + 11.328099855452027 + 11.328099855452026 + 11.328099855452027 + 11.328099855452027 + 11.328099855452027 + 11.328099855452026 + 11.328099855452026 + 11.328099855452027 + 11.328099855452026 + 11.327482854605046 + 11.327482854605046 + 11.327482854605044 + 11.327482854605044 + 11.327482854605046 + 11.327482854605044 + 11.327482854605044 + 11.327482854605046 + 11.327482854605046 + 11.327482854605046 + 11.326864367918214 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326244398323681 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323681 + 11.326244398323679 + 11.326244398323677 + 11.326244398323679 + 11.325622948759735 + 11.325622948759737 + 11.325622948759737 + 11.325622948759737 + 11.325622948759735 + 11.325622948759737 + 11.325622948759735 + 11.325622948759735 + 11.325622948759738 + 11.325622948759737 + 11.325000022170707 + 11.325000022170707 + 11.325000022170713 + 11.325000022170707 + 11.325000022170707 + 11.325000022170711 + 11.325000022170711 + 11.325000022170711 + 11.325000022170707 + 11.325000022170707 + 11.324375621506789 + 11.324375621506791 + 11.324375621506791 + 11.324375621506789 + 11.324375621506789 + 11.324375621506789 + 11.324375621506789 + 11.324375621506793 + 11.324375621506789 + 11.324375621506789 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723925 + 11.323749749723925 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323122409783668 + 11.323122409783668 + 11.32312240978367 + 11.323122409783668 + 11.32312240978367 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.322493604653058 + 11.322493604653058 + 11.322493604653056 + 11.322493604653058 + 11.322493604653056 + 11.322493604653058 + 11.322493604653058 + 11.32249360465306 + 11.322493604653058 + 11.322493604653058 + 11.321863337304483 + 11.321863337304482 + 11.321863337304483 + 11.321863337304483 + 11.321863337304483 + 11.321863337304482 + 11.321863337304482 + 11.321863337304482 + 11.321863337304483 + 11.321863337304483 + 11.321231610715554 + 11.321231610715552 + 11.321231610715554 + 11.321231610715554 + 11.321231610715556 + 11.321231610715554 + 11.321231610715552 + 11.321231610715554 + 11.321231610715554 + 11.321231610715557 + 11.320598427868976 + 11.320598427868978 + 11.320598427868976 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868976 + 11.31996379175243 + 11.31996379175243 + 11.31996379175243 + 11.31996379175243 + 11.319963791752432 + 11.319963791752432 + 11.319963791752432 + 11.319963791752429 + 11.31996379175243 + 11.31996379175243 + 11.319327705358427 + 11.319327705358429 + 11.319327705358429 + 11.319327705358425 + 11.319327705358425 + 11.319327705358427 + 11.319327705358425 + 11.319327705358429 + 11.319327705358429 + 11.319327705358425 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684185 + 11.318690171684185 + 11.318051193731561 + 11.318051193731559 + 11.318051193731559 + 11.318051193731559 + 11.318051193731561 + 11.318051193731563 + 11.318051193731561 + 11.318051193731561 + 11.318051193731559 + 11.318051193731561 + 11.317410774506836 + 11.317410774506833 + 11.317410774506836 + 11.317410774506834 + 11.317410774506836 + 11.317410774506836 + 11.317410774506836 + 11.317410774506834 + 11.317410774506836 + 11.317410774506836 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020664 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316125624287951 + 11.316125624287949 + 11.316125624287951 + 11.316125624287951 + 11.316125624287947 + 11.316125624287947 + 11.316125624287949 + 11.316125624287947 + 11.316125624287947 + 11.316125624287949 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.31483474516285 + 11.31483474516285 + 11.31483474516285 + 11.314834745162846 + 11.314834745162848 + 11.31483474516285 + 11.314834745162848 + 11.314834745162848 + 11.31483474516285 + 11.314834745162848 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820357 + 11.314187164820355 + 11.314187164820355 + 11.313538161330838 + 11.313538161330836 + 11.313538161330836 + 11.313538161330836 + 11.313538161330834 + 11.313538161330836 + 11.313538161330836 + 11.313538161330836 + 11.313538161330834 + 11.313538161330834 + 11.312887737728595 + 11.312887737728591 + 11.312887737728595 + 11.312887737728595 + 11.312887737728595 + 11.312887737728593 + 11.312887737728591 + 11.312887737728591 + 11.312887737728595 + 11.312887737728593 + 11.312235897051474 + 11.312235897051471 + 11.312235897051471 + 11.312235897051471 + 11.312235897051474 + 11.312235897051472 + 11.312235897051472 + 11.312235897051474 + 11.312235897051472 + 11.312235897051472 + 11.311582642340744 + 11.311582642340744 + 11.311582642340744 + 11.311582642340746 + 11.311582642340742 + 11.311582642340744 + 11.311582642340744 + 11.311582642340742 + 11.311582642340742 + 11.311582642340744 + 11.31092797664099 + 11.310927976640992 + 11.310927976640992 + 11.310927976640992 + 11.310927976640992 + 11.31092797664099 + 11.31092797664099 + 11.31092797664099 + 11.310927976640992 + 11.310927976640992 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000029 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468741 + 11.309614424468739 + 11.309614424468739 + 11.308955544101032 + 11.308955544101034 + 11.308955544101028 + 11.308955544101032 + 11.308955544101028 + 11.30895554410103 + 11.30895554410103 + 11.30895554410103 + 11.308955544101032 + 11.308955544101032 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.30829526495368 + 11.308295264953678 + 11.308295264953678 + 11.307633590086253 + 11.307633590086255 + 11.307633590086255 + 11.307633590086256 + 11.307633590086256 + 11.307633590086255 + 11.307633590086255 + 11.307633590086255 + 11.307633590086255 + 11.307633590086256 + 11.306970982199161 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199157 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199161 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603645 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.305642988594743 + 11.305642988594743 + 11.305642988594743 + 11.305642988594746 + 11.305642988594744 + 11.305642988594743 + 11.305642988594744 + 11.305642988594743 + 11.305642988594743 + 11.305642988594743 + 11.304977613451197 + 11.304977613451197 + 11.3049776134512 + 11.304977613451197 + 11.3049776134512 + 11.304977613451197 + 11.304977613451198 + 11.304977613451197 + 11.3049776134512 + 11.304977613451198 + 11.304311326435442 + 11.304311326435442 + 11.304311326435439 + 11.304311326435439 + 11.304311326435441 + 11.304311326435439 + 11.304311326435441 + 11.304311326435441 + 11.304311326435439 + 11.304311326435439 + 11.303644132793531 + 11.303644132793535 + 11.303644132793535 + 11.303644132793531 + 11.303644132793533 + 11.303644132793535 + 11.303644132793533 + 11.303644132793533 + 11.303644132793535 + 11.303644132793535 + 11.302976037755139 + 11.302976037755139 + 11.302976037755137 + 11.302976037755137 + 11.302976037755135 + 11.302976037755137 + 11.302976037755137 + 11.302976037755137 + 11.302976037755135 + 11.302976037755139 + 11.302307046533464 + 11.302307046533464 + 11.302307046533464 + 11.302307046533464 + 11.302307046533466 + 11.302307046533466 + 11.302307046533464 + 11.302307046533466 + 11.302307046533464 + 11.302307046533464 + 11.301637164325255 + 11.301637164325257 + 11.301637164325255 + 11.301637164325257 + 11.301637164325253 + 11.301637164325257 + 11.301637164325257 + 11.301637164325255 + 11.301637164325255 + 11.301637164325257 + 11.300966396310731 + 11.300966396310731 + 11.300966396310733 + 11.300966396310733 + 11.300966396310731 + 11.300966396310731 + 11.300966396310731 + 11.300966396310734 + 11.300966396310733 + 11.300966396310731 + + + 501 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9414276019729915 + 6.9340252851965136 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9340252851965136 + 6.9414276019729915 + 6.9379536694368795 + 6.9379536694368795 + 6.9513605465210233 + 6.9513605465210233 + 6.9379536694368795 + 6.9513605465210233 + 6.9513605465210233 + 6.9321207726666163 + 6.9379536694368795 + 6.9513605465210233 + 6.9264806355150021 + 6.9612707182833597 + 6.9391450670710935 + 6.9283805667770562 + 6.9612707182833597 + 6.9391450670710935 + 6.941199973255415 + 6.931310128253326 + 6.9612707182833597 + 6.941199973255415 + 6.9312630790600602 + 6.9711581960406255 + 6.9252773258756424 + 6.9312630790600602 + 6.9711581960406255 + 6.9711581960406255 + 6.941711310296828 + 6.9711581960406255 + 6.941711310296828 + 6.9269114299639973 + 6.9810230583137747 + 6.9331233338539757 + 6.9810230583137747 + 6.9810230583137747 + 6.9477031491033419 + 6.9442817491821653 + 6.9810230583137747 + 6.9331233338539757 + 6.9477031491033419 + 6.9477031491033419 + 6.9311792114187067 + 6.9908653833636283 + 6.9235299899580394 + 6.9468563544542308 + 6.9908653833636283 + 6.9311792114187067 + 6.9908653833636283 + 6.9253047054963881 + 6.9468563544542308 + 6.9908653833636283 + 6.9494350969416816 + 6.9206365940994825 + 6.9494350969416816 + 7.0006852491904503 + 7.0006852491904503 + 6.9235065484118694 + 6.9494350969416816 + 6.9203453428494512 + 7.0006852491904503 + 6.9542201836513549 + 6.93416062177696 + 7.0104827335335438 + 6.9574838114457771 + 6.9574838114457771 + 6.9520179475748662 + 6.9190664541868436 + 6.9574838114457771 + 6.9520179475748662 + 6.9520179475748662 + 6.9520179475748662 + 6.9345140614392005 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 6.9310789014171839 + 6.9310522396882757 + 7.0300108674187367 + 6.9640211164915495 + 7.0300108674187367 + 7.0300108674187367 + 6.9155825855996866 + 6.9348713253219909 + 7.0300108674187367 + 6.9201148556045933 + 7.0300108674187367 + 6.9672947255888742 + 7.0397416711314129 + 7.0397416711314129 + 7.0397416711314129 + 6.9352324048546983 + 7.0397416711314129 + 6.9352324048546983 + 6.9672947255888742 + 6.9597908591808677 + 7.0397416711314129 + 7.0494504017009039 + 7.0494504017009039 + 6.9623898537395181 + 7.0494504017009039 + 7.0494504017009039 + 6.9705715938992228 + 6.9705715938992228 + 6.9705715938992228 + 7.0494504017009039 + 7.0494504017009039 + 6.9738516877444825 + 6.9309924995288519 + 6.9359659765997881 + 6.9649928126260967 + 6.9738516877444825 + 6.9738516877444825 + 7.059137135556651 + 6.9167363412506493 + 7.059137135556651 + 6.9738516877444825 + 7.0688019488652953 + 6.9675997073840179 + 6.9309793154801884 + 6.9363384516837439 + 6.9098253314164717 + 6.9309793154801884 + 7.0688019488652953 + 6.9129992138314176 + 6.9309793154801884 + 6.9675997073840179 + 6.9309694865956573 + 7.0784449175304642 + 6.9702105096592737 + 6.9804214181234503 + 6.9702105096592737 + 6.9804214181234503 + 6.9309694865956573 + 7.0784449175304642 + 6.9082828225605812 + 6.9804214181234503 + 6.9309630071711039 + 7.0880661171925796 + 6.9728251912005277 + 7.0880661171925796 + 6.9728251912005277 + 7.0880661171925796 + 7.0880661171925796 + 6.9370947374745917 + 7.0880661171925796 + 7.0880661171925796 + 6.9870036504830315 + 7.097665623228691 + 6.9870036504830315 + 6.9754437238591969 + 6.9870036504830315 + 7.097665623228691 + 7.097665623228691 + 7.097665623228691 + 6.9870036504830315 + 6.9754437238591969 + 7.1072435107523315 + 6.9309600738816197 + 7.1072435107523315 + 7.1072435107523315 + 6.9902993723992193 + 6.9378660803981163 + 6.9131546719649792 + 7.1072435107523315 + 7.1072435107523315 + 6.9780660795895244 + 6.9121532254305436 + 6.9935981211198017 + 6.9121532254305436 + 7.116799854613399 + 6.9001007989926499 + 7.116799854613399 + 6.9048208433471547 + 6.9100188066322863 + 6.9309636086049444 + 6.9121532254305436 + 6.9005776253467079 + 6.9386524120621873 + 6.9309704699649117 + 6.9309704699649117 + 6.9005161833395547 + 6.9833221485966677 + 6.9833221485966677 + 7.1263347293980601 + 6.996899864077518 + 6.9386524120621873 + 6.9101554250570434 + 7.1358482094286746 + 7.1358482094286746 + 6.9859558062966753 + 6.9859558062966753 + 7.0002045688629435 + 6.9077913191471998 + 7.1358482094286746 + 7.1358482094286746 + 6.9390511773143837 + 6.9885931759148177 + 7.1453403687637431 + 6.9885931759148177 + 7.1453403687637431 + 7.0035122032242452 + 7.0035122032242452 + 7.1453403687637431 + 7.0035122032242452 + 7.1453403687637431 + 6.9394536641298856 + 7.1548112811978744 + 6.939859863975796 + 6.939859863975796 + 6.895889464487639 + 6.9310109567917682 + 6.9081644103982427 + 7.0068227350669341 + 7.1548112811978744 + 6.939859863975796 + 7.1548112811978744 + 7.164261020261784 + 6.9938789408855451 + 7.164261020261784 + 6.9402697683231187 + 7.164261020261784 + 7.01013613245361 + 7.164261020261784 + 6.9402697683231187 + 7.164261020261784 + 7.164261020261784 + 7.0134523636036885 + 7.0134523636036885 + 7.0134523636036885 + 6.8928846838777025 + 6.9061801759923371 + 7.1736896592222985 + 7.1736896592222985 + 6.9965272814859478 + 6.9965272814859478 + 7.0134523636036885 + 6.9991792245001596 + 6.9022481447977038 + 7.0167713968931267 + 7.0167713968931267 + 6.8912670914593397 + 7.1830972710823895 + 6.9411006564261202 + 7.1830972710823895 + 7.1830972710823895 + 6.9310811778744039 + 7.1924839285812272 + 6.9311111658763789 + 7.1924839285812272 + 7.0200932008541441 + 7.1924839285812272 + 6.9311111658763789 + 7.0018347428099563 + 7.1924839285812272 + 6.9311111658763789 + 7.1924839285812272 + 7.2018497041942524 + 7.2018497041942524 + 7.2018497041942524 + 7.0044938094002696 + 7.0234177441749317 + 7.2018497041942524 + 7.0234177441749317 + 7.0234177441749317 + 7.2018497041942524 + 6.9419462602888231 + 7.211194670133267 + 6.9423745593519364 + 7.211194670133267 + 7.211194670133267 + 7.211194670133267 + 7.0267449956993513 + 6.9311809790930132 + 7.0071563973591786 + 6.9423745593519364 + 7.211194670133267 + 7.0098224798778936 + 7.2205188983465485 + 7.2205188983465485 + 6.8978398541639718 + 7.0300749244266312 + 7.2205188983465485 + 7.2205188983465485 + 7.2205188983465485 + 7.0300749244266312 + 7.0300749244266312 + 7.2298224605189727 + 6.9312638705406115 + 7.2298224605189727 + 7.2298224605189727 + 7.2298224605189727 + 6.9432421092245207 + 6.9312638705406115 + 6.9312638705406115 + 7.2298224605189727 + 7.0124920302507405 + 7.0151650218751289 + 7.2391054280721665 + 7.2391054280721665 + 7.2391054280721665 + 7.0151650218751289 + 6.8786818659538564 + 6.9313102063322232 + 7.0367426902616428 + 6.9436813430409927 + 6.9436813430409927 + 6.9441242047901719 + 6.9313597945596825 + 6.8945489318633291 + 6.8804984728959804 + 7.2483678721646712 + 6.9441242047901719 + 6.9441242047901719 + 7.2483678721646712 + 7.2483678721646712 + 7.0178414282515256 + 7.0205212229834064 + 7.2576098636921271 + 7.2576098636921271 + 7.0434207967690821 + 6.897334879982707 + 6.9445706859875731 + 7.0205212229834064 + 6.9445706859875731 + 6.8809938491968294 + 7.2576098636921271 + 6.8795202091679064 + 7.2668314732874713 + 7.0467636519146728 + 7.2668314732874713 + 6.8760270059715882 + 7.0232043797772201 + 6.9450207781536832 + 7.2668314732874713 + 7.2668314732874713 + 7.0467636519146728 + 7.2760327713211561 + 7.0501090015032153 + 7.2760327713211561 + 7.2760327713211561 + 7.2760327713211561 + 7.0501090015032153 + 7.2760327713211561 + 6.8780471993761481 + 7.0501090015032153 + 7.2760327713211561 + 7.0285806748909625 + 6.8743556235059202 + 7.2852138279013836 + 6.8704536898936848 + 6.9459317614993381 + 7.0534568156123729 + 7.0534568156123729 + 6.9315905577057038 + 7.0285806748909625 + 6.8830942842910305 + 7.2943747128743555 + 7.2943747128743555 + 7.2943747128743555 + 7.0312737611381397 + 7.2943747128743555 + 6.9463926357454744 + 7.2943747128743555 + 6.9316563225255337 + 7.2943747128743555 + 7.2943747128743555 + 6.9317253055506569 + 7.0339701053016075 + 7.0339701053016075 + 6.946857087093675 + 7.3035154958245352 + 6.8682537462499029 + 7.0339701053016075 + 7.0339701053016075 + 7.0339701053016075 + 6.946857087093675 + 7.0635124251253734 + 7.3126299381912307 + 7.3126299381912307 + 7.3126299381912307 + 7.3126299381912307 + 6.8869217880115965 + 6.8697546368392235 + 6.9473247828492504 + 7.3126299381912307 + 7.0635124251253734 + 7.3217181590811009 + 7.3217181590811009 + 7.0668651534935512 + 7.0668651534935512 + 6.9477957076251293 + 7.0668651534935512 + 6.9318727467581089 + 7.3217181590811009 + 7.0668651534935512 + 7.3217181590811009 + 7.3307802769332682 + 7.3307802769332682 + 7.3307802769332682 + 7.0420671954043792 + 6.9319511804041607 + 7.3307802769332682 + 7.0702178728918206 + 7.3307802769332682 + 7.3307802769332682 + 6.8847592142140144 + 7.3398164095229532 + 6.9487471829810898 + 7.0735705529168245 + 6.9487471829810898 + 6.8653023835814375 + 7.3398164095229532 + 6.8836812175057647 + 7.3398164095229532 + 7.0735705529168245 + 6.8886329227211185 + 6.9492277030781207 + 6.9492277030781207 + 7.348826673965096 + 7.348826673965096 + 7.0769231634388454 + 7.348826673965096 + 7.0769231634388454 + 7.0769231634388454 + 7.348826673965096 + 6.8741153225133367 + 6.8648397981086422 + 7.3578111867179832 + 7.3578111867179832 + 6.8648397981086422 + 7.0802756745998874 + 7.3578111867179832 + 7.0802756745998874 + 7.0802756745998874 + 7.3578111867179832 + 7.3578111867179832 + 7.0836280568117704 + 7.0836280568117704 + 7.0528810208748292 + 7.3667700635868503 + 6.9322960509323686 + 6.8674960112228876 + 7.0528810208748292 + 7.3667700635868503 + 6.9322960509323686 + 7.0836280568117704 + 7.3757034197274987 + 7.0869802807542293 + 7.3757034197274987 + 7.3757034197274987 + 7.0555874464894544 + 7.0555874464894544 + 7.3757034197274987 + 7.0555874464894544 + 7.3757034197274987 + 7.0869802807542293 + 7.0903323173730115 + 7.3846113696498863 + 7.0582950030413336 + 7.3846113696498863 + 6.8690261621401252 + 7.3846113696498863 + 7.3846113696498863 + 7.0582950030413336 + 7.0582950030413336 + 6.9511813133231923 + 7.3934940272217169 + 7.3934940272217169 + 7.0936841378779985 + 7.0936841378779985 + 7.3934940272217169 + 7.3934940272217169 + 7.3934940272217169 + 6.9325870582251596 + 7.0936841378779985 + 7.3934940272217169 + + + 16 + -2.9609406022688112 + -2.8254853588504654 + -2.8388142854965275 + -2.7808707305637332 + -2.7730760637757532 + -2.7527961218476045 + -2.750478498847527 + -2.7465971997542016 + -2.7448201329604163 + -2.7430231881398033 + -2.7418058217996886 + -2.7418695159782902 + -2.7409922499818697 + -2.7394334874951958 + -2.7402304975580041 + -2.7396643957984965 + + + 16 + 9.7725264428930814 + 9.6370711994747449 + 9.6504001261207897 + 9.5924565711879861 + 9.5846619044000256 + 9.5643819624718809 + 9.5620643394718012 + 9.5581830403784735 + 9.5564059735846918 + 9.5546090287640624 + 9.553391662423957 + 9.5534553566025338 + 9.5525780906061382 + 9.5510193281194482 + 9.5518163381822738 + 9.5512502364227903 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_7.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_7.xml new file mode 100644 index 0000000000..aa6df74683 --- /dev/null +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasFepLambdaStateTest_ForcesBiasPmf_7.xml @@ -0,0 +1,1056 @@ + + + + + 3 + stage: initial + convolve forces: yes + skip updates: yes + + + 501 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.332377012920768 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506847 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331770494506848 + 11.331162469912046 + 11.331162469912046 + 11.331162469912048 + 11.331162469912048 + 11.331162469912046 + 11.331162469912048 + 11.331162469912048 + 11.331162469912046 + 11.331162469912046 + 11.331162469912048 + 11.330552942021511 + 11.330552942021514 + 11.330552942021512 + 11.330552942021514 + 11.330552942021514 + 11.330552942021512 + 11.330552942021511 + 11.330552942021512 + 11.330552942021514 + 11.330552942021511 + 11.329941913727538 + 11.32994191372754 + 11.32994191372754 + 11.329941913727538 + 11.32994191372754 + 11.32994191372754 + 11.329941913727541 + 11.32994191372754 + 11.329941913727541 + 11.329941913727538 + 11.329329387929416 + 11.329329387929418 + 11.329329387929416 + 11.329329387929416 + 11.329329387929418 + 11.329329387929418 + 11.329329387929416 + 11.329329387929418 + 11.329329387929418 + 11.329329387929418 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328715367533293 + 11.328099855452026 + 11.328099855452027 + 11.328099855452026 + 11.328099855452027 + 11.328099855452027 + 11.328099855452027 + 11.328099855452026 + 11.328099855452026 + 11.328099855452027 + 11.328099855452026 + 11.327482854605046 + 11.327482854605046 + 11.327482854605044 + 11.327482854605044 + 11.327482854605046 + 11.327482854605044 + 11.327482854605044 + 11.327482854605046 + 11.327482854605046 + 11.327482854605046 + 11.326864367918214 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326864367918215 + 11.326244398323681 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323679 + 11.326244398323681 + 11.326244398323679 + 11.326244398323677 + 11.326244398323679 + 11.325622948759735 + 11.325622948759737 + 11.325622948759737 + 11.325622948759737 + 11.325622948759735 + 11.325622948759737 + 11.325622948759735 + 11.325622948759735 + 11.325622948759738 + 11.325622948759737 + 11.325000022170707 + 11.325000022170707 + 11.325000022170713 + 11.325000022170707 + 11.325000022170707 + 11.325000022170711 + 11.325000022170711 + 11.325000022170711 + 11.325000022170707 + 11.325000022170707 + 11.324375621506789 + 11.324375621506791 + 11.324375621506791 + 11.324375621506789 + 11.324375621506789 + 11.324375621506789 + 11.324375621506789 + 11.324375621506793 + 11.324375621506789 + 11.324375621506789 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723925 + 11.323749749723925 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323749749723927 + 11.323122409783668 + 11.323122409783668 + 11.32312240978367 + 11.323122409783668 + 11.32312240978367 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.323122409783668 + 11.322493604653058 + 11.322493604653058 + 11.322493604653056 + 11.322493604653058 + 11.322493604653056 + 11.322493604653058 + 11.322493604653058 + 11.32249360465306 + 11.322493604653058 + 11.322493604653058 + 11.321863337304483 + 11.321863337304482 + 11.321863337304483 + 11.321863337304483 + 11.321863337304483 + 11.321863337304482 + 11.321863337304482 + 11.321863337304482 + 11.321863337304483 + 11.321863337304483 + 11.321231610715554 + 11.321231610715552 + 11.321231610715554 + 11.321231610715554 + 11.321231610715556 + 11.321231610715554 + 11.321231610715552 + 11.321231610715554 + 11.321231610715554 + 11.321231610715557 + 11.320598427868976 + 11.320598427868978 + 11.320598427868976 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868978 + 11.320598427868976 + 11.31996379175243 + 11.31996379175243 + 11.31996379175243 + 11.31996379175243 + 11.319963791752432 + 11.319963791752432 + 11.319963791752432 + 11.319963791752429 + 11.31996379175243 + 11.31996379175243 + 11.319327705358427 + 11.319327705358429 + 11.319327705358429 + 11.319327705358425 + 11.319327705358425 + 11.319327705358427 + 11.319327705358425 + 11.319327705358429 + 11.319327705358429 + 11.319327705358425 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684187 + 11.318690171684185 + 11.318690171684187 + 11.318690171684185 + 11.318690171684185 + 11.318051193731561 + 11.318051193731559 + 11.318051193731559 + 11.318051193731559 + 11.318051193731561 + 11.318051193731563 + 11.318051193731561 + 11.318051193731561 + 11.318051193731559 + 11.318051193731561 + 11.317410774506836 + 11.317410774506833 + 11.317410774506836 + 11.317410774506834 + 11.317410774506836 + 11.317410774506836 + 11.317410774506836 + 11.317410774506834 + 11.317410774506836 + 11.317410774506836 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020664 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316768917020667 + 11.316125624287951 + 11.316125624287949 + 11.316125624287951 + 11.316125624287951 + 11.316125624287947 + 11.316125624287947 + 11.316125624287949 + 11.316125624287947 + 11.316125624287947 + 11.316125624287949 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327676 + 11.315480899327675 + 11.315480899327676 + 11.315480899327675 + 11.31483474516285 + 11.31483474516285 + 11.31483474516285 + 11.314834745162846 + 11.314834745162848 + 11.31483474516285 + 11.314834745162848 + 11.314834745162848 + 11.31483474516285 + 11.314834745162848 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820355 + 11.314187164820357 + 11.314187164820355 + 11.314187164820355 + 11.313538161330838 + 11.313538161330836 + 11.313538161330836 + 11.313538161330836 + 11.313538161330834 + 11.313538161330836 + 11.313538161330836 + 11.313538161330836 + 11.313538161330834 + 11.313538161330834 + 11.312887737728595 + 11.312887737728591 + 11.312887737728595 + 11.312887737728595 + 11.312887737728595 + 11.312887737728593 + 11.312887737728591 + 11.312887737728591 + 11.312887737728595 + 11.312887737728593 + 11.312235897051474 + 11.312235897051471 + 11.312235897051471 + 11.312235897051471 + 11.312235897051474 + 11.312235897051472 + 11.312235897051472 + 11.312235897051474 + 11.312235897051472 + 11.312235897051472 + 11.311582642340744 + 11.311582642340744 + 11.311582642340744 + 11.311582642340746 + 11.311582642340742 + 11.311582642340744 + 11.311582642340744 + 11.311582642340742 + 11.311582642340742 + 11.311582642340744 + 11.31092797664099 + 11.310927976640992 + 11.310927976640992 + 11.310927976640992 + 11.310927976640992 + 11.31092797664099 + 11.31092797664099 + 11.31092797664099 + 11.310927976640992 + 11.310927976640992 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000029 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.310271903000027 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468739 + 11.309614424468741 + 11.309614424468739 + 11.309614424468739 + 11.308955544101032 + 11.308955544101034 + 11.308955544101028 + 11.308955544101032 + 11.308955544101028 + 11.30895554410103 + 11.30895554410103 + 11.30895554410103 + 11.308955544101032 + 11.308955544101032 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.308295264953678 + 11.30829526495368 + 11.308295264953678 + 11.308295264953678 + 11.307633590086253 + 11.307633590086255 + 11.307633590086255 + 11.307633590086256 + 11.307633590086256 + 11.307633590086255 + 11.307633590086255 + 11.307633590086255 + 11.307633590086255 + 11.307633590086256 + 11.306970982199161 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199157 + 11.306970982199159 + 11.306970982199159 + 11.306970982199159 + 11.306970982199161 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.306307446603645 + 11.306307446603643 + 11.306307446603643 + 11.306307446603643 + 11.305642988594743 + 11.305642988594743 + 11.305642988594743 + 11.305642988594746 + 11.305642988594744 + 11.305642988594743 + 11.305642988594744 + 11.305642988594743 + 11.305642988594743 + 11.305642988594743 + 11.304977613451197 + 11.304977613451197 + 11.3049776134512 + 11.304977613451197 + 11.3049776134512 + 11.304977613451197 + 11.304977613451198 + 11.304977613451197 + 11.3049776134512 + 11.304977613451198 + 11.304311326435442 + 11.304311326435442 + 11.304311326435439 + 11.304311326435439 + 11.304311326435441 + 11.304311326435439 + 11.304311326435441 + 11.304311326435441 + 11.304311326435439 + 11.304311326435439 + 11.303644132793531 + 11.303644132793535 + 11.303644132793535 + 11.303644132793531 + 11.303644132793533 + 11.303644132793535 + 11.303644132793533 + 11.303644132793533 + 11.303644132793535 + 11.303644132793535 + 11.302976037755139 + 11.302976037755139 + 11.302976037755137 + 11.302976037755137 + 11.302976037755135 + 11.302976037755137 + 11.302976037755137 + 11.302976037755137 + 11.302976037755135 + 11.302976037755139 + 11.302307046533464 + 11.302307046533464 + 11.302307046533464 + 11.302307046533464 + 11.302307046533466 + 11.302307046533466 + 11.302307046533464 + 11.302307046533466 + 11.302307046533464 + 11.302307046533464 + 11.301637164325255 + 11.301637164325257 + 11.301637164325255 + 11.301637164325257 + 11.301637164325253 + 11.301637164325257 + 11.301637164325257 + 11.301637164325255 + 11.301637164325255 + 11.301637164325257 + 11.300966396310731 + 11.300966396310731 + 11.300966396310733 + 11.300966396310733 + 11.300966396310731 + 11.300966396310731 + 11.300966396310731 + 11.300966396310734 + 11.300966396310733 + 11.300966396310731 + + + 501 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9314718055994531 + 6.9414276019729915 + 6.9340252851965136 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9347109351254961 + 6.9340252851965136 + 6.9414276019729915 + 6.9340252851965136 + 6.9414276019729915 + 6.9379536694368795 + 6.9379536694368795 + 6.9513605465210233 + 6.9513605465210233 + 6.9379536694368795 + 6.9513605465210233 + 6.9513605465210233 + 6.9321207726666163 + 6.9379536694368795 + 6.9513605465210233 + 6.9264806355150021 + 6.9612707182833597 + 6.9391450670710935 + 6.9283805667770562 + 6.9612707182833597 + 6.9391450670710935 + 6.941199973255415 + 6.931310128253326 + 6.9612707182833597 + 6.941199973255415 + 6.9312630790600602 + 6.9711581960406255 + 6.9252773258756424 + 6.9312630790600602 + 6.9711581960406255 + 6.9711581960406255 + 6.941711310296828 + 6.9711581960406255 + 6.941711310296828 + 6.9269114299639973 + 6.9810230583137747 + 6.9331233338539757 + 6.9810230583137747 + 6.9810230583137747 + 6.9477031491033419 + 6.9442817491821653 + 6.9810230583137747 + 6.9331233338539757 + 6.9477031491033419 + 6.9477031491033419 + 6.9311792114187067 + 6.9908653833636283 + 6.9235299899580394 + 6.9468563544542308 + 6.9908653833636283 + 6.9311792114187067 + 6.9908653833636283 + 6.9253047054963881 + 6.9468563544542308 + 6.9908653833636283 + 6.9494350969416816 + 6.9206365940994825 + 6.9494350969416816 + 7.0006852491904503 + 7.0006852491904503 + 6.9235065484118694 + 6.9494350969416816 + 6.9203453428494512 + 7.0006852491904503 + 6.9542201836513549 + 6.93416062177696 + 7.0104827335335438 + 6.9574838114457771 + 6.9574838114457771 + 6.9520179475748662 + 6.9190664541868436 + 6.9574838114457771 + 6.9520179475748662 + 6.9520179475748662 + 6.9520179475748662 + 6.9345140614392005 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 7.0202579138708767 + 6.9310789014171839 + 6.9310522396882757 + 7.0300108674187367 + 6.9640211164915495 + 7.0300108674187367 + 7.0300108674187367 + 6.9155825855996866 + 6.9348713253219909 + 7.0300108674187367 + 6.9201148556045933 + 7.0300108674187367 + 6.9672947255888742 + 7.0397416711314129 + 7.0397416711314129 + 7.0397416711314129 + 6.9352324048546983 + 7.0397416711314129 + 6.9352324048546983 + 6.9672947255888742 + 6.9597908591808677 + 7.0397416711314129 + 7.0494504017009039 + 7.0494504017009039 + 6.9623898537395181 + 7.0494504017009039 + 7.0494504017009039 + 6.9705715938992228 + 6.9705715938992228 + 6.9705715938992228 + 7.0494504017009039 + 7.0494504017009039 + 6.9738516877444825 + 6.9309924995288519 + 6.9359659765997881 + 6.9649928126260967 + 6.9738516877444825 + 6.9738516877444825 + 7.059137135556651 + 6.9167363412506493 + 7.059137135556651 + 6.9738516877444825 + 7.0688019488652953 + 6.9675997073840179 + 6.9309793154801884 + 6.9363384516837439 + 6.9098253314164717 + 6.9309793154801884 + 7.0688019488652953 + 6.9129992138314176 + 6.9309793154801884 + 6.9675997073840179 + 6.9309694865956573 + 7.0784449175304642 + 6.9702105096592737 + 6.9804214181234503 + 6.9702105096592737 + 6.9804214181234503 + 6.9309694865956573 + 7.0784449175304642 + 6.9082828225605812 + 6.9804214181234503 + 6.9309630071711039 + 7.0880661171925796 + 6.9728251912005277 + 7.0880661171925796 + 6.9728251912005277 + 7.0880661171925796 + 7.0880661171925796 + 6.9370947374745917 + 7.0880661171925796 + 7.0880661171925796 + 6.9870036504830315 + 7.097665623228691 + 6.9870036504830315 + 6.9754437238591969 + 6.9870036504830315 + 7.097665623228691 + 7.097665623228691 + 7.097665623228691 + 6.9870036504830315 + 6.9754437238591969 + 7.1072435107523315 + 6.9309600738816197 + 7.1072435107523315 + 7.1072435107523315 + 6.9902993723992193 + 6.9378660803981163 + 6.9131546719649792 + 7.1072435107523315 + 7.1072435107523315 + 6.9780660795895244 + 6.9121532254305436 + 6.9935981211198017 + 6.9121532254305436 + 7.116799854613399 + 6.9001007989926499 + 7.116799854613399 + 6.9048208433471547 + 6.9100188066322863 + 6.9309636086049444 + 6.9121532254305436 + 6.9005776253467079 + 6.9386524120621873 + 6.9309704699649117 + 6.9309704699649117 + 6.9005161833395547 + 6.9833221485966677 + 6.9833221485966677 + 7.1263347293980601 + 6.996899864077518 + 6.9386524120621873 + 6.9101554250570434 + 7.1358482094286746 + 7.1358482094286746 + 6.9859558062966753 + 6.9859558062966753 + 7.0002045688629435 + 6.9077913191471998 + 7.1358482094286746 + 7.1358482094286746 + 6.9390511773143837 + 6.9885931759148177 + 7.1453403687637431 + 6.9885931759148177 + 7.1453403687637431 + 7.0035122032242452 + 7.0035122032242452 + 7.1453403687637431 + 7.0035122032242452 + 7.1453403687637431 + 6.9394536641298856 + 7.1548112811978744 + 6.939859863975796 + 6.939859863975796 + 6.895889464487639 + 6.9310109567917682 + 6.9081644103982427 + 7.0068227350669341 + 7.1548112811978744 + 6.939859863975796 + 7.1548112811978744 + 7.164261020261784 + 6.9938789408855451 + 7.164261020261784 + 6.9402697683231187 + 7.164261020261784 + 7.01013613245361 + 7.164261020261784 + 6.9402697683231187 + 7.164261020261784 + 7.164261020261784 + 7.0134523636036885 + 7.0134523636036885 + 7.0134523636036885 + 6.8928846838777025 + 6.9061801759923371 + 7.1736896592222985 + 7.1736896592222985 + 6.9965272814859478 + 6.9965272814859478 + 7.0134523636036885 + 6.9991792245001596 + 6.9022481447977038 + 7.0167713968931267 + 7.0167713968931267 + 6.8912670914593397 + 7.1830972710823895 + 6.9411006564261202 + 7.1830972710823895 + 7.1830972710823895 + 6.9310811778744039 + 7.1924839285812272 + 6.9311111658763789 + 7.1924839285812272 + 7.0200932008541441 + 7.1924839285812272 + 6.9311111658763789 + 7.0018347428099563 + 7.1924839285812272 + 6.9311111658763789 + 7.1924839285812272 + 7.2018497041942524 + 7.2018497041942524 + 7.2018497041942524 + 7.0044938094002696 + 7.0234177441749317 + 7.2018497041942524 + 7.0234177441749317 + 7.0234177441749317 + 7.2018497041942524 + 6.9419462602888231 + 7.211194670133267 + 6.9423745593519364 + 7.211194670133267 + 7.211194670133267 + 7.211194670133267 + 7.0267449956993513 + 6.9311809790930132 + 7.0071563973591786 + 6.9423745593519364 + 7.211194670133267 + 7.0098224798778936 + 7.2205188983465485 + 7.2205188983465485 + 6.8978398541639718 + 7.0300749244266312 + 7.2205188983465485 + 7.2205188983465485 + 7.2205188983465485 + 7.0300749244266312 + 7.0300749244266312 + 7.2298224605189727 + 6.9312638705406115 + 7.2298224605189727 + 7.2298224605189727 + 7.2298224605189727 + 6.9432421092245207 + 6.9312638705406115 + 6.9312638705406115 + 7.2298224605189727 + 7.0124920302507405 + 7.0151650218751289 + 7.2391054280721665 + 7.2391054280721665 + 7.2391054280721665 + 7.0151650218751289 + 6.8786818659538564 + 6.9313102063322232 + 7.0367426902616428 + 6.9436813430409927 + 6.9436813430409927 + 6.9441242047901719 + 6.9313597945596825 + 6.8945489318633291 + 6.8804984728959804 + 7.2483678721646712 + 6.9441242047901719 + 6.9441242047901719 + 7.2483678721646712 + 7.2483678721646712 + 7.0178414282515256 + 7.0205212229834064 + 7.2576098636921271 + 7.2576098636921271 + 7.0434207967690821 + 6.897334879982707 + 6.9445706859875731 + 7.0205212229834064 + 6.9445706859875731 + 6.8809938491968294 + 7.2576098636921271 + 6.8795202091679064 + 7.2668314732874713 + 7.0467636519146728 + 7.2668314732874713 + 6.8760270059715882 + 7.0232043797772201 + 6.9450207781536832 + 7.2668314732874713 + 7.2668314732874713 + 7.0467636519146728 + 7.2760327713211561 + 7.0501090015032153 + 7.2760327713211561 + 7.2760327713211561 + 7.2760327713211561 + 7.0501090015032153 + 7.2760327713211561 + 6.8780471993761481 + 7.0501090015032153 + 7.2760327713211561 + 7.0285806748909625 + 6.8743556235059202 + 7.2852138279013836 + 6.8704536898936848 + 6.9459317614993381 + 7.0534568156123729 + 7.0534568156123729 + 6.9315905577057038 + 7.0285806748909625 + 6.8830942842910305 + 7.2943747128743555 + 7.2943747128743555 + 7.2943747128743555 + 7.0312737611381397 + 7.2943747128743555 + 6.9463926357454744 + 7.2943747128743555 + 6.9316563225255337 + 7.2943747128743555 + 7.2943747128743555 + 6.9317253055506569 + 7.0339701053016075 + 7.0339701053016075 + 6.946857087093675 + 7.3035154958245352 + 6.8682537462499029 + 7.0339701053016075 + 7.0339701053016075 + 7.0339701053016075 + 6.946857087093675 + 7.0635124251253734 + 7.3126299381912307 + 7.3126299381912307 + 7.3126299381912307 + 7.3126299381912307 + 6.8869217880115965 + 6.8697546368392235 + 6.9473247828492504 + 7.3126299381912307 + 7.0635124251253734 + 7.3217181590811009 + 7.3217181590811009 + 7.0668651534935512 + 7.0668651534935512 + 6.9477957076251293 + 7.0668651534935512 + 6.9318727467581089 + 7.3217181590811009 + 7.0668651534935512 + 7.3217181590811009 + 7.3307802769332682 + 7.3307802769332682 + 7.3307802769332682 + 7.0420671954043792 + 6.9319511804041607 + 7.3307802769332682 + 7.0702178728918206 + 7.3307802769332682 + 7.3307802769332682 + 6.8847592142140144 + 7.3398164095229532 + 6.9487471829810898 + 7.0735705529168245 + 6.9487471829810898 + 6.8653023835814375 + 7.3398164095229532 + 6.8836812175057647 + 7.3398164095229532 + 7.0735705529168245 + 6.8886329227211185 + 6.9492277030781207 + 6.9492277030781207 + 7.348826673965096 + 7.348826673965096 + 7.0769231634388454 + 7.348826673965096 + 7.0769231634388454 + 7.0769231634388454 + 7.348826673965096 + 6.8741153225133367 + 6.8648397981086422 + 7.3578111867179832 + 7.3578111867179832 + 6.8648397981086422 + 7.0802756745998874 + 7.3578111867179832 + 7.0802756745998874 + 7.0802756745998874 + 7.3578111867179832 + 7.3578111867179832 + 7.0836280568117704 + 7.0836280568117704 + 7.0528810208748292 + 7.3667700635868503 + 6.9322960509323686 + 6.8674960112228876 + 7.0528810208748292 + 7.3667700635868503 + 6.9322960509323686 + 7.0836280568117704 + 7.3757034197274987 + 7.0869802807542293 + 7.3757034197274987 + 7.3757034197274987 + 7.0555874464894544 + 7.0555874464894544 + 7.3757034197274987 + 7.0555874464894544 + 7.3757034197274987 + 7.0869802807542293 + 7.0903323173730115 + 7.3846113696498863 + 7.0582950030413336 + 7.3846113696498863 + 6.8690261621401252 + 7.3846113696498863 + 7.3846113696498863 + 7.0582950030413336 + 7.0582950030413336 + 6.9511813133231923 + 7.3934940272217169 + 7.3934940272217169 + 7.0936841378779985 + 7.0936841378779985 + 7.3934940272217169 + 7.3934940272217169 + 7.3934940272217169 + 6.9325870582251596 + 7.0936841378779985 + 7.3934940272217169 + + + 16 + -2.9609406022688112 + -2.8254853588504654 + -2.8388142854965275 + -2.7808707305637332 + -2.7730760637757532 + -2.7527961218476045 + -2.750478498847527 + -2.7465971997542016 + -2.7448201329604163 + -2.7430231881398033 + -2.7418058217996886 + -2.7418695159782902 + -2.7409922499818697 + -2.7394334874951958 + -2.7402304975580041 + -2.7396643957984965 + + + 16 + 9.7725264428930814 + 9.6370711994747449 + 9.6504001261207897 + 9.5924565711879861 + 9.5846619044000256 + 9.5643819624718809 + 9.5620643394718012 + 9.5581830403784735 + 9.5564059735846918 + 9.5546090287640624 + 9.553391662423957 + 9.5534553566025338 + 9.5525780906061382 + 9.5510193281194482 + 9.5518163381822738 + 9.5512502364227903 + + diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_0.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_0.xml index 953a44d524..16d4ac6122 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_0.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_0.xml @@ -12,20 +12,20 @@ -70.000000000000014 -49.999999999999986 -5.0000000000000604 - -49.999999999999993 - -5 + -50.000000000000043 + -5.0000000000000568 80.000000000000014 -184.99999999999989 -64.999999999999829 - 75.000000000000071 + 75.000000000000128 10.000000000000011 - -59.999999999999943 - -9.999999999999897 - -4.9999999999999485 + -60.000000000000057 + -10.000000000000009 + -5.0000000000000053 60 0 - -44.999999999999929 - 60.000000000000057 + -44.999999999999986 + 60 5.3290705182007514e-14 -30.000000000000028 -59.999999999999943 @@ -37,19 +37,19 @@ 4.9999999999999973 0.19999999999999815 11.250000000000004 - 3.1999999999999966 + 3.2000000000000055 8.4500000000000011 33.799999999999969 4.0499999999999874 11.250000000000021 - 1.7999999999999965 - 1.7999999999999965 - 0.049999999999998976 - 0.44999999999999746 + 1.8000000000000034 + 1.8000000000000034 + 0.050000000000000086 + 0.45000000000000084 6.049999999999998 1.2500000000000022 7.1999999999999993 - 6.0500000000000105 + 6.049999999999998 1.2500000000000022 0.45000000000000084 1.7999999999999965 @@ -60,20 +60,20 @@ -6.9999999999999991 -4.9999999999999973 0.25000000000000266 - -10.000000000000002 - -0.75 + -10.000000000000007 + -0.75000000000000888 -8 -27.749999999999982 -3.2499999999999947 -11.250000000000021 - -0.99999999999999956 + -1.000000000000002 0 0 - -0.24999999999999711 + -0.2500000000000005 -5.9999999999999982 0 - -6.7499999999999956 - -6.0000000000000107 + -6.7499999999999982 + -5.9999999999999982 -5.5511151231257827e-15 0 0 @@ -90,13 +90,13 @@ -3.4502423109495881 -3.469814270443778 -3.4405375988254123 - -3.2226649751609364 + -3.222664975160936 -2.9351106219650442 -2.8182713948302314 -2.9109204815675662 -2.9974201933988711 - -2.909045620263937 - -2.7875440262964757 + -2.9090456202639374 + -2.7875440262964752 -2.7504540277720304 -2.7468371894369819 -2.7467110222070819 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_1.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_1.xml index 0e77b34d81..e633780fd1 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_1.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_1.xml @@ -12,20 +12,20 @@ -70.000000000000014 -49.999999999999986 -5.0000000000000604 - -49.999999999999993 - -5 + -50.000000000000043 + -5.0000000000000568 80.000000000000014 -184.99999999999989 -64.999999999999829 - 75.000000000000071 + 75.000000000000128 10.000000000000011 - -59.999999999999943 - -9.999999999999897 - -4.9999999999999485 + -60.000000000000057 + -10.000000000000009 + -5.0000000000000053 60 0 - -44.999999999999929 - 60.000000000000057 + -44.999999999999986 + 60 5.3290705182007514e-14 -30.000000000000028 -59.999999999999943 @@ -37,19 +37,19 @@ 4.9999999999999973 0.19999999999999815 11.250000000000004 - 3.1999999999999966 + 3.2000000000000055 8.4500000000000011 33.799999999999969 4.0499999999999874 11.250000000000021 - 1.7999999999999965 - 1.7999999999999965 - 0.049999999999998976 - 0.44999999999999746 + 1.8000000000000034 + 1.8000000000000034 + 0.050000000000000086 + 0.45000000000000084 6.049999999999998 1.2500000000000022 7.1999999999999993 - 6.0500000000000105 + 6.049999999999998 1.2500000000000022 0.45000000000000084 1.7999999999999965 @@ -60,20 +60,20 @@ -6.9999999999999991 -4.9999999999999973 0.25000000000000266 - -10.000000000000002 - -0.75 + -10.000000000000007 + -0.75000000000000888 -8 -27.749999999999982 -3.2499999999999947 -11.250000000000021 - -0.99999999999999956 + -1.000000000000002 0 0 - -0.24999999999999711 + -0.2500000000000005 -5.9999999999999982 0 - -6.7499999999999956 - -6.0000000000000107 + -6.7499999999999982 + -5.9999999999999982 -5.5511151231257827e-15 0 0 @@ -90,13 +90,13 @@ -3.4502423109495881 -3.469814270443778 -3.4405375988254123 - -3.2226649751609364 + -3.222664975160936 -2.9351106219650442 -2.8182713948302314 -2.9109204815675662 -2.9974201933988711 - -2.909045620263937 - -2.7875440262964757 + -2.9090456202639374 + -2.7875440262964752 -2.7504540277720304 -2.7468371894369819 -2.7467110222070819 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_2.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_2.xml index 533383afa7..0715882443 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_2.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_2.xml @@ -9,51 +9,51 @@ 21 - 0.21526724902654029 - 0.00037168043378189554 - 0.0023506021278633634 - 1.8322908294787776e-14 - 1.8182159860257569e-05 - -1.8182159861071263e-05 - -6.7883759693111072e-06 - 6.7883758926473613e-06 - -4.5547116425681544e-14 - 6.7883759521357456e-06 - -6.7883759527878661e-06 - -3.5538537690811558 - -2.0147107048387825 - -2.7052521678814725 - -1.0406813794780787 - -3.967066260592369 - -0.87907598448922164 - -1.6612940249811217 - -2.6184399315060456 - -1.2743003165852991 - -0.86472575028406273 + 0.21526724902654093 + 0.0003716804337800827 + 0.0023506021278663566 + 1.8012407615664505e-14 + 1.818215991704466e-05 + -1.8182159915952154e-05 + -6.788375906408334e-06 + 6.7883759915004787e-06 + 1.6429796433937993e-14 + 6.7883759305581166e-06 + -6.7883759311136313e-06 + -3.5538537690812251 + -2.0147107048388269 + -2.7052521678814729 + -1.0406813794780656 + -3.967066260592401 + -0.8790759844891981 + -1.6612940249811192 + -2.6184399315060443 + -1.2743003165852878 + -0.86472575028404164 21 5.3171052747656216 5.3139634951471235 5.3139852805648378 - 5.3139597783455503 - 5.313959928304433 - 5.313959928304433 - 5.3139598111771384 - 5.3139598111771384 - 5.3139597783455486 + 5.3139597783455494 + 5.3139599283044348 + 5.3139599283044348 5.3139598111771358 - 5.3139598111771358 - 5.8523574407739236 - 5.909517708141518 - 5.5891055083437386 + 5.3139598111771367 + 5.3139597783455494 + 5.3139598111771393 + 5.3139598111771393 + 5.8523574407739245 + 5.9095177081415207 + 5.5891055083437378 5.5179043538034485 - 5.6909400832286146 + 5.6909400832286137 5.5084236091309347 5.4647638463620405 5.4221743541770948 5.4793615522962513 - 5.4998305387193387 + 5.4998305387193378 21 @@ -67,7 +67,7 @@ 0 0 0 - 0.60502446654887354 + 0.60502446654887332 0 0 0 @@ -77,7 +77,7 @@ 0 0 0 - 0.83485389150670564 + 0.8348538915067063 21 @@ -90,13 +90,13 @@ -3.4502423109495881 -3.469814270443778 -3.4405375988254123 - -3.2226649751609364 + -3.222664975160936 -2.9351106219650442 -2.8182713948302314 -2.9109204815675662 -2.9974201933988711 - -2.909045620263937 - -2.7875440262964757 + -2.9090456202639374 + -2.7875440262964752 -2.7504540277720304 -2.7468371894369819 -2.7467110222070819 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_3.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_3.xml index dc189ee266..89d0b34836 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_3.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_3.xml @@ -9,51 +9,51 @@ 21 - 0.21526724902654029 - 0.00037168043378189554 - 0.0023506021278633634 - 1.8322908294787776e-14 - 1.8182159860257569e-05 - -1.8182159861071263e-05 - -6.7883759693111072e-06 - 6.7883758926473613e-06 - -4.5547116425681544e-14 - 6.7883759521357456e-06 - -6.7883759527878661e-06 - -3.5538537690811558 - -2.0147107048387825 - -2.7052521678814725 - -1.0406813794780787 - -3.967066260592369 - -0.87907598448922164 - -1.6612940249811217 - -2.6184399315060456 - -1.2743003165852991 - -0.86472575028406273 + 0.21526724902654093 + 0.0003716804337800827 + 0.0023506021278663566 + 1.8012407615664505e-14 + 1.818215991704466e-05 + -1.8182159915952154e-05 + -6.788375906408334e-06 + 6.7883759915004787e-06 + 1.6429796433937993e-14 + 6.7883759305581166e-06 + -6.7883759311136313e-06 + -3.5538537690812251 + -2.0147107048388269 + -2.7052521678814729 + -1.0406813794780656 + -3.967066260592401 + -0.8790759844891981 + -1.6612940249811192 + -2.6184399315060443 + -1.2743003165852878 + -0.86472575028404164 21 5.3171052747656216 5.3139634951471235 5.3139852805648378 - 5.3139597783455503 - 5.313959928304433 - 5.313959928304433 - 5.3139598111771384 - 5.3139598111771384 - 5.3139597783455486 + 5.3139597783455494 + 5.3139599283044348 + 5.3139599283044348 5.3139598111771358 - 5.3139598111771358 - 5.8523574407739236 - 5.909517708141518 - 5.5891055083437386 + 5.3139598111771367 + 5.3139597783455494 + 5.3139598111771393 + 5.3139598111771393 + 5.8523574407739245 + 5.9095177081415207 + 5.5891055083437378 5.5179043538034485 - 5.6909400832286146 + 5.6909400832286137 5.5084236091309347 5.4647638463620405 5.4221743541770948 5.4793615522962513 - 5.4998305387193387 + 5.4998305387193378 21 @@ -67,7 +67,7 @@ 0 0 0 - 0.60502446654887354 + 0.60502446654887332 0 0 0 @@ -77,7 +77,7 @@ 0 0 0 - 0.83485389150670564 + 0.8348538915067063 21 @@ -90,13 +90,13 @@ -3.4502423109495881 -3.469814270443778 -3.4405375988254123 - -3.2226649751609364 + -3.222664975160936 -2.9351106219650442 -2.8182713948302314 -2.9109204815675662 -2.9974201933988711 - -2.909045620263937 - -2.7875440262964757 + -2.9090456202639374 + -2.7875440262964752 -2.7504540277720304 -2.7468371894369819 -2.7467110222070819 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_4.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_4.xml index c57f987772..3639d33008 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_4.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_4.xml @@ -12,20 +12,20 @@ -70.000000000000014 -49.999999999999986 -5.0000000000000604 - -49.999999999999993 - -5 + -50.000000000000043 + -5.0000000000000568 80.000000000000014 -184.99999999999989 -64.999999999999829 - 75.000000000000071 + 75.000000000000128 10.000000000000011 - -59.999999999999943 - -9.999999999999897 - -4.9999999999999485 + -60.000000000000057 + -10.000000000000009 + -5.0000000000000053 60 0 - -44.999999999999929 - 60.000000000000057 + -44.999999999999986 + 60 5.3290705182007514e-14 -30.000000000000028 -59.999999999999943 @@ -37,19 +37,19 @@ 4.9999999999999973 0.19999999999999815 11.250000000000004 - 3.1999999999999966 + 3.2000000000000055 8.4500000000000011 33.799999999999969 4.0499999999999874 11.250000000000021 - 1.7999999999999965 - 1.7999999999999965 - 0.049999999999998976 - 0.44999999999999746 + 1.8000000000000034 + 1.8000000000000034 + 0.050000000000000086 + 0.45000000000000084 6.049999999999998 1.2500000000000022 7.1999999999999993 - 6.0500000000000105 + 6.049999999999998 1.2500000000000022 0.45000000000000084 1.7999999999999965 @@ -60,20 +60,20 @@ -6.9999999999999991 -4.9999999999999973 0.25000000000000266 - -10.000000000000002 - -0.75 + -10.000000000000007 + -0.75000000000000888 -8 -27.749999999999982 -3.2499999999999947 -11.250000000000021 - -0.99999999999999956 + -1.000000000000002 0 0 - -0.24999999999999711 + -0.2500000000000005 -5.9999999999999982 0 - -6.7499999999999956 - -6.0000000000000107 + -6.7499999999999982 + -5.9999999999999982 -5.5511151231257827e-15 0 0 @@ -88,14 +88,14 @@ -3.5460149559446359 -3.5687884755542472 -3.4901303714495153 - -3.4970015262603624 + -3.4970015262603629 -3.4496621504416853 -3.2125376886451624 -2.91505863813991 -2.7962936950351538 -2.8888307484050659 -2.9753285114361296 - -2.8869539267116591 + -2.8869539267116595 -2.7654523327441973 -2.7283623342197525 -2.7247454958847039 @@ -113,7 +113,7 @@ 4.1747174038020365 4.1623670231442622 4.0396595028897746 - 4.1446557041188061 + 4.144655704118807 3.9896509587172271 3.7345175271931224 3.7345175271931224 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_5.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_5.xml index 7309c59486..902717c221 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_5.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_5.xml @@ -12,20 +12,20 @@ -70.000000000000014 -49.999999999999986 -5.0000000000000604 - -49.999999999999993 - -5 + -50.000000000000043 + -5.0000000000000568 80.000000000000014 -184.99999999999989 -64.999999999999829 - 75.000000000000071 + 75.000000000000128 10.000000000000011 - -59.999999999999943 - -9.999999999999897 - -4.9999999999999485 + -60.000000000000057 + -10.000000000000009 + -5.0000000000000053 60 0 - -44.999999999999929 - 60.000000000000057 + -44.999999999999986 + 60 5.3290705182007514e-14 -30.000000000000028 -59.999999999999943 @@ -37,19 +37,19 @@ 4.9999999999999973 0.19999999999999815 11.250000000000004 - 3.1999999999999966 + 3.2000000000000055 8.4500000000000011 33.799999999999969 4.0499999999999874 11.250000000000021 - 1.7999999999999965 - 1.7999999999999965 - 0.049999999999998976 - 0.44999999999999746 + 1.8000000000000034 + 1.8000000000000034 + 0.050000000000000086 + 0.45000000000000084 6.049999999999998 1.2500000000000022 7.1999999999999993 - 6.0500000000000105 + 6.049999999999998 1.2500000000000022 0.45000000000000084 1.7999999999999965 @@ -60,20 +60,20 @@ -6.9999999999999991 -4.9999999999999973 0.25000000000000266 - -10.000000000000002 - -0.75 + -10.000000000000007 + -0.75000000000000888 -8 -27.749999999999982 -3.2499999999999947 -11.250000000000021 - -0.99999999999999956 + -1.000000000000002 0 0 - -0.24999999999999711 + -0.2500000000000005 -5.9999999999999982 0 - -6.7499999999999956 - -6.0000000000000107 + -6.7499999999999982 + -5.9999999999999982 -5.5511151231257827e-15 0 0 @@ -88,14 +88,14 @@ -3.5460149559446359 -3.5687884755542472 -3.4901303714495153 - -3.4970015262603624 + -3.4970015262603629 -3.4496621504416853 -3.2125376886451624 -2.91505863813991 -2.7962936950351538 -2.8888307484050659 -2.9753285114361296 - -2.8869539267116591 + -2.8869539267116595 -2.7654523327441973 -2.7283623342197525 -2.7247454958847039 @@ -113,7 +113,7 @@ 4.1747174038020365 4.1623670231442622 4.0396595028897746 - 4.1446557041188061 + 4.144655704118807 3.9896509587172271 3.7345175271931224 3.7345175271931224 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_6.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_6.xml index 9ede0c3dcb..defaed77f3 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_6.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_6.xml @@ -9,51 +9,51 @@ 21 - 0.21526724902654029 - 0.00037168043378189554 - 0.0023506021278633634 - 1.8322908294787776e-14 - 1.8182159860257569e-05 - -1.8182159861071263e-05 - -6.7883759693111072e-06 - 6.7883758926473613e-06 - -4.5547116425681544e-14 - 6.7883759521357456e-06 - -6.7883759527878661e-06 - -3.5538537690811558 - -2.0147107048387825 - -2.7052521678814725 - -1.0406813794780787 - -3.967066260592369 - -0.87907598448922164 - -1.6612940249811217 - -2.6184399315060456 - -1.2743003165852991 - -0.86472575028406273 + 0.21526724902654093 + 0.0003716804337800827 + 0.0023506021278663566 + 1.8012407615664505e-14 + 1.818215991704466e-05 + -1.8182159915952154e-05 + -6.788375906408334e-06 + 6.7883759915004787e-06 + 1.6429796433937993e-14 + 6.7883759305581166e-06 + -6.7883759311136313e-06 + -3.5538537690812251 + -2.0147107048388269 + -2.7052521678814729 + -1.0406813794780656 + -3.967066260592401 + -0.8790759844891981 + -1.6612940249811192 + -2.6184399315060443 + -1.2743003165852878 + -0.86472575028404164 21 5.3171052747656216 5.3139634951471235 5.3139852805648378 - 5.3139597783455503 - 5.313959928304433 - 5.313959928304433 - 5.3139598111771384 - 5.3139598111771384 - 5.3139597783455486 + 5.3139597783455494 + 5.3139599283044348 + 5.3139599283044348 5.3139598111771358 - 5.3139598111771358 - 5.8523574407739236 - 5.909517708141518 - 5.5891055083437386 + 5.3139598111771367 + 5.3139597783455494 + 5.3139598111771393 + 5.3139598111771393 + 5.8523574407739245 + 5.9095177081415207 + 5.5891055083437378 5.5179043538034485 - 5.6909400832286146 + 5.6909400832286137 5.5084236091309347 5.4647638463620405 5.4221743541770948 5.4793615522962513 - 5.4998305387193387 + 5.4998305387193378 21 @@ -67,7 +67,7 @@ 0 0 0 - 0.60502446654887354 + 0.60502446654887332 0 0 0 @@ -77,7 +77,7 @@ 0 0 0 - 0.93416481023846032 + 0.93416481023846054 21 @@ -88,14 +88,14 @@ -3.5460149559446359 -3.5687884755542472 -3.4901303714495153 - -3.4970015262603624 + -3.4970015262603629 -3.4496621504416853 -3.2125376886451624 -2.91505863813991 -2.7962936950351538 -2.8888307484050659 -2.9753285114361296 - -2.8869539267116591 + -2.8869539267116595 -2.7654523327441973 -2.7283623342197525 -2.7247454958847039 @@ -113,7 +113,7 @@ 4.1747174038020365 4.1623670231442622 4.0396595028897746 - 4.1446557041188061 + 4.144655704118807 3.9896509587172271 3.7345175271931224 3.7345175271931224 diff --git a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_7.xml b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_7.xml index 35b41a8549..b5362d7f32 100644 --- a/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_7.xml +++ b/src/gromacs/awh/tests/refdata/WithParameters_BiasTest_ForcesBiasPmf_7.xml @@ -9,51 +9,51 @@ 21 - 0.21526724902654029 - 0.00037168043378189554 - 0.0023506021278633634 - 1.8322908294787776e-14 - 1.8182159860257569e-05 - -1.8182159861071263e-05 - -6.7883759693111072e-06 - 6.7883758926473613e-06 - -4.5547116425681544e-14 - 6.7883759521357456e-06 - -6.7883759527878661e-06 - -3.5538537690811558 - -2.0147107048387825 - -2.7052521678814725 - -1.0406813794780787 - -3.967066260592369 - -0.87907598448922164 - -1.6612940249811217 - -2.6184399315060456 - -1.2743003165852991 - -0.86472575028406273 + 0.21526724902654093 + 0.0003716804337800827 + 0.0023506021278663566 + 1.8012407615664505e-14 + 1.818215991704466e-05 + -1.8182159915952154e-05 + -6.788375906408334e-06 + 6.7883759915004787e-06 + 1.6429796433937993e-14 + 6.7883759305581166e-06 + -6.7883759311136313e-06 + -3.5538537690812251 + -2.0147107048388269 + -2.7052521678814729 + -1.0406813794780656 + -3.967066260592401 + -0.8790759844891981 + -1.6612940249811192 + -2.6184399315060443 + -1.2743003165852878 + -0.86472575028404164 21 5.3171052747656216 5.3139634951471235 5.3139852805648378 - 5.3139597783455503 - 5.313959928304433 - 5.313959928304433 - 5.3139598111771384 - 5.3139598111771384 - 5.3139597783455486 + 5.3139597783455494 + 5.3139599283044348 + 5.3139599283044348 5.3139598111771358 - 5.3139598111771358 - 5.8523574407739236 - 5.909517708141518 - 5.5891055083437386 + 5.3139598111771367 + 5.3139597783455494 + 5.3139598111771393 + 5.3139598111771393 + 5.8523574407739245 + 5.9095177081415207 + 5.5891055083437378 5.5179043538034485 - 5.6909400832286146 + 5.6909400832286137 5.5084236091309347 5.4647638463620405 5.4221743541770948 5.4793615522962513 - 5.4998305387193387 + 5.4998305387193378 21 @@ -67,7 +67,7 @@ 0 0 0 - 0.60502446654887354 + 0.60502446654887332 0 0 0 @@ -77,7 +77,7 @@ 0 0 0 - 0.93416481023846032 + 0.93416481023846054 21 @@ -88,14 +88,14 @@ -3.5460149559446359 -3.5687884755542472 -3.4901303714495153 - -3.4970015262603624 + -3.4970015262603629 -3.4496621504416853 -3.2125376886451624 -2.91505863813991 -2.7962936950351538 -2.8888307484050659 -2.9753285114361296 - -2.8869539267116591 + -2.8869539267116595 -2.7654523327441973 -2.7283623342197525 -2.7247454958847039 @@ -113,7 +113,7 @@ 4.1747174038020365 4.1623670231442622 4.0396595028897746 - 4.1446557041188061 + 4.144655704118807 3.9896509587172271 3.7345175271931224 3.7345175271931224 diff --git a/src/gromacs/gmxana/gmx_awh.cpp b/src/gromacs/gmxana/gmx_awh.cpp index 0c02278867..f68beb07e9 100644 --- a/src/gromacs/gmxana/gmx_awh.cpp +++ b/src/gromacs/gmxana/gmx_awh.cpp @@ -340,7 +340,7 @@ void OutputFile::initializeAwhOutputFile(int subblockStart, int numLegend = numDim_ - 1 + numGraph_; legend_ = makeLegend(awhBiasParams, OutputFileType::Awh, numLegend); /* We could have both length and angle coordinates in a single bias */ - xLabel_ = "(nm or deg)"; + xLabel_ = "(nm, deg or lambda state)"; yLabel_ = useKTForEnergy_ ? "(k\\sB\\NT)" : "(kJ/mol)"; if (graphSelection == AwhGraphSelection::All) { @@ -377,14 +377,16 @@ void OutputFile::initializeFrictionOutputFile(int subBlockStart scaleFactor_.resize(numGraph_, useKTForEnergy_ ? 1 : kTValue); int numLegend = numDim_ - 1 + numGraph_; legend_ = makeLegend(awhBiasParams, OutputFileType::Friction, numLegend); - xLabel_ = "(nm or deg)"; + xLabel_ = "(nm, deg or lambda state)"; if (useKTForEnergy_) { - yLabel_ = "friction/k\\sB\\NT (nm\\S-2\\Nps or rad\\S-2\\Nps)"; + yLabel_ = "friction/k\\sB\\NT (nm\\S-2\\Nps, rad\\S-2\\Nps or ps)"; } else { - yLabel_ = "friction (kJ mol\\S-1\\Nnm\\S-2\\Nps or kJ mol\\S-1\\Nrad\\S-2\\Nps)"; + yLabel_ = + "friction (kJ mol\\S-1\\Nnm\\S-2\\Nps, kJ mol\\S-1\\Nrad\\S-2\\Nps or kJ " + "mol\\S-1\\Nps)"; } } diff --git a/src/gromacs/gmxpreprocess/grompp.cpp b/src/gromacs/gmxpreprocess/grompp.cpp index 7e74e01660..61fadce8db 100644 --- a/src/gromacs/gmxpreprocess/grompp.cpp +++ b/src/gromacs/gmxpreprocess/grompp.cpp @@ -2303,8 +2303,10 @@ int gmx_grompp(int argc, char* argv[]) { copy_mat(ir->compress, compressibility); } - setStateDependentAwhParams(ir->awhParams, ir->pull, pull, state.box, ir->pbcType, - compressibility, &ir->opts, wi); + setStateDependentAwhParams( + ir->awhParams, ir->pull, pull, state.box, ir->pbcType, compressibility, &ir->opts, + ir->efep != efepNO ? ir->fepvals->all_lambda[efptFEP][ir->fepvals->init_fep_state] : 0, + sys, wi); } if (ir->bPull) diff --git a/src/gromacs/gmxpreprocess/readir.cpp b/src/gromacs/gmxpreprocess/readir.cpp index 2e750d20b0..66f7522eac 100644 --- a/src/gromacs/gmxpreprocess/readir.cpp +++ b/src/gromacs/gmxpreprocess/readir.cpp @@ -2116,7 +2116,7 @@ void get_ir(const char* mdparin, } /* AWH biasing - NOTE: needs COM pulling input */ + NOTE: needs COM pulling or free energy input */ printStringNewline(&inp, "AWH biasing"); ir->bDoAwh = (get_eeenum(&inp, "awh", yesno_names, wi) != 0); if (ir->bDoAwh) diff --git a/src/gromacs/mdlib/enerdata_utils.cpp b/src/gromacs/mdlib/enerdata_utils.cpp index 5408847868..8f7cf633a9 100644 --- a/src/gromacs/mdlib/enerdata_utils.cpp +++ b/src/gromacs/mdlib/enerdata_utils.cpp @@ -53,7 +53,7 @@ ForeignLambdaTerms::ForeignLambdaTerms(int numLambdas) : { } -std::pair, std::vector> ForeignLambdaTerms::getTerms(t_commrec* cr) const +std::pair, std::vector> ForeignLambdaTerms::getTerms(const t_commrec* cr) const { GMX_RELEASE_ASSERT(finalizedPotentialContributions_, "The object needs to be finalized before calling getTerms"); diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index d8fc0267f7..3f2cd68dd8 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -624,12 +624,21 @@ static void computeSpecialForces(FILE* fplog, { pull_potential_wrapper(cr, inputrec, box, x, forceWithVirial, mdatoms, enerd, pull_work, lambda.data(), t, wcycle); - - if (awh) + } + if (awh) + { + const bool needForeignEnergyDifferences = awh->needForeignEnergyDifferences(step); + std::vector foreignLambdaDeltaH, foreignLambdaDhDl; + if (needForeignEnergyDifferences) { - enerd->term[F_COM_PULL] += awh->applyBiasForcesAndUpdateBias( - inputrec->pbcType, mdatoms->massT, box, forceWithVirial, t, step, wcycle, fplog); + enerd->foreignLambdaTerms.finalizePotentialContributions(enerd->dvdl_lin, lambda, + *inputrec->fepvals); + std::tie(foreignLambdaDeltaH, foreignLambdaDhDl) = enerd->foreignLambdaTerms.getTerms(cr); } + + enerd->term[F_COM_PULL] += awh->applyBiasForcesAndUpdateBias( + inputrec->pbcType, mdatoms->massT, foreignLambdaDeltaH, foreignLambdaDhDl, box, + forceWithVirial, t, step, wcycle, fplog); } rvec* f = as_rvec_array(forceWithVirial->force_.data()); @@ -1577,6 +1586,26 @@ void do_force(FILE* fplog, wallcycle_stop(wcycle, ewcFORCE); + // VdW dispersion correction, only computed on master rank to avoid double counting + if ((stepWork.computeEnergy || stepWork.computeVirial) && fr->dispersionCorrection && MASTER(cr)) + { + // Calculate long range corrections to pressure and energy + const DispersionCorrection::Correction correction = + fr->dispersionCorrection->calculate(box, lambda[efptVDW]); + + if (stepWork.computeEnergy) + { + enerd->term[F_DISPCORR] = correction.energy; + enerd->term[F_DVDL_VDW] += correction.dvdl; + enerd->dvdl_lin[efptVDW] += correction.dvdl; + } + if (stepWork.computeVirial) + { + correction.correctVirial(vir_force); + enerd->term[F_PDISPCORR] = correction.pressure; + } + } + computeSpecialForces(fplog, cr, inputrec, awh, enforcedRotation, imdSession, pull_work, step, t, wcycle, fr->forceProviders, box, x.unpaddedArrayRef(), mdatoms, lambda, stepWork, &forceOut.forceWithVirial(), enerd, ed, stepWork.doNeighborSearch); @@ -1845,26 +1874,6 @@ void do_force(FILE* fplog, vir_force, *mdatoms, *fr, vsite, stepWork); } - // VdW dispersion correction, only computed on master rank to avoid double counting - if ((stepWork.computeEnergy || stepWork.computeVirial) && fr->dispersionCorrection && MASTER(cr)) - { - // Calculate long range corrections to pressure and energy - const DispersionCorrection::Correction correction = - fr->dispersionCorrection->calculate(box, lambda[efptVDW]); - - if (stepWork.computeEnergy) - { - enerd->term[F_DISPCORR] = correction.energy; - enerd->term[F_DVDL_VDW] += correction.dvdl; - enerd->dvdl_lin[efptVDW] += correction.dvdl; - } - if (stepWork.computeVirial) - { - correction.correctVirial(vir_force); - enerd->term[F_PDISPCORR] = correction.pressure; - } - } - // TODO refactor this and unify with above GPU PME-PP / GPU update path call to the same function if (PAR(cr) && !thisRankHasDuty(cr, DUTY_PME) && !simulationWork.useGpuPmePpCommunication && !simulationWork.useGpuUpdate) diff --git a/src/gromacs/mdrun/md.cpp b/src/gromacs/mdrun/md.cpp index 478ca749f0..6e683a8dd8 100644 --- a/src/gromacs/mdrun/md.cpp +++ b/src/gromacs/mdrun/md.cpp @@ -529,6 +529,10 @@ void gmx::LegacySimulator::do_md() { nstfep = std::gcd(replExParams.exchangeInterval, nstfep); } + if (ir->bDoAwh) + { + nstfep = std::gcd(ir->awhParams->nstSampleCoord, nstfep); + } } /* Be REALLY careful about what flags you set here. You CANNOT assume @@ -1549,6 +1553,10 @@ void gmx::LegacySimulator::do_md() /* Gets written into the state at the beginning of next loop*/ state->fep_state = lamnew; } + else if (ir->bDoAwh && awh->needForeignEnergyDifferences(step)) + { + state->fep_state = awh->fepLambdaState(); + } /* Print the remaining wall clock time for the run */ if (isMasterSimMasterRank(ms, MASTER(cr)) && (do_verbose || gmx_got_usr_signal()) && !bPMETunePrinting) { diff --git a/src/gromacs/mdtypes/awh_params.h b/src/gromacs/mdtypes/awh_params.h index 940c8df008..951a7d2590 100644 --- a/src/gromacs/mdtypes/awh_params.h +++ b/src/gromacs/mdtypes/awh_params.h @@ -99,6 +99,7 @@ extern const char* eawhpotential_names[eawhpotentialNR + 1]; enum { eawhcoordproviderPULL, + eawhcoordproviderFREE_ENERGY_LAMBDA, eawhcoordproviderNR }; //! String for AWH bias reaction coordinate provider. @@ -117,7 +118,7 @@ struct AwhDimParams double end; /**< End value of the interval. */ double period; /**< The period of this dimension (= 0 if not periodic). */ double forceConstant; /**< The force constant in kJ/mol/nm^2, kJ/mol/rad^2 */ - double diffusion; /**< Estimated diffusion constant in units of nm^2/ps or rad^2/ps. */ + double diffusion; /**< Estimated diffusion constant in units of nm^2/ps, rad^2/ps or ps^-1. */ double coordValueInit; /**< The initial coordinate value. */ double coverDiameter; /**< The diameter that needs to be sampled around a point before it is considered covered. */ }; diff --git a/src/gromacs/mdtypes/enerdata.h b/src/gromacs/mdtypes/enerdata.h index ca9ba67d34..deef2444a1 100644 --- a/src/gromacs/mdtypes/enerdata.h +++ b/src/gromacs/mdtypes/enerdata.h @@ -161,7 +161,7 @@ public: * * \param[in] cr Communication record, used to reduce the terms when !=nullptr */ - std::pair, std::vector> getTerms(t_commrec* cr) const; + std::pair, std::vector> getTerms(const t_commrec* cr) const; //! Sets all terms to 0 void zeroAllTerms(); -- 2.22.0