From: Berk Hess Date: Mon, 28 Sep 2020 14:24:26 +0000 (+0000) Subject: Fix dispersion correction table generation X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=a41b39b5c1eefda7814ccc2019b5446aa5f7710c;p=alexxy%2Fgromacs.git Fix dispersion correction table generation Dispersion correction table generation was incorrectly skipped during PME tuning, which lead to an assertion failure with LJ-PME. Fixes #3677 --- diff --git a/docs/release-notes/2020/2020.4.rst b/docs/release-notes/2020/2020.4.rst index 603b9ff506..6479820ee8 100644 --- a/docs/release-notes/2020/2020.4.rst +++ b/docs/release-notes/2020/2020.4.rst @@ -34,6 +34,14 @@ due to illegal or incorrect memory usage. :issue:`3635` +Fix assertion failure with LJ-PME and dispersion correction +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +With vdw-type=PME and dispersion correction, mdrun would exit with +an assertion failure during PME tuning. + +:issue:`3677` + Fixes for ``gmx`` tools ^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/gromacs/tables/forcetable.cpp b/src/gromacs/tables/forcetable.cpp index f668513366..5d1834ee94 100644 --- a/src/gromacs/tables/forcetable.cpp +++ b/src/gromacs/tables/forcetable.cpp @@ -3,7 +3,8 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2004, The GROMACS development team. - * Copyright (c) 2013,2014,2015,2016,2017,2018,2019, by the GROMACS development team, led by + * Copyright (c) 2013,2014,2015,2016,2017 by the GROMACS development team. + * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -1466,11 +1467,6 @@ makeDispersionCorrectionTable(FILE* fp, const interaction_const_t* ic, real rtab GMX_RELEASE_ASSERT(ic->vdwtype != evdwUSER || tabfn, "With VdW user tables we need a table file name"); - if (tabfn == nullptr) - { - return std::unique_ptr(nullptr); - } - t_forcetable* fullTable = make_tables(fp, ic, tabfn, rtab, 0); /* Copy the contents of the table to one that has just dispersion * and repulsion, to improve cache performance. We want the table diff --git a/src/programs/mdrun/tests/CMakeLists.txt b/src/programs/mdrun/tests/CMakeLists.txt index 6b15556a6d..9ba03c04fc 100644 --- a/src/programs/mdrun/tests/CMakeLists.txt +++ b/src/programs/mdrun/tests/CMakeLists.txt @@ -97,6 +97,7 @@ set(exename "mdrun-test") gmx_add_gtest_executable( ${exename} + dispersion_correction.cpp orires.cpp pmetest.cpp simulator.cpp diff --git a/src/programs/mdrun/tests/dispersion_correction.cpp b/src/programs/mdrun/tests/dispersion_correction.cpp new file mode 100644 index 0000000000..eaabf4eba2 --- /dev/null +++ b/src/programs/mdrun/tests/dispersion_correction.cpp @@ -0,0 +1,92 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2020, by the GROMACS development team, led by + * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, + * and including many others, as listed in the AUTHORS file in the + * top-level source directory and at http://www.gromacs.org. + * + * GROMACS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * GROMACS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GROMACS; if not, see + * http://www.gnu.org/licenses, or write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * If you want to redistribute modifications to GROMACS, please + * consider that scientific software is very special. Version + * control is crucial - bugs must be traceable. We will be happy to + * consider code for inclusion in the official distribution, but + * derived work must not be called official GROMACS. Details are found + * in the README & COPYING files - if they are missing, get the + * official version at http://www.gromacs.org. + * + * To help us fund GROMACS development, we humbly ask that you cite + * the research papers on the package. Check out http://www.gromacs.org. + */ + +/*! \internal \file + * \brief + * Test for MD with dispersion correction. + * + * \author Paul Bauer + * \ingroup module_mdrun_integration_tests + */ +#include "gmxpre.h" + +#include "moduletest.h" + +namespace gmx +{ +namespace test +{ + +class DispersionCorrectionTestFixture : public MdrunTestFixture +{ +protected: + DispersionCorrectionTestFixture(); + ~DispersionCorrectionTestFixture() override; +}; + +DispersionCorrectionTestFixture::DispersionCorrectionTestFixture() {} + +DispersionCorrectionTestFixture::~DispersionCorrectionTestFixture() {} + +//! Test fixture for mdrun with dispersion correction +typedef gmx::test::DispersionCorrectionTestFixture DispersionCorrectionTest; + +/* Check whether the dispersion correction function works. */ +TEST_F(DispersionCorrectionTest, DispersionCorrectionCanRun) +{ + runner_.useTopGroAndNdxFromDatabase("alanine_vsite_vacuo"); + const std::string mdpContents = R"( + dt = 0.002 + nsteps = 200 + tcoupl = Berendsen + tc-grps = System + tau-t = 0.5 + ref-t = 300 + constraints = h-bonds + cutoff-scheme = Verlet + DispCorr = AllEnerPres + )"; + runner_.useStringAsMdpFile(mdpContents); + + EXPECT_EQ(0, runner_.callGrompp()); + + ::gmx::test::CommandLine disperCorrCaller; + + // Do an mdrun with ORIRES enabled + ASSERT_EQ(0, runner_.callMdrun(disperCorrCaller)); +} + +} // namespace test +} // namespace gmx