*
* version feature added
* 96 support for ion/water position swaps (computational electrophysiology)
+ * 97 switch ld_seed from int to gmx_int64_t
+ *
+ * The following macros help the code be more self-documenting and
+ * ensure merges do not silently resolve when two patches make the
+ * same bump to the number. Unfortunately, compilers don't like
+ * initializing a const int with a const int, so we have to be a bit
+ * dirty and use a macro.
*/
-static const int tpx_version = 96;
+#define tpx_version_use_64_bit_random_seed 97
+static const int tpx_version = tpx_version_use_64_bit_random_seed;
/* This number should only be increased when you edit the TOPOLOGY section
gmx_fio_do_real(fio, bd_temp);
}
gmx_fio_do_real(fio, ir->bd_fric);
- gmx_fio_do_int(fio, ir->ld_seed);
+ if (file_version >= tpx_version_use_64_bit_random_seed)
+ {
+ gmx_fio_do_int64(fio, ir->ld_seed);
+ }
+ else
+ {
+ gmx_fio_do_int(fio, idum);
+ ir->ld_seed = idum;
+ }
if (file_version >= 33)
{
for (i = 0; i < DIM; i++)
PR("lincs-warnangle", ir->LincsWarnAngle);
PI("lincs-iter", ir->nLincsIter);
PR("bd-fric", ir->bd_fric);
- PI("ld-seed", ir->ld_seed);
+ PSTEP("ld-seed", ir->ld_seed);
PR("cos-accel", ir->cos_accel);
pr_matrix(fp, indent, "deform", ir->deform, bMDPformat);
if (ir->ld_seed == -1)
{
- ir->ld_seed = (int)gmx_rng_make_seed();
- fprintf(stderr, "Setting the LD random seed to %d\n", ir->ld_seed);
+ ir->ld_seed = (gmx_int64_t)gmx_rng_make_seed();
+ fprintf(stderr, "Setting the LD random seed to %"GMX_PRId64 "\n", ir->ld_seed);
}
if (ir->expandedvals->lmc_seed == -1)
CCTYPE ("LANGEVIN DYNAMICS OPTIONS");
CTYPE ("Friction coefficient (amu/ps) and random seed");
RTYPE ("bd-fric", ir->bd_fric, 0.0);
- ITYPE ("ld-seed", ir->ld_seed, -1);
+ STEPTYPE ("ld-seed", ir->ld_seed, -1);
/* Em stuff */
CCTYPE ("ENERGY MINIMIZATION OPTIONS");
int nLincsIter; /* Number of iterations in the final Lincs step */
gmx_bool bShakeSOR; /* Use successive overrelaxation for shake */
real bd_fric; /* Friction coefficient for BD (amu/ps) */
- int ld_seed; /* Random seed for SD and BD */
+ gmx_int64_t ld_seed; /* Random seed for SD and BD */
int nwall; /* The number of walls */
int wall_type; /* The type of walls */
real wall_r_linpot; /* The potentail is linear for r<=wall_r_linpot */
cmp_real(fp, "inputrec->LincsWarnAngle", -1, ir1->LincsWarnAngle, ir2->LincsWarnAngle, ftol, abstol);
cmp_int(fp, "inputrec->nLincsIter", -1, ir1->nLincsIter, ir2->nLincsIter);
cmp_real(fp, "inputrec->bd_fric", -1, ir1->bd_fric, ir2->bd_fric, ftol, abstol);
- cmp_int(fp, "inputrec->ld_seed", -1, ir1->ld_seed, ir2->ld_seed);
+ cmp_int64(fp, "inputrec->ld_seed", ir1->ld_seed, ir2->ld_seed);
cmp_real(fp, "inputrec->cos_accel", -1, ir1->cos_accel, ir2->cos_accel, ftol, abstol);
cmp_rvec(fp, "inputrec->deform(a)", -1, ir1->deform[XX], ir2->deform[XX], ftol, abstol);
cmp_rvec(fp, "inputrec->deform(b)", -1, ir1->deform[YY], ir2->deform[YY], ftol, abstol);
#include "gromacs/fileio/trnio.h"
#include "gromacs/fileio/enxio.h"
#include "gromacs/fileio/futil.h"
+#include "gromacs/random/random.h"
#define RANGECHK(i, n) if ((i) >= (n)) gmx_fatal(FARGS, "Your index file contains atomnumbers (e.g. %d)\nthat are larger than the number of atoms in the tpr file (%d)", (i), (n))
"If you want that, supply a checkpoint file to mdrun\n\n");
}
+ if (EI_SD(ir->eI) || ir->eI == eiBD)
+ {
+ fprintf(stderr, "\nChanging ld-seed from %"GMX_PRId64 " ", ir->ld_seed);
+ ir->ld_seed = (gmx_int64_t)gmx_rng_make_seed();
+ fprintf(stderr, "to %"GMX_PRId64 "\n\n", ir->ld_seed);
+ }
+
frame_fn = ftp2fn(efTRN, NFILE, fnm);
if (fn2ftp(frame_fn) == efCPT)