From 93916d8aeb8e905b373c3d199d24a1d5ddb335cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Conrad=20H=C3=BCbler?= Date: Sat, 8 Jun 2024 20:04:56 +0200 Subject: [PATCH] more mtd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Conrad Hübler --- .gitmodules | 2 +- CMakeLists.txt | 39 +++++++++++++++-------------------- src/capabilities/simplemd.cpp | 24 ++++++++++++++++++--- src/capabilities/simplemd.h | 8 +++++-- 4 files changed, 45 insertions(+), 28 deletions(-) diff --git a/.gitmodules b/.gitmodules index 8fe8593..9e7333c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ url = https://github.com/conradhuebler/ripser [submodule "external/xtb"] path = external/xtb - url = https://github.com/conradhuebler/xtb + url = https://github.com/grimme-lab/xtb [submodule "external/tblite"] path = external/tblite url = https://github.com/tblite/tblite diff --git a/CMakeLists.txt b/CMakeLists.txt index 169b5da..72533c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,9 +41,7 @@ include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/external/fmt/include ${PROJECT_SOURCE_DIR}/external/eigen-3.4.0 ${PROJECT_SOURCE_DIR}/external/cpp-d4/include ${PROJECT_SOURCE_DIR}/external/) -if(Plumed) - include(${PROJECT_SOURCE_DIR}/external/plumed2/src/lib/Plumed.cmake) -endif() + include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR} ) @@ -98,22 +96,22 @@ if (OPENMP_FOUND) endif() IF(CMAKE_COMPILER_IS_GNUCXX) - # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-reorder -pedantic \ - # -Wextra -Wcast-align -Wcast-qual -Wchar-subscripts \ - # -Wcomment -Wdisabled-optimization \ - # -Wformat -Wformat=2 -Wformat-nonliteral -Wformat-security\ - # -Wformat-y2k -Wimport -Winit-self -Winline -Winvalid-pch\ - # -Wunsafe-loop-optimizations -Wno-missing-braces\ - # -Wmissing-field-initializers -Wmissing-format-attribute \ - # -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses\ - # -Wpointer-arith -Wno-redundant-decls -Wsequence-point\ - # -Wsign-compare -Wstack-protector -Wstrict-aliasing\ - # -Wstrict-aliasing=2 -Wswitch -Wsuggest-override\ - # -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code\ - # -Wunused -Wunused-function -Wunused-label -Wunused-parameter\ - # -Wunused-value -Wunused-variable -Wvariadic-macros\ - # -Wvolatile-register-var -Wwrite-strings -Wdeprecated-declarations\ - # -Wno-error=unused-local-typedefs -Wno-error=enum-compare -Wno-narrowing -Werror=return-type -Wno-sign-compare -g") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-reorder -pedantic \ + -Wextra -Wcast-align -Wcast-qual -Wchar-subscripts \ + -Wcomment -Wdisabled-optimization \ + -Wformat -Wformat=2 -Wformat-nonliteral -Wformat-security\ + -Wformat-y2k -Wimport -Winit-self -Winline -Winvalid-pch\ + -Wunsafe-loop-optimizations -Wno-missing-braces\ + -Wmissing-field-initializers -Wmissing-format-attribute \ + -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses\ + -Wpointer-arith -Wno-redundant-decls -Wsequence-point\ + -Wsign-compare -Wstack-protector -Wstrict-aliasing\ + -Wstrict-aliasing=2 -Wswitch -Wsuggest-override\ + -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code\ + -Wunused -Wunused-function -Wunused-label -Wunused-parameter\ + -Wunused-value -Wunused-variable -Wvariadic-macros\ + -Wvolatile-register-var -Wwrite-strings -Wdeprecated-declarations\ + -Wno-error=unused-local-typedefs -Wno-error=enum-compare -Wno-narrowing -Werror=return-type -Wno-sign-compare -g") set (GCC ON) if(WIN32) # Check if we are on Windows else() @@ -344,10 +342,7 @@ if(USE_D4) endif() if(USE_Plumed) - # target_link_libraries(curcuma_core ${Plumed_LIBRARIES}) - # target_link_libraries(curcuma_core ${PLUMED_LOAD}) target_link_libraries(curcuma_core ${PROJECT_SOURCE_DIR}/external/plumed2/src/lib/libplumed.so) - #link_directories(${PROJECT_SOURCE_DIR}/external/plumed2/src/lib/libplumedKernel) endif() target_link_libraries(curcuma_core pthread fmt::fmt-header-only ) diff --git a/src/capabilities/simplemd.cpp b/src/capabilities/simplemd.cpp index c748801..c862e55 100644 --- a/src/capabilities/simplemd.cpp +++ b/src/capabilities/simplemd.cpp @@ -98,6 +98,12 @@ void SimpleMD::LoadControlJson() m_writeXYZ = Json2KeyWord(m_defaults, "writeXYZ"); m_writeinit = Json2KeyWord(m_defaults, "writeinit"); m_mtd = Json2KeyWord(m_defaults, "mtd"); + m_mtd_dT = Json2KeyWord(m_defaults, "mtd_dT"); + if (m_mtd_dT < 0) { + m_eval_mtd = true; + } else { + m_eval_mtd = false; + } m_initfile = Json2KeyWord(m_defaults, "initfile"); m_norestart = Json2KeyWord(m_defaults, "norestart"); m_dt2 = m_dT * m_dT; @@ -109,7 +115,7 @@ void SimpleMD::LoadControlJson() this->Rattle(grad); }; m_rattle_tolerance = Json2KeyWord(m_defaults, "rattle_tolerance"); - m_coupling = m_dT; + // m_coupling = m_dT; m_rattle = Json2KeyWord(m_defaults, "rattle"); std::cout << "Using rattle to constrain bonds!" << std::endl; } else { @@ -586,6 +592,7 @@ void SimpleMD::start() fmt::print(fg(fmt::color::green) | fmt::emphasis::bold, "\nUsing Berendson Thermostat\nJ. Chem. Phys. 81, 3684 (1984) - DOI: 10.1063/1.448118\n\n"); ThermostatFunction = std::bind(&SimpleMD::Berendson, this); } else { + ThermostatFunction = std::bind(&SimpleMD::None, this); std::cout << "No Thermostat applied\n" << std::endl; } @@ -701,8 +708,15 @@ void SimpleMD::start() plumed_cmd(plumedmain, "setVirial", &m_virial[0]); plumed_cmd(plumedmain, "setMasses", &m_mass[0]); - plumed_cmd(plumedmain, "prepareCalc", NULL); - plumed_cmd(plumedmain, "performCalc", NULL); + if (m_eval_mtd) { + plumed_cmd(plumedmain, "prepareCalc", NULL); + plumed_cmd(plumedmain, "performCalc", NULL); + } else { + if (std::abs(m_T0 - m_aver_Temp) < m_mtd_dT && m_step > 10) { + m_eval_mtd = true; + std::cout << "Starting with MetaDynamics ..." << std::endl; + } + } } #endif @@ -1397,6 +1411,10 @@ bool SimpleMD::WriteGeometry() return result; } +void SimpleMD::None() +{ +} + void SimpleMD::Berendson() { double lambda = sqrt(1 + (m_dT * (m_T0 - m_T)) / (m_T * m_coupling)); diff --git a/src/capabilities/simplemd.h b/src/capabilities/simplemd.h index 9231f0e..a01efc5 100644 --- a/src/capabilities/simplemd.h +++ b/src/capabilities/simplemd.h @@ -71,7 +71,7 @@ static json CurcumaMDJson{ { "seed", 1 }, { "cleanenergy", false }, { "wall", "none" }, // can be spheric or rect - { "wall_type", "logfermi" }, // can be logfermi or harmonic + { "wall_type", "harmonic" }, // can be logfermi or harmonic { "wall_spheric_radius", 0 }, { "wall_xl", 0 }, { "wall_yl", 0 }, @@ -85,7 +85,8 @@ static json CurcumaMDJson{ { "wall_temp", 298.15 }, { "wall_beta", 6 }, { "mtd", false }, - { "plumed", "plumed.dat" } + { "plumed", "plumed.dat" }, + { "mtd_dT", -1 } }; class SimpleMD : public CurcumaMethod { @@ -156,6 +157,7 @@ class SimpleMD : public CurcumaMethod { double EKin(); void Berendson(); void CSVR(); + void None(); void InitialiseWalls(); @@ -214,6 +216,8 @@ class SimpleMD : public CurcumaMethod { bool m_dipole = false; bool m_clean_energy = false; bool m_mtd = false; + bool m_eval_mtd = true; + int m_mtd_dT = -1; int m_seed = -1; int m_time_step = 0; int m_dof = 0;