int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr;
gmx::ArrayRef<real> lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef<real>();
- initialize_lambdas(
- fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda);
+ initialize_lambdas(fplog,
+ ir->efep,
+ ir->bSimTemp,
+ *ir->fepvals,
+ ir->simtempvals->temperatures,
+ gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc),
+ MASTER(cr),
+ fep_state,
+ lambda);
Update upd(*ir, deform);
bool doSimulatedAnnealing = false;
{
}
initialize_lambdas(fplog,
- *ir,
+ ir->efep,
+ ir->bSimTemp,
+ *ir->fepvals,
+ ir->simtempvals->temperatures,
gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc),
MASTER(cr),
&state_global->fep_state,
}
int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr;
gmx::ArrayRef<real> lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef<real>();
- initialize_lambdas(
- fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda);
+ initialize_lambdas(fplog,
+ ir->efep,
+ ir->bSimTemp,
+ *ir->fepvals,
+ ir->simtempvals->temperatures,
+ gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc),
+ MASTER(cr),
+ fep_state,
+ lambda);
if (ir->eI == IntegrationAlgorithm::NM)
{
}
int* fep_state = MASTER(cr) ? &state_global->fep_state : nullptr;
gmx::ArrayRef<real> lambda = MASTER(cr) ? state_global->lambda : gmx::ArrayRef<real>();
- initialize_lambdas(
- fplog, *ir, gmx::arrayRefFromArray(ir->opts.ref_t, ir->opts.ngtc), MASTER(cr), fep_state, lambda);
+ initialize_lambdas(fplog,
+ ir->efep,
+ ir->bSimTemp,
+ *ir->fepvals,
+ ir->simtempvals->temperatures,
+ 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,
}
}
-void initialize_lambdas(FILE* fplog,
- const t_inputrec& ir,
- gmx::ArrayRef<real> ref_t,
- bool isMaster,
- int* fep_state,
- gmx::ArrayRef<real> lambda)
+void initialize_lambdas(FILE* fplog,
+ const FreeEnergyPerturbationType freeEnergyPerturbationType,
+ const bool haveSimulatedTempering,
+ const t_lambda& fep,
+ gmx::ArrayRef<const real> simulatedTemperingTemps,
+ gmx::ArrayRef<real> ref_t,
+ bool isMaster,
+ int* fep_state,
+ gmx::ArrayRef<real> lambda)
{
/* TODO: Clean up initialization of fep_state and lambda in
t_state. This function works, but could probably use a logic
rewrite to keep all the different types of efep straight. */
- if ((ir.efep == FreeEnergyPerturbationType::No) && (!ir.bSimTemp))
+ if ((freeEnergyPerturbationType == FreeEnergyPerturbationType::No) && (!haveSimulatedTempering))
{
return;
}
- const t_lambda* fep = ir.fepvals.get();
if (isMaster)
{
- *fep_state = fep->init_fep_state; /* this might overwrite the checkpoint
+ *fep_state = fep.init_fep_state; /* this might overwrite the checkpoint
if checkpoint is set -- a kludge is in for now
to prevent this.*/
}
{
double thisLambda;
/* overwrite lambda state with init_lambda for now for backwards compatibility */
- if (fep->init_lambda >= 0) /* if it's -1, it was never initialized */
+ if (fep.init_lambda >= 0) /* if it's -1, it was never initialized */
{
- thisLambda = fep->init_lambda;
+ thisLambda = fep.init_lambda;
}
else
{
- thisLambda = fep->all_lambda[i][fep->init_fep_state];
+ thisLambda = fep.all_lambda[i][fep.init_fep_state];
}
if (isMaster)
{
lambda[i] = thisLambda;
}
}
- if (ir.bSimTemp)
+ if (haveSimulatedTempering)
{
/* need to rescale control temperatures to match current state */
for (int i = 0; i < ref_t.ssize(); i++)
{
if (ref_t[i] > 0)
{
- ref_t[i] = ir.simtempvals->temperatures[fep->init_fep_state];
+ ref_t[i] = simulatedTemperingTemps[fep.init_fep_state];
}
}
}
#include "gromacs/utility/real.h"
struct t_inputrec;
+struct t_lambda;
+enum class FreeEnergyPerturbationType;
namespace gmx
{
* and lambda on master rank.
*
* Reports the initial lambda state to the log file. */
-void initialize_lambdas(FILE* fplog,
- const t_inputrec& ir,
- gmx::ArrayRef<real> ref_t,
- bool isMaster,
- int* fep_state,
- gmx::ArrayRef<real> lambda);
+void initialize_lambdas(FILE* fplog,
+ FreeEnergyPerturbationType freeEnergyPerturbationType,
+ bool haveSimulatedTempering,
+ const t_lambda& fep,
+ gmx::ArrayRef<const real> simulatedTemperingTemps,
+ gmx::ArrayRef<real> ref_t,
+ bool isMaster,
+ int* fep_state,
+ gmx::ArrayRef<real> lambda);
#endif
// 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_,
+ inputrec_.efep,
+ inputrec_.bSimTemp,
+ *inputrec_.fepvals,
+ inputrec_.simtempvals->temperatures,
gmx::arrayRefFromArray(inputrec_.opts.ref_t, inputrec_.opts.ngtc),
true,
¤tFEPState_,