From d6e8e044df455daf8ae147d10cc9bc439121384e Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 20 Jul 2022 09:55:19 -0600 Subject: [PATCH] change what is required/optional for mdi plugin command --- doc/src/fix_mdi_qm.rst | 15 ++++++++------- doc/src/mdi.rst | 22 +++++++++++----------- src/MDI/mdi_plugin.cpp | 14 +++++++++----- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/doc/src/fix_mdi_qm.rst b/doc/src/fix_mdi_qm.rst index ca47db5e7a..458099c17e 100644 --- a/doc/src/fix_mdi_qm.rst +++ b/doc/src/fix_mdi_qm.rst @@ -125,13 +125,14 @@ LAMMPS atom type corresponds to. This is specified by the atomic number of the element, e.g. 13 for Al. An atomic number must be specified for each of the ntypes LAMMPS atom types. Ntypes is typically specified via the create_box command or in the data file -read by the read_data command. If this keyword is not specified, then -this fix will send the LAMMPS atom type for each atom to the MDI -engine. If both the LAMMPS driver and the MDI engine are initialized -so that atom type values are consistent in both codes, then the -*elements* keyword is not needed. Otherwise the keyword can be used -to insure the two codes are consistent in their definition of atomic -species. +read by the read_data command. + +If this keyword is specified, then this fix will send the MDI +">ELEMENTS" command to the engine, to insure the two codes are +consistent in their definition of atomic species. If this keyword is +not specified, then this fix will send the MDI >TYPES command to the +engine. This is fine if both the LAMMPS driver and the MDI engine are +initialized so that the atom type values are consistent in both codes. ---------- diff --git a/doc/src/mdi.rst b/doc/src/mdi.rst index b5ee0098bd..d2b8ff185d 100644 --- a/doc/src/mdi.rst +++ b/doc/src/mdi.rst @@ -14,7 +14,7 @@ Syntax .. parsed-literal:: - *engine* args = zero or more keyword arg pairs + *engine* args = zero or more keyword/args pairs keywords = *elements* *elements* args = N_1 N_2 ... N_ntypes N_1,N_2,...N_ntypes = atomic number for each of ntypes LAMMPS atom types @@ -24,7 +24,7 @@ Syntax keywords = *mdi* or *infile* or *extra* or *command* *mdi* value = args passed to MDI for driver to operate with plugins (required) *infile* value = filename the engine will read at start-up (optional) - *extra* value = aditional command-line args to pass to engine library when loaded + *extra* value = aditional command-line args to pass to engine library when loaded (optional) *command* value = a LAMMPS input script command to execute (required) *connect* args = none *exit* args = none @@ -289,11 +289,11 @@ are required. The -name setting can be anything you choose. MDI drivers and engines can query their names to verify they are values they expect. -The *infile* keyword is also required. It is the name of an input -script which the engine will open and process. MDI will pass it as a +The *infile* keyword is optional. It sets the name of an input script +which the engine will open and process. MDI will pass it as a command-line argument to the library when it is launched. The file typically contains settings that an MD or QM code will use for its -subsequent calculations. +calculations. The *extra* keyword is optional. It contains additional command-line arguments which MDI will pass to the library when it is launched. @@ -309,12 +309,12 @@ could specify a filename with multiple LAMMPS commands. .. note:: - When the single *command* is complete, LAMMPS will send an MDI - EXIT command to the plugin engine and the plugin will be removed. - The "mdi plugin" command will then exit and the next command - (if any) in the LAMMPS input script will be processed. A subsequent - "mdi plugin" command could then load the same library plugin or - a different one if desired. + When the *command* is complete, LAMMPS will send an MDI EXIT + command to the plugin engine and the plugin will be removed. The + "mdi plugin" command will then exit and the next command (if any) + in the LAMMPS input script will be processed. A subsequent "mdi + plugin" command could then load the same or a different MDI + plugin if desired. ---------- diff --git a/src/MDI/mdi_plugin.cpp b/src/MDI/mdi_plugin.cpp index c2add38266..ad6241077e 100644 --- a/src/MDI/mdi_plugin.cpp +++ b/src/MDI/mdi_plugin.cpp @@ -74,18 +74,22 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp) // error checks - if (!mdi_arg || !infile_arg || !lammps_command) - error->all(FLERR, "MDI plugin must specify mdi, infile, command keywords"); + if (!mdi_arg || !lammps_command) + error->all(FLERR, "MDI plugin must specify mdi and command keywords"); // build full plugin_args string for args to plugin library - int n = strlen(mdi_arg) + strlen(infile_arg) + strlen(extra_arg) + 16; + int n = strlen(mdi_arg) + 16; + if (infile_arg) n += strlen(infile_arg); + if (extra_arg) n += strlen(extra_arg); auto plugin_args = new char[n]; plugin_args[0] = 0; strcat(plugin_args, "-mdi \""); strcat(plugin_args, mdi_arg); - strcat(plugin_args, "\" -in "); - strcat(plugin_args, infile_arg); + if (infile_arg) { + strcat(plugin_args, "\" -in "); + strcat(plugin_args, infile_arg); + } if (extra_arg) { strcat(plugin_args, " "); strcat(plugin_args, extra_arg);