From b9f6089d60be454b9eb0c952e77c26a47df302ce Mon Sep 17 00:00:00 2001 From: Mark Abraham Date: Thu, 19 Jan 2017 21:58:23 +0100 Subject: [PATCH] Add tests for old gmx energy functionality Imported the edr and tpr files from the proposed new energyanalysis tests so that we can observe that the old and new code are materially the same, so we have a more stable change process for the large amount of new code. Extended gmx energy temporarily so that Einstein viscosity output files are not hard coded (otherwise writing them in tests spams output files). Memory leak in inputrec.cpp was fixed (that only was detected due to the dhdl test). A number of memory leaks in gmx_energy were fixed as well. Change-Id: I374b04bb20bb99df344b5b60a315b82c8c28828d --- src/gromacs/CMakeLists.txt | 3 +- src/gromacs/energyanalysis/CMakeLists.txt | 37 + src/gromacs/energyanalysis/tests/CMakeLists.txt | 37 + src/gromacs/energyanalysis/tests/dhdl.edr | Bin 0 -> 99476 bytes src/gromacs/energyanalysis/tests/dhdl.tpr | Bin 0 -> 106244 bytes src/gromacs/energyanalysis/tests/ener.edr | Bin 0 -> 28784 bytes src/gromacs/energyanalysis/tests/legacyenergy.cpp | 230 ++++ .../tests/refdata/DhdlTest_ExtractDhdl.xml | 1239 ++++++++++++++++++++ .../tests/refdata/EnergyTest_ExtractEnergy.xml | 378 ++++++ .../refdata/EnergyTest_ExtractEnergyByNumber.xml | 378 ++++++ .../refdata/EnergyTest_ExtractEnergyMixed.xml | 430 +++++++ .../refdata/ViscosityTest_EinsteinViscosity.xml | 130 ++ .../ViscosityTest_EinsteinViscosityIntegral.xml | 130 ++ src/gromacs/gmxana/gmx_energy.cpp | 70 +- src/gromacs/mdtypes/inputrec.cpp | 14 + 15 files changed, 3054 insertions(+), 22 deletions(-) create mode 100644 src/gromacs/energyanalysis/CMakeLists.txt create mode 100644 src/gromacs/energyanalysis/tests/CMakeLists.txt create mode 100644 src/gromacs/energyanalysis/tests/dhdl.edr create mode 100644 src/gromacs/energyanalysis/tests/dhdl.tpr create mode 100644 src/gromacs/energyanalysis/tests/ener.edr create mode 100644 src/gromacs/energyanalysis/tests/legacyenergy.cpp create mode 100644 src/gromacs/energyanalysis/tests/refdata/DhdlTest_ExtractDhdl.xml create mode 100644 src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergy.xml create mode 100644 src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyByNumber.xml create mode 100644 src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyMixed.xml create mode 100644 src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosity.xml create mode 100644 src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosityIntegral.xml diff --git a/src/gromacs/CMakeLists.txt b/src/gromacs/CMakeLists.txt index 65f2ac4353..a553585861 100644 --- a/src/gromacs/CMakeLists.txt +++ b/src/gromacs/CMakeLists.txt @@ -1,7 +1,7 @@ # # This file is part of the GROMACS molecular simulation package. # -# Copyright (c) 2010,2011,2012,2013,2014,2015,2016, by the GROMACS development team, led by +# Copyright (c) 2010,2011,2012,2013,2014,2015,2016,2017, 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. @@ -106,6 +106,7 @@ if (NOT GMX_BUILD_MDRUN_ONLY) add_subdirectory(analysisdata) add_subdirectory(selection) add_subdirectory(trajectoryanalysis) + add_subdirectory(energyanalysis) add_subdirectory(tools) endif() diff --git a/src/gromacs/energyanalysis/CMakeLists.txt b/src/gromacs/energyanalysis/CMakeLists.txt new file mode 100644 index 0000000000..16d0fa0add --- /dev/null +++ b/src/gromacs/energyanalysis/CMakeLists.txt @@ -0,0 +1,37 @@ +# +# This file is part of the GROMACS molecular simulation package. +# +# Copyright (c) 2014,2015,2016,2017, 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. + +if (BUILD_TESTING) + add_subdirectory(tests) +endif() diff --git a/src/gromacs/energyanalysis/tests/CMakeLists.txt b/src/gromacs/energyanalysis/tests/CMakeLists.txt new file mode 100644 index 0000000000..5665a35b95 --- /dev/null +++ b/src/gromacs/energyanalysis/tests/CMakeLists.txt @@ -0,0 +1,37 @@ +# +# This file is part of the GROMACS molecular simulation package. +# +# Copyright (c) 2014,2015,2016,2017, 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. + +gmx_add_unit_test(EnergyAnalysisUnitTests energyanalysis-test + legacyenergy.cpp +) diff --git a/src/gromacs/energyanalysis/tests/dhdl.edr b/src/gromacs/energyanalysis/tests/dhdl.edr new file mode 100644 index 0000000000000000000000000000000000000000..e70053fe1f767383cabec3451034dae93558764b GIT binary patch literal 99476 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 G>Hh;zdJez< literal 0 HcwPel00001 diff --git a/src/gromacs/energyanalysis/tests/dhdl.tpr b/src/gromacs/energyanalysis/tests/dhdl.tpr new file mode 100644 index 0000000000000000000000000000000000000000..8084b18fd311d3b8b69c2c58a3fddd8f27353a89 GIT binary patch literal 106244 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 F{{lObsHgw{ literal 0 HcwPel00001 diff --git a/src/gromacs/energyanalysis/tests/ener.edr b/src/gromacs/energyanalysis/tests/ener.edr new file mode 100644 index 0000000000000000000000000000000000000000..987f81adfa66f0208fc8f4f06f29126b89997678 GIT binary patch literal 28784 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 literal 0 HcwPel00001 diff --git a/src/gromacs/energyanalysis/tests/legacyenergy.cpp b/src/gromacs/energyanalysis/tests/legacyenergy.cpp new file mode 100644 index 0000000000..3722065dcb --- /dev/null +++ b/src/gromacs/energyanalysis/tests/legacyenergy.cpp @@ -0,0 +1,230 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2017, 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 energy + * + * \todo These will be superseded by tests of the energyanalysis + * modules. + * + * \author Mark Abraham + */ + +#include "gmxpre.h" + +#include + +#include + +#include "gromacs/gmxana/gmx_ana.h" +#include "gromacs/utility/filestream.h" +#include "gromacs/utility/path.h" + +#include "testutils/cmdlinetest.h" +#include "testutils/integrationtests.h" +#include "testutils/refdata.h" +#include "testutils/testasserts.h" +#include "testutils/xvgtest.h" + +namespace gmx +{ +namespace test +{ +namespace +{ + +class DhdlTest : public IntegrationTestFixture +{ + public: + DhdlTest() : data_(), checker_(data_.rootChecker()) {} + + void runTest() + { + CommandLine caller; + caller.append("energy"); + + caller.addOption("-s", fileManager_.getInputFilePath("dhdl.tpr")); + caller.addOption("-f", fileManager_.getInputFilePath("dhdl.edr")); + + std::string xvgFileName = fileManager_.getTemporaryFilePath("dhdl.xvg"); + caller.addOption("-odh", xvgFileName); + + EXPECT_EQ(0, gmx_energy(caller.argc(), caller.argv())); + + EXPECT_TRUE(Path::exists(xvgFileName)); + TextInputFile xvgFile(xvgFileName); + XvgMatchSettings settings; + auto outputFilesChecker = checker_.checkCompound("OutputFiles", "Files"); + auto fileChecker = outputFilesChecker.checkCompound("File", "-o"); + checkXvgFile(&xvgFile, &fileChecker, settings); + } + + TestReferenceData data_; + TestReferenceChecker checker_; +}; + +TEST_F(DhdlTest, ExtractDhdl) +{ + runTest(); +} + +class EnergyTest : public IntegrationTestFixture +{ + public: + EnergyTest() : data_(), checker_(data_.rootChecker()) {} + + void runTest(const char *stringForStdin) + { + CommandLine caller; + caller.append("energy"); + + caller.addOption("-f", fileManager_.getInputFilePath("ener.edr")); + + std::string xvgFileName = fileManager_.getTemporaryFilePath("energy.xvg"); + caller.addOption("-o", xvgFileName); + + redirectStringToStdin(stringForStdin); + EXPECT_EQ(0, gmx_energy(caller.argc(), caller.argv())); + + EXPECT_TRUE(Path::exists(xvgFileName)); + TextInputFile xvgFile(xvgFileName); + XvgMatchSettings settings; + auto outputFilesChecker = checker_.checkCompound("OutputFiles", "Files"); + auto fileChecker = outputFilesChecker.checkCompound("File", "-o"); + checkXvgFile(&xvgFile, &fileChecker, settings); + } + + TestReferenceData data_; + TestReferenceChecker checker_; +}; + +TEST_F(EnergyTest, ExtractEnergy) +{ + runTest("Potential\nKinetic-En.\nTotal-Energy\n"); +} + +TEST_F(EnergyTest, ExtractEnergyByNumber) +{ + runTest("4 6 9"); +} + +TEST_F(EnergyTest, ExtractEnergyMixed) +{ + runTest("Pressu\n7\nbox-z\nvol\n"); +} + +class ViscosityTest : public IntegrationTestFixture +{ + public: + ViscosityTest() : data_(), checker_(data_.rootChecker()) {} + + std::string addFileToTest(CommandLine *caller, + const char *optionName, + const char *outputFileName) + { + std::string xvgFileName = fileManager_.getTemporaryFilePath(outputFileName); + caller->addOption(optionName, xvgFileName); + return xvgFileName; + } + + void runTest(const char *optionName, + const char *outputFileName) + { + CommandLine caller; + caller.append("energy"); + + caller.addOption("-f", fileManager_.getInputFilePath("ener.edr")); + caller.addOption("-vis", fileManager_.getTemporaryFilePath("visco.xvg")); + + std::string xvgFileNameToTest; + + /* -vis can write a lot of non-conditional output files, + so we use temporary paths to clean up files that are + not the ones being tested in this test */ + if (0 == std::strcmp(optionName, "-evisco")) + { + xvgFileNameToTest = addFileToTest(&caller, optionName, outputFileName); + } + else + { + caller.addOption("-evisco", fileManager_.getTemporaryFilePath("evisco")); + } + if (0 == std::strcmp(optionName, "-eviscoi")) + { + xvgFileNameToTest = addFileToTest(&caller, optionName, outputFileName); + } + else + { + caller.addOption("-eviscoi", fileManager_.getTemporaryFilePath("eviscoi")); + } + if (0 == std::strcmp(optionName, "-corr")) + { + xvgFileNameToTest = addFileToTest(&caller, optionName, outputFileName); + } + else + { + caller.addOption("-corr", fileManager_.getTemporaryFilePath("enecorr")); + } + + caller.addOption("-o", fileManager_.getTemporaryFilePath("energy")); + + EXPECT_EQ(0, gmx_energy(caller.argc(), caller.argv())); + + EXPECT_TRUE(Path::exists(xvgFileNameToTest)); + TextInputFile xvgFile(xvgFileNameToTest); + XvgMatchSettings settings; + settings.tolerance = relativeToleranceAsFloatingPoint(1e-4, 1e-5); + auto outputFilesChecker = checker_.checkCompound("OutputFiles", "Files"); + auto fileChecker = outputFilesChecker.checkCompound("File", "-o"); + checkXvgFile(&xvgFile, &fileChecker, settings); + } + + TestReferenceData data_; + TestReferenceChecker checker_; +}; + +TEST_F(ViscosityTest, EinsteinViscosity) +{ + runTest("-evisco", "evisco.xvg"); +} + +TEST_F(ViscosityTest, EinsteinViscosityIntegral) +{ + runTest("-eviscoi", "eviscoi.xvg"); +} + +} // namespace +} // namespace +} // namespace diff --git a/src/gromacs/energyanalysis/tests/refdata/DhdlTest_ExtractDhdl.xml b/src/gromacs/energyanalysis/tests/refdata/DhdlTest_ExtractDhdl.xml new file mode 100644 index 0000000000..994a0b6aa4 --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/DhdlTest_ExtractDhdl.xml @@ -0,0 +1,1239 @@ + + + + + + + + + + + 9 + 0.0000 + 18390.227 + 0.0000000 + 0.0000000 + -196.12737 + 0.0000000 + 0.0000000 + 0.0000000 + -13.036427 + + + 9 + 0.0100 + 21152.699 + 0.0000000 + 0.0000000 + -35.961620 + 0.0000000 + 0.0000000 + 0.0000000 + -2.2861712 + + + 9 + 0.0200 + 21066.111 + 0.0000000 + 0.0000000 + 1.7135231 + 0.0000000 + 0.0000000 + 0.0000000 + -0.017940877 + + + 9 + 0.0300 + 19459.748 + 0.0000000 + 0.0000000 + 7.3273606 + 0.0000000 + 0.0000000 + 0.0000000 + 0.29574844 + + + 9 + 0.0400 + 19005.387 + 0.0000000 + 0.0000000 + 6.0574341 + 0.0000000 + 0.0000000 + 0.0000000 + 0.22905751 + + + 9 + 0.0500 + 18289.822 + 0.0000000 + 0.0000000 + 5.3447599 + 0.0000000 + 0.0000000 + 0.0000000 + 0.19143827 + + + 9 + 0.0600 + 17736.605 + 0.0000000 + 0.0000000 + -11.790483 + 0.0000000 + 0.0000000 + 0.0000000 + -0.82747537 + + + 9 + 0.0700 + 17300.516 + 0.0000000 + 0.0000000 + -54.836746 + 0.0000000 + 0.0000000 + 0.0000000 + -3.6717050 + + + 9 + 0.0800 + 16784.359 + 0.0000000 + 0.0000000 + -34.148647 + 0.0000000 + 0.0000000 + 0.0000000 + -2.3589497 + + + 9 + 0.0900 + 16278.450 + 0.0000000 + 0.0000000 + -9.2076368 + 0.0000000 + 0.0000000 + 0.0000000 + -0.69482511 + + + 9 + 0.1000 + 15822.979 + 0.0000000 + 0.0000000 + -1.9046206 + 0.0000000 + 0.0000000 + 0.0000000 + -0.25472176 + + + 9 + 0.1100 + 15291.021 + 0.0000000 + 0.0000000 + -14.417473 + 0.0000000 + 0.0000000 + 0.0000000 + -0.99669981 + + + 9 + 0.1200 + 14932.876 + 0.0000000 + 0.0000000 + -5.5879068 + 0.0000000 + 0.0000000 + 0.0000000 + -0.46490976 + + + 9 + 0.1300 + 14519.196 + 0.0000000 + 0.0000000 + -24.104668 + 0.0000000 + 0.0000000 + 0.0000000 + -1.6748879 + + + 9 + 0.1400 + 14052.404 + 0.0000000 + 0.0000000 + 4.2050481 + 0.0000000 + 0.0000000 + 0.0000000 + 0.10811933 + + + 9 + 0.1500 + 13574.979 + 0.0000000 + 0.0000000 + 12.654684 + 0.0000000 + 0.0000000 + 0.0000000 + 0.59728938 + + + 9 + 0.1600 + 13158.244 + 0.0000000 + 0.0000000 + 9.8413372 + 0.0000000 + 0.0000000 + 0.0000000 + 0.43559965 + + + 9 + 0.1700 + 12742.010 + 0.0000000 + 0.0000000 + 8.8647861 + 0.0000000 + 0.0000000 + 0.0000000 + 0.37434009 + + + 9 + 0.1800 + 12412.632 + 0.0000000 + 0.0000000 + -12.401940 + 0.0000000 + 0.0000000 + 0.0000000 + -0.94610727 + + + 9 + 0.1900 + 12025.834 + 0.0000000 + 0.0000000 + -15.554813 + 0.0000000 + 0.0000000 + 0.0000000 + -1.0771699 + + + 9 + 0.2000 + 11668.844 + 0.0000000 + 0.0000000 + -13.853206 + 0.0000000 + 0.0000000 + 0.0000000 + -0.94716883 + + + 9 + 0.2100 + 11284.039 + 0.0000000 + 0.0000000 + -20.998755 + 0.0000000 + 0.0000000 + 0.0000000 + -1.4247464 + + + 9 + 0.2200 + 10911.894 + 0.0000000 + 0.0000000 + -14.923985 + 0.0000000 + 0.0000000 + 0.0000000 + -1.0453514 + + + 9 + 0.2300 + 10566.955 + 0.0000000 + 0.0000000 + -19.922283 + 0.0000000 + 0.0000000 + 0.0000000 + -1.4520115 + + + 9 + 0.2400 + 10231.230 + 0.0000000 + 0.0000000 + 4.7994976 + 0.0000000 + 0.0000000 + 0.0000000 + 0.14404032 + + + 9 + 0.2500 + 9968.4209 + 0.0000000 + 0.0000000 + 9.7707586 + 0.0000000 + 0.0000000 + 0.0000000 + 0.43524343 + + + 9 + 0.2600 + 9683.9785 + 0.0000000 + 0.0000000 + 5.5255494 + 0.0000000 + 0.0000000 + 0.0000000 + 0.18996415 + + + 9 + 0.2700 + 9378.0811 + 0.0000000 + 0.0000000 + 1.7950813 + 0.0000000 + 0.0000000 + 0.0000000 + -0.017419390 + + + 9 + 0.2800 + 9007.4697 + 0.0000000 + 0.0000000 + -12.662108 + 0.0000000 + 0.0000000 + 0.0000000 + -0.87385261 + + + 9 + 0.2900 + 8753.9697 + 0.0000000 + 0.0000000 + -1.3624085 + 0.0000000 + 0.0000000 + 0.0000000 + -0.18725003 + + + 9 + 0.3000 + 8465.7949 + 0.0000000 + 0.0000000 + 1.3957028 + 0.0000000 + 0.0000000 + 0.0000000 + -0.027882095 + + + 9 + 0.3100 + 8127.0200 + 0.0000000 + 0.0000000 + 3.6105075 + 0.0000000 + 0.0000000 + 0.0000000 + 0.086347379 + + + 9 + 0.3200 + 7764.1157 + 0.0000000 + 0.0000000 + 11.106931 + 0.0000000 + 0.0000000 + 0.0000000 + 0.52358508 + + + 9 + 0.3300 + 7480.6064 + 0.0000000 + 0.0000000 + 12.847497 + 0.0000000 + 0.0000000 + 0.0000000 + 0.62090510 + + + 9 + 0.3400 + 7215.4707 + 0.0000000 + 0.0000000 + 12.040525 + 0.0000000 + 0.0000000 + 0.0000000 + 0.57890755 + + + 9 + 0.3500 + 6892.3647 + 0.0000000 + 0.0000000 + 13.036567 + 0.0000000 + 0.0000000 + 0.0000000 + 0.63370013 + + + 9 + 0.3600 + 6565.7085 + 0.0000000 + 0.0000000 + 10.898385 + 0.0000000 + 0.0000000 + 0.0000000 + 0.50941873 + + + 9 + 0.3700 + 6260.1587 + 0.0000000 + 0.0000000 + 12.076806 + 0.0000000 + 0.0000000 + 0.0000000 + 0.57912481 + + + 9 + 0.3800 + 6047.1582 + 0.0000000 + 0.0000000 + 14.722479 + 0.0000000 + 0.0000000 + 0.0000000 + 0.73049068 + + + 9 + 0.3900 + 5769.3306 + 0.0000000 + 0.0000000 + 15.253819 + 0.0000000 + 0.0000000 + 0.0000000 + 0.76127720 + + + 9 + 0.4000 + 5491.2158 + 0.0000000 + 0.0000000 + 15.621739 + 0.0000000 + 0.0000000 + 0.0000000 + 0.78124112 + + + 9 + 0.4100 + 5239.2842 + 0.0000000 + 0.0000000 + 15.019732 + 0.0000000 + 0.0000000 + 0.0000000 + 0.74851453 + + + 9 + 0.4200 + 4955.2236 + 0.0000000 + 0.0000000 + 12.970184 + 0.0000000 + 0.0000000 + 0.0000000 + 0.63469940 + + + 9 + 0.4300 + 4695.3511 + 0.0000000 + 0.0000000 + 7.2544327 + 0.0000000 + 0.0000000 + 0.0000000 + 0.31172675 + + + 9 + 0.4400 + 4476.2344 + 0.0000000 + 0.0000000 + 2.5105438 + 0.0000000 + 0.0000000 + 0.0000000 + 0.018204786 + + + 9 + 0.4500 + 4234.5391 + 0.0000000 + 0.0000000 + 2.1897080 + 0.0000000 + 0.0000000 + 0.0000000 + 0.021179220 + + + 9 + 0.4600 + 3972.7383 + 0.0000000 + 0.0000000 + 2.5433095 + 0.0000000 + 0.0000000 + 0.0000000 + 0.036578804 + + + 9 + 0.4700 + 3675.9219 + 0.0000000 + 0.0000000 + 4.9355130 + 0.0000000 + 0.0000000 + 0.0000000 + 0.18048137 + + + 9 + 0.4800 + 3402.2808 + 0.0000000 + 0.0000000 + 4.8340473 + 0.0000000 + 0.0000000 + 0.0000000 + 0.17349699 + + + 9 + 0.4900 + 3210.3071 + 0.0000000 + 0.0000000 + 8.0225458 + 0.0000000 + 0.0000000 + 0.0000000 + 0.34982723 + + + 9 + 0.5000 + 2963.7800 + 0.0000000 + 0.0000000 + 11.747848 + 0.0000000 + 0.0000000 + 0.0000000 + 0.56046647 + + + 9 + 0.5100 + 2837.0615 + 0.0000000 + 0.0000000 + 1.7925872 + 0.0000000 + 0.0000000 + 0.0000000 + -0.018638892 + + + 9 + 0.5200 + 2599.4478 + 0.0000000 + 0.0000000 + -10.107281 + 0.0000000 + 0.0000000 + 0.0000000 + -0.77151293 + + + 9 + 0.5300 + 2392.7219 + 0.0000000 + 0.0000000 + -3.8234668 + 0.0000000 + 0.0000000 + 0.0000000 + -0.39228624 + + + 9 + 0.5400 + 2141.3977 + 0.0000000 + 0.0000000 + 4.9235377 + 0.0000000 + 0.0000000 + 0.0000000 + 0.16121981 + + + 9 + 0.5500 + 1894.3961 + 0.0000000 + 0.0000000 + 5.7242775 + 0.0000000 + 0.0000000 + 0.0000000 + 0.20739347 + + + 9 + 0.5600 + 1650.1195 + 0.0000000 + 0.0000000 + 3.1604090 + 0.0000000 + 0.0000000 + 0.0000000 + 0.065963924 + + + 9 + 0.5700 + 1442.5604 + 0.0000000 + 0.0000000 + -21.118731 + 0.0000000 + 0.0000000 + 0.0000000 + -1.3982593 + + + 9 + 0.5800 + 1154.2802 + 0.0000000 + 0.0000000 + -11.551435 + 0.0000000 + 0.0000000 + 0.0000000 + -0.80686474 + + + 9 + 0.5900 + 977.92596 + 0.0000000 + 0.0000000 + -19.052465 + 0.0000000 + 0.0000000 + 0.0000000 + -1.2597023 + + + 9 + 0.6000 + 739.69891 + 0.0000000 + 0.0000000 + -0.54290044 + 0.0000000 + 0.0000000 + 0.0000000 + -0.15558498 + + + 9 + 0.6100 + 502.32535 + 0.0000000 + 0.0000000 + 2.3928659 + 0.0000000 + 0.0000000 + 0.0000000 + 0.021699622 + + + 9 + 0.6200 + 332.78494 + 0.0000000 + 0.0000000 + 3.9483552 + 0.0000000 + 0.0000000 + 0.0000000 + 0.10301653 + + + 9 + 0.6300 + 117.40592 + 0.0000000 + 0.0000000 + 2.4123704 + 0.0000000 + 0.0000000 + 0.0000000 + 0.020102538 + + + 9 + 0.6400 + -35.941978 + 0.0000000 + 0.0000000 + -4.7306657 + 0.0000000 + 0.0000000 + 0.0000000 + -0.39635584 + + + 9 + 0.6500 + -246.84441 + 0.0000000 + 0.0000000 + -2.7428317 + 0.0000000 + 0.0000000 + 0.0000000 + -0.26893592 + + + 9 + 0.6600 + -401.82376 + 0.0000000 + 0.0000000 + -5.7742028 + 0.0000000 + 0.0000000 + 0.0000000 + -0.45050329 + + + 9 + 0.6700 + -515.35016 + 0.0000000 + 0.0000000 + -7.4531288 + 0.0000000 + 0.0000000 + 0.0000000 + -0.57305795 + + + 9 + 0.6800 + -706.58044 + 0.0000000 + 0.0000000 + 1.6042513 + 0.0000000 + 0.0000000 + 0.0000000 + -0.023598678 + + + 9 + 0.6900 + -890.52930 + 0.0000000 + 0.0000000 + 5.2660694 + 0.0000000 + 0.0000000 + 0.0000000 + 0.17871600 + + + 9 + 0.7000 + -1076.5763 + 0.0000000 + 0.0000000 + 4.0205736 + 0.0000000 + 0.0000000 + 0.0000000 + 0.085871026 + + + 9 + 0.7100 + -1205.3600 + 0.0000000 + 0.0000000 + 10.127654 + 0.0000000 + 0.0000000 + 0.0000000 + 0.45515704 + + + 9 + 0.7200 + -1401.7433 + 0.0000000 + 0.0000000 + 10.694732 + 0.0000000 + 0.0000000 + 0.0000000 + 0.49325097 + + + 9 + 0.7300 + -1511.8746 + 0.0000000 + 0.0000000 + 13.002579 + 0.0000000 + 0.0000000 + 0.0000000 + 0.62048405 + + + 9 + 0.7400 + -1686.1857 + 0.0000000 + 0.0000000 + 12.355764 + 0.0000000 + 0.0000000 + 0.0000000 + 0.58085251 + + + 9 + 0.7500 + -1870.8121 + 0.0000000 + 0.0000000 + 11.427918 + 0.0000000 + 0.0000000 + 0.0000000 + 0.52940631 + + + 9 + 0.7600 + -2049.8137 + 0.0000000 + 0.0000000 + 13.941729 + 0.0000000 + 0.0000000 + 0.0000000 + 0.67407155 + + + 9 + 0.7700 + -2238.1753 + 0.0000000 + 0.0000000 + 13.486353 + 0.0000000 + 0.0000000 + 0.0000000 + 0.64925963 + + + 9 + 0.7800 + -2392.8804 + 0.0000000 + 0.0000000 + 12.826356 + 0.0000000 + 0.0000000 + 0.0000000 + 0.61224586 + + + 9 + 0.7900 + -2588.4917 + 0.0000000 + 0.0000000 + 8.2970324 + 0.0000000 + 0.0000000 + 0.0000000 + 0.34881678 + + + 9 + 0.8000 + -2757.0720 + 0.0000000 + 0.0000000 + 11.945762 + 0.0000000 + 0.0000000 + 0.0000000 + 0.56193101 + + + 9 + 0.8100 + -2903.7708 + 0.0000000 + 0.0000000 + 5.3924117 + 0.0000000 + 0.0000000 + 0.0000000 + 0.18367814 + + + 9 + 0.8200 + -3047.7859 + 0.0000000 + 0.0000000 + 11.101733 + 0.0000000 + 0.0000000 + 0.0000000 + 0.51431257 + + + 9 + 0.8300 + -3161.5854 + 0.0000000 + 0.0000000 + 9.6307545 + 0.0000000 + 0.0000000 + 0.0000000 + 0.42988670 + + + 9 + 0.8400 + -3379.0830 + 0.0000000 + 0.0000000 + 12.023994 + 0.0000000 + 0.0000000 + 0.0000000 + 0.56784922 + + + 9 + 0.8500 + -3558.4021 + 0.0000000 + 0.0000000 + 11.185745 + 0.0000000 + 0.0000000 + 0.0000000 + 0.52070016 + + + 9 + 0.8600 + -3652.6042 + 0.0000000 + 0.0000000 + 2.8762925 + 0.0000000 + 0.0000000 + 0.0000000 + 0.010642702 + + + 9 + 0.8700 + -3829.2700 + 0.0000000 + 0.0000000 + 3.7260182 + 0.0000000 + 0.0000000 + 0.0000000 + 0.071571045 + + + 9 + 0.8800 + -3955.3086 + 0.0000000 + 0.0000000 + 6.0863285 + 0.0000000 + 0.0000000 + 0.0000000 + 0.22653362 + + + 9 + 0.8900 + -4086.2063 + 0.0000000 + 0.0000000 + 3.3721447 + 0.0000000 + 0.0000000 + 0.0000000 + 0.083420321 + + + 9 + 0.9000 + -4189.3530 + 0.0000000 + 0.0000000 + 3.2029264 + 0.0000000 + 0.0000000 + 0.0000000 + 0.073568165 + + + 9 + 0.9100 + -4346.2114 + 0.0000000 + 0.0000000 + 2.5930278 + 0.0000000 + 0.0000000 + 0.0000000 + 0.038073756 + + + 9 + 0.9200 + -4513.3115 + 0.0000000 + 0.0000000 + 5.4292865 + 0.0000000 + 0.0000000 + 0.0000000 + 0.20921849 + + + 9 + 0.9300 + -4716.2129 + 0.0000000 + 0.0000000 + 2.2852771 + 0.0000000 + 0.0000000 + 0.0000000 + 0.030672517 + + + 9 + 0.9400 + -4813.1924 + 0.0000000 + 0.0000000 + -7.1204696 + 0.0000000 + 0.0000000 + 0.0000000 + -0.53045851 + + + 9 + 0.9500 + -4961.3779 + 0.0000000 + 0.0000000 + -0.63605487 + 0.0000000 + 0.0000000 + 0.0000000 + -0.14009029 + + + 9 + 0.9600 + -5113.8364 + 0.0000000 + 0.0000000 + 1.3637644 + 0.0000000 + 0.0000000 + 0.0000000 + -0.024320509 + + + 9 + 0.9700 + -5263.4927 + 0.0000000 + 0.0000000 + 0.24821608 + 0.0000000 + 0.0000000 + 0.0000000 + -0.11575874 + + + 9 + 0.9800 + -5368.6714 + 0.0000000 + 0.0000000 + 2.0372019 + 0.0000000 + 0.0000000 + 0.0000000 + 0.0095707709 + + + 9 + 0.9900 + -5487.4829 + 0.0000000 + 0.0000000 + 4.7544155 + 0.0000000 + 0.0000000 + 0.0000000 + 0.15978737 + + + 9 + 1.0000 + -5616.9009 + 0.0000000 + 0.0000000 + 2.7037058 + 0.0000000 + 0.0000000 + 0.0000000 + 0.044261467 + + + + + diff --git a/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergy.xml b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergy.xml new file mode 100644 index 0000000000..7d47bedd7c --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergy.xml @@ -0,0 +1,378 @@ + + + + + + + + + + + 4 + 0.000000 + -32102.556641 + 6147.870117 + -25954.687500 + + + 4 + 0.200000 + -34450.820312 + 5885.405273 + -28565.414062 + + + 4 + 0.400000 + -33708.703125 + 6146.063477 + -27562.640625 + + + 4 + 0.600000 + -33897.753906 + 6079.209473 + -27818.544922 + + + 4 + 0.800000 + -33992.132812 + 6242.735352 + -27749.398438 + + + 4 + 1.000000 + -34110.496094 + 6005.650391 + -28104.845703 + + + 4 + 1.200000 + -34426.128906 + 6251.612305 + -28174.515625 + + + 4 + 1.400000 + -33967.996094 + 6241.403809 + -27726.591797 + + + 4 + 1.600000 + -34323.785156 + 6419.104492 + -27904.679688 + + + 4 + 1.800000 + -34305.316406 + 6256.709473 + -28048.607422 + + + 4 + 2.000000 + -34260.628906 + 6094.508301 + -28166.121094 + + + 4 + 2.200000 + -34596.117188 + 6014.866699 + -28581.250000 + + + 4 + 2.400000 + -34348.128906 + 6177.041016 + -28171.087891 + + + 4 + 2.600000 + -33940.769531 + 5990.643066 + -27950.126953 + + + 4 + 2.800000 + -34303.445312 + 6077.416992 + -28226.027344 + + + 4 + 3.000000 + -34235.710938 + 6137.697754 + -28098.013672 + + + 4 + 3.200000 + -34002.332031 + 6238.207031 + -27764.125000 + + + 4 + 3.400000 + -34057.250000 + 6159.159180 + -27898.089844 + + + 4 + 3.600000 + -34600.128906 + 6063.009766 + -28537.119141 + + + 4 + 3.800000 + -34239.929688 + 6266.519043 + -27973.410156 + + + 4 + 4.000000 + -34098.769531 + 6216.680176 + -27882.089844 + + + 4 + 4.200000 + -34068.769531 + 6327.523926 + -27741.246094 + + + 4 + 4.400000 + -33888.636719 + 6213.844727 + -27674.792969 + + + 4 + 4.600000 + -33936.765625 + 6261.648438 + -27675.117188 + + + 4 + 4.800000 + -33911.062500 + 6168.812500 + -27742.250000 + + + 4 + 5.000000 + -33947.417969 + 6095.376953 + -27852.041016 + + + 4 + 5.200000 + -34157.207031 + 5930.162109 + -28227.044922 + + + 4 + 5.400000 + -33914.910156 + 6003.146973 + -27911.763672 + + + 4 + 5.600000 + -33877.945312 + 6124.571777 + -27753.373047 + + + 4 + 5.800000 + -34020.351562 + 6162.232910 + -27858.119141 + + + 4 + 6.000000 + -34128.800781 + 6059.147461 + -28069.652344 + + + 4 + 6.200000 + -34273.890625 + 6066.780273 + -28207.109375 + + + 4 + 6.400000 + -33896.531250 + 6135.265137 + -27761.265625 + + + 4 + 6.600000 + -34351.207031 + 6222.209961 + -28128.996094 + + + 4 + 6.800000 + -34294.121094 + 6135.084961 + -28159.035156 + + + 4 + 7.000000 + -34033.593750 + 6281.751953 + -27751.841797 + + + 4 + 7.200000 + -33949.714844 + 6196.525391 + -27753.189453 + + + 4 + 7.400000 + -33534.386719 + 5933.003418 + -27601.382812 + + + 4 + 7.600000 + -34207.582031 + 6100.635742 + -28106.945312 + + + 4 + 7.800000 + -34221.773438 + 6173.767090 + -28048.005859 + + + 4 + 8.000000 + -34048.535156 + 6069.120117 + -27979.414062 + + + 4 + 8.200000 + -34067.558594 + 6030.937988 + -28036.621094 + + + 4 + 8.400000 + -34414.148438 + 6250.905273 + -28163.242188 + + + 4 + 8.600000 + -33985.910156 + 6157.070312 + -27828.839844 + + + 4 + 8.800000 + -33963.457031 + 6056.696289 + -27906.761719 + + + 4 + 9.000000 + -34317.792969 + 6261.636230 + -28056.156250 + + + 4 + 9.200000 + -34095.843750 + 6217.412109 + -27878.431641 + + + 4 + 9.400000 + -34211.437500 + 6132.755371 + -28078.681641 + + + 4 + 9.600000 + -34119.976562 + 6159.531250 + -27960.445312 + + + 4 + 9.800000 + -34448.562500 + 6217.981934 + -28230.580078 + + + 4 + 10.000000 + -33944.414062 + 6107.636719 + -27836.777344 + + + + + diff --git a/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyByNumber.xml b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyByNumber.xml new file mode 100644 index 0000000000..680c560951 --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyByNumber.xml @@ -0,0 +1,378 @@ + + + + + + + + + + + 4 + 0.000000 + 412.675140 + 6147.870117 + -277.241913 + + + 4 + 0.200000 + 286.838928 + 5885.405273 + -305.226624 + + + 4 + 0.400000 + 318.294525 + 6146.063477 + -276.163300 + + + 4 + 0.600000 + 316.279175 + 6079.209473 + -271.288391 + + + 4 + 0.800000 + 303.799255 + 6242.735352 + -274.734497 + + + 4 + 1.000000 + 299.513519 + 6005.650391 + -278.492157 + + + 4 + 1.200000 + 293.994965 + 6251.612305 + -283.624084 + + + 4 + 1.400000 + 292.305603 + 6241.403809 + -271.350677 + + + 4 + 1.600000 + 295.773956 + 6419.104492 + -282.657257 + + + 4 + 1.800000 + 277.526611 + 6256.709473 + -278.745453 + + + 4 + 2.000000 + 298.229156 + 6094.508301 + -271.631927 + + + 4 + 2.200000 + 304.681488 + 6014.866699 + -276.008667 + + + 4 + 2.400000 + 305.796234 + 6177.041016 + -272.094727 + + + 4 + 2.600000 + 306.506500 + 5990.643066 + -260.638428 + + + 4 + 2.800000 + 333.718231 + 6077.416992 + -257.015717 + + + 4 + 3.000000 + 309.297546 + 6137.697754 + -263.238159 + + + 4 + 3.200000 + 293.729523 + 6238.207031 + -266.992706 + + + 4 + 3.400000 + 293.085510 + 6159.159180 + -262.892700 + + + 4 + 3.600000 + 261.200470 + 6063.009766 + -264.705597 + + + 4 + 3.800000 + 316.416992 + 6266.519043 + -262.703918 + + + 4 + 4.000000 + 306.888702 + 6216.680176 + -266.768372 + + + 4 + 4.200000 + 288.428619 + 6327.523926 + -269.623749 + + + 4 + 4.400000 + 316.909424 + 6213.844727 + -272.557800 + + + 4 + 4.600000 + 315.392242 + 6261.648438 + -269.936920 + + + 4 + 4.800000 + 306.055420 + 6168.812500 + -262.402161 + + + 4 + 5.000000 + 294.990906 + 6095.376953 + -258.683838 + + + 4 + 5.200000 + 289.555115 + 5930.162109 + -259.584320 + + + 4 + 5.400000 + 307.466949 + 6003.146973 + -266.808014 + + + 4 + 5.600000 + 299.525543 + 6124.571777 + -271.693329 + + + 4 + 5.800000 + 303.685181 + 6162.232910 + -265.650055 + + + 4 + 6.000000 + 302.508575 + 6059.147461 + -262.166931 + + + 4 + 6.200000 + 305.190033 + 6066.780273 + -268.883850 + + + 4 + 6.400000 + 316.891418 + 6135.265137 + -264.964966 + + + 4 + 6.600000 + 305.526703 + 6222.209961 + -263.851654 + + + 4 + 6.800000 + 306.182434 + 6135.084961 + -261.104309 + + + 4 + 7.000000 + 313.867401 + 6281.751953 + -263.505280 + + + 4 + 7.200000 + 327.160248 + 6196.525391 + -260.642639 + + + 4 + 7.400000 + 330.673920 + 5933.003418 + -255.867264 + + + 4 + 7.600000 + 299.878540 + 6100.635742 + -263.021698 + + + 4 + 7.800000 + 298.238159 + 6173.767090 + -263.497375 + + + 4 + 8.000000 + 346.477814 + 6069.120117 + -252.196213 + + + 4 + 8.200000 + 314.671814 + 6030.937988 + -262.904236 + + + 4 + 8.400000 + 306.445038 + 6250.905273 + -275.029877 + + + 4 + 8.600000 + 337.485474 + 6157.070312 + -268.037445 + + + 4 + 8.800000 + 313.903717 + 6056.696289 + -263.511719 + + + 4 + 9.000000 + 286.324554 + 6261.636230 + -268.191803 + + + 4 + 9.200000 + 296.164307 + 6217.412109 + -265.517853 + + + 4 + 9.400000 + 278.793793 + 6132.755371 + -278.546753 + + + 4 + 9.600000 + 322.638519 + 6159.531250 + -273.344574 + + + 4 + 9.800000 + 294.918335 + 6217.981934 + -271.223114 + + + 4 + 10.000000 + 323.157379 + 6107.636719 + -266.596802 + + + + + diff --git a/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyMixed.xml b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyMixed.xml new file mode 100644 index 0000000000..cd6370f7b4 --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/EnergyTest_ExtractEnergyMixed.xml @@ -0,0 +1,430 @@ + + + + + + + + + + + 5 + 0.000000 + -25954.687500 + -4113.184082 + 2.908700 + 24.609161 + + + 5 + 0.200000 + -28565.414062 + 2182.145752 + 2.862453 + 23.453901 + + + 5 + 0.400000 + -27562.640625 + -1272.206055 + 2.910590 + 24.657173 + + + 5 + 0.600000 + -27818.544922 + 52.116547 + 2.919243 + 24.877728 + + + 5 + 0.800000 + -27749.398438 + 21.307526 + 2.913108 + 24.721209 + + + 5 + 1.000000 + -28104.845703 + -255.442398 + 2.906520 + 24.553862 + + + 5 + 1.200000 + -28174.515625 + 563.564453 + 2.897688 + 24.330708 + + + 5 + 1.400000 + -27726.591797 + -1227.515869 + 2.919131 + 24.874872 + + + 5 + 1.600000 + -27904.679688 + 915.864136 + 2.899337 + 24.372284 + + + 5 + 1.800000 + -28048.607422 + -279.529633 + 2.906079 + 24.542704 + + + 5 + 2.000000 + -28166.121094 + -458.908936 + 2.918627 + 24.861990 + + + 5 + 2.200000 + -28581.250000 + -189.055450 + 2.910862 + 24.664082 + + + 5 + 2.400000 + -28171.087891 + 371.100586 + 2.917799 + 24.840837 + + + 5 + 2.600000 + -27950.126953 + 445.505615 + 2.938793 + 25.380903 + + + 5 + 2.800000 + -28226.027344 + -383.208984 + 2.945657 + 25.559153 + + + 5 + 3.000000 + -28098.013672 + -739.696289 + 2.933936 + 25.255260 + + + 5 + 3.200000 + -27764.125000 + 556.054443 + 2.927019 + 25.077057 + + + 5 + 3.400000 + -27898.089844 + -191.586060 + 2.934578 + 25.271851 + + + 5 + 3.600000 + -28537.119141 + -64.853195 + 2.931219 + 25.185162 + + + 5 + 3.800000 + -27973.410156 + -586.303345 + 2.934929 + 25.280926 + + + 5 + 4.000000 + -27882.089844 + -361.731506 + 2.927429 + 25.087599 + + + 5 + 4.200000 + -27741.246094 + 259.893829 + 2.922239 + 24.954405 + + + 5 + 4.400000 + -27674.792969 + 520.501953 + 2.916972 + 24.819725 + + + 5 + 4.600000 + -27675.117188 + 268.957916 + 2.921674 + 24.939926 + + + 5 + 4.800000 + -27742.250000 + -204.915268 + 2.935492 + 25.295462 + + + 5 + 5.000000 + -27852.041016 + 5.506622 + 2.942482 + 25.476610 + + + 5 + 5.200000 + -28227.044922 + -274.371277 + 2.940779 + 25.432384 + + + 5 + 5.400000 + -27911.763672 + 592.697144 + 2.927356 + 25.085735 + + + 5 + 5.600000 + -27753.373047 + 683.389648 + 2.918517 + 24.859180 + + + 5 + 5.800000 + -27858.119141 + -500.987946 + 2.929479 + 25.140350 + + + 5 + 6.000000 + -28069.652344 + -272.158386 + 2.935930 + 25.306805 + + + 5 + 6.200000 + -28207.109375 + 682.146118 + 2.923578 + 24.988716 + + + 5 + 6.400000 + -27761.265625 + -251.639786 + 2.930740 + 25.172831 + + + 5 + 6.600000 + -28128.996094 + 136.933014 + 2.932798 + 25.225883 + + + 5 + 6.800000 + -28159.035156 + -172.420929 + 2.937919 + 25.358250 + + + 5 + 7.000000 + -27751.841797 + 187.738708 + 2.933440 + 25.242456 + + + 5 + 7.200000 + -27753.189453 + 181.039490 + 2.938785 + 25.380699 + + + 5 + 7.400000 + -27601.382812 + -59.191101 + 2.947856 + 25.616447 + + + 5 + 7.600000 + -28106.945312 + 234.138947 + 2.934338 + 25.265654 + + + 5 + 7.800000 + -28048.005859 + 352.149719 + 2.933455 + 25.242838 + + + 5 + 8.000000 + -27979.414062 + -506.414001 + 2.954965 + 25.802214 + + + 5 + 8.200000 + -28036.621094 + -413.985809 + 2.934557 + 25.271296 + + + 5 + 8.400000 + -28163.242188 + 449.511932 + 2.912586 + 24.707930 + + + 5 + 8.600000 + -27828.839844 + 421.591461 + 2.925114 + 25.028139 + + + 5 + 8.800000 + -27906.761719 + -277.707733 + 2.933428 + 25.242149 + + + 5 + 9.000000 + -28056.156250 + -76.575607 + 2.924834 + 25.020935 + + + 5 + 9.200000 + -27878.431641 + -443.641296 + 2.929722 + 25.146606 + + + 5 + 9.400000 + -28078.681641 + 727.809448 + 2.906425 + 24.551456 + + + 5 + 9.600000 + -27960.445312 + -348.396515 + 2.915571 + 24.783981 + + + 5 + 9.800000 + -28230.580078 + 260.881683 + 2.919360 + 24.880718 + + + 5 + 10.000000 + -27836.777344 + -291.007599 + 2.927743 + 25.095673 + + + + + diff --git a/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosity.xml b/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosity.xml new file mode 100644 index 0000000000..e25077a5f7 --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosity.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + 5 + 0.1 + 0 + 0 + 0 + 0 + + + 5 + 0.3 + 0.000176958 + 0.0001997 + 0.000227414 + 0.000201357 + + + 5 + 0.5 + 0.00032058 + 0.000336305 + 0.000523275 + 0.000393386 + + + 5 + 0.7 + 0.000438803 + 0.000332506 + 0.000720448 + 0.000497252 + + + 5 + 0.9 + 0.000479678 + 0.00026701 + 0.000834344 + 0.000527011 + + + 5 + 1.1 + 0.000518115 + 0.0002171 + 0.000888733 + 0.000541316 + + + 5 + 1.3 + 0.000521 + 0.000157779 + 0.00086004 + 0.00051294 + + + 5 + 1.5 + 0.000545937 + 0.000116376 + 0.000702937 + 0.000455084 + + + 5 + 1.7 + 0.000564482 + 0.000149521 + 0.000433129 + 0.000382377 + + + 5 + 1.9 + 0.000643496 + 0.000253498 + 0.000142306 + 0.000346433 + + + 5 + 2.1 + 0.000680419 + 0.000327415 + 4.35872e-05 + 0.000350474 + + + 5 + 2.3 + 0.000715131 + 0.000369339 + -5.31824e-05 + 0.000343763 + + + 5 + 2.5 + 0.000818337 + 0.000399551 + -8.46781e-05 + 0.000377737 + + + 5 + 2.7 + 0.000924901 + 0.000419762 + 7.73914e-06 + 0.000450801 + + + + + diff --git a/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosityIntegral.xml b/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosityIntegral.xml new file mode 100644 index 0000000000..9d19a3006d --- /dev/null +++ b/src/gromacs/energyanalysis/tests/refdata/ViscosityTest_EinsteinViscosityIntegral.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + 5 + 0 + 0 + 0 + 0 + 0 + + + 5 + 0.2 + 3.53916e-05 + 3.994e-05 + 4.54828e-05 + 4.02715e-05 + + + 5 + 0.4 + 9.95076e-05 + 0.000107201 + 0.000150138 + 0.000118949 + + + 5 + 0.6 + 0.000187268 + 0.000173702 + 0.000294227 + 0.000218399 + + + 5 + 0.8 + 0.000283204 + 0.000227104 + 0.000461096 + 0.000323801 + + + 5 + 1 + 0.000386827 + 0.000270524 + 0.000638843 + 0.000432065 + + + 5 + 1.2 + 0.000491027 + 0.00030208 + 0.000810851 + 0.000534652 + + + 5 + 1.4 + 0.000600214 + 0.000325355 + 0.000951438 + 0.000625669 + + + 5 + 1.6 + 0.000713111 + 0.000355259 + 0.00103806 + 0.000702145 + + + 5 + 1.8 + 0.00084181 + 0.000405959 + 0.00106653 + 0.000771431 + + + 5 + 2 + 0.000977894 + 0.000471442 + 0.00107524 + 0.000841526 + + + 5 + 2.2 + 0.00112092 + 0.00054531 + 0.00106461 + 0.000910279 + + + 5 + 2.4 + 0.00128459 + 0.00062522 + 0.00104767 + 0.000985826 + + + 5 + 2.6 + 0.00146957 + 0.000709173 + 0.00104922 + 0.00107599 + + + + + diff --git a/src/gromacs/gmxana/gmx_energy.cpp b/src/gromacs/gmxana/gmx_energy.cpp index a55123d77c..984b966cc0 100644 --- a/src/gromacs/gmxana/gmx_energy.cpp +++ b/src/gromacs/gmxana/gmx_energy.cpp @@ -69,6 +69,7 @@ #include "gromacs/utility/gmxassert.h" #include "gromacs/utility/pleasecite.h" #include "gromacs/utility/smalloc.h" +#include "gromacs/utility/strconvert.h" static real minthird = -1.0/3.0, minsixth = -1.0/6.0; static const int NOTSET = -23451; @@ -99,6 +100,19 @@ typedef struct { gmx_bool bHaveSums; } enerdata_t; +static void done_enerdata_t(int nset, enerdata_t *edat) +{ + sfree(edat->step); + sfree(edat->steps); + sfree(edat->points); + for (int i = 0; i < nset; i++) + { + sfree(edat->s[i].ener); + sfree(edat->s[i].es); + } + sfree(edat->s); +} + static double mypow(double x, double y) { if (x > 0) @@ -367,6 +381,7 @@ static void get_dhdl_parms(const char *topnm, t_inputrec *ir) /* all we need is the ir to be able to write the label */ read_tpx(topnm, ir, box, &natoms, nullptr, nullptr, &mtop); + done_mtop(&mtop); } static void get_orires_parms(const char *topnm, t_inputrec *ir, @@ -921,24 +936,17 @@ static enerdata_t *calc_sum(int nset, enerdata_t *edat, int nbmin, int nbmax) return esum; } -static char *ee_pr(double ee, char *buf) +static void ee_pr(double ee, int buflen, char *buf) { - char tmp[100]; - double rnd; - - if (ee < 0) - { - sprintf(buf, "%s", "--"); - } - else + snprintf(buf, buflen, "%s", "--"); + if (ee >= 0) { /* Round to two decimals by printing. */ - sprintf(tmp, "%.1e", ee); - sscanf(tmp, "%lf", &rnd); - sprintf(buf, "%g", rnd); + char tmp[100]; + snprintf(tmp, sizeof(tmp), "%.1e", ee); + double rnd = gmx::doubleFromString(tmp); + snprintf(buf, buflen, "%g", rnd); } - - return buf; } static void remove_drift(int nset, int nbmin, int nbmax, real dt, enerdata_t *edat) @@ -1130,6 +1138,7 @@ static void calc_fluctuation_props(FILE *fp, } static void analyse_ener(gmx_bool bCorr, const char *corrfn, + const char *eviscofn, const char *eviscoifn, gmx_bool bFee, gmx_bool bSum, gmx_bool bFluct, gmx_bool bVisco, const char *visfn, int nmol, gmx_int64_t start_step, double start_t, @@ -1295,8 +1304,9 @@ static void analyse_ener(gmx_bool bCorr, const char *corrfn, totaldrift /= nmol; } + ee_pr(pr_errest, sizeof(eebuf), eebuf); fprintf(stdout, "%-24s %10g %10s %10g %10g", - leg[i], pr_aver, ee_pr(pr_errest, eebuf), pr_stddev, totaldrift); + leg[i], pr_aver, eebuf, pr_stddev, totaldrift); if (bFee) { fprintf(stdout, " %10g", fee[i]); @@ -1315,8 +1325,9 @@ static void analyse_ener(gmx_bool bCorr, const char *corrfn, if (bSum) { totaldrift = (edat->nsteps - 1)*esum->s[0].slope; + ee_pr(esum->s[0].ee/nmol, sizeof(eebuf), eebuf); fprintf(stdout, "%-24s %10g %10s %10s %10g (%s)", - "Total", esum->s[0].av/nmol, ee_pr(esum->s[0].ee/nmol, eebuf), + "Total", esum->s[0].av/nmol, eebuf, "--", totaldrift/nmol, enm[set[0]].unit); /* pr_aver,pr_stddev,a,totaldrift */ if (bFee) @@ -1384,7 +1395,7 @@ static void analyse_ener(gmx_bool bCorr, const char *corrfn, eneint[2][i+1] = eneint[2][i] + 0.5*(edat->s[5].es[i].sum + edat->s[7].es[i].sum)*Dt/edat->points[i]; } - einstein_visco("evisco.xvg", "eviscoi.xvg", + einstein_visco(eviscofn, eviscoifn, 3, edat->nframes+1, eneint, Vaver, Temp, Dt, oenv); for (i = 0; i < 3; i++) @@ -1665,7 +1676,9 @@ static void do_dhdl(t_enxframe *fr, const t_inputrec *ir, FILE **fp_dhdl, } } } - + // Clean up! + sfree(native_lambda_vec); + sfree(lambda_components); if (nblock_hist == 0 && nblock_dh == 0) { /* don't do anything */ @@ -2039,6 +2052,8 @@ int gmx_energy(int argc, char *argv[]) { efXVG, "-oten", "oriten", ffOPTWR }, { efXVG, "-corr", "enecorr", ffOPTWR }, { efXVG, "-vis", "visco", ffOPTWR }, + { efXVG, "-evisco", "evisco", ffOPTWR }, + { efXVG, "-eviscoi", "eviscoi", ffOPTWR }, { efXVG, "-ravg", "runavgdf", ffOPTWR }, { efXVG, "-odh", "dhdl", ffOPTWR } }; @@ -2166,7 +2181,6 @@ int gmx_energy(int argc, char *argv[]) (gmx_strcasecmp(interaction_function[j].longname, leg[i]) == 0); } } - if (bPrAll && nset > 1) { gmx_fatal(FARGS, "Printing averages can only be done when a single set is selected"); @@ -2274,6 +2288,7 @@ int gmx_energy(int argc, char *argv[]) } xvgr_legend(fodt, norsel, (const char**)odtleg, oenv); } + sfree(odtleg); } } if (bOTEN) @@ -2715,7 +2730,7 @@ int gmx_energy(int argc, char *argv[]) while (bCont && (timecheck == 0)); fprintf(stderr, "\n"); - close_enx(fp); + done_ener_file(fp); if (out) { xvgrclose(out); @@ -2817,6 +2832,7 @@ int gmx_energy(int argc, char *argv[]) { double dt = (frame[cur].t-start_t)/(edat.nframes-1); analyse_ener(opt2bSet("-corr", NFILE, fnm), opt2fn("-corr", NFILE, fnm), + opt2fn("-evisco", NFILE, fnm), opt2fn("-eviscoi", NFILE, fnm), bFee, bSum, bFluct, bVisco, opt2fn("-vis", NFILE, fnm), nmol, @@ -2835,7 +2851,17 @@ int gmx_energy(int argc, char *argv[]) fec(opt2fn("-f2", NFILE, fnm), opt2fn("-ravg", NFILE, fnm), reftemp, nset, set, leg, &edat, time, oenv); } - + // Clean up! + done_enerdata_t(nset, &edat); + sfree(time); + free_enxframe(&frame[0]); + free_enxframe(&frame[1]); + sfree(frame); + free_enxnms(nre, enm); + sfree(ppa); + sfree(set); + sfree(leg); + sfree(bIsEner); { const char *nxy = "-nxy"; @@ -2849,6 +2875,8 @@ int gmx_energy(int argc, char *argv[]) do_view(oenv, opt2fn_null("-oten", NFILE, fnm), nxy); do_view(oenv, opt2fn_null("-odh", NFILE, fnm), nxy); } + output_env_done(oenv); + done_filenms(NFILE, fnm); return 0; } diff --git a/src/gromacs/mdtypes/inputrec.cpp b/src/gromacs/mdtypes/inputrec.cpp index 79435f5300..c4daccd6db 100644 --- a/src/gromacs/mdtypes/inputrec.cpp +++ b/src/gromacs/mdtypes/inputrec.cpp @@ -277,6 +277,18 @@ static void done_pull_params(pull_params_t *pull) sfree(pull->coord); } +static void done_lambdas(t_lambda *fep) +{ + if (fep->n_lambda > 0) + { + for (int i = 0; i < efptNR; i++) + { + sfree(fep->all_lambda[i]); + } + sfree(fep->all_lambda); + } +} + void done_inputrec(t_inputrec *ir) { sfree(ir->opts.nrdf); @@ -300,6 +312,8 @@ void done_inputrec(t_inputrec *ir) sfree(ir->opts.SAsteps); sfree(ir->opts.bOPT); sfree(ir->opts.bTS); + sfree(ir->opts.egp_flags); + done_lambdas(ir->fepvals); sfree(ir->fepvals); sfree(ir->expandedvals); sfree(ir->simtempvals); -- 2.11.4.GIT