From d9dd80b3684cf11c297c1e28e009135dd0af65c3 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 18 Oct 2018 14:24:48 -0600 Subject: [PATCH] added -restart2dump command-line option --- doc/src/Run_options.txt | 102 ++++++++++++++++++++++++++++------------ src/lammps.cpp | 80 ++++++++++++++++++++----------- 2 files changed, 126 insertions(+), 56 deletions(-) diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 1fc00bc2e3..db5a7baa6e 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -24,8 +24,9 @@ letter abbreviation can be used: "-p or -partition"_#partition "-pl or -plog"_#plog "-ps or -pscreen"_#pscreen -"-r or -restart"_#restart "-ro or -reorder"_#reorder +"-r2data or -restart2data"_#restart2data +"-r2dump or -restart2dump"_#restart2dump "-sc or -screen"_#screen "-sf or -suffix"_#suffix "-v or -var"_#var :ul @@ -280,34 +281,6 @@ specified by the -screen command-line option. :line -[-restart restartfile {remap} datafile keyword value ...] :link(restart) - -Convert the restart file into a data file and immediately exit. This -is the same operation as if the following 2-line input script were -run: - -read_restart restartfile {remap} -write_data datafile keyword value ... :pre - -Note that the specified restartfile and datafile can have wild-card -characters ("*",%") as described by the -"read_restart"_read_restart.html and "write_data"_write_data.html -commands. But a filename such as file.* will need to be enclosed in -quotes to avoid shell expansion of the "*" character. - -Note that following restartfile, the optional flag {remap} can be -used. This has the same effect as adding it to the -"read_restart"_read_restart.html command, as explained on its doc -page. This is only useful if the reading of the restart file triggers -an error that atoms have been lost. In that case, use of the remap -flag should allow the data file to still be produced. - -Also note that following datafile, the same optional keyword/value -pairs can be listed as used by the "write_data"_write_data.html -command. - -:line - [-reorder] :link(reorder) This option has 2 forms: @@ -381,6 +354,77 @@ the LAMMPS simulation domain. :line +[-restart2data restartfile (remap) datafile keyword value ...] :link(restart2data) + +Convert the restart file into a data file and immediately exit. This +is the same operation as if the following 2-line input script were +run: + +read_restart restartfile (remap) +write_data datafile keyword value ... :pre + +Note that the specified restartfile and/or datafile can have the +wild-card character "*". The restartfile can also have the wild-card +character "%". The meaning of these characters is explained on the +"read_restart"_read_restart.html and "write_data"_write_data.html doc +pages. The use of "%" means that a parallel restart file can be read. +Note that a filename such as file.* will need to be enclosed in quotes +to avoid shell expansion of the "*" character. + +Note that following restartfile, the optional word "remap" can be +used. This has the effect of adding it to the +"read_restart"_read_restart.html command, as explained on its doc +page. This is useful if reading the restart file triggers an error +that atoms have been lost. In that case, use of the remap flag should +allow the data file to still be produced. + +The syntax following restartfile (or remap), namely + +datafile keyword value ... :pre + +is identical to the arguments of the "write_data"_write_data.html +command. See its doc page for details. This includes its +optional keyword/value settings. + +:line + +[-restart2dump restartfile {remap} group-ID dumpstyle dumpfile arg1 arg2 ...] :link(restart2dump) + +Convert the restart file into a dump file and immediately exit. This +is the same operation as if the following 2-line input script were +run: + +read_restart restartfile (remap) +write_dump group-ID dumpstyle dumpfile arg1 arg2 ... :pre + +Note that the specified restartfile and dumpfile can have wild-card +characters ("*","%") as explained on the +"read_restart"_read_restart.html and "write_dump"_write_dump.html doc +pages. The use of "%" means that a parallel restart file and/or +parallel dump file can be read and/or written. Note that a filename +such as file.* will need to be enclosed in quotes to avoid shell +expansion of the "*" character. + +Note that following restartfile, the optional word "remap" can be +used. This has the effect as adding it to the +"read_restart"_read_restart.html command, as explained on its doc +page. This is useful if reading the restart file triggers an error +that atoms have been lost. In that case, use of the remap flag should +allow the dump file to still be produced. + +The syntax following restartfile (or remap), namely + +group-ID dumpstyle dumpfile arg1 arg2 ... :pre + +is identical to the arguments of the "write_dump"_write_dump.html +command. See its doc page for details. This includes what per-atom +fields are written to the dump file and optional dump_modify settings, +including ones that affect how parallel dump files are written, e.g. +the {nfile} and {fileper} keywords. See the +"dump_modify"_dump_modify.html doc page for details. + +:line + [-screen file] :link(screen) Specify a file for LAMMPS to write its screen information to. In diff --git a/src/lammps.cpp b/src/lammps.cpp index 04d8daa478..c6d8b7c967 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -121,8 +121,9 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) int partscreenflag = 0; int partlogflag = 0; int kokkosflag = 0; - int restartflag = 0; - int restartremapflag = 0; + int restart2data = 0; + int restart2dump = 0; + int restartremap = 0; int citeflag = 1; int helpflag = 0; @@ -132,9 +133,8 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) else exename = NULL; packargs = NULL; num_package = 0; - char *rfile = NULL; - char *dfile = NULL; - int wdfirst,wdlast; + char *restartfile = NULL; + int wfirst,wlast; int kkfirst,kklast; int npack = 0; @@ -248,26 +248,49 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) universe->reorder(arg[iarg+1],arg[iarg+2]); iarg += 3; - } else if (strcmp(arg[iarg],"-restart") == 0 || - strcmp(arg[iarg],"-r") == 0) { + } else if (strcmp(arg[iarg],"-restart2data") == 0 || + strcmp(arg[iarg],"-r2data") == 0) { if (iarg+3 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - restartflag = 1; - rfile = arg[iarg+1]; - dfile = arg[iarg+2]; + if (restart2dump) + error->universe_all(FLERR, + "Cannot use both -restart2data and -restart2dump"); + restart2data = 1; + restartfile = arg[iarg+1]; // check for restart remap flag - if (strcmp(dfile,"remap") == 0) { + if (strcmp(arg[iarg+2],"remap") == 0) { if (iarg+4 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - restartremapflag = 1; - dfile = arg[iarg+3]; + restartremap = 1; iarg++; } - iarg += 3; - // delimit any extra args for the write_data command - wdfirst = iarg; + iarg += 2; + // delimit args for the write_data command + wfirst = iarg; while (iarg < narg && arg[iarg][0] != '-') iarg++; - wdlast = iarg; + wlast = iarg; + + } else if (strcmp(arg[iarg],"-restart2dump") == 0 || + strcmp(arg[iarg],"-r2dump") == 0) { + if (iarg+3 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + if (restart2data) + error->universe_all(FLERR, + "Cannot use both -restart2data and -restart2dump"); + restart2dump = 1; + restartfile = arg[iarg+1]; + // check for restart remap flag + if (strcmp(arg[iarg+2],"remap") == 0) { + if (iarg+4 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + restartremap = 1; + iarg++; + } + iarg += 2; + // delimit args for the write_dump command + wfirst = iarg; + while (iarg < narg && arg[iarg][0] != '-') iarg++; + wlast = iarg; } else if (strcmp(arg[iarg],"-screen") == 0 || strcmp(arg[iarg],"-sc") == 0) { @@ -547,6 +570,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) input = new Input(this,narg,arg); // copy package cmdline arguments + if (npack > 0) { num_package = npack; packargs = new char**[npack]; @@ -573,19 +597,21 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) error->done(0); } - // if restartflag set, invoke 2 commands and quit - // add args between wdfirst and wdlast to write_data command - // also add "noinit" to prevent write_data from doing system init + // if either restart conversion option was used, invoke 2 commands and quit + // add args between wfirst and wlast to write_data or write_data command + // add "noinit" to write_data to prevent a system init + // write_dump will just give a warning message about no init - if (restartflag) { - char cmd[128]; - snprintf(cmd,128,"read_restart %s\n",rfile); - if (restartremapflag) strcat(cmd," remap\n"); + if (restart2data || restart2dump) { + char cmd[256]; + snprintf(cmd,256,"read_restart %s\n",restartfile); + if (restartremap) strcat(cmd," remap\n"); input->one(cmd); - snprintf(cmd,128,"write_data %s",dfile); - for (iarg = wdfirst; iarg < wdlast; iarg++) + if (restart2data) snprintf(cmd,256,"write_data"); + else snprintf(cmd,256,"write_dump"); + for (iarg = wfirst; iarg < wlast; iarg++) sprintf(&cmd[strlen(cmd)]," %s",arg[iarg]); - strcat(cmd," noinit\n"); + if (restart2data) strcat(cmd," noinit\n"); input->one(cmd); error->done(0); }