From ef82677cb25c33c1bfae8198f296585ba5a09938 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 21 Oct 2015 18:51:09 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14129 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/input.cpp | 2 +- src/lammps.cpp | 46 ++++++++++++++++++++++++++++++++++++---------- src/lammps.h | 4 +++- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index b820607261..5b0c27e603 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -733,7 +733,7 @@ void Input::clear() if (narg > 0) error->all(FLERR,"Illegal clear command"); lmp->destroy(); lmp->create(); - lmp->post_create(0,NULL,NULL,NULL); + lmp->post_create(); } /* ---------------------------------------------------------------------- */ diff --git a/src/lammps.cpp b/src/lammps.cpp index 49e1311757..4014090aac 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -89,6 +89,8 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) suffix = suffix2 = NULL; suffix_enable = 0; + packargs = NULL; + num_package = 0; char *rfile = NULL; char *dfile = NULL; int wdfirst,wdlast; @@ -509,12 +511,25 @@ 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]; + for (int i=0; i < npack; ++i) { + int n = plast[i] - pfirst[i]; + packargs[i] = new char*[n+1]; + for (int j=0; j < n; ++j) + packargs[i][j] = strdup(arg[pfirst[i]+j]); + packargs[i][n] = NULL; + } + memory->destroy(pfirst); + memory->destroy(plast); + } + // allocate top-level classes create(); - post_create(npack,pfirst,plast,arg); - memory->destroy(pfirst); - memory->destroy(plast); + post_create(); // if helpflag set, print help and quit with "success" status @@ -556,6 +571,17 @@ LAMMPS::~LAMMPS() destroy(); delete citeme; + if (num_package) { + for (int i = 0; i < num_package; i++) { + for (char **ptr = packargs[i]; *ptr != NULL; ++ptr) + free(*ptr); + delete[] packargs[i]; + } + delete[] packargs; + } + num_package = 0; + packargs = NULL; + double totalclock = MPI_Wtime() - initclock; if ((me == 0) && (screen || logfile)) { char outtime[128]; @@ -650,7 +676,7 @@ void LAMMPS::create() so that package-specific core classes have been instantiated ------------------------------------------------------------------------- */ -void LAMMPS::post_create(int npack, int *pfirst, int *plast, char **arg) +void LAMMPS::post_create() { // default package commands triggered by "-c on" and "-k on" @@ -687,15 +713,15 @@ void LAMMPS::post_create(int npack, int *pfirst, int *plast, char **arg) // invoke any command-line package commands - if (npack) { - char str[128]; - for (int i = 0; i < npack; i++) { + if (num_package) { + char str[256]; + for (int i = 0; i < num_package; i++) { strcpy(str,"package"); - for (int j = pfirst[i]; j < plast[i]; j++) { - if (strlen(str) + strlen(arg[j]) + 2 > 128) + for (char **ptr = packargs[i]; *ptr != NULL; ++ptr) { + if (strlen(str) + strlen(*ptr) + 2 > 256) error->all(FLERR,"Too many -pk arguments in command line"); strcat(str," "); - strcat(str,arg[j]); + strcat(str,*ptr); } input->one(str); } diff --git a/src/lammps.h b/src/lammps.h index 51fd2614b1..53848b1010 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -46,6 +46,8 @@ class LAMMPS { char *suffix,*suffix2; // suffixes to add to input script style names int suffix_enable; // 1 if suffixes are enabled, 0 if disabled + char ***packargs; // arguments for cmdline package commands + int num_package; // number of cmdline package commands int cite_enable; // 1 if generating log.cite, 0 if disabled class Cuda *cuda; // CUDA accelerator class @@ -57,7 +59,7 @@ class LAMMPS { LAMMPS(int, char **, MPI_Comm); ~LAMMPS(); void create(); - void post_create(int, int *, int *, char **); + void post_create(); void init(); void destroy();