#include <memory>
+#include "gromacs/math/vectypes.h"
+#include "gromacs/mdtypes/md_enums.h"
#include "gromacs/mdtypes/enerdata.h"
+#include "gromacs/topology/ifunc.h"
+#include "gromacs/utility/arrayref.h"
+#include "gromacs/utility/real.h"
class energyhistory_t;
struct ener_file;
-struct gmx_ekindata_t;
+class gmx_ekindata_t;
struct gmx_enerdata_t;
struct SimulationGroups;
struct gmx_mtop_t;
struct gmx_output_env_t;
struct pull_t;
struct t_ebin;
-struct t_expanded;
struct t_fcdata;
struct t_grpopts;
struct t_inputrec;
{
class Awh;
class Constraints;
-struct MdModulesNotifier;
+struct MDModulesNotifiers;
enum class StartingBehavior;
} // namespace gmx
//! \brief Printed names for intergroup energies
-extern const char* egrp_nm[egNR + 1];
+const char* enumValueToString(NonBondedEnergyTerms enumValue);
/* \brief delta_h block type enum: the kinds of energies written out. */
enum
* be written out to the .edr file.
*
* \todo Use more std containers.
- * \todo Remove GMX_CONSTRAINTVIR
* \todo Write free-energy output also to energy file (after adding more tests)
*/
class EnergyOutput
*
* \param[in] fp_ene Energy output file.
* \param[in] mtop Topology.
- * \param[in] ir Input parameters.
+ * \param[in] inputrec Input parameters.
* \param[in] pull_work Pulling simulations data
* \param[in] fp_dhdl FEP file.
* \param[in] isRerun Is this is a rerun instead of the simulations.
* \param[in] startingBehavior Run starting behavior.
* \param[in] simulationsShareState Tells whether the physical state is shared over simulations
- * \param[in] mdModulesNotifier Notifications to MD modules.
+ * \param[in] mdModulesNotifiers Notifications to MD modules.
*/
- EnergyOutput(ener_file* fp_ene,
- const gmx_mtop_t* mtop,
- const t_inputrec* ir,
- const pull_t* pull_work,
- FILE* fp_dhdl,
- bool isRerun,
- StartingBehavior startingBehavior,
- bool simulationsShareState,
- const MdModulesNotifier& mdModulesNotifier);
+ EnergyOutput(ener_file* fp_ene,
+ const gmx_mtop_t& mtop,
+ const t_inputrec& inputrec,
+ const pull_t* pull_work,
+ FILE* fp_dhdl,
+ bool isRerun,
+ StartingBehavior startingBehavior,
+ bool simulationsShareState,
+ const MDModulesNotifiers& mdModulesNotifiers);
~EnergyOutput();
* \param[in] tmass Total mass
* \param[in] enerd Energy data object.
* \param[in] fep FEP data.
- * \param[in] expand Expanded ensemble (for FEP).
* \param[in] lastbox PBC data.
* \param[in] ptCouplingArrays Arrays connected to pressure and temperature coupling.
* \param[in] fep_state The current alchemical state we are in.
- * \param[in] svir Constraint virial.
- * \param[in] fvir Force virial.
* \param[in] vir Total virial.
* \param[in] pres Pressure.
* \param[in] ekind Kinetic energy data.
real tmass,
const gmx_enerdata_t* enerd,
const t_lambda* fep,
- const t_expanded* expand,
const matrix lastbox,
PTCouplingArrays ptCouplingArrays,
int fep_state,
- const tensor svir,
- const tensor fvir,
const tensor vir,
const tensor pres,
const gmx_ekindata_t* ekind,
bool bMTTK_ = false;
//! Temperature control scheme
- int etc_ = 0;
+ TemperatureCoupling etc_ = TemperatureCoupling::No;
//! Which of the main energy terms should be printed
bool bEner_[F_NRE] = { false };
//! Index for entalpy (pV + total energy)
int ienthalpy_ = 0;
- /*! \brief If the constraints virial should be printed.
- * Can only be true if "GMX_CONSTRAINTVIR" environmental variable is set */
- bool bConstrVir_ = false;
- //! Index for constrains virial
- int isvir_ = 0;
- //! Index for force virial
- int ifvir_ = 0;
-
//! If we have pressure computed
bool bPres_ = false;
//! Index for total virial
int isurft_ = 0;
//! Pressure control scheme
- int epc_ = 0;
+ PressureCoupling epc_ = PressureCoupling::No;
//! Index for velocity of the box borders
int ipc_ = 0;
//! Index for viscocity
int ivisc_ = 0;
- //! Which energy terms from egNR list should be printed in group-to-group block
- bool bEInd_[egNR] = { false };
+ //! Which energy terms from NonBondedEnergyTerms list should be printed in group-to-group block
+ gmx::EnumerationArray<NonBondedEnergyTerms, bool> bEInd_;
//! Number of energy terms to be printed (these, for which bEInd[] == true)
int nEc_ = 0;
//! Number of energy output groups
//! Number of intergroup energy sets to be printed for each energy term (nE = (nEg*(nEg+1))/2)
int nE_ = 0;
//! Indexes for integroup energy sets (each set with nEc energies)
- int* igrp_ = nullptr;
+ std::vector<int> igrp_;
//! Number of temperature coupling groups
int nTC_ = 0;
int itcb_ = 0;
//! Array to accumulate values during update
- real* tmp_r_ = nullptr;
- //! Array to accumulate values during update
- rvec* tmp_v_ = nullptr;
+ std::vector<real> tmp_r_;
//! The dhdl.xvg output file
FILE* fp_dhdl_ = nullptr;
+ //! Whether the free-energy lambda moves dynamically between lambda states
+ bool haveFepLambdaMoves_;
//! Energy components for dhdl.xvg output
- double* dE_ = nullptr;
+ std::vector<double> dE_;
//! The delta U components (raw data + histogram)
- t_mde_delta_h_coll* dhc_ = nullptr;
+ std::unique_ptr<t_mde_delta_h_coll> dhc_;
//! Temperatures for simulated tempering groups
- real* temperatures_ = nullptr;
- //! Number of temperatures actually saved
- int numTemperatures_ = 0;
+ std::vector<real> temperatures_;
//! For tracking the conserved or total energy
std::unique_ptr<EnergyDriftTracker> conservedEnergyTracker_;