Merge pull request #1604 from akohlmey/timeout-for-replica

Add support for timeouts to temper commands and a few small fixes
This commit is contained in:
Axel Kohlmeyer 2019-08-02 10:41:44 -04:00 committed by GitHub
commit 7ba6b8a06a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 36 deletions

View File

@ -20,9 +20,13 @@ if(PKG_KIM)
message(FATAL_ERROR "Cannot build downloaded KIM-API library with Ninja build tool")
endif()
message(STATUS "KIM-API download requested - we will build our own")
enable_language(C)
enable_language(Fortran)
include(CheckLanguage)
include(ExternalProject)
enable_language(C)
check_language(Fortran)
if(NOT CMAKE_Fortran_COMPILER)
message(FATAL_ERROR "Compiling the KIM-API library requires a Fortran compiler")
endif()
ExternalProject_Add(kim_build
URL https://s3.openkim.org/kim-api/kim-api-2.1.2.txz
URL_MD5 6ac52e14ef52967fc7858220b208cba5

View File

@ -18,8 +18,12 @@ if(PKG_VORONOI)
else()
set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
endif()
string(APPEND VORO_BUILD_CFLAGS ${CMAKE_CXX_FLAGS})
set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS})
if(APPLE)
get_filename_component(VORO_CXX ${CMAKE_CXX_COMPILER} NAME_WE)
set(VORO_BUILD_OPTIONS CXX=${VORO_CXX} CFLAGS=${VORO_BUILD_CFLAGS})
else()
set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS})
endif()
ExternalProject_Add(voro_build
URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz

View File

@ -239,7 +239,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
#if defined(MPICH) && defined(MVAPICH2_VERSION)
char* str;
cuda_aware_flag = 0;
if (str = getenv("MV2_ENABLE_CUDA")
if ((str = getenv("MV2_ENABLE_CUDA")))
if ((strcmp(str,"1") == 0))
cuda_aware_flag = 1;

View File

@ -31,6 +31,7 @@
#include "finish.h"
#include "timer.h"
#include "error.h"
#include "utils.h"
using namespace LAMMPS_NS;
@ -70,6 +71,10 @@ void Temper::command(int narg, char **arg)
nevery = force->inumeric(FLERR,arg[1]);
double temp = force->numeric(FLERR,arg[2]);
// ignore temper command, if walltime limit was already reached
if (timer->is_timeout()) return;
for (whichfix = 0; whichfix < modify->nfix; whichfix++)
if (strcmp(arg[3],modify->fix[whichfix]->id) == 0) break;
if (whichfix == modify->nfix)
@ -94,39 +99,18 @@ void Temper::command(int narg, char **arg)
// fix style must be appropriate for temperature control, i.e. it needs
// to provide a working Fix::reset_target() and must not change the volume.
if ((strcmp(modify->fix[whichfix]->style,"nvt") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/asphere") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/asphere/omp") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/body") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/eff") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/intel") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/kk") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/kk/host") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/kk/device") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/omp") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/sphere") != 0) &&
(strcmp(modify->fix[whichfix]->style,"nvt/sphere/omp") != 0) &&
(strcmp(modify->fix[whichfix]->style,"langevin") != 0) &&
(strcmp(modify->fix[whichfix]->style,"langevin/drude") != 0) &&
(strcmp(modify->fix[whichfix]->style,"langevin/eff") != 0) &&
(strcmp(modify->fix[whichfix]->style,"gld") != 0) &&
(strcmp(modify->fix[whichfix]->style,"gle") != 0) &&
(strcmp(modify->fix[whichfix]->style,"rigid/nvt") != 0) &&
(strcmp(modify->fix[whichfix]->style,"rigid/nvt/small") != 0) &&
(strcmp(modify->fix[whichfix]->style,"rigid/nvt/omp") != 0) &&
(strcmp(modify->fix[whichfix]->style,"rigid/nvt/small/omp") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/berendsen") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/berendsen/cuda") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/csvr") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/csld") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/rescale") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/rescale/cuda") != 0) &&
(strcmp(modify->fix[whichfix]->style,"temp/rescale/eff") != 0))
if ((!utils::strmatch(modify->fix[whichfix]->style,"^nvt")) &&
(!utils::strmatch(modify->fix[whichfix]->style,"^langevin")) &&
(!utils::strmatch(modify->fix[whichfix]->style,"^gl[de]$")) &&
(!utils::strmatch(modify->fix[whichfix]->style,"^rigid/nvt")) &&
(!utils::strmatch(modify->fix[whichfix]->style,"^temp/")))
error->universe_all(FLERR,"Tempering temperature fix is not supported");
// setup for long tempering run
update->whichflag = 1;
timer->init_timeout();
update->nsteps = nsteps;
update->beginstep = update->firststep = update->ntimestep;
update->endstep = update->laststep = update->firststep + nsteps;
@ -233,7 +217,9 @@ void Temper::command(int narg, char **arg)
// run for nevery timesteps
timer->init_timeout();
update->integrate->run(nevery);
if (timer->is_timeout()) break;
// compute PE
// notify compute it will be called at next swap

