# Run through a number of tests for buggy compilers and other issues
include(gmxTestCompilerProblems)
gmx_test_compiler_problems()
+# GMX_SIMD will not be set automatically until the second
+# pass (which is not strictly guaranteed to occur), so putting this
+# check here among logically-related tests is inefficient, but the
+# potential loss is likely zero.
+if(GMX_SIMD STREQUAL "AVX_256"
+ AND CMAKE_COMPILER_IS_GNUCC
+ AND (C_COMPILER_VERSION VERSION_EQUAL "4.6.1"
+ OR CXX_COMPILER_VERSION VERSION_EQUAL "4.6.1"))
+ message(FATAL_ERROR "gcc 4.6.1 has buggy support for AVX, and GROMACS mdrun will not work. If you want simulation performance, use a more recent compiler. Otherwise, use GMX_SIMD=SSE4.1")
+ # See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49002
+endif()
+
set(PKG_CFLAGS "")
out = xvgropen(eigvalfile,
"Eigenvalues of the covariance matrix",
"Eigenvector index", str, oenv);
- for (i = 0; (i < ndim); i++)
+ for (i = 0; (i < end); i++)
{
fprintf (out, "%10d %g\n", (int)i+1, eigenvalues[ndim-1-i]);
}
if (nframes-1 < ndim)
{
end = nframes-1;
+ fprintf(out, "WARNING: there are fewer frames in your trajectory than there are\n");
+ fprintf(out, "degrees of freedom in your system. Only generating the first\n");
+ fprintf(out, "%d out of %d eigenvectors and eigenvalues.\n", end, (int)ndim);
}
else
{
fprintf(out, "Trace of the covariance matrix after diagonalizing: %g\n\n",
sum);
- fprintf(out, "Wrote %d eigenvalues to %s\n", (int)ndim, eigvalfile);
+ fprintf(out, "Wrote %d eigenvalues to %s\n", (int)end, eigvalfile);
if (WriteXref == eWXR_YES)
{
fprintf(out, "Wrote reference structure to %s\n", eigvecfile);
{
const char *desc[] = {
"[THISMODULE] computes a free energy estimate based on an energy analysis",
- "from. One needs an energy file with the following components:",
- "Coul (A-B) LJ-SR (A-B) etc."
+ "from nonbonded energies. One needs an energy file with the following components:",
+ "Coul-(A-B) LJ-SR (A-B) etc.[PAR]",
+ "To utilize [TT]g_lie[tt] correctly, two simulations are required: one with the",
+ "molecule of interest bound to its receptor and one with the molecule in water.",
+ "Both need to utilize [TT]energygrps[tt] such that Coul-SR(A-B), LJ-SR(A-B), etc. terms",
+ "are written to the [TT].edr[tt] file. Values from the molecule-in-water simulation",
+ "are necessary for supplying suitable values for -Elj and -Eqq."
};
static real lie_lj = 0, lie_qq = 0, fac_lj = 0.181, fac_qq = 0.5;
static const char *ligand = "none";
ld = analyze_names(nre, enm, ligand);
snew(fr, 1);
+
out = xvgropen(ftp2fn(efXVG, NFILE, fnm), "LIE free energy estimate",
"Time (ps)", "DGbind (kJ/mol)", oenv);
while (do_enx(fp, fr))
for (j = j0; (j < j1 && nremove < natoms_solvt); j++)
{
jnr = nlist->jjnr[j];
+ if (jnr < 0)
+ {
+ /* skip padding */
+ continue;
+ }
copy_rvec(x_all[jnr], xj);
/* Check solvent-protein and solvent-solvent */
}
}
+ if (nvsite && ir->eI == eiNM)
+ {
+ gmx_fatal(FARGS, "Normal Mode analysis is not supported with virtual sites.\nIf you'd like to help with adding support, we have an open discussion at http://redmine.gromacs.org/issues/879\n");
+ }
+
if (ir->cutoff_scheme == ecutsVERLET)
{
fprintf(stderr, "Removing all charge groups because cutoff-scheme=%s\n",
}
}
+ if (EI_VV(ir->eI) && IR_TWINRANGE(*ir) && ir->nstlist > 1)
+ {
+ sprintf(warn_buf, "Twin-range multiple time stepping does not work with integrator %s.", ei_names[ir->eI]);
+ warning_error(wi, warn_buf);
+ }
+
/* IMPLICIT SOLVENT */
if (ir->coulombtype == eelGB_NOTUSED)
{
gmx_fatal(FARGS, "Switch/shift interaction not supported with Buckingham");
}
+ if (fr->bBHAM && fr->cutoff_scheme == ecutsVERLET)
+ {
+ gmx_fatal(FARGS, "Verlet cutoff-scheme is not supported with Buckingham");
+ }
+
if (fp)
{
fprintf(fp, "Cut-off's: NS: %g Coulomb: %g %s: %g\n",
#include "macros.h"
#include "md_logging.h"
#include "md_support.h"
+#include "names.h"
#include "gromacs/timing/wallcycle.h"
"nstdhdl", &ir->fepvals->nstdhdl);
}
}
+
+ if (EI_VV(ir->eI) && IR_TWINRANGE(*ir) && ir->nstlist > 1)
+ {
+ gmx_fatal(FARGS, "Twin-range multiple time stepping does not work with integrator %s.", ei_names[ir->eI]);
+ }
}
void rerun_parallel_comm(t_commrec *cr, t_trxframe *fr,
}
if (max_dist2 >= 0 && dr2 > 0.98*0.98*max_dist2)
{
- gmx_fatal(FARGS, "Distance between pull groups %d and %d (%f nm) is larger than 0.49 times the box size (%f)",
+ gmx_fatal(FARGS, "Distance between pull groups %d and %d (%f nm) is larger than 0.49 times the box size (%f).\nYou might want to consider using \"pull-geometry = direction-periodic\" instead.\n",
pcrd->group[0], pcrd->group[1], sqrt(dr2), sqrt(max_dist2));
}
(DOMAINDECOMP(cr) && !MASTER(cr))) ?
NULL : state_global->x);
+ if (shellfc && ir->eI == eiNM)
+ {
+ /* Currently shells don't work with Normal Modes */
+ gmx_fatal(FARGS, "Normal Mode analysis is not supported with shells.\nIf you'd like to help with adding support, we have an open discussion at http://redmine.gromacs.org/issues/879\n");
+ }
+
+ if (vsite && ir->eI == eiNM)
+ {
+ /* Currently virtual sites don't work with Normal Modes */
+ gmx_fatal(FARGS, "Normal Mode analysis is not supported with virtual sites.\nIf you'd like to help with adding support, we have an open discussion at http://redmine.gromacs.org/issues/879\n");
+ }
+
if (DEFORM(*ir))
{
tMPI_Thread_mutex_lock(&deform_init_box_mutex);
* step to combine the long-range forces on these steps.
* For nstcalclr=1 this is not done, since the forces would have been added
* directly to the short-range forces already.
+ *
+ * TODO Remove various aspects of VV+twin-range in master
+ * branch, because VV integrators did not ever support
+ * twin-range multiple time stepping with constraints.
*/
bUpdateDoLR = (fr->bTwinRange && do_per_step(step, ir->nstcalclr));