From: Joe Jordan Date: Sun, 11 Apr 2021 00:48:56 +0000 (+0000) Subject: Pass ref_t to initialize_lambdas X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=d851626776eb6abbc4c49b173d3c58bd50d4f15b;p=alexxy%2Fgromacs.git Pass ref_t to initialize_lambdas --- diff --git a/src/gromacs/mdrun/md.cpp b/src/gromacs/mdrun/md.cpp index 6e80825afe..a7487ff8cf 100644 --- a/src/gromacs/mdrun/md.cpp +++ b/src/gromacs/mdrun/md.cpp @@ -257,7 +257,8 @@ void gmx::LegacySimulator::do_md() int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr; gmx::ArrayRef lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef(); - initialize_lambdas(fplog, *ir, MASTER(cr), fep_state, lambda); + initialize_lambdas( + fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda); Update upd(*ir, deform); bool doSimulatedAnnealing = false; { diff --git a/src/gromacs/mdrun/mimic.cpp b/src/gromacs/mdrun/mimic.cpp index ce23edc526..a434de0126 100644 --- a/src/gromacs/mdrun/mimic.cpp +++ b/src/gromacs/mdrun/mimic.cpp @@ -228,7 +228,12 @@ void gmx::LegacySimulator::do_mimic() nonConstGlobalTopology->intermolecularExclusionGroup = genQmmmIndices(top_global); } - initialize_lambdas(fplog, *ir, MASTER(cr), &state_global->fep_state, state_global->lambda); + initialize_lambdas(fplog, + *ir, + gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), + MASTER(cr), + &state_global->fep_state, + state_global->lambda); const bool simulationsShareState = false; gmx_mdoutf* outf = init_mdoutf(fplog, diff --git a/src/gromacs/mdrun/minimize.cpp b/src/gromacs/mdrun/minimize.cpp index 2083308bf0..c7da246c7c 100644 --- a/src/gromacs/mdrun/minimize.cpp +++ b/src/gromacs/mdrun/minimize.cpp @@ -394,7 +394,8 @@ static void init_em(FILE* fplog, } int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr; gmx::ArrayRef lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef(); - initialize_lambdas(fplog, *ir, MASTER(cr), fep_state, lambda); + initialize_lambdas( + fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda); if (ir->eI == IntegrationAlgorithm::NM) { diff --git a/src/gromacs/mdrun/rerun.cpp b/src/gromacs/mdrun/rerun.cpp index d3202d64fd..ed4ede7134 100644 --- a/src/gromacs/mdrun/rerun.cpp +++ b/src/gromacs/mdrun/rerun.cpp @@ -275,7 +275,8 @@ void gmx::LegacySimulator::do_rerun() } int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr; gmx::ArrayRef lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef(); - initialize_lambdas(fplog, *ir, MASTER(cr), fep_state, lambda); + initialize_lambdas( + fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda); const bool simulationsShareState = false; gmx_mdoutf* outf = init_mdoutf(fplog, nfile, diff --git a/src/gromacs/mdtypes/state.cpp b/src/gromacs/mdtypes/state.cpp index 79a98f0845..4722245ff8 100644 --- a/src/gromacs/mdtypes/state.cpp +++ b/src/gromacs/mdtypes/state.cpp @@ -352,7 +352,12 @@ void printLambdaStateToLog(FILE* fplog, gmx::ArrayRef lambda, const } } -void initialize_lambdas(FILE* fplog, const t_inputrec& ir, bool isMaster, int* fep_state, gmx::ArrayRef lambda) +void initialize_lambdas(FILE* fplog, + const t_inputrec& ir, + gmx::ArrayRef ref_t, + bool isMaster, + int* fep_state, + gmx::ArrayRef lambda) { /* TODO: Clean up initialization of fep_state and lambda in t_state. This function works, but could probably use a logic @@ -391,11 +396,11 @@ void initialize_lambdas(FILE* fplog, const t_inputrec& ir, bool isMaster, int* f if (ir.bSimTemp) { /* need to rescale control temperatures to match current state */ - for (int i = 0; i < ir.opts.ngtc; i++) + for (int i = 0; i < ref_t.ssize(); i++) { - if (ir.opts.ref_t[i] > 0) + if (ref_t[i] > 0) { - ir.opts.ref_t[i] = ir.simtempvals->temperatures[fep->init_fep_state]; + ref_t[i] = ir.simtempvals->temperatures[fep->init_fep_state]; } } } diff --git a/src/gromacs/mdtypes/state.h b/src/gromacs/mdtypes/state.h index 8998b75abc..faa51d21a4 100644 --- a/src/gromacs/mdtypes/state.h +++ b/src/gromacs/mdtypes/state.h @@ -293,17 +293,6 @@ struct t_extmass tensor Winvm; /* inverse pressure mass tensor, computed */ }; - -typedef struct -{ - real veta; - double rscale; - double vscale; - double rvscale; - double alpha; - double* vscale_nhc; -} t_vetavars; - #endif // DOXYGEN //! Resizes the T- and P-coupling state variables @@ -376,6 +365,11 @@ void printLambdaStateToLog(FILE* fplog, gmx::ArrayRef lambda, bool i * and lambda on master rank. * * Reports the initial lambda state to the log file. */ -void initialize_lambdas(FILE* fplog, const t_inputrec& ir, bool isMaster, int* fep_state, gmx::ArrayRef lambda); +void initialize_lambdas(FILE* fplog, + const t_inputrec& ir, + gmx::ArrayRef ref_t, + bool isMaster, + int* fep_state, + gmx::ArrayRef lambda); #endif diff --git a/src/gromacs/modularsimulator/freeenergyperturbationdata.cpp b/src/gromacs/modularsimulator/freeenergyperturbationdata.cpp index d780e69216..6671c20d85 100644 --- a/src/gromacs/modularsimulator/freeenergyperturbationdata.cpp +++ b/src/gromacs/modularsimulator/freeenergyperturbationdata.cpp @@ -60,8 +60,8 @@ namespace gmx { -FreeEnergyPerturbationData::FreeEnergyPerturbationData(FILE* fplog, const t_inputrec* inputrec, MDAtoms* mdAtoms) : - element_(std::make_unique(this, inputrec->fepvals->delta_lambda)), +FreeEnergyPerturbationData::FreeEnergyPerturbationData(FILE* fplog, const t_inputrec& inputrec, MDAtoms* mdAtoms) : + element_(std::make_unique(this, inputrec.fepvals->delta_lambda)), lambda_(), currentFEPState_(0), fplog_(fplog), @@ -72,7 +72,12 @@ FreeEnergyPerturbationData::FreeEnergyPerturbationData(FILE* fplog, const t_inpu // The legacy implementation only filled the lambda vector in state_global, which is only // available on master. We have the lambda vector available everywhere, so we pass a `true` // for isMaster on all ranks. See #3647. - initialize_lambdas(fplog_, *inputrec_, true, ¤tFEPState_, lambda_); + initialize_lambdas(fplog_, + inputrec_, + gmx::arrayRefFromArray(inputrec_.opts.ref_t, inputrec_.opts.ngtc), + true, + ¤tFEPState_, + lambda_); } void FreeEnergyPerturbationData::Element::scheduleTask(Step step, @@ -88,7 +93,7 @@ void FreeEnergyPerturbationData::Element::scheduleTask(Step step, void FreeEnergyPerturbationData::updateLambdas(Step step) { // at beginning of step (if lambdas change...) - lambda_ = currentLambdas(step, *(inputrec_->fepvals), currentFEPState_); + lambda_ = currentLambdas(step, *(inputrec_.fepvals), currentFEPState_); updateMDAtoms(); } @@ -202,7 +207,7 @@ void FreeEnergyPerturbationData::readCheckpointToTrxFrame(t_trxframe* trxFrame, { if (readCheckpointData) { - FreeEnergyPerturbationData freeEnergyPerturbationData; + FreeEnergyPerturbationData freeEnergyPerturbationData(nullptr, t_inputrec(), nullptr); freeEnergyPerturbationData.doCheckpointData(&readCheckpointData.value()); trxFrame->lambda = freeEnergyPerturbationData.lambda_[FreeEnergyPerturbationCouplingType::Fep]; trxFrame->fep_state = freeEnergyPerturbationData.currentFEPState_; diff --git a/src/gromacs/modularsimulator/freeenergyperturbationdata.h b/src/gromacs/modularsimulator/freeenergyperturbationdata.h index 7ef19d86f1..98d9cfc80e 100644 --- a/src/gromacs/modularsimulator/freeenergyperturbationdata.h +++ b/src/gromacs/modularsimulator/freeenergyperturbationdata.h @@ -77,7 +77,7 @@ class FreeEnergyPerturbationData final { public: //! Constructor - FreeEnergyPerturbationData(FILE* fplog, const t_inputrec* inputrec, MDAtoms* mdAtoms); + FreeEnergyPerturbationData(FILE* fplog, const t_inputrec& inputrec, MDAtoms* mdAtoms); //! Get a view of the current lambda vector ArrayRef lambdaView(); @@ -100,8 +100,6 @@ public: static const std::string& checkpointID(); private: - //! Default constructor - only used internally - FreeEnergyPerturbationData() = default; //! Update the lambda values void updateLambdas(Step step); //! Helper function to read from / write to CheckpointData @@ -119,7 +117,7 @@ private: //! Handles logging. FILE* fplog_; //! Contains user input mdp options. - const t_inputrec* inputrec_; + const t_inputrec& inputrec_; //! Atom parameters for this domain. MDAtoms* mdAtoms_; }; diff --git a/src/gromacs/modularsimulator/simulatoralgorithm.cpp b/src/gromacs/modularsimulator/simulatoralgorithm.cpp index 423c3e463c..5c1106f1fd 100644 --- a/src/gromacs/modularsimulator/simulatoralgorithm.cpp +++ b/src/gromacs/modularsimulator/simulatoralgorithm.cpp @@ -407,7 +407,7 @@ ModularSimulatorAlgorithmBuilder::ModularSimulatorAlgorithmBuilder( if (legacySimulatorData->inputrec->efep != FreeEnergyPerturbationType::No) { freeEnergyPerturbationData_ = std::make_unique( - legacySimulatorData->fplog, legacySimulatorData->inputrec, legacySimulatorData->mdAtoms); + legacySimulatorData->fplog, *legacySimulatorData->inputrec, legacySimulatorData->mdAtoms); } statePropagatorData_ = std::make_unique(