From 80ee1e088b1cb09313f10aed09d04b264ec78766 Mon Sep 17 00:00:00 2001 From: Kevin Boyd Date: Sun, 16 Sep 2018 14:42:29 -0400 Subject: [PATCH] Added basic tests for gmx msd Change-Id: I35d765d9a68d4723bf0a968d07453a268ed4e78a --- src/gromacs/gmxana/tests/CMakeLists.txt | 1 + src/gromacs/gmxana/tests/gmx_msd.cpp | 116 ++++++++++++++++++ src/gromacs/gmxana/tests/msd.ndx | 2 + src/gromacs/gmxana/tests/msd_coords.gro | 6 + src/gromacs/gmxana/tests/msd_traj.xtc | Bin 0 -> 920 bytes .../MsdTest_oneDimensionalDiffusion.xml | 68 ++++++++++ .../MsdTest_threeDimensionalDiffusion.xml | 68 ++++++++++ .../MsdTest_twoDimensionalDiffusion.xml | 68 ++++++++++ 8 files changed, 329 insertions(+) create mode 100644 src/gromacs/gmxana/tests/gmx_msd.cpp create mode 100644 src/gromacs/gmxana/tests/msd.ndx create mode 100644 src/gromacs/gmxana/tests/msd_coords.gro create mode 100644 src/gromacs/gmxana/tests/msd_traj.xtc create mode 100644 src/gromacs/gmxana/tests/refdata/MsdTest_oneDimensionalDiffusion.xml create mode 100644 src/gromacs/gmxana/tests/refdata/MsdTest_threeDimensionalDiffusion.xml create mode 100644 src/gromacs/gmxana/tests/refdata/MsdTest_twoDimensionalDiffusion.xml diff --git a/src/gromacs/gmxana/tests/CMakeLists.txt b/src/gromacs/gmxana/tests/CMakeLists.txt index 65a7b212b9..e8db2e4fc2 100644 --- a/src/gromacs/gmxana/tests/CMakeLists.txt +++ b/src/gromacs/gmxana/tests/CMakeLists.txt @@ -39,5 +39,6 @@ gmx_add_gtest_executable( entropy.cpp gmx_traj.cpp gmx_trjconv.cpp + gmx_msd.cpp ) gmx_register_gtest_test(GmxAnaTest ${exename} INTEGRATION_TEST) diff --git a/src/gromacs/gmxana/tests/gmx_msd.cpp b/src/gromacs/gmxana/tests/gmx_msd.cpp new file mode 100644 index 0000000000..43e85be883 --- /dev/null +++ b/src/gromacs/gmxana/tests/gmx_msd.cpp @@ -0,0 +1,116 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2018, 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 + * Tests for gmx msd. + * + * \author Kevin Boyd + */ + +#include "gmxpre.h" + +#include "gromacs/gmxana/gmx_ana.h" +#include "gromacs/utility/futil.h" +#include "gromacs/utility/textreader.h" + +#include "testutils/cmdlinetest.h" +#include "testutils/refdata.h" +#include "testutils/testfilemanager.h" +#include "testutils/textblockmatchers.h" +#include "testutils/xvgtest.h" + +namespace +{ + +using gmx::test::CommandLine; +using gmx::test::XvgMatch; + +class MsdTest : public gmx::test::CommandLineTestBase +{ + public: + MsdTest() + { + setOutputFile("-o", "msd.xvg", XvgMatch()); + setInputFile("-f", "msd_traj.xtc"); + setInputFile("-s", "msd_coords.gro"); + setInputFile("-n", "msd.ndx"); + } + + void runTest(const CommandLine &args) + { + CommandLine &cmdline = commandLine(); + cmdline.merge(args); + ASSERT_EQ(0, gmx_msd(cmdline.argc(), cmdline.argv())); + checkOutputFiles(); + } +}; + +/* msd_traj.xtc contains a 10 frame (1 ps per frame) simulation + * containing 3 atoms, with different starting positions but identical + * displacements. The displacements are calculated to yield the following + * diffusion coefficients when lag is calculated ONLY FROM TIME 0 + * D_x = 8 * 10 ^ -5 cm^2 /s, D_y = 4 * 10^ -5 cm^2 /s , D_z = 0 + * + * To test for these results, -trestart is set to a larger value than the + * total simulation length, so that only lag 0 is calculated + */ + +// for 3D, (8 + 4 + 0) / 3 should yield 4 cm^2 / s +TEST_F(MsdTest, threeDimensionalDiffusion) +{ + const char *const cmdline[] = { + "msd", "-mw", "no", "-trestart", "200", + }; + runTest(CommandLine(cmdline)); +} + +// for lateral z, (8 + 4) / 2 should yield 6 cm^2 /s +TEST_F(MsdTest, twoDimensionalDiffusion) +{ + const char *const cmdline[] = { + "msd", "-mw", "no", "-trestart", "200", "-lateral", "z" + }; + runTest(CommandLine(cmdline)); +} + +// for type x, should yield 8 cm^2 / s +TEST_F(MsdTest, oneDimensionalDiffusion) +{ + const char *const cmdline[] = { + "msd", "-mw", "no", "-trestart", "200", "-type", "x" + }; + runTest(CommandLine(cmdline)); +} +} //namespace diff --git a/src/gromacs/gmxana/tests/msd.ndx b/src/gromacs/gmxana/tests/msd.ndx new file mode 100644 index 0000000000..ec955c4c18 --- /dev/null +++ b/src/gromacs/gmxana/tests/msd.ndx @@ -0,0 +1,2 @@ +[ particles ] +1 2 3 diff --git a/src/gromacs/gmxana/tests/msd_coords.gro b/src/gromacs/gmxana/tests/msd_coords.gro new file mode 100644 index 0000000000..294f9bcbe5 --- /dev/null +++ b/src/gromacs/gmxana/tests/msd_coords.gro @@ -0,0 +1,6 @@ +msd_beads + 3 + 1A A 1 2.167 1.833 1.500 + 2A A 2 0.000 0.000 0.000 + 3A A 3 3.167 3.833 4.500 + 5.00000 5.00000 5.00000 diff --git a/src/gromacs/gmxana/tests/msd_traj.xtc b/src/gromacs/gmxana/tests/msd_traj.xtc new file mode 100644 index 0000000000000000000000000000000000000000..28bb267d99e196d3a90d6a1a8d7d0d977f5de9d8 GIT binary patch literal 920 zcmZQzU_Z^kz`zW|VBoL-%79Wh_{>zZa-~PVNBaqp4jBSthZr9xpQsfYHqTeBZS|OU*Ob#Hq1waA`;NUYm zh$;QGzm*3u+gx}5KA`y^Z4O~de;sno(amOda3H~KiLLAHubqwnyE`G`{yw?Ix?r;- zwyt-`PF;iMZWf0I63mu*@YnwGE;g{)jct$i0o@KZJL>NrH4(VQjXlAoJJRrer1!))iGojgFvsXuo?kftK0X929+QlJFYa5!`9F9Oq zqQgXS>P`DocC28tf$47_FwDVbCr-WTkSdQJ-kgpCB$%!AGu!@zyB65&LtY{KI+Ogt PW+(m3c1Tg43UW69*H@tp literal 0 HcmV?d00001 diff --git a/src/gromacs/gmxana/tests/refdata/MsdTest_oneDimensionalDiffusion.xml b/src/gromacs/gmxana/tests/refdata/MsdTest_oneDimensionalDiffusion.xml new file mode 100644 index 0000000000..4ba6e24778 --- /dev/null +++ b/src/gromacs/gmxana/tests/refdata/MsdTest_oneDimensionalDiffusion.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + 2 + 0 + 0 + + + 2 + 1 + 0.016 + + + 2 + 2 + 0.032 + + + 2 + 3 + 0.048 + + + 2 + 4 + 0.064 + + + 2 + 5 + 0.08 + + + 2 + 6 + 0.096 + + + 2 + 7 + 0.112 + + + 2 + 8 + 0.128 + + + 2 + 9 + 0.144 + + + + + diff --git a/src/gromacs/gmxana/tests/refdata/MsdTest_threeDimensionalDiffusion.xml b/src/gromacs/gmxana/tests/refdata/MsdTest_threeDimensionalDiffusion.xml new file mode 100644 index 0000000000..5f04b7857b --- /dev/null +++ b/src/gromacs/gmxana/tests/refdata/MsdTest_threeDimensionalDiffusion.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + 2 + 0 + 0 + + + 2 + 1 + 0.024 + + + 2 + 2 + 0.048 + + + 2 + 3 + 0.072 + + + 2 + 4 + 0.096 + + + 2 + 5 + 0.12 + + + 2 + 6 + 0.144 + + + 2 + 7 + 0.168 + + + 2 + 8 + 0.192 + + + 2 + 9 + 0.216 + + + + + diff --git a/src/gromacs/gmxana/tests/refdata/MsdTest_twoDimensionalDiffusion.xml b/src/gromacs/gmxana/tests/refdata/MsdTest_twoDimensionalDiffusion.xml new file mode 100644 index 0000000000..5f04b7857b --- /dev/null +++ b/src/gromacs/gmxana/tests/refdata/MsdTest_twoDimensionalDiffusion.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + 2 + 0 + 0 + + + 2 + 1 + 0.024 + + + 2 + 2 + 0.048 + + + 2 + 3 + 0.072 + + + 2 + 4 + 0.096 + + + 2 + 5 + 0.12 + + + 2 + 6 + 0.144 + + + 2 + 7 + 0.168 + + + 2 + 8 + 0.192 + + + 2 + 9 + 0.216 + + + + + -- 2.22.0