View File

@ -71,6 +71,9 @@ void TemperGrem::command(int narg, char **arg)
nevery = force->inumeric(FLERR,arg[1]);
double lambda = force->numeric(FLERR,arg[2]);
// ignore temper command, if walltime limit was already reached
if (timer->is_timeout()) return;
// Get and check if gREM fix exists
for (whichfix = 0; whichfix < modify->nfix; whichfix++)
if (strcmp(arg[3],modify->fix[whichfix]->id) == 0) break;
@ -127,6 +130,8 @@ void TemperGrem::command(int narg, char **arg)
// setup for long tempering run
update->whichflag = 1;
timer->init_timeout();
update->nsteps = nsteps;
update->beginstep = update->firststep = update->ntimestep;
update->endstep = update->laststep = update->firststep + nsteps;
@ -234,7 +239,9 @@ void TemperGrem::command(int narg, char **arg)
// run for nevery timesteps
timer->init_timeout();
update->integrate->run(nevery);
if (timer->is_timeout()) break;
// compute PE
// notify compute it will be called at next swap
@ -242,7 +249,6 @@ void TemperGrem::command(int narg, char **arg)
pe = pe_compute->compute_scalar();
pe_compute->addstep(update->ntimestep + nevery);
// which = which of 2 kinds of swaps to do (0,1)
if (!ranswap) which = iswap % 2;

View File

@ -33,6 +33,7 @@
#include "finish.h"
#include "timer.h"
#include "error.h"
#include "utils.h"
using namespace LAMMPS_NS;
@ -73,6 +74,10 @@ void TemperNPT::command(int narg, char **arg)
double temp = force->numeric(FLERR,arg[2]);
double press_set = force->numeric(FLERR,arg[6]);
// ignore temper command, if walltime limit was already reached
if (timer->is_timeout()) return;
for (whichfix = 0; whichfix < modify->nfix; whichfix++)
if (strcmp(arg[3],modify->fix[whichfix]->id) == 0) break;
if (whichfix == modify->nfix)
@ -97,13 +102,15 @@ void TemperNPT::command(int narg, char **arg)
// change the volume. This currently only applies to fix npt and
// fix rigid/npt variants
if ((strncmp(modify->fix[whichfix]->style,"npt",3) != 0)
&& (strncmp(modify->fix[whichfix]->style,"rigid/npt",9) != 0))
if ( (!utils::strmatch(modify->fix[whichfix]->style,"^npt")) &&
(!utils::strmatch(modify->fix[whichfix]->style,"^rigid/npt")) )
error->universe_all(FLERR,"Tempering temperature and pressure fix is not supported");
// setup for long tempering run
update->whichflag = 1;
timer->init_timeout();
update->nsteps = nsteps;
update->beginstep = update->firststep = update->ntimestep;
update->endstep = update->laststep = update->firststep + nsteps;
@ -211,7 +218,9 @@ void TemperNPT::command(int narg, char **arg)
// run for nevery timesteps
timer->init_timeout();
update->integrate->run(nevery);
if (timer->is_timeout()) break;
// compute PE
// notify compute it will be called at next swap