From aafdac1917f007ef9d501583bd307b3616ba7cc6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Mar 2025 21:06:23 -0400 Subject: [PATCH 01/33] update intros to three pages with errors and warnings and cross-reference them --- doc/src/Errors_details.rst | 19 +++++++++++-------- doc/src/Errors_messages.rst | 16 ++++++++++------ doc/src/Errors_warnings.rst | 16 ++++++++++------ 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index 5aa24d74c8..d0e6233fb2 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -1,12 +1,15 @@ -Error and warning details -========================= +Errors and warnings details +=========================== -Many errors or warnings are self-explanatory and thus straightforward to -resolve. However, there are also cases, where there is no single cause -and explanation, where LAMMPS can only detect symptoms of an error but -not the exact cause, or where the explanation needs to be more detailed -than what can be fit into a message printed by the program. The -following are discussions of such cases. +Many errors and warnings that LAMMPS outputs are self-explanatory and +thus straightforward to resolve. However, there are also cases, where +there is no single cause and explanation. LAMMPS can only detect +symptoms of an error but not name the exact cause, or the explanation +needs to be more detailed than what can be fit into a short message +printed by the program. The following are discussions of such cases; +first on a more general level and then for specific cases. In the +latter cases, LAMMPS will output a short message and then provide +a URL that links to a specific section on this page. .. contents:: diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index bfc395067a..d8102eee25 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -1,11 +1,15 @@ Error messages ============== -This is an alphabetic list of the ERROR messages LAMMPS prints out and -the reason why. If the explanation here is not sufficient, the -documentation for the offending command may help. Error messages also -list the source file and line number where the error was generated. -For example, a message like this: +This is an alphabetic list of some of the ERROR messages LAMMPS prints +out and the reason why. If the explanation here is not sufficient, the +documentation for the offending command may help. This is a historic +list and no longer updated. Instead the LAMMPS developers are trying +to provide more details right with the error message or link to a +paragraph with :doc:`detailed explanations `. + +Error messages also list the source file and line number where the error +was generated. For example, a message like this: .. parsed-literal:: @@ -14,7 +18,7 @@ For example, a message like this: means that line #78 in the file src/velocity.cpp generated the error. Looking in the source code may help you figure out what went wrong. -Doc page with :doc:`WARNING messages ` +Please also see the page with :doc:`Warning messages `. ---------- diff --git a/doc/src/Errors_warnings.rst b/doc/src/Errors_warnings.rst index 25aa87f162..3e4aab74d1 100644 --- a/doc/src/Errors_warnings.rst +++ b/doc/src/Errors_warnings.rst @@ -1,11 +1,15 @@ Warning messages ================ -This is an alphabetic list of the WARNING messages LAMMPS prints out -and the reason why. If the explanation here is not sufficient, the -documentation for the offending command may help. Warning messages -also list the source file and line number where the warning was -generated. For example, a message like this: +This is an alphabetic list of some of the WARNING messages LAMMPS prints +out and the reason why. If the explanation here is not sufficient, the +documentation for the offending command may help. This is a historic +list and no longer updated. Instead the LAMMPS developers are trying +to provide more details right with the error message or link to a +paragraph with :doc:`detailed explanations `. + +Warning messages also list the source file and line number where the +warning was generated. For example, a message like this: .. parsed-literal:: @@ -14,7 +18,7 @@ generated. For example, a message like this: means that line #187 in the file src/domain.cpp generated the error. Looking in the source code may help you figure out what went wrong. -Doc page with :doc:`ERROR messages ` +Please also see the page with :doc:`Error messages ` ---------- From ee930935f5d78f4a0a69b60b83ac2a2f9a08f0c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Mar 2025 21:07:43 -0400 Subject: [PATCH 02/33] remove "self-explanatory" explanations. --- doc/src/Errors_messages.rst | 3195 ----------------------------------- doc/src/Errors_warnings.rst | 134 +- 2 files changed, 1 insertion(+), 3328 deletions(-) diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index d8102eee25..14836cebb6 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -41,15 +41,6 @@ Please also see the page with :doc:`Warning messages `. All angle coefficients must be set in the data file or by the angle_coeff command before running a simulation. -*All atom IDs = 0 but atom_modify id = yes* - Self-explanatory. - -*All atoms of a swapped type must have same charge.* - Self-explanatory. - -*All atoms of a swapped type must have the same charge.* - Self-explanatory. - *All bond coeffs are not set* All bond coefficients must be set in the data file or by the bond_coeff command before running a simulation. @@ -83,12 +74,6 @@ Please also see the page with :doc:`Warning messages `. the x,y,z fields, else LAMMPS cannot reconstruct the unscaled coordinates. -*All universe/uloop variables must have same # of values* - Self-explanatory. - -*All variables in next command must be same style* - Self-explanatory. - *Angle atom missing in delete_bonds* The delete_bonds command cannot find one or more atoms in a particular angle on a particular processor. The pairwise cutoff is too short or @@ -128,18 +113,6 @@ Please also see the page with :doc:`Warning messages `. *Angle potential must be defined for SHAKE* When shaking angles, an angle_style potential must be used. -*Angle style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Angle style hybrid cannot have none as an argument* - Self-explanatory. - -*Angle style hybrid cannot use same angle style twice* - Self-explanatory. - -*Angle table must range from 0 to 180 degrees* - Self-explanatory. - *Angle table parameters did not set N* List of angle table parameters must include N setting. @@ -175,27 +148,6 @@ Please also see the page with :doc:`Warning messages `. *Arcsin of invalid value in variable formula* Argument of arcsin() must be between -1 and 1. -*Assigning body parameters to non-body atom* - Self-explanatory. - -*Assigning ellipsoid parameters to non-ellipsoid atom* - Self-explanatory. - -*Assigning line parameters to non-line atom* - Self-explanatory. - -*Assigning quat to non-body atom* - Self-explanatory. - -*Assigning tri parameters to non-tri atom* - Self-explanatory. - -*At least one atom of each swapped type must be present to define charges.* - Self-explanatory. - -*Atom IDs must be consecutive for velocity create loop all* - Self-explanatory. - *Atom IDs must be used for molecular systems* Atom IDs are used to identify and find partner atoms in bonds. @@ -219,21 +171,12 @@ Please also see the page with :doc:`Warning messages `. This is an internal LAMMPS error. Please report it to the developers. -*Atom style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Atom style hybrid cannot use same atom style twice* - Self-explanatory. - *Atom style template molecule must have atom types* The defined molecule(s) does not specify atom types. *Atom style was redefined after using fix property/atom* This is not allowed. -*Atom type must be zero in fix gcmc mol command* - Self-explanatory. - *Atom vector in equal-style variable formula* Atom vectors generate one value per atom which is not allowed in an equal-style variable. @@ -250,28 +193,13 @@ Please also see the page with :doc:`Warning messages `. The atom_modify map command cannot be used after a read_data, read_restart, or create_box command. -*Atom_modify sort and first options cannot be used together* - Self-explanatory. - *Atom_style command after simulation box is defined* The atom_style command cannot be used after a read_data, read_restart, or create_box command. -*Atom_style line can only be used in 2d simulations* - Self-explanatory. - -*Atom_style tri can only be used in 3d simulations* - Self-explanatory. - *Atomfile variable could not read values* Check the file assigned to the variable. -*Atomfile variable in equal-style variable formula* - Self-explanatory. - -*Atomfile-style variable in equal-style variable formula* - Self-explanatory. - *Attempt to pop empty stack in fix box/relax* Internal LAMMPS error. Please report it to the developers. @@ -281,9 +209,6 @@ Please also see the page with :doc:`Warning messages `. *Attempting to rescale a 0.0 temperature* Cannot rescale a temperature that is already 0.0. -*Attempting to insert more particles than available lattice points* - Self-explanatory. - *Bad FENE bond* Two atoms in a FENE bond have become so far apart that the bond cannot be computed. @@ -427,15 +352,6 @@ Please also see the page with :doc:`Warning messages `. *Bond potential must be defined for SHAKE* Cannot use fix shake unless bond potential is defined. -*Bond style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Bond style hybrid cannot have none as an argument* - Self-explanatory. - -*Bond style hybrid cannot use same bond style twice* - Self-explanatory. - *Bond style quartic cannot be used with 3,4-body interactions* No angle, dihedral, or improper styles can be defined when using bond style quartic. @@ -480,12 +396,6 @@ Please also see the page with :doc:`Warning messages `. *Bonds defined but no bond types* The data file header lists bonds but no bond types. -*Both restart files must use % or neither* - Self-explanatory. - -*Both restart files must use MPI-IO or neither* - Self-explanatory. - *Both sides of boundary must be periodic* Cannot specify a boundary as periodic only on the lo or hi side. Must be periodic on both sides. @@ -514,21 +424,6 @@ Please also see the page with :doc:`Warning messages `. Only triclinic boxes can be used with off-diagonal pressure components. See the region prism command for details. -*Can only use -plog with multiple partitions* - Self-explanatory. See page discussion of command-line switches. - -*Can only use -pscreen with multiple partitions* - Self-explanatory. See page discussion of command-line switches. - -*Can only use Kokkos supported regions with Kokkos package* - Self-explanatory. - -*Can only use NEB with 1-processor replicas* - This is current restriction for NEB as implemented in LAMMPS. - -*Can only use TAD with 1-processor replicas for NEB* - This is current restriction for NEB as implemented in LAMMPS. - *Cannot (yet) do analytic differentiation with pppm/gpu* This is a current restriction of this command. @@ -565,18 +460,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot (yet) use kspace_style pppm/stagger with triclinic systems* This feature is not yet supported. -*Cannot (yet) use molecular templates with Kokkos* - Self-explanatory. - -*Cannot (yet) use respa with Kokkos* - Self-explanatory. - -*Cannot (yet) use rigid bodies with fix deform and Kokkos* - Self-explanatory. - -*Cannot (yet) use rigid bodies with fix nh and Kokkos* - Self-explanatory. - *Cannot (yet) use single precision with MSM (remove -DFFT_SINGLE from Makefile and re-compile)* Single precision cannot be used with MSM. @@ -587,9 +470,6 @@ Please also see the page with :doc:`Warning messages `. The simulation box must be defined with edges aligned with the Cartesian axes. -*Cannot balance in z dimension for 2d simulation* - Self-explanatory. - *Cannot change box ortho/triclinic with certain fixes defined* This is because those fixes store the shape of the box. You need to use unfix to discard the fix, change the box, then redefine a new @@ -603,12 +483,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot change box tilt factors for orthogonal box* Cannot use tilt factors unless the simulation box is non-orthogonal. -*Cannot change box to orthogonal when tilt is non-zero* - Self-explanatory. - -*Cannot change box z boundary to non-periodic for a 2d simulation* - Self-explanatory. - *Cannot change dump_modify every for dump dcd* The frequency of writing dump dcd snapshots cannot be changed. @@ -623,20 +497,11 @@ Please also see the page with :doc:`Warning messages `. This is because fix pour pre-computes the time delay for particles to fall out of the insertion volume due to gravity. -*Cannot change to comm_style brick from tiled layout* - Self-explanatory. - *Cannot change_box after reading restart file with per-atom info* This is because the restart file info cannot be migrated with the atoms. You can get around this by performing a 0-timestep run which will assign the restart file info to actual atoms. -*Cannot change_box in xz or yz for 2d simulation* - Self-explanatory. - -*Cannot change_box in z dimension for 2d simulation* - Self-explanatory. - *Cannot clear group all* This operation is not allowed. @@ -672,27 +537,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot currently use pair reax with pair hybrid* This is not yet supported. -*Cannot currently use pppm/gpu with fix balance.* - Self-explanatory. - -*Cannot delete group all* - Self-explanatory. - -*Cannot delete group currently used by a compute* - Self-explanatory. - -*Cannot delete group currently used by a dump* - Self-explanatory. - -*Cannot delete group currently used by a fix* - Self-explanatory. - -*Cannot delete group currently used by atom_modify first* - Self-explanatory. - -*Cannot delete_atoms bond yes for non-molecular systems* - Self-explanatory. - *Cannot displace_atoms after reading restart file with per-atom info* This is because the restart file info cannot be migrated with the atoms. You can get around this by performing a 0-timestep run which @@ -706,9 +550,6 @@ Please also see the page with :doc:`Warning messages `. This is a restriction due to the way atoms are organized in a list to enable the atom_modify first command. -*Cannot dump sort on atom IDs with no atom IDs defined* - Self-explanatory. - *Cannot dump sort when multiple dump files are written* In this mode, each processor dumps its atoms to a file, so no sorting is allowed. @@ -721,30 +562,15 @@ Please also see the page with :doc:`Warning messages `. This is a restriction due to the way atoms are organized in a list to enable the atom_modify first command. -*Cannot find create_bonds group ID* - Self-explanatory. - *Cannot find delete_bonds group ID* Group ID used in the delete_bonds command does not exist. -*Cannot find specified group ID for core particles* - Self-explanatory. - -*Cannot find specified group ID for shell particles* - Self-explanatory. - *Cannot have both pair_modify shift and tail set to yes* These 2 options are contradictory. *Cannot intersect groups using a dynamic group* This operation is not allowed. -*Cannot mix molecular and molecule template atom styles* - Self-explanatory. - -*Cannot open -reorder file* - Self-explanatory. - *Cannot open ADP potential file %s* The specified ADP potential file cannot be opened. Check that the path and name are correct. @@ -805,16 +631,10 @@ Please also see the page with :doc:`Warning messages `. The specified Vashishta potential file cannot be opened. Check that the path and name are correct. -*Cannot open balance output file* - Self-explanatory. - *Cannot open coul/streitz potential file %s* The specified coul/streitz potential file cannot be opened. Check that the path and name are correct. -*Cannot open custom file* - Self-explanatory. - *Cannot open data file %s* The specified file cannot be opened. Check that the path and name are correct. @@ -823,9 +643,6 @@ Please also see the page with :doc:`Warning messages `. Using a "\*" in the name of the restart file will open the current directory to search for matching file names. -*Cannot open dump file* - Self-explanatory. - *Cannot open dump file %s* The output file for the dump command cannot be opened. Check that the path and name are correct. @@ -855,9 +672,6 @@ Please also see the page with :doc:`Warning messages `. The specified file cannot be opened. Check that the path and name are correct. -*Cannot open fix balance output file* - Self-explanatory. - *Cannot open fix poems file %s* The specified file cannot be opened. Check that the path and name are correct. @@ -901,9 +715,6 @@ Please also see the page with :doc:`Warning messages `. LAMMPS was compiled without support for reading and writing gzipped files through a pipeline to the gzip program with -DLAMMPS_GZIP. -*Cannot open input script %s* - Self-explanatory. - *Cannot open log.cite file* This file is created when you use some LAMMPS features, to indicate what paper you should cite on behalf of those who implemented @@ -938,15 +749,6 @@ Please also see the page with :doc:`Warning messages `. The specified polymorphic potential file cannot be opened. Check that the path and name are correct. -*Cannot open print file %s* - Self-explanatory. - -*Cannot open processors output file* - Self-explanatory. - -*Cannot open restart file %s* - Self-explanatory. - *Cannot open restart file for reading - MPI error: %s* This error was generated by MPI when reading/writing an MPI-IO restart file. @@ -960,9 +762,6 @@ Please also see the page with :doc:`Warning messages `. opened. Check that the directory you are running in allows for files to be created. -*Cannot open temporary file for world counter.* - Self-explanatory. - *Cannot open universe log file* For a multi-partition run, the master log file cannot be opened. Check that the directory you are running in allows for files to be @@ -977,9 +776,6 @@ Please also see the page with :doc:`Warning messages `. This error was generated by MPI when reading/writing an MPI-IO restart file. -*Cannot read_data without add keyword after simulation box is defined* - Self-explanatory. - *Cannot read_restart after simulation box is defined* The read_restart command cannot be used after a read_data, read_restart, or create_box command. @@ -1021,40 +817,10 @@ Please also see the page with :doc:`Warning messages `. all together (pair), or in pieces (inner/middle/outer). You can't do both. -*Cannot set cutoff/multi before simulation box is defined* - Self-explanatory. - -*Cannot set dpd/theta for this atom style* - Self-explanatory. - -*Cannot set dump_modify flush for dump xtc* - Self-explanatory. - *Cannot set mass for this atom style* This atom style does not support mass settings for each atom type. Instead they are defined on a per-atom basis in the data file. -*Cannot set meso/cv for this atom style* - Self-explanatory. - -*Cannot set meso/e for this atom style* - Self-explanatory. - -*Cannot set meso/rho for this atom style* - Self-explanatory. - -*Cannot set non-zero image flag for non-periodic dimension* - Self-explanatory. - -*Cannot set non-zero z velocity for 2d simulation* - Self-explanatory. - -*Cannot set quaternion for atom that has none* - Self-explanatory. - -*Cannot set quaternion with xy components for 2d system* - Self-explanatory. - *Cannot set respa hybrid and any of pair/inner/middle/outer* In the rRESPA integrator, you must compute pairwise potentials either all together (pair), with different cutoff regions (inner/middle/outer), @@ -1068,39 +834,18 @@ Please also see the page with :doc:`Warning messages `. This error was generated by MPI when reading/writing an MPI-IO restart file. -*Cannot set smd/contact/radius for this atom style* - Self-explanatory. - -*Cannot set smd/mass/density for this atom style* - Self-explanatory. - *Cannot set temperature for fix rigid/nph* The temp keyword cannot be specified. -*Cannot set theta for atom that is not a line* - Self-explanatory. - *Cannot set this attribute for this atom style* The attribute being set does not exist for the defined atom style. -*Cannot set variable z velocity for 2d simulation* - Self-explanatory. - -*Cannot skew triclinic box in z for 2d simulation* - Self-explanatory. - *Cannot subtract groups using a dynamic group* This operation is not allowed. *Cannot union groups using a dynamic group* This operation is not allowed. -*Cannot use -kokkos on without KOKKOS installed* - Self-explanatory. - -*Cannot use -reorder after -partition* - Self-explanatory. See page discussion of command-line switches. - *Cannot use Ewald with 2d simulation* The kspace style ewald cannot be used in 2d simulations. You can use 2d Ewald in a 3d simulation; see the kspace_modify command. @@ -1113,15 +858,9 @@ Please also see the page with :doc:`Warning messages `. *Cannot use EwaldDisp with 2d simulation* This is a current restriction of this command. -*Cannot use Kokkos pair style with rRESPA inner/middle* - Self-explanatory. - *Cannot use NEB unless atom map exists* Use the atom_modify command to create an atom map. -*Cannot use NEB with a single replica* - Self-explanatory. - *Cannot use NEB with atom_modify sort enabled* This is current restriction for NEB implemented in LAMMPS. @@ -1170,109 +909,40 @@ Please also see the page with :doc:`Warning messages `. The boundary style of the face where atoms are added can not be of type p (periodic). -*Cannot use atomfile-style variable unless atom map exists* - Self-explanatory. See the atom_modify command to create a map. - -*Cannot use both com and bias with compute temp/chunk* - Self-explanatory. - -*Cannot use chosen neighbor list style with buck/coul/cut/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with buck/coul/long/kk* - Self-explanatory. - *Cannot use chosen neighbor list style with buck/kk* That style is not supported by Kokkos. *Cannot use chosen neighbor list style with coul/cut/kk* That style is not supported by Kokkos. -*Cannot use chosen neighbor list style with coul/debye/kk* - Self-explanatory. - *Cannot use chosen neighbor list style with coul/dsf/kk* That style is not supported by Kokkos. *Cannot use chosen neighbor list style with coul/wolf/kk* That style is not supported by Kokkos. -*Cannot use chosen neighbor list style with lj/charmm/coul/charmm/implicit/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/charmm/coul/charmm/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/charmm/coul/long/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/class2/coul/cut/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/class2/coul/long/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/class2/kk* - Self-explanatory. - *Cannot use chosen neighbor list style with lj/cut/coul/cut/kk* That style is not supported by Kokkos. -*Cannot use chosen neighbor list style with lj/cut/coul/debye/kk* - Self-explanatory. - *Cannot use chosen neighbor list style with lj/cut/coul/long/kk* That style is not supported by Kokkos. *Cannot use chosen neighbor list style with lj/cut/kk* That style is not supported by Kokkos. -*Cannot use chosen neighbor list style with lj/expand/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/gromacs/coul/gromacs/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with lj/gromacs/kk* - Self-explanatory. - *Cannot use chosen neighbor list style with lj/spica/kk* That style is not supported by Kokkos. *Cannot use chosen neighbor list style with pair eam/kk* That style is not supported by Kokkos. -*Cannot use chosen neighbor list style with pair eam/kk/alloy* - Self-explanatory. - -*Cannot use chosen neighbor list style with pair eam/kk/fs* - Self-explanatory. - -*Cannot use chosen neighbor list style with pair sw/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with tersoff/kk* - Self-explanatory. - -*Cannot use chosen neighbor list style with tersoff/zbl/kk* - Self-explanatory. - -*Cannot use compute chunk/atom bin z for 2d model* - Self-explanatory. - *Cannot use compute cluster/atom unless atoms have IDs* Atom IDs are used to identify clusters. -*Cannot use create_atoms rotate unless single style* - Self-explanatory. - *Cannot use create_bonds unless atoms have IDs* This command requires a mapping from global atom IDs to local atoms, but the atoms that have been defined have no IDs. -*Cannot use create_bonds with non-molecular system* - Self-explanatory. - *Cannot use cwiggle in variable formula between runs* This is a function of elapsed time. @@ -1287,12 +957,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot use delete_bonds with non-molecular system* Your choice of atom style does not have bonds. -*Cannot use dump_modify fileper without % in dump file name* - Self-explanatory. - -*Cannot use dump_modify nfile without % in dump file name* - Self-explanatory. - *Cannot use dynamic group with fix adapt atom* This is not yet supported. @@ -1344,28 +1008,13 @@ Please also see the page with :doc:`Warning messages `. *Cannot use fix deform trate on a box with zero tilt* The trate style alters the current strain. -*Cannot use fix deposit rigid and not molecule* - Self-explanatory. - *Cannot use fix deposit rigid and shake* These two attributes are conflicting. -*Cannot use fix deposit shake and not molecule* - Self-explanatory. - -*Cannot use fix enforce2d with 3d simulation* - Self-explanatory. - *Cannot use fix gcmc in a 2d simulation* Fix gcmc is set up to run in 3d only. No 2d simulations with fix gcmc are allowed. -*Cannot use fix gcmc shake and not molecule* - Self-explanatory. - -*Cannot use fix msst without per-type mass defined* - Self-explanatory. - *Cannot use fix npt and fix deform on same component of stress tensor* This would be changing the same box dimension twice. @@ -1378,15 +1027,6 @@ Please also see the page with :doc:`Warning messages `. When specifying a diagonal pressure component, the dimension must be periodic. -*Cannot use fix nvt/npt/nph with both xy dynamics and xy scaling* - Self-explanatory. - -*Cannot use fix nvt/npt/nph with both xz dynamics and xz scaling* - Self-explanatory. - -*Cannot use fix nvt/npt/nph with both yz dynamics and yz scaling* - Self-explanatory. - *Cannot use fix nvt/npt/nph with xy scaling when y is non-periodic dimension* The second dimension in the barostatted tilt factor must be periodic. @@ -1396,15 +1036,9 @@ Please also see the page with :doc:`Warning messages `. *Cannot use fix nvt/npt/nph with yz scaling when z is non-periodic dimension* The second dimension in the barostatted tilt factor must be periodic. -*Cannot use fix pour rigid and not molecule* - Self-explanatory. - *Cannot use fix pour rigid and shake* These two attributes are conflicting. -*Cannot use fix pour shake and not molecule* - Self-explanatory. - *Cannot use fix pour with triclinic box* This option is not yet supported. @@ -1412,15 +1046,6 @@ Please also see the page with :doc:`Warning messages `. These commands both change the box size/shape, so you cannot use both together. -*Cannot use fix press/berendsen on a non-periodic dimension* - Self-explanatory. - -*Cannot use fix press/berendsen with triclinic box* - Self-explanatory. - -*Cannot use fix reax/bonds without pair_style reax* - Self-explanatory. - *Cannot use fix rigid npt/nph and fix deform on same component of stress tensor* This would be changing the same box dimension twice. @@ -1441,61 +1066,16 @@ Please also see the page with :doc:`Warning messages `. *Cannot use fix ttm with triclinic box* This is a current restriction of this fix due to the grid it creates. -*Cannot use fix tune/kspace without a kspace style* - Self-explanatory. - *Cannot use fix tune/kspace without a pair style* This fix (tune/kspace) can only be used when a pair style has been specified. -*Cannot use fix wall in periodic dimension* - Self-explanatory. - -*Cannot use fix wall zlo/zhi for a 2d simulation* - Self-explanatory. - -*Cannot use fix wall/reflect in periodic dimension* - Self-explanatory. - -*Cannot use fix wall/reflect zlo/zhi for a 2d simulation* - Self-explanatory. - -*Cannot use fix wall/srd in periodic dimension* - Self-explanatory. - *Cannot use fix wall/srd more than once* Nor is their a need to since multiple walls can be specified in one command. -*Cannot use fix wall/srd without fix srd* - Self-explanatory. - -*Cannot use fix wall/srd zlo/zhi for a 2d simulation* - Self-explanatory. - -*Cannot use fix_deposit unless atoms have IDs* - Self-explanatory. - -*Cannot use fix_pour unless atoms have IDs* - Self-explanatory. - -*Cannot use include command within an if command* - Self-explanatory. - *Cannot use lines with fix srd unless overlap is set* This is because line segments are connected to each other. -*Cannot use multiple fix wall commands with pair brownian* - Self-explanatory. - -*Cannot use multiple fix wall commands with pair lubricate* - Self-explanatory. - -*Cannot use multiple fix wall commands with pair lubricate/poly* - Self-explanatory. - -*Cannot use multiple fix wall commands with pair lubricateU* - Self-explanatory. - *Cannot use neigh_modify exclude with GPU neighbor builds* This is a current limitation of the GPU implementation in LAMMPS. @@ -1505,138 +1085,6 @@ Please also see the page with :doc:`Warning messages `. the simulation box is very small in some dimension, compared to the neighbor cutoff. Use the "nsq" style instead of "bin" style. -*Cannot use newton pair with beck/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with born/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with born/coul/wolf/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with born/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with buck/coul/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with buck/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with buck/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with colloid/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with coul/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with coul/debye/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with coul/dsf/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with dipole/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with dipole/sf/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with dpd/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with dpd/tstat/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with eam/alloy/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with eam/fs/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with eam/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with gauss/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with gayberne/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/charmm/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/class2/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/class2/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cubic/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/coul/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/coul/debye/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/coul/dsf/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/coul/msm/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/expand/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/gromacs/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/spica/coul/long/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj/spica/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with lj96/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with mie/cut/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with morse/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with resquared/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with soft/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with table/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with yukawa/colloid/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with yukawa/gpu pair style* - Self-explanatory. - -*Cannot use newton pair with zbl/gpu pair style* - Self-explanatory. - *Cannot use non-zero forces in an energy minimization* Fix setforce cannot be used in this manner. Use fix addforce instead. @@ -1664,9 +1112,6 @@ Please also see the page with :doc:`Warning messages `. boundaries unless you use the kspace_modify command to define a 2d slab with a non-periodic z dimension. -*Cannot use order greater than 8 with pppm/gpu.* - Self-explanatory. - *Cannot use package gpu neigh yes with triclinic box* This is a current restriction in LAMMPS. @@ -1679,18 +1124,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot use ramp in variable formula between runs* This is because the ramp() function is time dependent. -*Cannot use read_data add before simulation box is defined* - Self-explanatory. - -*Cannot use read_data extra with add flag* - Self-explanatory. - -*Cannot use read_data offset without add flag* - Self-explanatory. - -*Cannot use read_data shift without add flag* - Self-explanatory. - *Cannot use region INF or EDGE when box does not exist* Regions that extend to the box boundaries can only be used after the create_box command has been used. @@ -1698,18 +1131,12 @@ Please also see the page with :doc:`Warning messages `. *Cannot use set atom with no atom IDs defined* Atom IDs are not defined, so they cannot be used to identify an atom. -*Cannot use set mol with no molecule IDs defined* - Self-explanatory. - *Cannot use swiggle in variable formula between runs* This is a function of elapsed time. *Cannot use tris with fix srd unless overlap is set* This is because triangles are connected to each other. -*Cannot use variable energy with constant efield in fix efield* - LAMMPS computes the energy itself when the E-field is constant. - *Cannot use variable energy with constant force in fix addforce* This is because for constant force, LAMMPS can compute the change in energy directly. @@ -1724,22 +1151,10 @@ Please also see the page with :doc:`Warning messages `. *Cannot use vdisplace in variable formula between runs* This is a function of elapsed time. -*Cannot use velocity bias command without temp keyword* - Self-explanatory. - *Cannot use velocity create loop all unless atoms have IDs* Atoms in the simulation to do not have IDs, so this style of velocity creation cannot be performed. -*Cannot use wall in periodic dimension* - Self-explanatory. - -*Cannot use write_restart fileper without % in restart file name* - Self-explanatory. - -*Cannot use write_restart nfile without % in restart file name* - Self-explanatory. - *Cannot wiggle and shear fix wall/gran* Cannot specify both options at the same time. @@ -1750,12 +1165,6 @@ Please also see the page with :doc:`Warning messages `. *Cannot yet use KSpace solver with grid with comm style tiled* This is current restriction in LAMMPS. -*Cannot yet use comm_style tiled with multi-mode comm* - Self-explanatory. - -*Cannot yet use comm_style tiled with triclinic box* - Self-explanatory. - *Cannot yet use compute tally with Kokkos* This feature is not yet supported. @@ -1778,50 +1187,11 @@ Please also see the page with :doc:`Warning messages `. *Cannot zero gld force for zero atoms* There are no atoms currently in the group. -*Cannot zero momentum of no atoms* - Self-explanatory. - -*Change_box command before simulation box is defined* - Self-explanatory. - *Change_box volume used incorrectly* The "dim volume" option must be used immediately following one or two settings for "dim1 ..." (and optionally "dim2 ...") and must be for a different dimension, i.e. dim != dim1 and dim != dim2. -*Chunk/atom compute does not exist for compute angmom/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute com/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute gyration/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute inertia/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute msd/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute omega/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute property/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute temp/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute torque/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for compute vcm/chunk* - Self-explanatory. - -*Chunk/atom compute does not exist for fix ave/chunk* - Self-explanatory. - *Comm tiled invalid index in box drop brick* Internal error check in comm_style tiled which should not occur. Contact the developers. @@ -1830,12 +1200,6 @@ Please also see the page with :doc:`Warning messages `. Internal error check in comm_style tiled which should not occur. Contact the developers. -*Comm_modify group != atom_modify first group* - Self-explanatory. - -*Communication cutoff for comm_style tiled cannot exceed periodic box length* - Self-explanatory. - *Communication cutoff too small for SNAP micro load balancing* This can happen if you change the neighbor skin after your pair_style command or if your box dimensions grow during a run. You can set the @@ -1844,69 +1208,12 @@ Please also see the page with :doc:`Warning messages `. *Compute %s does not allow use of dynamic group* Dynamic groups have not yet been enabled for this compute. -*Compute for fix pafi does not calculate a local array* - Self-explanatory. - -*Compute for fix pafi must have 9 fields per atom* - Self-explanatory. - -*Compute ID for compute chunk /atom does not exist* - Self-explanatory. - -*Compute ID for compute chunk/atom does not exist* - Self-explanatory. - -*Compute gyration ID does not exist for compute gyration/shape* - Self-explanatory. Provide a valid compute ID. - -*Compute gyration/shape compute ID does not point to a gyration compute* - Self-explanatory. Provide and ID of a compute gyration command. - -*Compute ID for compute reduce does not exist* - Self-explanatory. - -*Compute ID for compute slice does not exist* - Self-explanatory. - -*Compute ID for fix ave/atom does not exist* - Self-explanatory. - -*Compute ID for fix ave/chunk does not exist* - Self-explanatory. - -*Compute ID for fix ave/correlate does not exist* - Self-explanatory. - -*Compute ID for fix ave/histo does not exist* - Self-explanatory. - -*Compute ID for fix ave/time does not exist* - Self-explanatory. - -*Compute ID for fix numdiff does not exist* - Self-explanatory. - -*Compute ID for fix numdiff/virial does not exist* - Self-explanatory. - -*Compute ID for fix store/state does not exist* - Self-explanatory. - -*Compute ID for fix vector does not exist* - Self-explanatory. - -*Compute ID must be alphanumeric or underscore characters* - Self-explanatory. - *Compute angle/local used when angles are not allowed* The atom style does not support angles. *Compute angmom/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. -*Compute body/local requires atom style body* - Self-explanatory. - *Compute bond/local used when bonds are not allowed* The atom style does not support bonds. @@ -1923,43 +1230,13 @@ Please also see the page with :doc:`Warning messages `. *Compute chunk/atom compute array is accessed out-of-range* The index for the array is out of bounds. -*Compute chunk/atom compute does not calculate a per-atom array* - Self-explanatory. - -*Compute chunk/atom compute does not calculate a per-atom vector* - Self-explanatory. - -*Compute chunk/atom compute does not calculate per-atom values* - Self-explanatory. - -*Compute chunk/atom cylinder axis must be z for 2d* - Self-explanatory. - *Compute chunk/atom fix array is accessed out-of-range* The index for the array is out of bounds. -*Compute chunk/atom fix does not calculate a per-atom array* - Self-explanatory. - -*Compute chunk/atom fix does not calculate a per-atom vector* - Self-explanatory. - -*Compute chunk/atom fix does not calculate per-atom values* - Self-explanatory. - -*Compute chunk/atom for triclinic boxes requires units reduced* - Self-explanatory. - *Compute chunk/atom ids once but nchunk is not once* You cannot assign chunks IDs to atom permanently if the number of chunks may change. -*Compute chunk/atom molecule for non-molecular system* - Self-explanatory. - -*Compute chunk/atom sphere z origin must be 0.0 for 2d* - Self-explanatory. - *Compute chunk/atom stores no IDs for compute property/chunk* It will only store IDs if its compress option is enabled. @@ -1972,9 +1249,6 @@ Please also see the page with :doc:`Warning messages `. *Compute chunk/atom stores no coord3 for compute property/chunk* Only certain binning options for compute chunk/atom store coordinates. -*Compute chunk/atom variable is not atom-style variable* - Self-explanatory. - *Compute chunk/atom without bins cannot use discard mixed* That discard option only applies to the binning styles. @@ -1985,28 +1259,13 @@ Please also see the page with :doc:`Warning messages `. This is so that the pair style defines a cutoff distance which is used to find clusters. -*Compute cna/atom cutoff is longer than pairwise cutoff* - Self-explanatory. - -*Compute cna/atom requires a pair style be defined* - Self-explanatory. - *Compute com/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. -*Compute contact/atom requires a pair style be defined* - Self-explanatory. - -*Compute contact/atom requires atom style sphere* - Self-explanatory. - *Compute coord/atom cutoff is longer than pairwise cutoff* Cannot compute coordination at distances longer than the pair cutoff, since those atoms are not in the neighbor list. -*Compute coord/atom requires a pair style be defined* - Self-explanatory. - *Compute damage/atom requires peridynamic potential* Damage is a Peridynamic-specific metric. It requires you to be running a Peridynamics simulation. @@ -2014,65 +1273,29 @@ Please also see the page with :doc:`Warning messages `. *Compute dihedral/local used when dihedrals are not allowed* The atom style does not support dihedrals. -*Compute dilatation/atom cannot be used with this pair style* - Self-explanatory. - -*Compute dilatation/atom requires Peridynamic pair style* - Self-explanatory. - *Compute does not allow an extra compute or fix to be reset* This is an internal LAMMPS error. Please report it to the developers. -*Compute erotate/asphere requires atom style ellipsoid or line or tri* - Self-explanatory. - *Compute erotate/asphere requires extended particles* This compute cannot be used with point particles. -*Compute erotate/rigid with non-rigid fix-ID* - Self-explanatory. - -*Compute erotate/sphere requires atom style sphere* - Self-explanatory. - -*Compute erotate/sphere/atom requires atom style sphere* - Self-explanatory. - *Compute event/displace has invalid fix event assigned* This is an internal LAMMPS error. Please report it to the developers. -*Compute group/group group ID does not exist* - Self-explanatory. - *Compute gyration/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. -*Compute heat/flux compute ID does not compute ke/atom* - Self-explanatory. - -*Compute heat/flux compute ID does not compute pe/atom* - Self-explanatory. - -*Compute heat/flux compute ID does not compute stress/atom* - Self-explanatory. - *Compute hexorder/atom cutoff is longer than pairwise cutoff* Cannot compute order parameter beyond cutoff. -*Compute hexorder/atom requires a pair style be defined* - Self-explanatory. - *Compute improper/local used when impropers are not allowed* The atom style does not support impropers. *Compute inertia/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. -*Compute ke/rigid with non-rigid fix-ID* - Self-explanatory. - *Compute msd/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. @@ -2081,24 +1304,12 @@ Please also see the page with :doc:`Warning messages `. the number of chunks is changing. Compute chunk/atom allows setting nchunk to be static. -*Compute nve/asphere requires atom style ellipsoid* - Self-explanatory. - -*Compute nvt/nph/npt asphere requires atom style ellipsoid* - Self-explanatory. - -*Compute nvt/nph/npt body requires atom style body* - Self-explanatory. - *Compute omega/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. *Compute orientorder/atom cutoff is longer than pairwise cutoff* Cannot compute order parameter beyond cutoff. -*Compute orientorder/atom requires a pair style be defined* - Self-explanatory. - *Compute pair must use group all* Pair styles accumulate energy on all atoms. @@ -2106,12 +1317,6 @@ Please also see the page with :doc:`Warning messages `. Energies computed by potentials (pair, bond, etc) are computed on all atoms. -*Compute plasticity/atom cannot be used with this pair style* - Self-explanatory. - -*Compute plasticity/atom requires Peridynamic pair style* - Self-explanatory. - *Compute pressure must use group all* Virial contributions computed by potentials (pair, bond, etc) are computed on all atoms. @@ -2127,9 +1332,6 @@ Please also see the page with :doc:`Warning messages `. The command is accessing a vector added by the fix property/atom command, that does not exist. -*Compute property/atom for atom property that is not allocated* - Self-explanatory. - *Compute property/atom integer vector does not exist* The command is accessing a vector added by the fix property/atom command, that does not exist. @@ -2141,117 +1343,36 @@ Please also see the page with :doc:`Warning messages `. Only inputs that generate the same number of datums can be used together. E.g. bond and angle quantities cannot be mixed. -*Compute property/local does not (yet) work with atom_style template* - Self-explanatory. - -*Compute property/local for property that is not allocated* - Self-explanatory. - -*Compute rdf requires a pair style be defined* - Self-explanatory. - *Compute reduce compute array is accessed out-of-range* An index for the array is out of bounds. *Compute reduce compute calculates global values* A compute that calculates peratom or local values is required. -*Compute reduce compute does not calculate a local array* - Self-explanatory. - -*Compute reduce compute does not calculate a local vector* - Self-explanatory. - -*Compute reduce compute does not calculate a per-atom array* - Self-explanatory. - -*Compute reduce compute does not calculate a per-atom vector* - Self-explanatory. - *Compute reduce fix array is accessed out-of-range* An index for the array is out of bounds. *Compute reduce fix calculates global values* A fix that calculates peratom or local values is required. -*Compute reduce fix does not calculate a local array* - Self-explanatory. - -*Compute reduce fix does not calculate a local vector* - Self-explanatory. - -*Compute reduce fix does not calculate a per-atom array* - Self-explanatory. - -*Compute reduce fix does not calculate a per-atom vector* - Self-explanatory. - -*Compute reduce replace requires min or max mode* - Self-explanatory. - -*Compute reduce variable is not atom-style variable* - Self-explanatory. - *Compute slice compute array is accessed out-of-range* An index for the array is out of bounds. -*Compute slice compute does not calculate a global array* - Self-explanatory. - -*Compute slice compute does not calculate a global vector* - Self-explanatory. - -*Compute slice compute does not calculate global vector or array* - Self-explanatory. - *Compute slice compute vector is accessed out-of-range* The index for the vector is out of bounds. *Compute slice fix array is accessed out-of-range* An index for the array is out of bounds. -*Compute slice fix does not calculate a global array* - Self-explanatory. - -*Compute slice fix does not calculate a global vector* - Self-explanatory. - -*Compute slice fix does not calculate global vector or array* - Self-explanatory. - *Compute slice fix vector is accessed out-of-range* The index for the vector is out of bounds. -*Compute sna/atom cutoff is longer than pairwise cutoff* - Self-explanatory. - -*Compute sna/atom requires a pair style be defined* - Self-explanatory. - -*Compute snad/atom cutoff is longer than pairwise cutoff* - Self-explanatory. - -*Compute snad/atom requires a pair style be defined* - Self-explanatory. - -*Compute snav/atom cutoff is longer than pairwise cutoff* - Self-explanatory. - -*Compute snav/atom requires a pair style be defined* - Self-explanatory. - *Compute stress/atom temperature ID does not compute temperature* The specified compute must compute temperature. -*Compute temp/asphere requires atom style ellipsoid* - Self-explanatory. - *Compute temp/asphere requires extended particles* This compute cannot be used with point particles. -*Compute temp/body requires atom style body* - Self-explanatory. - *Compute temp/body requires bodies* This compute can only be applied to body particles. @@ -2264,27 +1385,6 @@ Please also see the page with :doc:`Warning messages `. *Compute temp/cs used when bonds are not allowed* This compute only works on pairs of bonded particles. -*Compute temp/partial cannot use vz for 2d systemx* - Self-explanatory. - -*Compute temp/profile cannot bin z for 2d systems* - Self-explanatory. - -*Compute temp/profile cannot use vz for 2d systemx* - Self-explanatory. - -*Compute temp/sphere requires atom style sphere* - Self-explanatory. - -*Compute ti kspace style does not exist* - Self-explanatory. - -*Compute ti pair style does not exist* - Self-explanatory. - -*Compute ti tail when pair style does not compute tail corrections* - Self-explanatory. - *Compute torque/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. @@ -2308,9 +1408,6 @@ Please also see the page with :doc:`Warning messages `. *Compute vcm/chunk does not use chunk/atom compute* The style of the specified compute is not chunk/atom. -*Computed temperature for fix temp/berendsen cannot be 0.0* - Self-explanatory. - *Computed temperature for fix temp/rescale cannot be 0.0* Cannot rescale the temperature to a new value if the current temperature is 0.0. @@ -2372,67 +1469,19 @@ Please also see the page with :doc:`Warning messages `. The specified constraints did not allow this style of grid to be created. -*Could not evaluate Python function input variable* - Self-explanatory. - *Could not find Python function* The provided Python code was run successfully, but it not define a callable function with the required name. -*Could not find atom_modify first group ID* - Self-explanatory. - *Could not find change_box group ID* Group ID used in the change_box command does not exist. -*Could not find compute ID for PRD* - Self-explanatory. - -*Could not find compute ID for TAD* - Self-explanatory. - -*Could not find compute ID for temperature bias* - Self-explanatory. - -*Could not find compute ID to delete* - Self-explanatory. - -*Could not find compute displace/atom fix ID* - Self-explanatory. - -*Could not find compute event/displace fix ID* - Self-explanatory. - -*Could not find compute group ID* - Self-explanatory. - -*Could not find compute heat/flux compute ID* - Self-explanatory. - -*Could not find compute msd fix ID* - Self-explanatory. - *Could not find compute msd/chunk fix ID* The compute creates an internal fix, which has been deleted. *Could not find compute pressure temperature ID* The compute ID for calculating temperature does not exist. -*Could not find compute stress/atom temperature ID* - Self-explanatory. - -*Could not find compute vacf fix ID* - Self-explanatory. - -*Could not find compute/voronoi surface group ID* - Self-explanatory. - -*Could not find compute_modify ID* - Self-explanatory. - -*Could not find custom per-atom property ID* - Self-explanatory. - *Could not find delete_atoms group ID* Group ID used in the delete_atoms command does not exist. @@ -2442,61 +1491,16 @@ Please also see the page with :doc:`Warning messages `. *Could not find displace_atoms group ID* Group ID used in the displace_atoms command does not exist. -*Could not find dump custom compute ID* - Self-explanatory. - -*Could not find dump custom fix ID* - Self-explanatory. - -*Could not find dump custom variable name* - Self-explanatory. - *Could not find dump group ID* A group ID used in the dump command does not exist. -*Could not find dump local compute ID* - Self-explanatory. - -*Could not find dump local fix ID* - Self-explanatory. - -*Could not find dump modify compute ID* - Self-explanatory. - -*Could not find dump modify custom atom floating point property ID* - Self-explanatory. - -*Could not find dump modify custom atom integer property ID* - Self-explanatory. - -*Could not find dump modify fix ID* - Self-explanatory. - -*Could not find dump modify variable name* - Self-explanatory. - -*Could not find fix ID to delete* - Self-explanatory. - *Could not find fix adapt storage fix ID* This should not happen unless you explicitly deleted a secondary fix that fix adapt created internally. -*Could not find fix halt variable name* - Self-explanatory. - -*Could not find fix gcmc exclusion group ID* - Self-explanatory. - -*Could not find fix gcmc rotation group ID* - Self-explanatory. - *Could not find fix group ID* A group ID used in the fix command does not exist. -*Could not find fix msst compute ID* - Self-explanatory. - *Could not find fix poems group ID* A group ID used in the fix poems command does not exist. @@ -2506,9 +1510,6 @@ Please also see the page with :doc:`Warning messages `. *Could not find fix rigid group ID* A group ID used in the fix rigid command does not exist. -*Could not find fix srd group ID* - Self-explanatory. - *Could not find fix_modify ID* A fix ID used in the fix_modify command does not exist. @@ -2518,12 +1519,6 @@ Please also see the page with :doc:`Warning messages `. *Could not find fix_modify temperature ID* The compute ID for computing temperature does not exist. -*Could not find group clear group ID* - Self-explanatory. - -*Could not find group delete group ID* - Self-explanatory. - *Could not find pair fix ID* A fix is created internally by the pair style to store shear history information. You cannot delete it. @@ -2531,9 +1526,6 @@ Please also see the page with :doc:`Warning messages `. *Could not find set group ID* Group ID specified in set command does not exist. -*Could not find specified fix gcmc group ID* - Self-explanatory. - *Could not find thermo compute ID* Compute ID specified in thermo_style command does not exist. @@ -2545,15 +1537,9 @@ Please also see the page with :doc:`Warning messages `. The fix ID needed by thermo style custom to compute a requested quantity does not exist. -*Could not find thermo custom variable name* - Self-explanatory. - *Could not find thermo fix ID* Fix ID specified in thermo_style command does not exist. -*Could not find thermo variable name* - Self-explanatory. - *Could not find thermo_modify pressure ID* The compute ID needed by thermo style custom to compute pressure does not exist. @@ -2576,15 +1562,6 @@ Please also see the page with :doc:`Warning messages `. Could not initialize at least one of the devices specified for the gpu package -*Could not grab element entry from EIM potential file* - Self-explanatory - -*Could not grab global entry from EIM potential file* - Self-explanatory. - -*Could not grab pair entry from EIM potential file* - Self-explanatory. - *Could not initialize embedded Python* The main module in Python was not accessible. @@ -2620,9 +1597,6 @@ Please also see the page with :doc:`Warning messages `. *Coulombic cut not supported in pair_style lj/long/dipole/long* Must use long-range Coulombic interactions. -*Cound not find dump_modify ID* - Self-explanatory. - *Create_atoms command before simulation box is defined* The create_atoms command cannot be used before a read_data, read_restart, or create_box command. @@ -2639,9 +1613,6 @@ Please also see the page with :doc:`Warning messages `. *Create_atoms region ID does not exist* A region ID used in the create_atoms command does not exist. -*Create_bonds command before simulation box is defined* - Self-explanatory. - *Create_bonds command requires no kspace_style be defined* This is so that atom pairs that are already bonded to not appear in the neighbor list. @@ -2653,12 +1624,6 @@ Please also see the page with :doc:`Warning messages `. *Create_bonds max distance > neighbor cutoff* Can only create bonds for atom pairs that will be in neighbor list. -*Create_bonds requires a pair style be defined* - Self-explanatory. - -*Create_box region ID does not exist* - Self-explanatory. - *Create_box region does not support a bounding box* Not all regions represent bounded volumes. You cannot use such a region with the create_box command. @@ -2671,21 +1636,6 @@ Please also see the page with :doc:`Warning messages `. The command is accessing a vector added by the fix property/atom command, that does not exist. -*Custom per-atom property ID is not floating point* - Self-explanatory. - -*Custom per-atom property ID is not integer* - Self-explanatory. - -*Cut-offs missing in pair_style lj/long/dipole/long* - Self-explanatory. - -*Cutoffs missing in pair_style buck/long/coul/long* - Self-explanatory. - -*Cutoffs missing in pair_style lj/long/coul/long* - Self-explanatory. - *Cyclic loop in joint connections* Fix poems cannot (yet) work with coupled bodies whose joints connect the bodies in a ring (or cycle). @@ -2693,9 +1643,6 @@ Please also see the page with :doc:`Warning messages `. *Degenerate lattice primitive vectors* Invalid set of 3 lattice vectors for lattice command. -*Delete region ID does not exist* - Self-explanatory. - *Delete_atoms command before simulation box is defined* The delete_atoms command cannot be used before a read_data, read_restart, or create_box command. @@ -2717,9 +1664,6 @@ Please also see the page with :doc:`Warning messages `. *Delete_bonds command with no atoms existing* No atoms are yet defined so the delete_bonds command cannot be used. -*Deposition region extends outside simulation box* - Self-explanatory. - *Did not assign all atoms correctly* Atoms read in from a data file were not assigned correctly to processors. This is likely due to some atom coordinates being @@ -2747,12 +1691,6 @@ Please also see the page with :doc:`Warning messages `. *Did not set pressure for fix rigid/nph* The press keyword must be specified. -*Did not set temp for fix rigid/nvt/small* - Self-explanatory. - -*Did not set temp or press for fix rigid/npt/small* - Self-explanatory. - *Did not set temperature for fix rigid/nvt* The temp keyword must be specified. @@ -2794,15 +1732,6 @@ Please also see the page with :doc:`Warning messages `. No dihedral coefficients have been assigned in the data file or via the dihedral_coeff command. -*Dihedral style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Dihedral style hybrid cannot have none as an argument* - Self-explanatory. - -*Dihedral style hybrid cannot use same dihedral style twice* - Self-explanatory. - *Dihedral/improper extent > half of periodic box length* This error was detected by the neigh_modify check yes setting. It is an error because the dihedral atoms are so far apart it is ambiguous @@ -2834,9 +1763,6 @@ Please also see the page with :doc:`Warning messages `. The dimension command cannot be used after a read_data, read_restart, or create_box command. -*Disk limit not supported by OS or illegal path* - Self-explanatory. - *Dispersion PPPMDisp order has been reduced below minorder* The default minimum order is 2. This can be reset by the kspace_modify minorder command. @@ -2845,9 +1771,6 @@ Please also see the page with :doc:`Warning messages `. The displace_atoms command cannot be used before a read_data, read_restart, or create_box command. -*Distance must be > 0 for compute event/displace* - Self-explanatory. - *Divide by 0 in influence function* This should not normally occur. It is likely a problem with your model. @@ -2856,23 +1779,14 @@ Please also see the page with :doc:`Warning messages `. This should not normally occur. It is likely a problem with your model. -*Divide by 0 in variable formula* - Self-explanatory. - *Domain too large for neighbor bins* The domain has become extremely large so that neighbor bins cannot be used. Most likely, one or more atoms have been blown out of the simulation box to a great distance. -*Double precision is not supported on this accelerator* - Self-explanatory - *Dump atom/gz only writes compressed files* The dump atom/gz output file name must have a .gz suffix. -*Dump cfg arguments can not mix xs\|ys\|zs with xsu\|ysu\|zsu* - Self-explanatory. - *Dump cfg arguments must start with 'mass type xs ys zs' or 'mass type xsu ysu zsu'* This is a requirement of the CFG output format. See the dump cfg doc page for more details. @@ -2887,30 +1801,6 @@ Please also see the page with :doc:`Warning messages `. The fix must produce per-atom quantities on timesteps that dump custom needs them. -*Dump custom compute does not calculate per-atom array* - Self-explanatory. - -*Dump custom compute does not calculate per-atom vector* - Self-explanatory. - -*Dump custom compute does not compute per-atom info* - Self-explanatory. - -*Dump custom compute vector is accessed out-of-range* - Self-explanatory. - -*Dump custom fix does not compute per-atom array* - Self-explanatory. - -*Dump custom fix does not compute per-atom info* - Self-explanatory. - -*Dump custom fix does not compute per-atom vector* - Self-explanatory. - -*Dump custom fix vector is accessed out-of-range* - Self-explanatory. - *Dump custom variable is not atom-style variable* Only atom-style variables generate per-atom quantities, needed for dump output. @@ -2931,132 +1821,36 @@ Please also see the page with :doc:`Warning messages `. This is because a % signifies one file per processor and MPI-IO creates one large file for all processors. -*Dump file does not contain requested snapshot* - Self-explanatory. - -*Dump file is incorrectly formatted* - Self-explanatory. - -*Dump image body yes requires atom style body* - Self-explanatory. - -*Dump image bond not allowed with no bond types* - Self-explanatory. - -*Dump image cannot perform sorting* - Self-explanatory. - -*Dump image line requires atom style line* - Self-explanatory. - *Dump image requires one snapshot per file* Use a "\*" in the filename. -*Dump image tri requires atom style tri* - Self-explanatory. - *Dump local and fix not computed at compatible times* The fix must produce per-atom quantities on timesteps that dump local needs them. -*Dump local attributes contain no compute or fix* - Self-explanatory. - *Dump local cannot sort by atom ID* This is because dump local does not really dump per-atom info. -*Dump local compute does not calculate local array* - Self-explanatory. - -*Dump local compute does not calculate local vector* - Self-explanatory. - -*Dump local compute does not compute local info* - Self-explanatory. - -*Dump local compute vector is accessed out-of-range* - Self-explanatory. - *Dump local count is not consistent across input fields* Every column of output must be the same length. -*Dump local fix does not compute local array* - Self-explanatory. - -*Dump local fix does not compute local info* - Self-explanatory. - -*Dump local fix does not compute local vector* - Self-explanatory. - -*Dump local fix vector is accessed out-of-range* - Self-explanatory. - -*Dump modify bcolor not allowed with no bond types* - Self-explanatory. - -*Dump modify bdiam not allowed with no bond types* - Self-explanatory. - -*Dump modify compute ID does not compute per-atom array* - Self-explanatory. - -*Dump modify compute ID does not compute per-atom info* - Self-explanatory. - -*Dump modify compute ID does not compute per-atom vector* - Self-explanatory. - -*Dump modify compute ID vector is not large enough* - Self-explanatory. - *Dump modify element names do not match atom types* Number of element names must equal number of atom types. -*Dump modify fix ID does not compute per-atom array* - Self-explanatory. - -*Dump modify fix ID does not compute per-atom info* - Self-explanatory. - -*Dump modify fix ID does not compute per-atom vector* - Self-explanatory. - -*Dump modify fix ID vector is not large enough* - Self-explanatory. - -*Dump modify variable is not atom-style variable* - Self-explanatory. - -*Dump sort column is invalid* - Self-explanatory. - *Dump xtc requires sorting by atom ID* Use the dump_modify sort command to enable this. *Dump xyz/gz only writes compressed files* The dump xyz/gz output file name must have a .gz suffix. -*Dump_modify buffer yes not allowed for this style* - Self-explanatory. - *Dump_modify format string is too short* There are more fields to be dumped in a line of output than your format string specifies. -*Dump_modify region ID does not exist* - Self-explanatory. - *Dumping an atom property that is not allocated* The chosen atom style does not define the per-atom quantity being dumped. -*Duplicate atom IDs exist* - Self-explanatory. - -*Duplicate fields in read_dump command* - Self-explanatory. - *Duplicate particle in PeriDynamic bond - simulation box is too small* This is likely because your box length is shorter than 2 times the bond length. @@ -3076,15 +1870,9 @@ Please also see the page with :doc:`Warning messages `. have tallied energy, but they did not on this timestep. See the variable page for ideas on how to make this work. -*Epsilon or sigma reference not set by pair style in PPPMDisp* - Self-explanatory. - *Epsilon or sigma reference not set by pair style in ewald/n* The pair style is not providing the needed epsilon or sigma values. -*Error in MEAM parameter file: keyword %s (further information)* - Self-explanatory. Check the parameter file. - *Error in vdw spline: inner radius > outer radius* A pre-tabulated spline is invalid. Likely a problem with the potential parameters. @@ -3122,57 +1910,9 @@ Please also see the page with :doc:`Warning messages `. *File variable could not read value* Check the file assigned to the variable. -*Final box dimension due to fix deform is < 0.0* - Self-explanatory. - *Fix %s does not allow use of dynamic group* Dynamic groups have not yet been enabled for this fix. -*Fix ID for compute chunk/atom does not exist* - Self-explanatory. - -*Fix ID for compute erotate/rigid does not exist* - Self-explanatory. - -*Fix ID for compute ke/rigid does not exist* - Self-explanatory. - -*Fix ID for compute reduce does not exist* - Self-explanatory. - -*Fix ID for compute slice does not exist* - Self-explanatory. - -*Fix ID for fix ave/atom does not exist* - Self-explanatory. - -*Fix ID for fix ave/chunk does not exist* - Self-explanatory. - -*Fix ID for fix ave/correlate does not exist* - Self-explanatory. - -*Fix ID for fix ave/histo does not exist* - Self-explanatory. - -*Fix ID for fix ave/time does not exist* - Self-explanatory. - -*Fix ID for fix store/state does not exist* - Self-explanatory - -*Fix ID for fix vector does not exist* - Self-explanatory. - -*Fix ID for read_data does not exist* - Self-explanatory. - -*Fix ID for velocity does not exist* - Self-explanatory. - -*Fix ID must be alphanumeric or underscore characters* - Self-explanatory. - *Fix SRD: bad bin assignment for SRD advection* Something has gone wrong in your SRD model; try using more conservative settings. @@ -3195,12 +1935,6 @@ Please also see the page with :doc:`Warning messages `. *Fix adapt interface to this pair style not supported* New coding for the pair style would need to be done. -*Fix adapt kspace style does not exist* - Self-explanatory. - -*Fix adapt pair style does not exist* - Self-explanatory - *Fix adapt pair style param not supported* The pair style does not know about the parameter you specified. @@ -3210,30 +1944,15 @@ Please also see the page with :doc:`Warning messages `. *Fix adapt requires atom attribute diameter* The atom style being used does not specify an atom diameter. -*Fix adapt type pair range is not valid for pair hybrid sub-style* - Self-explanatory. - *Fix append/atoms requires a lattice be defined* Use the lattice command for this purpose. -*Fix ave/atom compute array is accessed out-of-range* - Self-explanatory. - -*Fix ave/atom compute does not calculate a per-atom array* - Self-explanatory. - *Fix ave/atom compute does not calculate a per-atom vector* A compute used by fix ave/atom must generate per-atom values. *Fix ave/atom compute does not calculate per-atom values* A compute used by fix ave/atom must generate per-atom values. -*Fix ave/atom fix array is accessed out-of-range* - Self-explanatory. - -*Fix ave/atom fix does not calculate a per-atom array* - Self-explanatory. - *Fix ave/atom fix does not calculate a per-atom vector* A fix used by fix ave/atom must generate per-atom values. @@ -3243,145 +1962,19 @@ Please also see the page with :doc:`Warning messages `. *Fix ave/atom variable is not atom-style variable* A variable used by fix ave/atom must generate per-atom values. -*Fix ave/chunk compute does not calculate a per-atom array* - Self-explanatory. - -*Fix ave/chunk compute does not calculate a per-atom vector* - Self-explanatory. - -*Fix ave/chunk compute does not calculate per-atom values* - Self-explanatory. - -*Fix ave/chunk compute vector is accessed out-of-range* - Self-explanatory. - *Fix ave/chunk does not use chunk/atom compute* The specified compute is not for a compute chunk/atom command. -*Fix ave/chunk fix does not calculate a per-atom array* - Self-explanatory. - -*Fix ave/chunk fix does not calculate a per-atom vector* - Self-explanatory. - -*Fix ave/chunk fix does not calculate per-atom values* - Self-explanatory. - -*Fix ave/chunk fix vector is accessed out-of-range* - Self-explanatory. - -*Fix ave/chunk variable is not atom-style variable* - Self-explanatory. - -*Fix ave/correlate compute does not calculate a scalar* - Self-explanatory. - -*Fix ave/correlate compute does not calculate a vector* - Self-explanatory. - *Fix ave/correlate compute vector is accessed out-of-range* The index for the vector is out of bounds. -*Fix ave/correlate fix does not calculate a scalar* - Self-explanatory. - -*Fix ave/correlate fix does not calculate a vector* - Self-explanatory. - *Fix ave/correlate fix vector is accessed out-of-range* The index for the vector is out of bounds. -*Fix ave/correlate variable is not equal-style variable* - Self-explanatory. - -*Fix ave/histo cannot input local values in scalar mode* - Self-explanatory. - -*Fix ave/histo cannot input per-atom values in scalar mode* - Self-explanatory. - -*Fix ave/histo compute array is accessed out-of-range* - Self-explanatory. - -*Fix ave/histo compute does not calculate a global array* - Self-explanatory. - -*Fix ave/histo compute does not calculate a global scalar* - Self-explanatory. - -*Fix ave/histo compute does not calculate a global vector* - Self-explanatory. - -*Fix ave/histo compute does not calculate a local array* - Self-explanatory. - -*Fix ave/histo compute does not calculate a local vector* - Self-explanatory. - -*Fix ave/histo compute does not calculate a per-atom array* - Self-explanatory. - -*Fix ave/histo compute does not calculate a per-atom vector* - Self-explanatory. - -*Fix ave/histo compute does not calculate local values* - Self-explanatory. - -*Fix ave/histo compute does not calculate per-atom values* - Self-explanatory. - -*Fix ave/histo compute vector is accessed out-of-range* - Self-explanatory. - -*Fix ave/histo fix array is accessed out-of-range* - Self-explanatory. - -*Fix ave/histo fix does not calculate a global array* - Self-explanatory. - -*Fix ave/histo fix does not calculate a global scalar* - Self-explanatory. - -*Fix ave/histo fix does not calculate a global vector* - Self-explanatory. - -*Fix ave/histo fix does not calculate a local array* - Self-explanatory. - -*Fix ave/histo fix does not calculate a local vector* - Self-explanatory. - -*Fix ave/histo fix does not calculate a per-atom array* - Self-explanatory. - -*Fix ave/histo fix does not calculate a per-atom vector* - Self-explanatory. - -*Fix ave/histo fix does not calculate local values* - Self-explanatory. - -*Fix ave/histo fix does not calculate per-atom values* - Self-explanatory. - -*Fix ave/histo fix vector is accessed out-of-range* - Self-explanatory. - -*Fix ave/histo input is invalid compute* - Self-explanatory. - -*Fix ave/histo input is invalid fix* - Self-explanatory. - -*Fix ave/histo input is invalid variable* - Self-explanatory. - *Fix ave/histo inputs are not all global, peratom, or local* All inputs in a single fix ave/histo command must be of the same style. -*Fix ave/histo/weight value and weight vector lengths do not match* - Self-explanatory. - *Fix ave/time cannot set output array intensive/extensive from these inputs* One of more of the vector inputs has individual elements which are flagged as intensive or extensive. Such an input cannot be flagged as @@ -3390,48 +1983,18 @@ Please also see the page with :doc:`Warning messages `. *Fix ave/time cannot use variable with vector mode* Variables produce scalar values. -*Fix ave/time columns are inconsistent lengths* - Self-explanatory. - *Fix ave/time compute array is accessed out-of-range* An index for the array is out of bounds. -*Fix ave/time compute does not calculate a scalar* - Self-explanatory. - -*Fix ave/time compute does not calculate a vector* - Self-explanatory. - -*Fix ave/time compute does not calculate an array* - Self-explanatory. - *Fix ave/time compute vector is accessed out-of-range* The index for the vector is out of bounds. -*Fix ave/time fix array cannot be variable length* - Self-explanatory. - *Fix ave/time fix array is accessed out-of-range* An index for the array is out of bounds. -*Fix ave/time fix does not calculate a scalar* - Self-explanatory. - -*Fix ave/time fix does not calculate a vector* - Self-explanatory. - -*Fix ave/time fix does not calculate an array* - Self-explanatory. - -*Fix ave/time fix vector cannot be variable length* - Self-explanatory. - *Fix ave/time fix vector is accessed out-of-range* The index for the vector is out of bounds. -*Fix ave/time variable is not equal-style variable* - Self-explanatory. - *Fix balance rcb cannot be used with comm_style brick* Comm_style tiled must be used instead. @@ -3443,19 +2006,10 @@ Please also see the page with :doc:`Warning messages `. acquire needed info, The comm_modify cutoff command can be used to extend the communication range. -*Fix bond/create angle type is invalid* - Self-explanatory. - *Fix bond/create cutoff is longer than pairwise cutoff* This is not allowed because bond creation is done using the pairwise neighbor list. -*Fix bond/create dihedral type is invalid* - Self-explanatory. - -*Fix bond/create improper type is invalid* - Self-explanatory. - *Fix bond/create induced too many angles/dihedrals/impropers per atom* See the read_data command for info on using the "extra/angle/per/atom", (or dihedral, improper) keywords to allow for additional @@ -3502,15 +2056,6 @@ Please also see the page with :doc:`Warning messages `. comm_modify cutoff command can be used to extend the communication range. -*Fix bond/react: A deleted atom cannot remain bonded to an atom that is not deleted* - Self-explanatory. - -*Fix bond/react: First neighbors of chiral atoms must be of mutually different types* - Self-explanatory. - -*Fix bond/react: Chiral atoms must have exactly four first neighbors* - Self-explanatory. - *Fix bond/react: Molecule template 'Coords' section required for chiralIDs keyword* The coordinates of atoms in the pre-reacted template are used to determine chirality. @@ -3528,12 +2073,6 @@ Please also see the page with :doc:`Warning messages `. *Fix bond/swap cannot use dihedral or improper styles* These styles cannot be defined when using this fix. -*Fix bond/swap requires pair and bond styles* - Self-explanatory. - -*Fix bond/swap requires special_bonds = 0,1,1* - Self-explanatory. - *Fix box/relax generated negative box length* The pressure being applied is likely too large. Try applying it incrementally, to build to the high pressure. @@ -3559,12 +2098,6 @@ Please also see the page with :doc:`Warning messages `. *Fix deform volume setting is invalid* Cannot use volume style unless other dimensions are being controlled. -*Fix deposit and fix rigid/small not using same molecule template ID* - Self-explanatory. - -*Fix deposit and fix shake not using same molecule template ID* - Self-explanatory. - *Fix deposit molecule must have atom types* The defined molecule does not specify atom types. @@ -3582,9 +2115,6 @@ Please also see the page with :doc:`Warning messages `. Not all regions represent bounded volumes. You cannot use such a region with the fix deposit command. -*Fix deposit shake fix does not exist* - Self-explanatory. - *Fix efield requires atom attribute q or mu* The atom style defined does not have this attribute. @@ -3632,28 +2162,16 @@ Please also see the page with :doc:`Warning messages `. *Fix freeze requires atom attribute torque* The atom style defined does not have this attribute. -*Fix gcmc and fix shake not using same molecule template ID* - Self-explanatory. - -*Fix gcmc atom has charge, but atom style does not* - Self-explanatory. - *Fix gcmc cannot exchange individual atoms belonging to a molecule* This is an error since you should not delete only one atom of a molecule. The user has specified atomic (non-molecular) gas exchanges, but an atom belonging to a molecule could be deleted. -*Fix gcmc does not (yet) work with atom_style template* - Self-explanatory. - *Fix gcmc molecule command requires that atoms have molecule attributes* Should not choose the gcmc molecule feature if no molecules are being simulated. The general molecule flag is off, but gcmc's molecule flag is on. -*Fix gcmc molecule has charges, but atom style does not* - Self-explanatory. - *Fix gcmc molecule must have atom types* The defined molecule does not specify atom types. @@ -3680,39 +2198,6 @@ Please also see the page with :doc:`Warning messages `. Not all regions represent bounded volumes. You cannot use such a region with the fix gcmc command. -*Fix gcmc region extends outside simulation box* - Self-explanatory. - -*Fix gcmc shake fix does not exist* - Self-explanatory. - -*Fix gld c coefficients must be >= 0* - Self-explanatory. - -*Fix gld needs more prony series coefficients* - Self-explanatory. - -*Fix gld prony terms must be > 0* - Self-explanatory. - -*Fix gld series type must be pprony for now* - Self-explanatory. - -*Fix gld start temperature must be >= 0* - Self-explanatory. - -*Fix gld stop temperature must be >= 0* - Self-explanatory. - -*Fix gld tau coefficients must be > 0* - Self-explanatory. - -*Fix halt variable is not equal-style variable* - Self-explanatory. - -*Fix heat group has no atoms* - Self-explanatory. - *Fix heat kinetic energy of an atom went negative* This will cause the velocity rescaling about to be performed by fix heat to be invalid. @@ -3728,69 +2213,24 @@ Please also see the page with :doc:`Warning messages `. *Fix langevin angmom is not yet implemented with kokkos* This option is not yet available. -*Fix langevin angmom requires atom style ellipsoid* - Self-explanatory. - *Fix langevin angmom requires extended particles* This fix option cannot be used with point particles. -*Fix langevin gjf and respa are not compatible* - Self-explanatory. - *Fix langevin gjf cannot have period equal to dt/2* If the period is equal to dt/2 then division by zero will happen. -*Fix langevin gjf should come before fix nve* - Self-explanatory. - *Fix langevin gjf with tbias is not yet implemented with kokkos* This option is not yet available. *Fix langevin omega is not yet implemented with kokkos* This option is not yet available. -*Fix langevin omega requires atom style sphere* - Self-explanatory. - *Fix langevin omega requires extended particles* One of the particles has radius 0.0. *Fix langevin period must be > 0.0* The time window for temperature relaxation must be > 0 -*Fix langevin variable returned negative temperature* - Self-explanatory. - -*Fix momentum group has no atoms* - Self-explanatory. - -*Fix move cannot define z or vz variable for 2d problem* - Self-explanatory. - -*Fix move cannot rotate aroung non z-axis for 2d problem* - Self-explanatory. - -*Fix move cannot set linear z motion for 2d problem* - Self-explanatory. - -*Fix move cannot set wiggle z motion for 2d problem* - Self-explanatory. - -*Fix msst compute ID does not compute potential energy* - Self-explanatory. - -*Fix msst compute ID does not compute pressure* - Self-explanatory. - -*Fix msst compute ID does not compute temperature* - Self-explanatory. - -*Fix msst requires a periodic box* - Self-explanatory. - -*Fix msst tscale must satisfy 0 <= tscale < 1* - Self-explanatory. - *Fix npt/nph has tilted box too far in one step - periodic cell is too far from equilibrium state* Self-explanatory. The change in the box tilt is too extreme on a short timescale. @@ -3810,61 +2250,22 @@ Please also see the page with :doc:`Warning messages `. *Fix nve/asphere requires extended particles* This fix can only be used for particles with a shape setting. -*Fix nve/asphere/noforce requires atom style ellipsoid* - Self-explanatory. - *Fix nve/asphere/noforce requires extended particles* One of the particles is not an ellipsoid. -*Fix nve/body requires atom style body* - Self-explanatory. - *Fix nve/body requires bodies* This fix can only be used for particles that are bodies. -*Fix nve/line can only be used for 2d simulations* - Self-explanatory. - -*Fix nve/line requires atom style line* - Self-explanatory. - -*Fix nve/line requires line particles* - Self-explanatory. - *Fix nve/sphere dipole requires atom attribute mu* An atom style with this attribute is needed. -*Fix nve/sphere requires atom style sphere* - Self-explanatory. - *Fix nve/sphere requires extended particles* This fix can only be used for particles of a finite size. -*Fix nve/tri can only be used for 3d simulations* - Self-explanatory. - -*Fix nve/tri requires atom style tri* - Self-explanatory. - -*Fix nve/tri requires tri particles* - Self-explanatory. - *Fix nvt/nph/npt asphere requires extended particles* The shape setting for a particle in the fix group has shape = 0.0, which means it is a point particle. -*Fix nvt/nph/npt body requires bodies* - Self-explanatory. - -*Fix nvt/nph/npt sphere requires atom style sphere* - Self-explanatory. - -*Fix nvt/npt/nph damping parameters must be > 0.0* - Self-explanatory. - -*Fix nvt/npt/nph dilate group ID does not exist* - Self-explanatory. - *Fix nvt/sphere requires extended particles* This fix can only be used for particles of a finite size. @@ -3883,15 +2284,6 @@ Please also see the page with :doc:`Warning messages `. *Fix peri neigh does not exist* Somehow a fix that the pair style defines has been deleted. -*Fix pour and fix rigid/small not using same molecule template ID* - Self-explanatory. - -*Fix pour and fix shake not using same molecule template ID* - Self-explanatory. - -*Fix pour insertion count per timestep is 0* - Self-explanatory. - *Fix pour molecule must have atom types* The defined molecule does not specify atom types. @@ -3902,12 +2294,6 @@ Please also see the page with :doc:`Warning messages `. When using atom_style template, you cannot pour molecules that are not in that template. -*Fix pour polydisperse fractions do not sum to 1.0* - Self-explanatory. - -*Fix pour region ID does not exist* - Self-explanatory. - *Fix pour region cannot be dynamic* Only static regions can be used with fix pour. @@ -3918,187 +2304,49 @@ Please also see the page with :doc:`Warning messages `. *Fix pour requires atom attributes radius, rmass* The atom style defined does not have these attributes. -*Fix pour rigid fix does not exist* - Self-explanatory. - -*Fix pour shake fix does not exist* - Self-explanatory. - -*Fix press/berendsen damping parameters must be > 0.0* - Self-explanatory. - -*Fix property/atom cannot specify mol twice* - Self-explanatory. - -*Fix property/atom cannot specify q twice* - Self-explanatory. - -*Fix property/atom mol when atom_style already has molecule attribute* - Self-explanatory. - -*Fix property/atom q when atom_style already has charge attribute* - Self-explanatory. - *Fix property/atom vector name already exists* The name for an integer or floating-point vector must be unique. -*Fix qeq has negative upper Taper radius cutoff* - Self-explanatory. - -*Fix qeq/comb group has no atoms* - Self-explanatory. - *Fix qeq/comb requires atom attribute q* An atom style with charge must be used to perform charge equilibration. -*Fix qeq/dynamic group has no atoms* - Self-explanatory. - -*Fix qeq/dynamic requires atom attribute q* - Self-explanatory. - -*Fix qeq/fire group has no atoms* - Self-explanatory. - -*Fix qeq/fire requires atom attribute q* - Self-explanatory. - -*Fix qeq/point group has no atoms* - Self-explanatory. - *Fix qeq/point has insufficient QEq matrix size* Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and re-compile. -*Fix qeq/point requires atom attribute q* - Self-explanatory. - -*Fix qeq/shielded group has no atoms* - Self-explanatory. - *Fix qeq/shielded has insufficient QEq matrix size* Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and re-compile. -*Fix qeq/shielded requires atom attribute q* - Self-explanatory. - *Fix qeq/slater could not extract params from pair coul/streitz* This should not happen unless pair coul/streitz has been altered. -*Fix qeq/slater group has no atoms* - Self-explanatory. - *Fix qeq/slater has insufficient QEq matrix size* Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and re-compile. -*Fix qeq/slater requires atom attribute q* - Self-explanatory. - *Fix reax/bonds numbonds > nsbmax_most* The limit of the number of bonds expected by the ReaxFF force field was exceeded. -*Fix recenter group has no atoms* - Self-explanatory. - -*Fix restrain requires an atom map, see atom_modify* - Self-explanatory. - *Fix rigid atom has non-zero image flag in a non-periodic dimension* Image flags for non-periodic dimensions should not be set. -*Fix rigid file has no lines* - Self-explanatory. - -*Fix rigid langevin period must be > 0.0* - Self-explanatory. - -*Fix rigid molecule requires atom attribute molecule* - Self-explanatory. - -*Fix rigid npt/nph dilate group ID does not exist* - Self-explanatory. - *Fix rigid npt/nph does not yet allow triclinic box* This is a current restriction in LAMMPS. -*Fix rigid npt/nph period must be > 0.0* - Self-explanatory. - -*Fix rigid npt/small t_chain should not be less than 1* - Self-explanatory. - -*Fix rigid npt/small t_order must be 3 or 5* - Self-explanatory. - -*Fix rigid nvt/npt/nph damping parameters must be > 0.0* - Self-explanatory. - -*Fix rigid nvt/small t_chain should not be less than 1* - Self-explanatory. - -*Fix rigid nvt/small t_iter should not be less than 1* - Self-explanatory. - -*Fix rigid nvt/small t_order must be 3 or 5* - Self-explanatory. - -*Fix rigid xy torque cannot be on for 2d simulation* - Self-explanatory. - -*Fix rigid z force cannot be on for 2d simulation* - Self-explanatory. - -*Fix rigid/npt period must be > 0.0* - Self-explanatory. - -*Fix rigid/npt temperature order must be 3 or 5* - Self-explanatory. - -*Fix rigid/npt/small period must be > 0.0* - Self-explanatory. - -*Fix rigid/nvt period must be > 0.0* - Self-explanatory. - -*Fix rigid/nvt temperature order must be 3 or 5* - Self-explanatory. - -*Fix rigid/nvt/small period must be > 0.0* - Self-explanatory. - *Fix rigid/small atom has non-zero image flag in a non-periodic dimension* Image flags for non-periodic dimensions should not be set. -*Fix rigid/small langevin period must be > 0.0* - Self-explanatory. - *Fix rigid/small molecule must have atom types* The defined molecule does not specify atom types. *Fix rigid/small molecule must have coordinates* The defined molecule does not specify coordinates. -*Fix rigid/small npt/nph period must be > 0.0* - Self-explanatory. - -*Fix rigid/small nvt/npt/nph damping parameters must be > 0.0* - Self-explanatory. - -*Fix rigid/small nvt/npt/nph dilate group ID does not exist* - Self-explanatory. - -*Fix rigid/small requires an atom map, see atom_modify* - Self-explanatory. - -*Fix rigid/small requires atom attribute molecule* - Self-explanatory. - *Fix rigid: Bad principal moments* The principal moments of inertia computed for a rigid body are not within the required tolerances. @@ -4110,9 +2358,6 @@ Please also see the page with :doc:`Warning messages `. *Fix shake molecule template must have shake info* The defined molecule does not specify SHAKE information. -*Fix spring couple group ID does not exist* - Self-explanatory. - *Fix srd can only currently be used with comm_style brick* This is a current restriction in LAMMPS. @@ -4123,18 +2368,9 @@ Please also see the page with :doc:`Warning messages `. This is because the SRD collisions will impart torque to the solute particles. -*Fix srd requires SRD particles all have same mass* - Self-explanatory. - *Fix srd requires ghost atoms store velocity* Use the comm_modify vel yes command to enable this. -*Fix srd requires newton pair on* - Self-explanatory. - -*Fix store/state compute array is accessed out-of-range* - Self-explanatory. - *Fix store/state compute does not calculate a per-atom array* The compute calculates a per-atom vector. @@ -4145,9 +2381,6 @@ Please also see the page with :doc:`Warning messages `. Computes that calculate global or local quantities cannot be used with fix store/state. -*Fix store/state fix array is accessed out-of-range* - Self-explanatory. - *Fix store/state fix does not calculate a per-atom array* The fix calculates a per-atom vector. @@ -4158,71 +2391,20 @@ Please also see the page with :doc:`Warning messages `. Fixes that calculate global or local quantities cannot be used with fix store/state. -*Fix store/state for atom property that is not allocated* - Self-explanatory. - *Fix store/state variable is not atom-style variable* Only atom-style variables calculate per-atom quantities. -*Fix temp/berendsen period must be > 0.0* - Self-explanatory. - -*Fix temp/berendsen variable returned negative temperature* - Self-explanatory. - *Fix temp/csld is not compatible with fix rattle or fix shake* These two commands cannot currently be used together with fix temp/csld. -*Fix temp/csld variable returned negative temperature* - Self-explanatory. - -*Fix temp/csvr variable returned negative temperature* - Self-explanatory. - -*Fix temp/rescale variable returned negative temperature* - Self-explanatory. - -*Fix tfmc displacement length must be > 0* - Self-explanatory. - *Fix tfmc is not compatible with fix shake* These two commands cannot currently be used together. -*Fix tfmc temperature must be > 0* - Self-explanatory. - -*Fix thermal/conductivity swap value must be positive* - Self-explanatory. - *Fix tmd must come after integration fixes* Any fix tmd command must appear in the input script after all time integration fixes (nve, nvt, npt). See the fix tmd documentation for details. -*Fix ttm electron temperatures must be > 0.0* - Self-explanatory. - -*Fix ttm electronic_density must be > 0.0* - Self-explanatory. - -*Fix ttm electronic_specific_heat must be > 0.0* - Self-explanatory. - -*Fix ttm electronic_thermal_conductivity must be >= 0.0* - Self-explanatory. - -*Fix ttm gamma_p must be > 0.0* - Self-explanatory. - -*Fix ttm gamma_s must be >= 0.0* - Self-explanatory. - -*Fix ttm number of nodes must be > 0* - Self-explanatory. - -*Fix ttm v_0 must be >= 0.0* - Self-explanatory. - *Fix used in compute chunk/atom not computed at compatible time* The chunk/atom compute cannot query the output of the fix on a timestep it is needed. @@ -4239,39 +2421,6 @@ Please also see the page with :doc:`Warning messages `. The inputs to the command have conflicting intensive/extensive attributes. You need to use more than one fix vector command. -*Fix vector compute does not calculate a scalar* - Self-explanatory. - -*Fix vector compute does not calculate a vector* - Self-explanatory. - -*Fix vector compute vector is accessed out-of-range* - Self-explanatory. - -*Fix vector fix does not calculate a scalar* - Self-explanatory. - -*Fix vector fix does not calculate a vector* - Self-explanatory. - -*Fix vector fix vector is accessed out-of-range* - Self-explanatory. - -*Fix vector variable is not equal-style variable* - Self-explanatory. - -*Fix viscosity swap value must be positive* - Self-explanatory. - -*Fix viscosity vtarget value must be positive* - Self-explanatory. - -*Fix wall cutoff <= 0.0* - Self-explanatory. - -*Fix wall/colloid requires atom style sphere* - Self-explanatory. - *Fix wall/colloid requires extended particles* One of the particles has radius 0.0. @@ -4279,21 +2428,12 @@ Please also see the page with :doc:`Warning messages `. Must use a granular pair style to define the parameters needed for this fix. -*Fix wall/gran requires atom style sphere* - Self-explanatory. - *Fix wall/piston command only available at zlo* The face keyword must be zlo. -*Fix wall/region colloid requires atom style sphere* - Self-explanatory. - *Fix wall/region colloid requires extended particles* One of the particles has radius 0.0. -*Fix wall/region cutoff <= 0.0* - Self-explanatory. - *Fix_modify pressure ID does not compute pressure* The compute ID assigned to the fix must compute pressure. @@ -4307,12 +2447,6 @@ Please also see the page with :doc:`Warning messages `. *Found no restart file matching pattern* When using a "\*" in the restart file name, no matching file was found. -*GPU library not compiled for this accelerator* - Self-explanatory. - -*GPU package does not (yet) work with atom_style template* - Self-explanatory. - *GPU particle split must be set to 1 for this pair style.* For this pair style, you cannot run part of the force calculation on the host. See the package command. @@ -4329,21 +2463,12 @@ Please also see the page with :doc:`Warning messages `. *Gravity changed since fix pour was created* The gravity vector defined by fix gravity must be static. -*Gravity must point in -y to use with fix pour in 2d* - Self-explanatory. - -*Gravity must point in -z to use with fix pour in 3d* - Self-explanatory. - *Grmask function in equal-style variable formula* Grmask is per-atom operation. *Group ID does not exist* A group ID used in the group command does not exist. -*Group ID in variable formula does not exist* - Self-explanatory. - *Group all cannot be made dynamic* This operation is not allowed. @@ -4351,15 +2476,6 @@ Please also see the page with :doc:`Warning messages `. The group command cannot be used before a read_data, read_restart, or create_box command. -*Group dynamic cannot reference itself* - Self-explanatory. - -*Group dynamic parent group cannot be dynamic* - Self-explanatory. - -*Group dynamic parent group does not exist* - Self-explanatory. - *Group region ID does not exist* A region ID used in the group command does not exist. @@ -4392,19 +2508,10 @@ Please also see the page with :doc:`Warning messages `. One or more of the coefficients defined in the potential file is invalid. -*Illegal compute voronoi/atom command (occupation and (surface or edges))* - Self-explanatory. - *Illegal coul/streitz parameter* One or more of the coefficients defined in the potential file is invalid. -*Illegal dump_modify sfactor value (must be > 0.0)* - Self-explanatory. - -*Illegal dump_modify tfactor value (must be > 0.0)* - Self-explanatory. - *Illegal fix gcmc gas mass <= 0* The computed mass of the designated gas molecule or atom type was less than or equal to zero. @@ -4415,9 +2522,6 @@ Please also see the page with :doc:`Warning messages `. *Illegal fix wall/piston velocity* The piston velocity must be positive. -*Illegal integrate style* - Self-explanatory. - *Illegal nb3b/harmonic parameter* One or more of the coefficients defined in the potential file is invalid. @@ -4487,15 +2591,6 @@ Please also see the page with :doc:`Warning messages `. No improper coefficients have been assigned in the data file or via the improper_coeff command. -*Improper style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Improper style hybrid cannot have none as an argument* - Self-explanatory. - -*Improper style hybrid cannot use same improper style twice* - Self-explanatory. - *Improper_coeff command before improper_style is defined* Coefficients cannot be set in the data file or via the improper_coeff command until an improper_style has been assigned. @@ -4558,24 +2653,6 @@ Please also see the page with :doc:`Warning messages `. *Incorrect SNAP parameter file* The file cannot be parsed correctly, check its internal syntax. -*Incorrect args for angle coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect args for bond coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect args for dihedral coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect args for improper coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect args for pair coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect args in pair_style command* - Self-explanatory. - *Incorrect atom format in data file* Number of values per atom line in the data file is not consistent with the atom style. @@ -4654,49 +2731,25 @@ Please also see the page with :doc:`Warning messages `. *Incorrect integer value in Bodies section of data file* See page for body style. -*Incorrect multiplicity arg for dihedral coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect number of elements in potential file* - Self-explanatory. - *Incorrect rigid body format in fix rigid file* The number of fields per line is not what expected. *Incorrect rigid body format in fix rigid/small file* The number of fields per line is not what expected. -*Incorrect sign arg for dihedral coefficients* - Self-explanatory. Check the input script or data file. - -*Incorrect table format check for element types* - Self-explanatory. - *Incorrect velocity format in data file* Each atom style defines a format for the Velocity section of the data file. The read-in lines do not match. -*Incorrect weight arg for dihedral coefficients* - Self-explanatory. Check the input script or data file. - -*Index between variable brackets must be positive* - Self-explanatory. - *Indexed per-atom vector in variable formula without atom map* Accessing a value from an atom vector requires the ability to lookup an atom index, which is provided by an atom map. An atom map does not exist (by default) for non-molecular problems. Using the atom_modify map command will force an atom map to be created. -*Initial temperatures not all set in fix ttm* - Self-explanatory. - *Input line quote not followed by white-space* An end quote must be followed by white-space. -*Insertion region extends outside simulation box* - Self-explanatory. - *Insufficient Jacobi rotations for POEMS body* Eigensolve for rigid body was not sufficiently accurate. @@ -4720,62 +2773,17 @@ Please also see the page with :doc:`Warning messages `. *Internal error in atom_style body* This error should not occur. Contact the developers. -*Invalid -reorder N value* - Self-explanatory. - -*Invalid Angles section in molecule file* - Self-explanatory. - -*Invalid Bonds section in molecule file* - Self-explanatory. - -*Invalid Boolean syntax in if command* - Self-explanatory. - -*Invalid Charges section in molecule file* - Self-explanatory. - -*Invalid Coords section in molecule file* - Self-explanatory. - -*Invalid Diameters section in molecule file* - Self-explanatory. - -*Invalid Dihedrals section in molecule file* - Self-explanatory. - -*Invalid Impropers section in molecule file* - Self-explanatory. - -*Invalid Kokkos command-line args* - Self-explanatory. See Section 2.7 of the manual for details. - *Invalid LAMMPS restart file* The file does not appear to be a LAMMPS restart file since it does not contain the correct magic string at the beginning. -*Invalid Masses section in molecule file* - Self-explanatory. - *Invalid molecule ID in molecule file* Molecule ID must be a non-zero positive integer. -*Invalid Molecules section in molecule file* - Self-explanatory. - *Invalid REAX atom type* There is a mis-match between LAMMPS atom types and the elements listed in the ReaxFF force field file. -*Invalid Special Bond Counts section in molecule file* - Self-explanatory. - -*Invalid Types section in molecule file* - Self-explanatory. - -*Invalid angle count in molecule file* - Self-explanatory. - *Invalid angle table length* Length must be 2 or greater. @@ -4783,12 +2791,6 @@ Please also see the page with :doc:`Warning messages `. Angle type must be positive integer and within range of specified angle types. -*Invalid angle type in Angles section of molecule file* - Self-explanatory. - -*Invalid angle type index for fix shake* - Self-explanatory. - *Invalid args for non-hybrid pair coefficients* "NULL" is only supported in pair_coeff calls when using pair hybrid @@ -4804,9 +2806,6 @@ Please also see the page with :doc:`Warning messages `. Atom IDs must be positive integers and within range of defined atoms. -*Invalid atom ID in Angles section of molecule file* - Self-explanatory. - *Invalid atom ID in Atoms section of data file* Atom IDs must be positive integers. @@ -4818,9 +2817,6 @@ Please also see the page with :doc:`Warning messages `. Atom IDs must be positive integers and within range of defined atoms. -*Invalid atom ID in Bonds section of molecule file* - Self-explanatory. - *Invalid atom ID in Bonus section of data file* Atom IDs must be positive integers and within range of defined atoms. @@ -4829,9 +2825,6 @@ Please also see the page with :doc:`Warning messages `. Atom IDs must be positive integers and within range of defined atoms. -*Invalid atom ID in Fragments section of molecule file* - Self-explanatory. - *Invalid atom ID in Impropers section of data file* Atom IDs must be positive integers and within range of defined atoms. @@ -4840,15 +2833,6 @@ Please also see the page with :doc:`Warning messages `. Atom IDs must be positive integers and within range of defined atoms. -*Invalid atom ID in dihedrals section of molecule file* - Self-explanatory. - -*Invalid atom ID in impropers section of molecule file* - Self-explanatory. - -*Invalid atom ID in variable file* - Self-explanatory. - *Invalid atom IDs in neb file* An ID in the file was not found in the system. @@ -4877,12 +2861,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid atom type in fix atom/swap command* The atom type specified in the atom/swap command does not exist. -*Invalid atom type in fix bond/create command* - Self-explanatory. - -*Invalid atom type in fix deposit command* - Self-explanatory. - *Invalid atom type in fix deposit mol command* The atom types in the defined molecule are added to the value specified in the create_atoms command, as an offset. The final value @@ -4892,9 +2870,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid atom type in fix gcmc command* The atom type specified in the gcmc command does not exist. -*Invalid atom type in fix pour command* - Self-explanatory. - *Invalid atom type in fix pour mol command* The atom types in the defined molecule are added to the value specified in the create_atoms command, as an offset. The final value @@ -4919,18 +2894,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid atom_style body command* No body style argument was provided. -*Invalid atom_style command* - Self-explanatory. - -*Invalid attribute in dump custom command* - Self-explanatory. - -*Invalid attribute in dump local command* - Self-explanatory. - -*Invalid attribute in dump modify command* - Self-explanatory. - *Invalid basis setting in create_atoms command* The basis index must be between 1 to N where N is the number of basis atoms in the lattice. The type index must be between 1 to N where N @@ -4950,9 +2913,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid body nparticle command* Arguments in atom-style command are not correct. -*Invalid bond count in molecule file* - Self-explanatory. - *Invalid bond table length* Length must be 2 or greater. @@ -4960,21 +2920,6 @@ Please also see the page with :doc:`Warning messages `. Bond type must be positive integer and within range of specified bond types. -*Invalid bond type in Bonds section of molecule file* - Self-explanatory. - -*Invalid bond type in create_bonds command* - Self-explanatory. - -*Invalid bond type in fix bond/break command* - Self-explanatory. - -*Invalid bond type in fix bond/create command* - Self-explanatory. - -*Invalid bond type index for fix shake* - Self-explanatory. Check the fix shake command in the input script. - *Invalid coeffs for this dihedral style* Cannot set class 2 coeffs in data file for this dihedral style. @@ -5078,22 +3023,10 @@ Please also see the page with :doc:`Warning messages `. *Invalid density in set command* Density must be > 0.0. -*Invalid diameter in set command* - Self-explanatory. - -*Invalid dihedral count in molecule file* - Self-explanatory. - *Invalid dihedral type in Dihedrals section of data file* Dihedral type must be positive integer and within range of specified dihedral types. -*Invalid dihedral type in dihedrals section of molecule file* - Self-explanatory. - -*Invalid dipole length in set command* - Self-explanatory. - *Invalid displace_atoms rotate axis for 2d* Axis must be in z direction. @@ -5133,15 +3066,9 @@ Please also see the page with :doc:`Warning messages `. *Invalid dump_modify threshold operator* Operator keyword used for threshold specification in not recognized. -*Invalid entry in -reorder file* - Self-explanatory. - *Invalid fix ID in variable formula* The fix is not recognized. -*Invalid fix ave/time off column* - Self-explanatory. - *Invalid fix box/relax command for a 2d simulation* Fix box/relax styles involving the z dimension cannot be used in a 2d simulation. @@ -5152,12 +3079,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid fix box/relax pressure settings* Settings for coupled dimensions must be the same. -*Invalid fix halt attribute* - Self-explanatory. - -*Invalid fix halt operator* - Self-explanatory. - *Invalid fix nvt/npt/nph command for a 2d simulation* Cannot control z dimension in a 2d model. @@ -5212,94 +3133,22 @@ Please also see the page with :doc:`Warning messages `. *Invalid group function in variable formula* Group function is not recognized. -*Invalid group in comm_modify command* - Self-explanatory. - *Invalid image up vector* Up vector cannot be (0,0,0). *Invalid immediate variable* Syntax of immediate value is incorrect. -*Invalid improper count in molecule file* - Self-explanatory. - *Invalid improper type in Impropers section of data file* Improper type must be positive integer and within range of specified improper types. -*Invalid improper type in impropers section of molecule file* - Self-explanatory. - *Invalid index for non-body particles in compute body/local command* Only indices 1,2,3 can be used for non-body particles. -*Invalid index in compute body/local command* - Self-explanatory. - -*Invalid is_active() function in variable formula* - Self-explanatory. - -*Invalid is_available() function in variable formula* - Self-explanatory. - -*Invalid is_defined() function in variable formula* - Self-explanatory. - -*Invalid keyword in angle table parameters* - Self-explanatory. - -*Invalid keyword in bond table parameters* - Self-explanatory. - -*Invalid keyword in compute angle/local command* - Self-explanatory. - -*Invalid keyword in compute bond/local command* - Self-explanatory. - -*Invalid keyword in compute dihedral/local command* - Self-explanatory. - -*Invalid keyword in compute improper/local command* - Self-explanatory. - -*Invalid keyword in compute pair/local command* - Self-explanatory. - -*Invalid keyword in compute property/atom command* - Self-explanatory. - -*Invalid keyword in compute property/chunk command* - Self-explanatory. - -*Invalid keyword in compute property/local command* - Self-explanatory. - -*Invalid keyword in dump cfg command* - Self-explanatory. - *Invalid keyword in pair table parameters* Keyword used in list of table parameters is not recognized. -*Invalid length in set command* - Self-explanatory. - -*Invalid mass in set command* - Self-explanatory. - -*Invalid mass line in data file* - Self-explanatory. - -*Invalid mass value* - Self-explanatory. - -*Invalid math function in variable formula* - Self-explanatory. - -*Invalid math/group/special function in variable formula* - Self-explanatory. - *Invalid option in lattice command for non-custom style* Certain lattice keywords are not supported unless the lattice style is "custom". @@ -5340,9 +3189,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid random number seed in set command* Random number seed must be > 0. -*Invalid replace values in compute reduce* - Self-explanatory. - *Invalid rigid body ID in fix rigid file* The ID does not match the number of an existing ID of rigid bodies that are defined by the fix rigid command. @@ -5355,12 +3201,6 @@ Please also see the page with :doc:`Warning messages `. The number of timesteps must fit in a 32-bit integer. If you want to run for more steps than this, perform multiple shorter runs. -*Invalid run command start/stop value* - Self-explanatory. - -*Invalid run command upto value* - Self-explanatory. - *Invalid seed for Marsaglia random # generator* The initial seed for this random number generator must be a positive integer less than or equal to 900 million. @@ -5369,45 +3209,9 @@ Please also see the page with :doc:`Warning messages `. The initial seed for this random number generator must be a positive integer. -*Invalid shake angle type in molecule file* - Self-explanatory. - -*Invalid shake atom in molecule file* - Self-explanatory. - -*Invalid shake bond type in molecule file* - Self-explanatory. - -*Invalid shake flag in molecule file* - Self-explanatory. - -*Invalid shape in Ellipsoids section of data file* - Self-explanatory. - *Invalid shape in Triangles section of data file* Two or more of the triangle corners are duplicate points. -*Invalid shape in set command* - Self-explanatory. - -*Invalid shear direction for fix wall/gran* - Self-explanatory. - -*Invalid special atom index in molecule file* - Self-explanatory. - -*Invalid special function in variable formula* - Self-explanatory. - -*Invalid style in pair_write command* - Self-explanatory. Check the input script. - -*Invalid syntax in variable formula* - Self-explanatory. - -*Invalid t_event in prd command* - Self-explanatory. - *Invalid t_event in tad command* The value must be greater than 0. @@ -5473,9 +3277,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid variable evaluation in variable formula* A variable used in a formula could not be evaluated. -*Invalid variable in next command* - Self-explanatory. - *Invalid variable name* Variable name used in an input script line is invalid. @@ -5492,21 +3293,6 @@ Please also see the page with :doc:`Warning messages `. *Invalid volume in set command* Volume must be > 0.0. -*Invalid wiggle direction for fix wall/gran* - Self-explanatory. - -*Invoked angle equil angle on angle style none* - Self-explanatory. - -*Invoked angle single on angle style none* - Self-explanatory. - -*Invoked bond equil distance on bond style none* - Self-explanatory. - -*Invoked bond single on bond style none* - Self-explanatory. - *Invoked pair single on pair style none* A command (e.g. a dump) attempted to invoke the single() function on a pair style none, which is illegal. You are probably attempting to @@ -5523,12 +3309,6 @@ Please also see the page with :doc:`Warning messages `. Model. Please contact the OpenKIM database maintainers to verify and potentially correct this. -*KOKKOS package does not yet support comm_style tiled* - Self-explanatory. - -*KOKKOS package requires a kokkos enabled atom_style* - Self-explanatory. - *KSpace accuracy must be > 0* The kspace accuracy designated in the input must be greater than zero. @@ -5553,9 +3333,6 @@ Please also see the page with :doc:`Warning messages `. Setting a kspace style requires that a pair style with matching long-range Coulombic or dispersion components be used. -*Keyword %s in MEAM parameter file not recognized* - Self-explanatory. - *Kokkos has been compiled for CUDA but no GPUs are requested* One or more GPUs must be used when Kokkos is compiled for CUDA. @@ -5569,39 +3346,18 @@ Please also see the page with :doc:`Warning messages `. the required accuracy via *force/disp/real* as well as *force/disp/kspace* is set. -*Kspace style does not support compute group/group* - Self-explanatory. - -*Kspace style pppm/disp/tip4p requires newton on* - Self-explanatory. - -*Kspace style pppm/tip4p requires newton on* - Self-explanatory. - *Kspace style requires atom attribute q* The atom style defined does not have these attributes. -*Kspace_modify eigtol must be smaller than one* - Self-explanatory. - *LAMMPS is not built with Python embedded* This is done by including the PYTHON package before LAMMPS is built. This is required to use python-style variables. -*LAMMPS unit_style lj not supported by KIM models* - Self-explanatory. Check the input script or data file. - -*LJ6 off not supported in pair_style buck/long/coul/long* - Self-explanatory. - *Label map is incomplete: all types must be assigned a unique type label* For a given type-kind (atom types, bond types, etc.) to be written to the data file, all associated types must be assigned a type label, and each type label can be assigned to only one numeric type. -*Label wasn't found in input script* - Self-explanatory. - *Labelmap command before simulation box is defined* The labelmap command cannot be used before a read_data, read_restart, or create_box command. @@ -5629,9 +3385,6 @@ Please also see the page with :doc:`Warning messages `. 2d simulation can use sq, sq2, or hex lattice. 3d simulation can use sc, bcc, or fcc lattice. -*Log of zero/negative value in variable formula* - Self-explanatory. - *Lost atoms via balance: original %ld current %ld* This should not occur. Report the problem to the developers. @@ -5682,9 +3435,6 @@ Please also see the page with :doc:`Warning messages `. The minimize command cannot be used before a read_data, read_restart, or create_box command. -*Mismatched brackets in variable* - Self-explanatory. - *Mismatched compute in variable formula* A compute is referenced incorrectly or a compute that produces per-atom values is used in an equal-style variable formula. @@ -5701,9 +3451,6 @@ Please also see the page with :doc:`Warning messages `. produces per-atom values is used in an equal-style variable formula. -*Modulo 0 in variable formula* - Self-explanatory. - *Molecule IDs too large for compute chunk/atom* The IDs must not be larger than can be stored in a 32-bit integer since chunk IDs are 32-bit integers. @@ -5711,42 +3458,6 @@ Please also see the page with :doc:`Warning messages `. *Molecule auto special bond generation overflow* Counts exceed maxspecial setting for other atoms in system. -*Molecule file has angles but no nangles setting* - Self-explanatory. - -*Molecule file has body params but no setting for them* - Self-explanatory. - -*Molecule file has bonds but no nbonds setting* - Self-explanatory. - -*Molecule file has dihedrals but no ndihedrals setting* - Self-explanatory. - -*Molecule file has fragments but no nfragments setting* - Self-explanatory. - -*Molecule file has impropers but no nimpropers setting* - Self-explanatory. - -*Molecule file has no Body Doubles section* - Self-explanatory. - -*Molecule file has no Body Integers section* - Self-explanatory. - -*Molecule file has no Fragments section* - Self-explanatory. - -*Molecule file has special flags but no bonds* - Self-explanatory. - -*Molecule file needs both Special Bond sections* - Self-explanatory. - -*Molecule file requires atom style body* - Self-explanatory. - *Molecule file shake flags not before shake atoms* The order of the two sections is important. @@ -5759,42 +3470,6 @@ Please also see the page with :doc:`Warning messages `. *Molecule file special list does not match special count* The number of values in an atom's special list does not match count. -*Molecule file z center-of-mass must be 0.0 for 2d* - Self-explanatory. - -*Molecule file z coord must be 0.0 for 2d* - Self-explanatory. - -*Molecule natoms must be 1 for body particle* - Self-explanatory. - -*Molecule sizescale must be 1.0 for body particle* - Self-explanatory. - -*Molecule template ID for atom_style template does not exist* - Self-explanatory. - -*Molecule template ID for create_atoms does not exist* - Self-explanatory. - -*Molecule template ID for fix deposit does not exist* - Self-explanatory. - -*Molecule template ID for fix gcmc does not exist* - Self-explanatory. - -*Molecule template ID for fix pour does not exist* - Self-explanatory. - -*Molecule template ID for fix rigid/small does not exist* - Self-explanatory. - -*Molecule template ID for fix shake does not exist* - Self-explanatory. - -*Molecule template ID must be alphanumeric or underscore characters* - Self-explanatory. - *Molecule topology/atom exceeds system topology/atom* The number of bonds, angles, etc per-atom in the molecule exceeds the system setting. See the create_box command for how to specify these @@ -5815,9 +3490,6 @@ Please also see the page with :doc:`Warning messages `. *More than one fix shake* Only one fix shake can be defined. -*Mu not allowed when not using semi-grand in fix atom/swap command* - Self-explanatory. - *Must define angle_style before Angle Coeffs* Must use an angle_style command before reading a data file that defines Angle Coeffs. @@ -5878,9 +3550,6 @@ Please also see the page with :doc:`Warning messages `. Cannot use the temper command with only one processor partition. Use the -partition command-line option. -*Must not have multiple fixes change box parameter ...* - Self-explanatory. - *Must read Angle Type Labels before Angles* An Angle Type Labels section of a data file must come before the Angles section. @@ -5945,21 +3614,6 @@ Please also see the page with :doc:`Warning messages `. *Must specify a region in fix deposit* The region keyword must be specified with this fix. -*Must specify a region in fix pour* - Self-explanatory. - -*Must specify at least 2 types in fix atom/swap command* - Self-explanatory. - -*Must use 'kim_style init' command before simulation box is defined* - Self-explanatory. - -*Must use 'kim_style define' command after simulation box is defined* - Self-explanatory. - -*Must use 'kim_style init' command before 'kim_style define'* - Self-explanatory. - *Must use 'kspace_modify pressure/scalar no' for rRESPA with kspace_style MSM* The kspace scalar pressure option cannot (yet) be used with rRESPA. @@ -5983,22 +3637,10 @@ Please also see the page with :doc:`Warning messages `. *Must use Kokkos half/thread or full neighbor list with threads or GPUs* Using Kokkos half-neighbor lists with threading is not allowed. -*Must use a block or cylinder region with fix pour* - Self-explanatory. - -*Must use a block region with fix pour for 2d simulations* - Self-explanatory. - *Must use a bond style with TIP4P potential* TIP4P potentials assume bond lengths in water are constrained by a fix shake command. -*Must use a molecular atom style with fix poems molecule* - Self-explanatory. - -*Must use a z-axis cylinder region with fix pour* - Self-explanatory. - *Must use an angle style with TIP4P potential* TIP4P potentials assume angles in water are constrained by a fix shake command. @@ -6006,12 +3648,6 @@ Please also see the page with :doc:`Warning messages `. *Must use atom map style array with Kokkos* See the atom_modify map command. -*Must use atom style with molecule IDs with fix bond/swap* - Self-explanatory. - -*Must use pair_style comb or comb3 with fix qeq/comb* - Self-explanatory. - *Must use variable energy with fix addforce* Must define an energy variable when applying a dynamic force during minimization. @@ -6020,21 +3656,12 @@ Please also see the page with :doc:`Warning messages `. You must define an energy when performing a minimization with a variable E-field. -*NEB command before simulation box is defined* - Self-explanatory. - *NEB requires damped dynamics minimizer* Use a different minimization style. -*NEB requires use of fix neb* - Self-explanatory. - *NL ramp in wall/piston only implemented in zlo for now* The ramp keyword can only be used for piston applied to face zlo. -*Need nswaptypes mu values in fix atom/swap command* - Self-explanatory. - *Needed bonus data not in data file* Some atom styles require bonus data. See the read_data page for details. @@ -6043,12 +3670,6 @@ Please also see the page with :doc:`Warning messages `. The header of the data file indicated bonds, angles, etc would be included, but they are not present. -*Neigh_modify exclude molecule requires atom attribute molecule* - Self-explanatory. - -*Neigh_modify include group != atom_modify first group* - Self-explanatory. - *Neighbor delay must be 0 or multiple of every setting* The delay and every parameters set via the neigh_modify command are inconsistent. If the delay setting is non-zero, then it must be a @@ -6065,12 +3686,6 @@ Please also see the page with :doc:`Warning messages `. *Neighbor multi not yet enabled for ghost neighbors* This is a current restriction within LAMMPS. -*Neighbor multi not yet enabled for granular* - Self-explanatory. - -*Neighbor multi not yet enabled for rRESPA* - Self-explanatory. - *Neighbor page size must be >= 10x the one atom setting* This is required to prevent wasting too much memory. @@ -6098,19 +3713,10 @@ Please also see the page with :doc:`Warning messages `. *Next command must list all universe and uloop variables* This is to ensure they stay in sync. -*No Kspace style defined for compute group/group* - Self-explanatory. - *No OpenMP support compiled in* An OpenMP flag is set, but LAMMPS was not built with OpenMP support. -*No angle style is defined for compute angle/local* - Self-explanatory. - -*No angles allowed with this atom style* - Self-explanatory. - *No atoms in data file* The header of the data file indicated that atoms would be included, but they are not present. @@ -6118,52 +3724,16 @@ Please also see the page with :doc:`Warning messages `. *No basis atoms in lattice* Basis atoms must be defined for lattice style user. -*No bodies allowed with this atom style* - Self-explanatory. Check data file. - -*No bond style is defined for compute bond/local* - Self-explanatory. - -*No bonds allowed with this atom style* - Self-explanatory. - -*No box information in dump. You have to use 'box no'* - Self-explanatory. - *No count or invalid atom count in molecule file* The number of atoms must be specified. -*No dihedral style is defined for compute dihedral/local* - Self-explanatory. - -*No dihedrals allowed with this atom style* - Self-explanatory. - *No dump custom arguments specified* The dump custom command requires that atom quantities be specified to output to dump file. -*No dump local arguments specified* - Self-explanatory. - -*No ellipsoids allowed with this atom style* - Self-explanatory. Check data file. - *No fix gravity defined for fix pour* Gravity is required to use fix pour. -*No improper style is defined for compute improper/local* - Self-explanatory. - -*No impropers allowed with this atom style* - Self-explanatory. - -*No input values for fix ave/spatial* - Self-explanatory. - -*No lines allowed with this atom style* - Self-explanatory. Check data file. - *No matching element in ADP potential file* The ADP potential file does not contain elements that match the requested elements. @@ -6176,39 +3746,15 @@ Please also see the page with :doc:`Warning messages `. The data file cannot specify the number of bonds, angles, etc, because this info if inferred from the molecule templates. -*No overlap of box and region for create_atoms* - Self-explanatory. - *No pair coul/streitz for fix qeq/slater* These commands must be used together. -*No pair hbond/dreiding coefficients set* - Self-explanatory. - *No pair style defined for compute group/group* Cannot calculate group interactions without a pair style defined. -*No pair style is defined for compute pair/local* - Self-explanatory. - -*No pair style is defined for compute property/local* - Self-explanatory. - *No rigid bodies defined* The fix specification did not end up defining any rigid bodies. -*No triangles allowed with this atom style* - Self-explanatory. Check data file. - -*No values in fix ave/chunk command* - Self-explanatory. - -*No values in fix ave/time command* - Self-explanatory. - -*Non digit character between brackets in variable* - Self-explanatory. - *Non integer # of swaps in temper command* Swap frequency in temper command must evenly divide the total # of timesteps. @@ -6216,15 +3762,6 @@ Please also see the page with :doc:`Warning messages `. *Non-numeric box dimensions - simulation unstable* The box size has apparently blown up. -*Non-zero atom IDs with atom_modify id = no* - Self-explanatory. - -*Non-zero read_data shift z value for 2d simulation* - Self-explanatory. - -*Nprocs not a multiple of N for -reorder* - Self-explanatory. - *Number of core atoms != number of shell atoms* There must be a one-to-one pairing of core and shell atoms. @@ -6247,25 +3784,10 @@ Please also see the page with :doc:`Warning messages `. Two or more rigid bodies defined by the fix rigid command cannot contain the same atom. -*One or more rigid bodies are a single particle* - Self-explanatory. - *One or zero atoms in rigid body* Any rigid body defined by the fix rigid command must contain 2 or more atoms. -*Only 2 types allowed when not using semi-grand in fix atom/swap command* - Self-explanatory. - -*Only one cut-off allowed when requesting all long* - Self-explanatory. - -*Only one cutoff allowed when requesting all long* - Self-explanatory. - -*Only zhi currently implemented for fix append/atoms* - Self-explanatory. - *Out of range atoms - cannot compute MSM* One or more atoms are attempting to map their charge to a MSM grid point that is not owned by a processor. This is likely for one of two @@ -6366,12 +3888,6 @@ Please also see the page with :doc:`Warning messages `. The prd command cannot be used before a read_data, read_restart, or create_box command. -*PRD nsteps must be multiple of t_event* - Self-explanatory. - -*PRD t_corr must be multiple of t_event* - Self-explanatory. - *Package command after simulation box is defined* The package command cannot be used after a read_data, read_restart, or create_box command. @@ -6392,30 +3908,18 @@ Please also see the page with :doc:`Warning messages `. The OPENMP package must be installed via "make yes-openmp" before LAMMPS is built. -*Pair body requires atom style body* - Self-explanatory. - *Pair body requires body style nparticle* This pair style is specific to the nparticle body style. -*Pair brownian requires atom style sphere* - Self-explanatory. - *Pair brownian requires extended particles* One of the particles has radius 0.0. *Pair brownian requires monodisperse particles* All particles must be the same finite size. -*Pair brownian/poly requires atom style sphere* - Self-explanatory. - *Pair brownian/poly requires extended particles* One of the particles has radius 0.0. -*Pair brownian/poly requires newton pair off* - Self-explanatory. - *Pair coeff for hybrid has invalid style* Style in pair coeff must have been listed in pair_style command. @@ -6451,18 +3955,6 @@ Please also see the page with :doc:`Warning messages `. Each atom type involved in pair_style gayberne must have these 3 coefficients set at least once. -*Pair gayberne requires atom style ellipsoid* - Self-explanatory. - -*Pair gayberne requires atoms with same type have same shape* - Self-explanatory. - -*Pair gayberne/gpu requires atom style ellipsoid* - Self-explanatory. - -*Pair gayberne/gpu requires atoms with same type have same shape* - Self-explanatory. - *Pair granular requires atom attributes radius, rmass* The atom style defined does not have these attributes. @@ -6473,9 +3965,6 @@ Please also see the page with :doc:`Warning messages `. This is a current restriction of the implementation of pair granular styles with history. -*Pair hybrid single calls do not support per sub-style special bond values* - Self-explanatory. - *Pair hybrid sub-style does not support single call* You are attempting to invoke a single() call on a pair style that does not support it. @@ -6491,36 +3980,21 @@ Please also see the page with :doc:`Warning messages `. *Pair inner cutoff >= Pair outer cutoff* The specified cutoffs for the pair style are inconsistent. -*Pair line/lj requires atom style line* - Self-explanatory. - *Pair lj/long/dipole/long requires atom attributes mu, torque* The atom style defined does not have these attributes. -*Pair lubricate requires atom style sphere* - Self-explanatory. - *Pair lubricate requires ghost atoms store velocity* Use the comm_modify vel yes command to enable this. *Pair lubricate requires monodisperse particles* All particles must be the same finite size. -*Pair lubricate/poly requires atom style sphere* - Self-explanatory. - *Pair lubricate/poly requires extended particles* One of the particles has radius 0.0. *Pair lubricate/poly requires ghost atoms store velocity* Use the comm_modify vel yes command to enable this. -*Pair lubricate/poly requires newton pair off* - Self-explanatory. - -*Pair lubricateU requires atom style sphere* - Self-explanatory. - *Pair lubricateU requires ghost atoms store velocity* Use the comm_modify vel yes command to enable this. @@ -6530,9 +4004,6 @@ Please also see the page with :doc:`Warning messages `. *Pair lubricateU/poly requires ghost atoms store velocity* Use the comm_modify vel yes command to enable this. -*Pair lubricateU/poly requires newton pair off* - Self-explanatory. - *Pair peri lattice is not identical in x, y, and z* The lattice defined by the lattice command must be cubic. @@ -6543,24 +4014,6 @@ Please also see the page with :doc:`Warning messages `. Even for atomic systems, an atom map is required to find Peridynamic bonds. Use the atom_modify command to define one. -*Pair resquared epsilon a,b,c coeffs are not all set* - Self-explanatory. - -*Pair resquared epsilon and sigma coeffs are not all set* - Self-explanatory. - -*Pair resquared requires atom style ellipsoid* - Self-explanatory. - -*Pair resquared requires atoms with same type have same shape* - Self-explanatory. - -*Pair resquared/gpu requires atom style ellipsoid* - Self-explanatory. - -*Pair resquared/gpu requires atoms with same type have same shape* - Self-explanatory. - *Pair style AIREBO requires atom IDs* This is a requirement to use the AIREBO potential. @@ -6578,9 +4031,6 @@ Please also see the page with :doc:`Warning messages `. *Pair style COMB requires atom IDs* This is a requirement to use the AIREBO potential. -*Pair style COMB requires atom attribute q* - Self-explanatory. - *Pair style COMB requires newton pair on* See the newton command. This is a restriction to use the COMB potential. @@ -6588,9 +4038,6 @@ Please also see the page with :doc:`Warning messages `. *Pair style COMB3 requires atom IDs* This is a requirement to use the COMB3 potential. -*Pair style COMB3 requires atom attribute q* - Self-explanatory. - *Pair style COMB3 requires newton pair on* See the newton command. This is a restriction to use the COMB3 potential. @@ -6674,9 +4121,6 @@ Please also see the page with :doc:`Warning messages `. *Pair style coul/long/gpu requires atom attribute q* The atom style defined does not have these attributes. -*Pair style coul/streitz requires atom attribute q* - Self-explanatory. - *Pair style does not have extra field requested by compute pair/local* The pair style does not support the pN value requested by the compute pair/local command. @@ -6713,24 +4157,9 @@ Please also see the page with :doc:`Warning messages `. Atoms in the simulation do not have IDs, so history effects cannot be tracked by the granular pair potential. -*Pair style hbond/dreiding requires an atom map, see atom_modify* - Self-explanatory. - -*Pair style hbond/dreiding requires atom IDs* - Self-explanatory. - -*Pair style hbond/dreiding requires molecular system* - Self-explanatory. - *Pair style hbond/dreiding requires newton pair on* See the newton command for details. -*Pair style hybrid cannot have hybrid as an argument* - Self-explanatory. - -*Pair style hybrid cannot have none as an argument* - Self-explanatory. - *Pair style is incompatible with KSpace style* If a pair style with a long-range Coulombic component is selected, then a kspace style must also be used. @@ -6830,9 +4259,6 @@ Please also see the page with :doc:`Warning messages `. *Pair style nm/cut/coul/long requires atom attribute q* The atom style defined does not have this attribute. -*Pair style peri requires atom style peri* - Self-explanatory. - *Pair style polymorphic requires atom IDs* This is a requirement to use the polymorphic potential. @@ -6852,9 +4278,6 @@ Please also see the page with :doc:`Warning messages `. *Pair style requires a KSpace style* No kspace style is defined. -*Pair style requires use of kspace_style ewald/disp* - Self-explanatory. - *Pair style sw/gpu requires atom IDs* This is a requirement to use this potential. @@ -6907,38 +4330,17 @@ Please also see the page with :doc:`Warning messages `. *Pair tersoff/zbl/kk requires metal or real units* This is a current restriction of this pair potential. -*Pair tri/lj requires atom style tri* - Self-explanatory. - -*Pair yukawa/colloid requires atom style sphere* - Self-explanatory. - -*Pair yukawa/colloid requires atoms with same type have same radius* - Self-explanatory. - -*Pair yukawa/colloid/gpu requires atom style sphere* - Self-explanatory. - *PairKIM only works with 3D problems* This is a current limitation. -*Pair_coeff command before pair_style is defined* - Self-explanatory. - *Pair_coeff command before simulation box is defined* The pair_coeff command cannot be used before a read_data, read_restart, or create_box command. -*Pair_modify command before pair_style is defined* - Self-explanatory. - *Pair_modify special setting for pair hybrid incompatible with global special_bonds setting* Cannot override a setting of 0.0 or 1.0 or change a setting between 0.0 and 1.0. -*Pair_write command before pair_style is defined* - Self-explanatory. - *Particle on or inside fix wall surface* Particles must be "exterior" to the wall in order for energy/force to be calculated. @@ -6967,9 +4369,6 @@ Please also see the page with :doc:`Warning messages `. The number of owned atoms plus ghost atoms on a single processor must fit in 32-bit integer. -*Potential energy ID for fix neb does not exist* - Self-explanatory. - *Potential energy ID for fix nvt/nph/npt does not exist* A compute for potential energy must be defined. @@ -6979,79 +4378,22 @@ Please also see the page with :doc:`Warning messages `. *Potential file is missing an entry* The potential file does not have a needed entry. -*Power by 0 in variable formula* - Self-explanatory. - *Pressure ID for fix box/relax does not exist* The compute ID needed to compute pressure for the fix does not exist. -*Pressure ID for fix modify does not exist* - Self-explanatory. - -*Pressure ID for fix npt/nph does not exist* - Self-explanatory. - *Pressure ID for fix press/berendsen does not exist* The compute ID needed to compute pressure for the fix does not exist. -*Pressure ID for fix rigid npt/nph does not exist* - Self-explanatory. - *Pressure ID for thermo does not exist* The compute ID needed to compute pressure for thermodynamics does not exist. -*Pressure control can not be used with fix nvt* - Self-explanatory. - -*Pressure control can not be used with fix nvt/asphere* - Self-explanatory. - -*Pressure control can not be used with fix nvt/body* - Self-explanatory. - -*Pressure control can not be used with fix nvt/sllod* - Self-explanatory. - -*Pressure control can not be used with fix nvt/sphere* - Self-explanatory. - -*Pressure control must be used with fix nph* - Self-explanatory. - -*Pressure control must be used with fix nph/asphere* - Self-explanatory. - -*Pressure control must be used with fix nph/body* - Self-explanatory. - -*Pressure control must be used with fix nph/small* - Self-explanatory. - -*Pressure control must be used with fix nph/sphere* - Self-explanatory. - *Pressure control must be used with fix nphug* A pressure control keyword (iso, aniso, tri, x, y, or z) must be provided. -*Pressure control must be used with fix npt* - Self-explanatory. - -*Pressure control must be used with fix npt/asphere* - Self-explanatory. - -*Pressure control must be used with fix npt/body* - Self-explanatory. - -*Pressure control must be used with fix npt/sphere* - Self-explanatory. - -*Processor count in z must be 1 for 2d simulation* - Self-explanatory. - *Processor partitions do not match number of allocated processors* The total number of processors in all partitions must match the number of processors LAMMPS is running on. @@ -7072,12 +4414,6 @@ Please also see the page with :doc:`Warning messages `. *Processors part option and grid style are incompatible* Cannot use gstyle numa or custom with the part option. -*Processors twogrid requires proc count be a multiple of core count* - Self-explanatory. - -*Pstart and Pstop must have the same value* - Self-explanatory. - *Python function evaluation failed* The Python function did not run successfully and/or did not return a value (if it is supposed to return a value). This is probably due to @@ -7104,9 +4440,6 @@ Please also see the page with :doc:`Warning messages `. *R0 < 0 for fix spring command* Equilibrium spring length is invalid. -*RATTLE coordinate constraints are not satisfied up to desired tolerance* - Self-explanatory. - *RATTLE determinant = 0.0* The determinant of the matrix being solved for a single cluster specified by the fix rattle command is numerically invalid. @@ -7114,19 +4447,10 @@ Please also see the page with :doc:`Warning messages `. *RATTLE failed* Certain constraints were not satisfied. -*RATTLE velocity constraints are not satisfied up to desired tolerance* - Self-explanatory. - *Read data add offset is too big* It cannot be larger than the size of atom IDs, e.g. the maximum 32-bit integer. -*Read dump of atom property that is not allocated* - Self-explanatory. - -*Read rerun dump file timestep > specified stop* - Self-explanatory. - *Read restart MPI-IO input not allowed with % in filename* This is because a % signifies one file per processor and MPI-IO creates one large file for all processors. @@ -7142,16 +4466,10 @@ Please also see the page with :doc:`Warning messages `. The read_dump command cannot be used before a read_data, read_restart, or create_box command. -*Read_dump field not found in dump file* - Self-explanatory. - *Read_dump triclinic status does not match simulation* Both the dump snapshot and the current LAMMPS simulation must be using either an orthogonal or triclinic box. -*Read_dump xyz fields do not have consistent scaling/wrapping* - Self-explanatory. - *Reax_defs.h setting for NATDEF is too small* Edit the setting in the ReaxFF library and re-compile the library and re-build LAMMPS. @@ -7163,66 +4481,6 @@ Please also see the page with :doc:`Warning messages `. *Receiving partition in processors part command is already a receiver* Cannot specify a partition to be a receiver twice. -*Region ID for compute chunk/atom does not exist* - Self-explanatory. - -*Region ID for compute reduce/region does not exist* - Self-explanatory. - -*Region ID for compute temp/region does not exist* - Self-explanatory. - -*Region ID for dump custom does not exist* - Self-explanatory. - -*Region ID for fix addforce does not exist* - Self-explanatory. - -*Region ID for fix atom/swap does not exist* - Self-explanatory. - -*Region ID for fix ave/spatial does not exist* - Self-explanatory. - -*Region ID for fix aveforce does not exist* - Self-explanatory. - -*Region ID for fix deposit does not exist* - Self-explanatory. - -*Region ID for fix efield does not exist* - Self-explanatory. - -*Region ID for fix evaporate does not exist* - Self-explanatory. - -*Region ID for fix gcmc does not exist* - Self-explanatory. - -*Region ID for fix heat does not exist* - Self-explanatory. - -*Region ID for fix setforce does not exist* - Self-explanatory. - -*Region ID for fix wall/region does not exist* - Self-explanatory. - -*Region ID for group dynamic does not exist* - Self-explanatory. - -*Region ID in variable formula does not exist* - Self-explanatory. - -*Region cannot have 0 length rotation vector* - Self-explanatory. - -*Region for fix oneway does not exist* - Self-explanatory. - -*Region intersect region ID does not exist* - Self-explanatory. - *Region union or intersect cannot be dynamic* The sub-regions can be dynamic, but not the combined region. @@ -7259,18 +4517,12 @@ Please also see the page with :doc:`Warning messages `. The rerun command cannot be used before a read_data, read_restart, or create_box command. -*Rerun dump file does not contain requested snapshot* - Self-explanatory. - *Resetting timestep size is not allowed with fix move* This is because fix move is moving atoms based on elapsed time. *Respa inner cutoffs are invalid* The first cutoff must be <= the second cutoff. -*Respa levels must be >= 1* - Self-explanatory. - *Respa middle cutoffs are invalid* The first cutoff must be <= the second cutoff. @@ -7359,12 +4611,6 @@ Please also see the page with :doc:`Warning messages `. The run command cannot be used before a read_data, read_restart, or create_box command. -*Run command start value is after start of run* - Self-explanatory. - -*Run command stop value is before end of run* - Self-explanatory. - *Run_style command before simulation box is defined* The run_style command cannot be used before a read_data, read_restart, or create_box command. @@ -7385,9 +4631,6 @@ Please also see the page with :doc:`Warning messages `. See the inside keyword if you want this message to be an error vs warning. -*Same dimension twice in fix ave/spatial* - Self-explanatory. - *Sending partition in processors part command is already a sender* Cannot specify a partition to be a sender twice. @@ -7395,12 +4638,6 @@ Please also see the page with :doc:`Warning messages `. The set command cannot be used before a read_data, read_restart, or create_box command. -*Set command floating point vector does not exist* - Self-explanatory. - -*Set command integer vector does not exist* - Self-explanatory. - *Set command with no atoms existing* No atoms are yet defined so the set command cannot be used. @@ -7474,12 +4711,6 @@ Please also see the page with :doc:`Warning messages `. The 3d grid of processors defined by the processors command does not match the number of processors LAMMPS is being run on. -*Specified target stress must be uniaxial or hydrostatic* - Self-explanatory. - -*Sqrt of negative value in variable formula* - Self-explanatory. - *Subsequent read data induced too many angles per atom* See the extra/angle/per/atom keyword for the create_box or the read_data command to set this limit larger @@ -7516,9 +4747,6 @@ Please also see the page with :doc:`Warning messages `. The total charge on all atoms on the system is not 0.0. For some KSpace solvers this is an error. -*TAD nsteps must be multiple of t_event* - Self-explanatory. - *TIP4P hydrogen has incorrect atom type* The TIP4P pairwise computation found an H atom whose type does not agree with the specified H type. @@ -7531,9 +4759,6 @@ Please also see the page with :doc:`Warning messages `. The target file for the fix tmd command did not list all atoms in the fix group. -*Tad command before simulation box is defined* - Self-explanatory. - *Tagint setting in lmptype.h is invalid* Tagint must be as large or larger than smallint. @@ -7541,107 +4766,17 @@ Please also see the page with :doc:`Warning messages `. Format of tagint stored in restart file is not consistent with LAMMPS version you are running. See the settings in src/lmptype.h -*Target pressure for fix rigid/nph cannot be < 0.0* - Self-explanatory. - -*Target pressure for fix rigid/npt/small cannot be < 0.0* - Self-explanatory. - -*Target temperature for fix nvt/npt/nph cannot be 0.0* - Self-explanatory. - -*Target temperature for fix rigid/npt cannot be 0.0* - Self-explanatory. - -*Target temperature for fix rigid/npt/small cannot be 0.0* - Self-explanatory. - -*Target temperature for fix rigid/nvt cannot be 0.0* - Self-explanatory. - -*Target temperature for fix rigid/nvt/small cannot be 0.0* - Self-explanatory. - *Temper command before simulation box is defined* The temper command cannot be used before a read_data, read_restart, or create_box command. -*Temperature ID for fix bond/swap does not exist* - Self-explanatory. - -*Temperature ID for fix box/relax does not exist* - Self-explanatory. - -*Temperature ID for fix nvt/npt does not exist* - Self-explanatory. - -*Temperature ID for fix press/berendsen does not exist* - Self-explanatory. - -*Temperature ID for fix rigid nvt/npt/nph does not exist* - Self-explanatory. - -*Temperature ID for fix temp/berendsen does not exist* - Self-explanatory. - -*Temperature ID for fix temp/csld does not exist* - Self-explanatory. - -*Temperature ID for fix temp/csvr does not exist* - Self-explanatory. - -*Temperature ID for fix temp/rescale does not exist* - Self-explanatory. - *Temperature compute degrees of freedom < 0* This should not happen if you are calculating the temperature on a valid set of atoms. -*Temperature control can not be used with fix nph* - Self-explanatory. - -*Temperature control can not be used with fix nph/asphere* - Self-explanatory. - -*Temperature control can not be used with fix nph/body* - Self-explanatory. - -*Temperature control can not be used with fix nph/sphere* - Self-explanatory. - *Temperature control must be used with fix nphug* The temp keyword must be provided. -*Temperature control must be used with fix npt* - Self-explanatory. - -*Temperature control must be used with fix npt/asphere* - Self-explanatory. - -*Temperature control must be used with fix npt/body* - Self-explanatory. - -*Temperature control must be used with fix npt/sphere* - Self-explanatory. - -*Temperature control must be used with fix nvt* - Self-explanatory. - -*Temperature control must be used with fix nvt/asphere* - Self-explanatory. - -*Temperature control must be used with fix nvt/body* - Self-explanatory. - -*Temperature control must be used with fix nvt/sllod* - Self-explanatory. - -*Temperature control must be used with fix nvt/sphere* - Self-explanatory. - -*Temperature control must not be used with fix nph/small* - Self-explanatory. - *Temperature for fix nvt/sllod does not have a bias* The specified compute must compute temperature with a bias. @@ -7659,31 +4794,10 @@ Please also see the page with :doc:`Warning messages `. *Test_descriptor_string already allocated* This is an internal error. Contact the developers. -*The package gpu command is required for gpu styles* - Self-explanatory. - *Thermo and fix not computed at compatible times* Fixes generate values on specific timesteps. The thermo output does not match these timesteps. -*Thermo compute array is accessed out-of-range* - Self-explanatory. - -*Thermo compute does not compute array* - Self-explanatory. - -*Thermo compute does not compute scalar* - Self-explanatory. - -*Thermo compute does not compute vector* - Self-explanatory. - -*Thermo compute vector is accessed out-of-range* - Self-explanatory. - -*Thermo custom variable cannot be indexed* - Self-explanatory. - *Thermo custom variable is not equal-style variable* Only equal-style variables can be output with thermodynamics, not atom-style variables. @@ -7691,21 +4805,6 @@ Please also see the page with :doc:`Warning messages `. *Thermo every variable returned a bad timestep* The variable must return a timestep greater than the current timestep. -*Thermo fix array is accessed out-of-range* - Self-explanatory. - -*Thermo fix does not compute array* - Self-explanatory. - -*Thermo fix does not compute scalar* - Self-explanatory. - -*Thermo fix does not compute vector* - Self-explanatory. - -*Thermo fix vector is accessed out-of-range* - Self-explanatory. - *Thermo keyword in variable requires thermo to use/init pe* You are using a thermo keyword in a variable that requires potential energy to be calculated, but your thermo output @@ -7732,9 +4831,6 @@ Please also see the page with :doc:`Warning messages `. *Thermo_modify every variable returned a bad timestep* The returned timestep is less than or equal to the current timestep. -*Thermo_modify int format does not contain d character* - Self-explanatory. - *Thermo_modify pressure ID does not compute pressure* The specified compute ID does not compute pressure. @@ -7769,15 +4865,6 @@ Please also see the page with :doc:`Warning messages `. Table size specified via pair_modify command does not work with your machine's floating point representation. -*Too few lines in %s section of data file* - Self-explanatory. - -*Too few values in body lines in data file* - Self-explanatory. - -*Too few values in body section of molecule file* - Self-explanatory. - *Too many -pk arguments in command-line* The string formed by concatenating the arguments is too long. Use a package command in the input script instead. @@ -7865,12 +4952,6 @@ Please also see the page with :doc:`Warning messages `. Table size specified via pair_modify command is too large. Note that a value of N generates a 2\^N size table. -*Too many values in body lines in data file* - Self-explanatory. - -*Too many values in body section of molecule file* - Self-explanatory. - *Too much buffered per-proc info for dump* The size of the buffered string must fit in a 32-bit integer for a dump. @@ -7887,9 +4968,6 @@ Please also see the page with :doc:`Warning messages `. Fix poems cannot (yet) work with coupled bodies whose joints connect the bodies in a tree structure. -*Tried to convert a double to int, but input_double > INT_MAX* - Self-explanatory. - *Trying to build an occasional neighbor list before initialization completed* This is not allowed. Source code caller needs to be modified. @@ -7898,9 +4976,6 @@ Please also see the page with :doc:`Warning messages `. chunk assignments persist for some number of timesteps, but are doing it in different ways. -*Two groups cannot be the same in fix spring couple* - Self-explanatory. - *The %s type label %s is already in use for type %s* For a given type-kind (atom types, bond types, etc.), a given type label can be assigned to only one numeric type. @@ -7915,9 +4990,6 @@ Please also see the page with :doc:`Warning messages `. No matching end double quote was found following a leading double quote. -*Unexpected end of -reorder file* - Self-explanatory. - *Unexpected empty line in Angle Coeffs section* Read a blank line where there should be coefficient data. @@ -7933,9 +5005,6 @@ Please also see the page with :doc:`Warning messages `. *Unexpected empty line in Pair Coeffs section* Read a blank line where there should be coefficient data. -*Unexpected end of custom file* - Self-explanatory. - *Unexpected end of data file* LAMMPS hit the end of the data file while attempting to read a section. Something is wrong with the format of the data file. @@ -7949,9 +5018,6 @@ Please also see the page with :doc:`Warning messages `. *Unexpected end of fix rigid/small file* A read operation from the file failed. -*Unexpected end of molecule file* - Self-explanatory. - *Unexpected end of neb file* A read operation from the file failed. @@ -7975,15 +5041,6 @@ Please also see the page with :doc:`Warning messages `. *Unrecognized bond style* The choice of bond style is unknown. -*Unknown category for info is_active()* - Self-explanatory. - -*Unknown category for info is_available()* - Self-explanatory. - -*Unknown category for info is_defined()* - Self-explanatory. - *Unrecognized command: %s* The command is not known to LAMMPS. Check the input script. @@ -7999,9 +5056,6 @@ Please also see the page with :doc:`Warning messages `. *Unrecognized dump style* The choice of dump style is unknown. -*Unknown error in GPU library* - Self-explanatory. - *Unrecognized fix style* The choice of fix style is unknown. @@ -8017,15 +5071,6 @@ Please also see the page with :doc:`Warning messages `. *Unrecognized kspace style* The choice of kspace style is unknown. -*Unknown name for info newton category* - Self-explanatory. - -*Unknown name for info package category* - Self-explanatory. - -*Unknown name for info pair category* - Self-explanatory. - *Unrecognized pair style* The choice of pair style is unknown. @@ -8035,21 +5080,9 @@ Please also see the page with :doc:`Warning messages `. *Unrecognized region style* The choice of region style is unknown. -*Unknown section in molecule file* - Self-explanatory. - -*Unknown table style in angle style table* - Self-explanatory. - -*Unknown table style in bond style table* - Self-explanatory. - *Unknown table style in pair_style command* Style of table is invalid for use with pair_style table command. -*Unknown unit_style* - Self-explanatory. Check the input script or data file. - *Unrecognized lattice type in MEAM library file* The lattice type in an entry of the MEAM library file is not valid. @@ -8058,9 +5091,6 @@ Please also see the page with :doc:`Warning messages `. The lattice type in an entry of the MEAM parameter file is not valid. -*Unrecognized pair style in compute pair command* - Self-explanatory. - *Unsupported mixing rule in kspace_style ewald/disp* Only geometric mixing is supported. @@ -8070,9 +5100,6 @@ Please also see the page with :doc:`Warning messages `. *Unsupported order in kspace_style pppm/disp, pair_style %s* Only pair styles with 1/r and 1/r\^6 dependence are currently supported. -*Unsupported parameter in MEAM library file* - Self-explanatory. - *Use cutoff keyword to set cutoff in single mode* Mode is single so cutoff/multi keyword cannot be used. @@ -8083,9 +5110,6 @@ Please also see the page with :doc:`Warning messages `. Fix nvt/sllod requires that deforming atoms have a velocity profile provided by "remap v" as a fix deform option. -*Using fix nvt/sllod with no fix deform defined* - Self-explanatory. - *Using fix srd with inconsistent fix deform remap option* When shearing the box in an SRD simulation, the remap v option for fix deform needs to be used. @@ -8096,27 +5120,6 @@ Please also see the page with :doc:`Warning messages `. *Using pair lubricate/poly with inconsistent fix deform remap option* If fix deform is used, the remap v option is required. -*Using suffix gpu without GPU package installed* - Self-explanatory. - -*Using suffix intel without INTEL package installed* - Self-explanatory. - -*Using suffix kk without KOKKOS package enabled* - Self-explanatory. - -*Using suffix omp without OPENMP package installed* - Self-explanatory. - -*Using update dipole flag requires atom attribute mu* - Self-explanatory. - -*Using update dipole flag requires atom style sphere* - Self-explanatory. - -*Variable ID in variable formula does not exist* - Self-explanatory. - *Variable atom ID is too large* Specified ID is larger than the maximum allowed atom ID. @@ -8130,9 +5133,6 @@ Please also see the page with :doc:`Warning messages `. *Variable evaluation in region gave bad value* Variable returned a radius < 0.0. -*Variable for compute ti is invalid style* - Self-explanatory. - *Variable for create_atoms is invalid style* The variables must be equal-style variables. @@ -8157,9 +5157,6 @@ Please also see the page with :doc:`Warning messages `. *Variable for fix adapt is invalid style* Only equal-style variables can be used. -*Variable for fix addforce is invalid style* - Self-explanatory. - *Variable for fix aveforce is invalid style* Only equal-style variables can be used. @@ -8223,9 +5220,6 @@ Please also see the page with :doc:`Warning messages `. *Variable for region is invalid style* Only equal-style variables can be used. -*Variable for region is not equal style* - Self-explanatory. - *Variable for region sphere is invalid style* Only equal-style variables are allowed. @@ -8241,173 +5235,11 @@ Please also see the page with :doc:`Warning messages `. *Variable for velocity set is invalid style* Only atom-style variables can be used. -*Variable for voronoi radius is not atom style* - Self-explanatory. - -*Variable formula compute array is accessed out-of-range* - Self-explanatory. - -*Variable formula compute vector is accessed out-of-range* - Self-explanatory. - -*Variable formula fix array is accessed out-of-range* - Self-explanatory. - -*Variable formula fix vector is accessed out-of-range* - Self-explanatory. - *Variable has circular dependency* A circular dependency is when variable "a" in used by variable "b" and variable "b" is also used by variable "a". Circular dependencies with longer chains of dependence are also not allowed. -*Variable name between brackets must be alphanumeric or underscore characters* - Self-explanatory. - -*Variable name for compute chunk/atom does not exist* - Self-explanatory. - -*Variable name for compute reduce does not exist* - Self-explanatory. - -*Variable name for compute ti does not exist* - Self-explanatory. - -*Variable name for create_atoms does not exist* - Self-explanatory. - -*Variable name for displace_atoms does not exist* - Self-explanatory. - -*Variable name for dump every does not exist* - Self-explanatory. - -*Variable name for dump image center does not exist* - Self-explanatory. - -*Variable name for dump image phi does not exist* - Self-explanatory. - -*Variable name for dump image theta does not exist* - Self-explanatory. - -*Variable name for dump image zoom does not exist* - Self-explanatory. - -*Variable name for fix adapt does not exist* - Self-explanatory. - -*Variable name for fix addforce does not exist* - Self-explanatory. - -*Variable name for fix ave/atom does not exist* - Self-explanatory. - -*Variable name for fix ave/chunk does not exist* - Self-explanatory. - -*Variable name for fix ave/correlate does not exist* - Self-explanatory. - -*Variable name for fix ave/histo does not exist* - Self-explanatory. - -*Variable name for fix ave/spatial does not exist* - Self-explanatory. - -*Variable name for fix ave/time does not exist* - Self-explanatory. - -*Variable name for fix aveforce does not exist* - Self-explanatory. - -*Variable name for fix deform does not exist* - Self-explanatory. - -*Variable name for fix efield does not exist* - Self-explanatory. - -*Variable name for fix gravity does not exist* - Self-explanatory. - -*Variable name for fix heat does not exist* - Self-explanatory. - -*Variable name for fix indent does not exist* - Self-explanatory. - -*Variable name for fix langevin does not exist* - Self-explanatory. - -*Variable name for fix move does not exist* - Self-explanatory. - -*Variable name for fix setforce does not exist* - Self-explanatory. - -*Variable name for fix store/state does not exist* - Self-explanatory. - -*Variable name for fix temp/berendsen does not exist* - Self-explanatory. - -*Variable name for fix temp/csld does not exist* - Self-explanatory. - -*Variable name for fix temp/csvr does not exist* - Self-explanatory. - -*Variable name for fix temp/rescale does not exist* - Self-explanatory. - -*Variable name for fix vector does not exist* - Self-explanatory. - -*Variable name for fix wall does not exist* - Self-explanatory. - -*Variable name for fix wall/reflect does not exist* - Self-explanatory. - -*Variable name for fix wall/srd does not exist* - Self-explanatory. - -*Variable name for group does not exist* - Self-explanatory. - -*Variable name for group dynamic does not exist* - Self-explanatory. - -*Variable name for region cylinder does not exist* - Self-explanatory. - -*Variable name for region does not exist* - Self-explanatory. - -*Variable name for region sphere does not exist* - Self-explanatory. - -*Variable name for restart does not exist* - Self-explanatory. - -*Variable name for set command does not exist* - Self-explanatory. - -*Variable name for thermo every does not exist* - Self-explanatory. - -*Variable name for velocity set does not exist* - Self-explanatory. - -*Variable name for voronoi radius does not exist* - Self-explanatory. - -*Variable name must be alphanumeric or underscore characters* - Self-explanatory. - -*Variable uses atom property that is not allocated* - Self-explanatory. - *Velocity command before simulation box is defined* The velocity command cannot be used before a read_data, read_restart, or create_box command. @@ -8415,12 +5247,6 @@ Please also see the page with :doc:`Warning messages `. *Velocity command with no atoms existing* A velocity command has been used, but no atoms yet exist. -*Velocity ramp in z for a 2d problem* - Self-explanatory. - -*Velocity rigid used with non-rigid fix-ID* - Self-explanatory. - *Velocity temperature ID does calculate a velocity bias* The specified compute must compute a bias for temperature. @@ -8452,15 +5278,6 @@ Please also see the page with :doc:`Warning messages `. *Voro++ error: narea and neigh have a different size* This error is returned by the Voro++ library. -*Wall defined twice in fix wall command* - Self-explanatory. - -*Wall defined twice in fix wall/reflect command* - Self-explanatory. - -*Wall defined twice in fix wall/srd command* - Self-explanatory. - *Water H epsilon must be 0.0 for pair style lj/cut/tip4p/cut* This is because LAMMPS does not compute the Lennard-Jones interactions with these particles for efficiency reasons. @@ -8477,18 +5294,6 @@ Please also see the page with :doc:`Warning messages `. A world-style variable must specify a number of values equal to the number of processor partitions. -*Write_data command before simulation box is defined* - Self-explanatory. - *Write_restart command before simulation box is defined* The write_restart command cannot be used before a read_data, read_restart, or create_box command. - -*Zero length rotation vector with displace_atoms* - Self-explanatory. - -*Zero length rotation vector with fix move* - Self-explanatory. - -*Zero-length lattice orient vector* - Self-explanatory. diff --git a/doc/src/Errors_warnings.rst b/doc/src/Errors_warnings.rst index 3e4aab74d1..f152e66f4a 100644 --- a/doc/src/Errors_warnings.rst +++ b/doc/src/Errors_warnings.rst @@ -32,16 +32,10 @@ Please also see the page with :doc:`Error messages ` cutoff is set too short or the angle has blown apart and an atom is too far away. -*Angle style in data file differs from currently defined angle style* - Self-explanatory. - *Angles are defined but no angle style is set* The topology contains angles, but there are no angle forces computed since there was no angle_style command. -*Atom style in data file differs from currently defined atom style* - Self-explanatory. - *Bond atom missing in box size check* The second atom needed to compute a particular bond is missing on this processor. Typically this is because the pairwise cutoff is set too @@ -57,9 +51,6 @@ Please also see the page with :doc:`Error messages ` processor. Typically this is because the pairwise cutoff is set too short or the bond has blown apart and an atom is too far away. -*Bond style in data file differs from currently defined bond style* - Self-explanatory. - *Bonds are defined but no bond style is set* The topology contains bonds, but there are no bond forces computed since there was no bond_style command. @@ -72,9 +63,6 @@ Please also see the page with :doc:`Error messages ` length, multiplying by the number of bonds in the interaction (e.g. 3 for a dihedral) and adding a small amount of stretch. -*Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero* - Self-explanatory. - *Calling write_dump before a full system init.* The write_dump command is used before the system has been fully initialized as part of a 'run' or 'minimize' command. Not all dump @@ -90,18 +78,6 @@ Please also see the page with :doc:`Error messages ` This means the temperature associated with the rigid bodies may be incorrect on this timestep. -*Cannot include log terms without 1/r terms; setting flagHI to 1* - Self-explanatory. - -*Cannot include log terms without 1/r terms; setting flagHI to 1.* - Self-explanatory. - -*Charges are set, but coulombic solver is not used* - Self-explanatory. - -*Charges did not converge at step %ld: %lg* - Self-explanatory. - *Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost* The communication cutoff defaults to the maximum of what is inferred from pair and bond styles (will be zero, if none are defined) and what is specified @@ -127,9 +103,6 @@ Please also see the page with :doc:`Error messages ` is not changed automatically and the warning may be ignored depending on the specific system being simulated. -*Communication cutoff is too small for SNAP micro load balancing, increased to %lf* - Self-explanatory. - *Compute cna/atom cutoff may be too large to find ghost atom neighbors* The neighbor cutoff used may not encompass enough ghost atoms to perform this operation correctly. @@ -162,9 +135,6 @@ Please also see the page with :doc:`Error messages ` Conformation of the 4 listed dihedral atoms is extreme; you may want to check your simulation geometry. -*Dihedral style in data file differs from currently defined dihedral style* - Self-explanatory. - *Dihedrals are defined but no dihedral style is set* The topology contains dihedrals, but there are no dihedral forces computed since there was no dihedral_style command. @@ -181,9 +151,6 @@ Please also see the page with :doc:`Error messages ` *Estimated error in splitting of dispersion coeffs is %g* Error is greater than 0.0001 percent. -*Ewald/disp Newton solver failed, using old method to estimate g_ewald* - Self-explanatory. Choosing a different cutoff value may help. - *FENE bond too long* A FENE bond has stretched dangerously far. It's interaction strength will be truncated to attempt to prevent the bond from blowing up. @@ -196,9 +163,6 @@ Please also see the page with :doc:`Error messages ` A FENE bond has stretched dangerously far. It's interaction strength will be truncated to attempt to prevent the bond from blowing up. -*Fix halt condition for fix-id %s met on step %ld with value %g* - Self explanatory. - *Fix SRD walls overlap but fix srd overlap not set* You likely want to set this in your input script. @@ -242,21 +206,12 @@ Please also see the page with :doc:`Error messages ` *Fix property/atom mol or charge w/out ghost communication* A model typically needs these properties defined for ghost atoms. -*Fix qeq CG convergence failed (%g) after %d iterations at %ld step* - Self-explanatory. - *Fix qeq has non-zero lower Taper radius cutoff* Absolute value must be <= 0.01. *Fix qeq has very low Taper radius cutoff* Value should typically be >= 5.0. -*Fix qeq/dynamic tolerance may be too small for damped dynamics* - Self-explanatory. - -*Fix qeq/fire tolerance may be too small for damped fires* - Self-explanatory. - *Fix rattle should come after all other integration fixes* This fix is designed to work after all other integration fixes change atom positions. Thus it should be the last integration fix specified. @@ -289,9 +244,6 @@ Please also see the page with :doc:`Error messages ` The user-specified force accuracy cannot be achieved unless the table feature is disabled by using 'pair_modify table 0'. -*Geometric mixing assumed for 1/r\^6 coefficients* - Self-explanatory. - *Group for fix_modify temp != fix group* The fix_modify command is specifying a temperature computation that computes a temperature on a different group of atoms than the fix @@ -314,9 +266,6 @@ Please also see the page with :doc:`Error messages ` Conformation of the 4 listed improper atoms is extreme; you may want to check your simulation geometry. -*Improper style in data file differs from currently defined improper style* - Self-explanatory. - *Impropers are defined but no improper style is set* The topology contains impropers, but there are no improper forces computed since there was no improper_style command. @@ -342,18 +291,6 @@ Please also see the page with :doc:`Error messages ` The pair style has increased the communication cutoff to be consistent with the communication cutoff requirements for this pair style when run on the GPU. -*KIM Model does not provide 'energy'; Potential energy will be zero* - Self-explanatory. - -*KIM Model does not provide 'forces'; Forces will be zero* - Self-explanatory. - -*KIM Model does not provide 'particleEnergy'; energy per atom will be zero* - Self-explanatory. - -*KIM Model does not provide 'particleVirial'; virial per atom will be zero* - Self-explanatory. - *Kspace_modify slab param < 2.0 may cause unphysical behavior* The kspace_modify slab parameter should be larger to ensure periodic grids padded with empty space do not overlap. @@ -405,16 +342,10 @@ Please also see the page with :doc:`Error messages ` box, or moved further than one processor's subdomain away before reneighboring. -*MSM mesh too small, increasing to 2 points in each direction* - Self-explanatory. - *Mismatch between velocity and compute groups* The temperature computation used by the velocity command will not be on the same group of atoms that velocities are being set for. -*Mixing forced for lj coefficients* - Self-explanatory. - *Molecule attributes do not match system attributes* An attribute is specified (e.g. diameter, charge) that is not defined for the specified atom style. @@ -453,9 +384,6 @@ Please also see the page with :doc:`Error messages ` *More than one compute damage/atom* It is not efficient to use compute ke/atom more than once. -*More than one compute dilatation/atom* - Self-explanatory. - *More than one compute erotate/sphere/atom* It is not efficient to use compute erorate/sphere/atom more than once. @@ -468,24 +396,6 @@ Please also see the page with :doc:`Error messages ` *More than one compute orientorder/atom* It is not efficient to use compute orientorder/atom more than once. -*More than one compute plasticity/atom* - Self-explanatory. - -*More than one compute sna/atom* - Self-explanatory. - -*More than one compute sna/grid* - Self-explanatory. - -*More than one compute sna/grid/local* - Self-explanatory. - -*More than one compute snad/atom* - Self-explanatory. - -*More than one compute snav/atom* - Self-explanatory. - *More than one fix poems* It is not efficient to use fix poems more than once. @@ -561,21 +471,12 @@ Please also see the page with :doc:`Error messages ` *Pair COMB charge %.10f with force %.10f hit min barrier* Something is possibly wrong with your model. -*Pair brownian needs newton pair on for momentum conservation* - Self-explanatory. - -*Pair dpd needs newton pair on for momentum conservation* - Self-explanatory. - *Pair dsmc: num_of_collisions > number_of_A* Collision model in DSMC is breaking down. *Pair dsmc: num_of_collisions > number_of_B* Collision model in DSMC is breaking down. -*Pair style in data file differs from currently defined pair style* - Self-explanatory. - *Pair style restartinfo set but has no restart support* This pair style has a bug, where it does not support reading and writing information to a restart file, but does not set the member @@ -685,9 +586,6 @@ Please also see the page with :doc:`Error messages ` cluster specified by the fix shake command is numerically suspect. LAMMPS will set it to 0.0 and continue. -*Shell command '%s' failed with error '%s'* - Self-explanatory. - *Shell command returned with non-zero status* This may indicate the shell command did not operate as expected. @@ -698,15 +596,9 @@ Please also see the page with :doc:`Error messages ` This will lead to invalid constraint forces in the SHAKE/RATTLE computation. -*Simulations might be very slow because of large number of structure factors* - Self-explanatory. - *Slab correction not needed for MSM* Slab correction is intended to be used with Ewald or PPPM and is not needed by MSM. -*Specifying an 'subset' value of '0' is equivalent to no 'subset' keyword* - Self-explanatory. - *System is not charge neutral, net charge = %g* The total charge on all atoms on the system is not 0.0. For some KSpace solvers this is only a warning. @@ -738,10 +630,7 @@ Please also see the page with :doc:`Error messages ` assumed to also be for all atoms. Thus the pressure printed by thermo could be inaccurate. -*The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed in the summer of 2015* - Self-explanatory. - -*The minimizer does not re-orient dipoles when using fix efield* +*The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed*The minimizer does not re-orient dipoles when using fix efield* This means that only the atom coordinates will be minimized, not the orientation of the dipoles. @@ -749,9 +638,6 @@ Please also see the page with :doc:`Error messages ` More than the maximum # of neighbors was found multiple times. This was unexpected. -*Too many inner timesteps in fix ttm* - Self-explanatory. - *Too many neighbors in CNA for %d atoms* More than the maximum # of neighbors was found multiple times. This was unexpected. @@ -779,24 +665,6 @@ Please also see the page with :doc:`Error messages ` The deformation will heat the SRD particles so this can be dangerous. -*Using kspace solver on system with no charge* - Self-explanatory. - -*Using largest cut-off for lj/long/dipole/long long long* - Self-explanatory. - -*Using largest cutoff for buck/long/coul/long* - Self-explanatory. - -*Using largest cutoff for lj/long/coul/long* - Self-explanatory. - -*Using largest cutoff for pair_style lj/long/tip4p/long* - Self-explanatory. - -*Using package gpu without any pair style defined* - Self-explanatory. - *Using pair potential shift with pair_modify compute no* The shift effects will thus not be computed. From 589c0264654d501094e35d486cc6e20707d55231 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 15 Mar 2025 14:09:38 -0600 Subject: [PATCH 03/33] Tweaked the description of numbering order --- doc/src/compute_chunk_atom.rst | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/doc/src/compute_chunk_atom.rst b/doc/src/compute_chunk_atom.rst index 9bca1e26d1..24c2e2e47c 100644 --- a/doc/src/compute_chunk_atom.rst +++ b/doc/src/compute_chunk_atom.rst @@ -217,13 +217,16 @@ scaled differently in the two different dimensions to transform them into ellipses). The created bins (and hence the chunk IDs) are numbered consecutively -from 1 to the number of bins = *Nchunk*\ . For *bin2d* and *bin3d*, the -numbering varies most rapidly in the first dimension (which could be -*x*, *y*, or *z*), next rapidly in the second dimension, and most slowly in the -third dimension. For *bin/sphere*, the bin with smallest radii is chunk -1 and the bin with largest radii is chunk Nchunk = *ncbin*\ . For -*bin/cylinder*, the numbering varies most rapidly in the dimension -along the cylinder axis and most slowly in the radial direction. +from 1 to the number of bins = *Nchunk*\ . For *bin2d* and *bin3d*, the +numbering varies fastest in the last dimension (which could be +*x*, *y*, or *z*), slower in the second dimension, and slowest in the +first dimension. For *bin/sphere*, the bin with smallest radius is chunk +1 and the bin with largest radius is chunk Nchunk = *ncbin*\ . For +*bin/cylinder*, the numbering varies faster in the dimension +along the cylinder axis and slower in the radial direction. +In all cases, for a given dimension, the numbering increases +with increasing value of the coordinate (Cartesian coordinate, +sphere or cylinder radius, axial position). Each time this compute is invoked, each atom is mapped to a bin based on its current position. Note that between reneighboring timesteps, From 96f135c29457012d82789340c4f9e4ab1e6be20b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 15 Mar 2025 16:38:12 -0400 Subject: [PATCH 04/33] some more small tweaks of explanation and spelling fixes --- doc/src/Build_manual.rst | 8 +++++--- doc/utils/sphinx-config/false_positives.txt | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_manual.rst b/doc/src/Build_manual.rst index 0e8b34dcc7..4993aa53a0 100644 --- a/doc/src/Build_manual.rst +++ b/doc/src/Build_manual.rst @@ -221,8 +221,9 @@ HTML as a quick-n-dirty way of checking your manual page. This translation uses `Pandoc `_ instead of Sphinx and thus all special Sphinx features (cross-references, advanced tables, -embedding of Python docstring and doxygen documentation, and so on) will -not render correctly. But this is a **very fast** way to check the content +embedding of Python docstrings or doxygen documentation, and so on) will +not render correctly. Most embedded math should render correctly. This +is a **very fast** way to check the syntaxs and layout of documentation as HTML while writing the documentation. To translate **all** manual pages, you can type ``make fasthtml`` at the @@ -235,7 +236,8 @@ directly translate only individual pages: e.g. to translate only the After writing the documentation is completed, you will still need to verify with ``make html`` and ``make pdf`` that it translates -correctly. +correctly in the actual translations used for download and online +documentation. Tests for consistency, completeness, and other known issues ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 084f7c0ec1..fee9b97c8e 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -856,6 +856,7 @@ DNi Dobnikar Dobson docenv +docstrings Dodds dodgerblue dof @@ -3261,6 +3262,7 @@ resquared REsquared restartfile restartinfo +reStructuredText Restrepo rethrowing Revenga From 7b915b2983418ba152e424bfd06d8f328ea3f106 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 15 Mar 2025 20:10:37 -0400 Subject: [PATCH 05/33] error message does not exist anymore --- doc/src/Errors_messages.rst | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index 14836cebb6..a63d72b027 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -22,16 +22,6 @@ Please also see the page with :doc:`Warning messages `. ---------- -*1-3 bond count is inconsistent* - An inconsistency was detected when computing the number of 1-3 - neighbors for each atom. This likely means something is wrong with - the bond topologies you have defined. - -*1-4 bond count is inconsistent* - An inconsistency was detected when computing the number of 1-4 - neighbors for each atom. This likely means something is wrong with - the bond topologies you have defined. - *Accelerator sharing is not currently supported on system* Multiple MPI processes cannot share the accelerator on your system. For NVIDIA GPUs, see the nvidia-smi command to change this From b34b6b80e40c4ae7a86d2e4e3a0e79fe945e7163 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 15 Mar 2025 20:11:33 -0400 Subject: [PATCH 06/33] refactor info code so coeffs status can be appended to error --- src/info.cpp | 139 ++++++++++++++++++++++++++++++--------------------- src/info.h | 6 +++ 2 files changed, 88 insertions(+), 57 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 17b1f417ea..06c0337b7a 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -488,63 +488,11 @@ void Info::command(int narg, char **arg) Pair *pair=force->pair; fputs("\nCoeff status information:\n",out); - if (pair) { - fputs("\nPair Coeffs:\n",out); - for (int i=1; i <= atom->ntypes; ++i) - for (int j=i; j <= atom->ntypes; ++j) { - utils::print(out,"{:6d} {:6d}:",i,j); - if (pair->allocated && pair->setflag[i][j]) fputs(" is set\n",out); - else fputs(" is not set\n",out); - } - } - if (force->bond) { - Bond *bond=force->bond; - - if (bond) { - fputs("\nBond Coeffs:\n",out); - for (int i=1; i <= atom->nbondtypes; ++i) { - utils::print(out,"{:6d}:",i); - if (bond->allocated && bond->setflag[i]) fputs(" is set\n",out); - else fputs (" is not set\n",out); - } - } - } - if (force->angle) { - Angle *angle=force->angle; - - if (angle) { - fputs("\nAngle Coeffs:\n",out); - for (int i=1; i <= atom->nangletypes; ++i) { - utils::print(out,"{:6d}:",i); - if (angle->allocated && angle->setflag[i]) fputs(" is set\n",out); - else fputs (" is not set\n",out); - } - } - } - if (force->dihedral) { - Dihedral *dihedral=force->dihedral; - - if (dihedral) { - fputs("\nDihedral Coeffs:\n",out); - for (int i=1; i <= atom->ndihedraltypes; ++i) { - utils::print(out,"{:6d}:",i); - if (dihedral->allocated && dihedral->setflag[i]) fputs(" is set\n",out); - else fputs (" is not set\n",out); - } - } - } - if (force->improper) { - Improper *b=force->improper; - - if (b) { - fputs("\nImproper Coeffs:\n",out); - for (int i=1; i <= atom->nimpropertypes; ++i) { - utils::print(out,"{:6d}:",i); - if (b->allocated && b->setflag[i]) fputs(" is set\n",out); - else fputs (" is not set\n",out); - } - } - } + if (pair) utils::print(out,"\nPair coeffs\n{}", get_pair_coeff_status(lmp)); + if (force->bond) utils::print(out,"\nBond coeffs\n{}", get_bond_coeff_status(lmp)); + if (force->angle) utils::print(out,"\nAngle coeffs\n{}", get_angle_coeff_status(lmp)); + if (force->dihedral) utils::print(out,"\nDihedral coeffs\n{}", get_dihedral_coeff_status(lmp)); + if (force->improper) utils::print(out,"\nImproper coeffs\n{}", get_improper_coeff_status(lmp)); } if (flags & GROUPS) { @@ -1451,3 +1399,80 @@ std::string Info::get_variable_info(int num) { text += "\n"; return text; } + +/* ---------------------------------------------------------------------- */ + +std::string Info::get_pair_coeff_status(const LAMMPS *lmp) { + + if (!lmp || !lmp->force || !lmp->force->pair || !lmp->force->pair->allocated) + return "Pair style not yet initialized\n"; + + const auto ntypes = lmp->atom->ntypes; + const auto setflag = lmp->force->pair->setflag; + std::string output = ""; + for (int i=1; i <= ntypes; ++i) { + for (int j=i; j <= ntypes; ++j) + output += fmt::format("{:6d} {:6d}: is{}set\n", i, j, setflag[i][j] ? " " : " not "); + } + return output; +} + +/* ---------------------------------------------------------------------- */ + +std::string Info::get_bond_coeff_status(const LAMMPS *lmp) { + + if (!lmp || !lmp->force || !lmp->force->bond || !lmp->force->bond->allocated) + return "Bond style not yet initialized\n"; + + const auto ntypes = lmp->atom->nbondtypes; + const auto setflag = lmp->force->bond->setflag; + std::string output = ""; + for (int i=1; i <= ntypes; ++i) + output += fmt::format("{:6d}: is{}set\n", i, setflag[i] ? " " : " not "); + return output; +} + +/* ---------------------------------------------------------------------- */ + +std::string Info::get_angle_coeff_status(const LAMMPS *lmp) { + + if (!lmp || !lmp->force || !lmp->force->angle || !lmp->force->angle->allocated) + return "Angle style not yet initialized\n"; + + const auto ntypes = lmp->atom->nangletypes; + const auto setflag = lmp->force->angle->setflag; + std::string output = ""; + for (int i=1; i <= ntypes; ++i) + output += fmt::format("{:6d}: is{}set\n", i, setflag[i] ? " " : " not "); + return output; +} + +/* ---------------------------------------------------------------------- */ + +std::string Info::get_dihedral_coeff_status(const LAMMPS *lmp) { + + if (!lmp || !lmp->force || !lmp->force->dihedral || !lmp->force->dihedral->allocated) + return "Dihedral style not yet initialized\n"; + + const auto ntypes = lmp->atom->ndihedraltypes; + const auto setflag = lmp->force->dihedral->setflag; + std::string output = ""; + for (int i=1; i <= ntypes; ++i) + output += fmt::format("{:6d}: is{}set\n", i, setflag[i] ? " " : " not "); + return output; +} + +/* ---------------------------------------------------------------------- */ + +std::string Info::get_improper_coeff_status(const LAMMPS *lmp) { + + if (!lmp || !lmp->force || !lmp->force->improper || !lmp->force->improper->allocated) + return "Improper style not yet initialized\n"; + + const auto ntypes = lmp->atom->nimpropertypes; + const auto setflag = lmp->force->improper->setflag; + std::string output = ""; + for (int i=1; i <= ntypes; ++i) + output += fmt::format("{:6d}: is{}set\n", i, setflag[i] ? " " : " not "); + return output; +} diff --git a/src/info.h b/src/info.h index 5d705837f7..77566b0dcc 100644 --- a/src/info.h +++ b/src/info.h @@ -54,6 +54,12 @@ class Info : public Command { static std::string get_gpu_device_info(); static std::string get_accelerator_info(const std::string &pkg = ""); + static std::string get_pair_coeff_status(const LAMMPS *lmp); + static std::string get_bond_coeff_status(const LAMMPS *lmp); + static std::string get_angle_coeff_status(const LAMMPS *lmp); + static std::string get_dihedral_coeff_status(const LAMMPS *lmp); + static std::string get_improper_coeff_status(const LAMMPS *lmp); + void get_memory_info(double *); char **get_variable_names(int &num); std::string get_variable_info(int num); From 111817ce3255b756025a0c57389908a2b719cd6b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 15 Mar 2025 21:16:07 -0400 Subject: [PATCH 07/33] also print pair coeff setflag status when not all pair coeffs are set --- src/DPD-BASIC/pair_dpd.cpp | 5 +- src/DPD-BASIC/pair_dpd_coul_slater_long.cpp | 5 +- src/DPD-BASIC/pair_dpd_ext.cpp | 5 +- src/DPD-MESO/pair_edpd.cpp | 5 +- src/DPD-MESO/pair_mdpd.cpp | 5 +- src/DPD-MESO/pair_tdpd.cpp | 5 +- src/DPD-REACT/pair_dpd_fdt.cpp | 5 +- src/DPD-REACT/pair_dpd_fdt_energy.cpp | 5 +- src/DPD-REACT/pair_exp6_rx.cpp | 5 +- src/DPD-REACT/pair_multi_lucy.cpp | 5 +- src/DPD-REACT/pair_multi_lucy_rx.cpp | 5 +- src/EXTRA-PAIR/pair_beck.cpp | 5 +- src/EXTRA-PAIR/pair_born_coul_dsf.cpp | 3 +- src/EXTRA-PAIR/pair_born_coul_wolf.cpp | 8 +- src/EXTRA-PAIR/pair_born_gauss.cpp | 5 +- src/EXTRA-PAIR/pair_buck_mdf.cpp | 9 +- src/EXTRA-PAIR/pair_dispersion_d3.cpp | 5 +- src/EXTRA-PAIR/pair_e3b.cpp | 5 +- src/EXTRA-PAIR/pair_lennard_mdf.cpp | 9 +- src/EXTRA-PAIR/pair_momb.cpp | 8 +- src/EXTRA-PAIR/pair_morse_smooth_linear.cpp | 9 +- src/EXTRA-PAIR/pair_nm_cut.cpp | 5 +- src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp | 5 +- src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp | 10 +- src/EXTRA-PAIR/pair_nm_cut_coul_long.h | 1 - src/EXTRA-PAIR/pair_pedone.cpp | 5 +- src/EXTRA-PAIR/pair_wf_cut.cpp | 9 +- src/FEP/pair_morse_soft.cpp | 5 +- src/GPU/pair_sw_gpu.cpp | 5 +- src/GPU/pair_tersoff_gpu.cpp | 5 +- src/GPU/pair_tersoff_mod_gpu.cpp | 5 +- src/GPU/pair_tersoff_zbl_gpu.cpp | 5 +- src/GPU/pair_vashishta_gpu.cpp | 7 +- src/INTEL/pair_snap_intel.cpp | 5 +- src/INTERLAYER/pair_drip.cpp | 5 +- src/INTERLAYER/pair_ilp_graphene_hbn.cpp | 8 +- .../pair_kolmogorov_crespi_full.cpp | 8 +- src/INTERLAYER/pair_kolmogorov_crespi_z.cpp | 10 +- src/INTERLAYER/pair_lebedeva_z.cpp | 7 +- src/KIM/pair_kim.cpp | 5 +- src/KOKKOS/pair_table_kokkos.cpp | 5 +- src/KOKKOS/pair_table_rx_kokkos.cpp | 5 +- src/KSPACE/pair_born_coul_long.cpp | 5 +- src/KSPACE/pair_buck_coul_long.cpp | 5 +- src/KSPACE/pair_buck_long_coul_long.cpp | 5 +- src/KSPACE/pair_coul_streitz.cpp | 5 +- src/LEPTON/pair_lepton.cpp | 8 +- src/MACHDYN/pair_smd_hertz.cpp | 84 +- src/MACHDYN/pair_smd_tlsph.cpp | 6 +- src/MACHDYN/pair_smd_triangulated_surface.cpp | 83 +- src/MACHDYN/pair_smd_ulsph.cpp | 759 +++++++++--------- src/MANYBODY/pair_airebo.cpp | 5 +- src/MANYBODY/pair_atm.cpp | 7 +- src/MANYBODY/pair_bop.cpp | 5 +- src/MANYBODY/pair_comb.cpp | 11 +- src/MANYBODY/pair_comb3.cpp | 11 +- src/MANYBODY/pair_edip.cpp | 8 +- src/MANYBODY/pair_edip_multi.cpp | 5 +- src/MANYBODY/pair_extep.cpp | 5 +- src/MANYBODY/pair_gw.cpp | 9 +- src/MANYBODY/pair_lcbop.cpp | 15 +- src/MANYBODY/pair_nb3b_harmonic.cpp | 5 +- src/MANYBODY/pair_polymorphic.cpp | 5 +- src/MANYBODY/pair_rebomos.cpp | 5 +- src/MANYBODY/pair_sw.cpp | 5 +- src/MANYBODY/pair_tersoff.cpp | 5 +- src/MANYBODY/pair_tersoff_table.cpp | 5 +- src/MANYBODY/pair_threebody_table.cpp | 5 +- src/MANYBODY/pair_vashishta.cpp | 5 +- src/MISC/pair_agni.cpp | 7 +- src/MISC/pair_srp.cpp | 5 +- src/ML-IAP/pair_mliap.cpp | 6 +- src/ML-PACE/pair_pace.cpp | 5 +- src/ML-PACE/pair_pace_extrapolation.cpp | 5 +- src/ML-POD/pair_pod.cpp | 5 +- src/ML-SNAP/pair_snap.cpp | 8 +- src/MOFFF/pair_buck6d_coul_gauss_dsf.cpp | 5 +- src/MOFFF/pair_buck6d_coul_gauss_long.cpp | 5 +- src/PERI/pair_peri_eps.cpp | 5 +- src/PERI/pair_peri_lps.cpp | 5 +- src/PERI/pair_peri_pmb.cpp | 5 +- src/PERI/pair_peri_ves.cpp | 5 +- src/REAXFF/pair_reaxff.cpp | 5 +- src/SMTBQ/pair_smatb.cpp | 4 +- src/SMTBQ/pair_smatb_single.cpp | 5 +- src/SMTBQ/pair_smtbq.cpp | 5 +- src/SPIN/pair_spin_dipole_cut.cpp | 5 +- src/SPIN/pair_spin_dipole_long.cpp | 5 +- src/SPIN/pair_spin_dmi.cpp | 5 +- src/SPIN/pair_spin_exchange.cpp | 5 +- src/SPIN/pair_spin_exchange_biquadratic.cpp | 5 +- src/SPIN/pair_spin_magelec.cpp | 5 +- src/SPIN/pair_spin_neel.cpp | 5 +- src/pair.cpp | 14 +- src/pair_born.cpp | 9 +- src/pair_buck.cpp | 9 +- src/pair_buck_coul_cut.cpp | 5 +- src/pair_hybrid.cpp | 4 +- src/pair_hybrid_molecular.cpp | 15 +- src/pair_morse.cpp | 5 +- src/pair_table.cpp | 12 +- 101 files changed, 915 insertions(+), 610 deletions(-) diff --git a/src/DPD-BASIC/pair_dpd.cpp b/src/DPD-BASIC/pair_dpd.cpp index 8fa2b1913c..1c8ee883a1 100644 --- a/src/DPD-BASIC/pair_dpd.cpp +++ b/src/DPD-BASIC/pair_dpd.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -278,7 +279,9 @@ void PairDPD::init_style() double PairDPD::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]); diff --git a/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp b/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp index 4c4a62f157..adf141aa77 100644 --- a/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp +++ b/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -353,7 +354,9 @@ void PairDPDCoulSlaterLong::init_style() double PairDPDCoulSlaterLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]); diff --git a/src/DPD-BASIC/pair_dpd_ext.cpp b/src/DPD-BASIC/pair_dpd_ext.cpp index 6c10df7419..3321686b07 100644 --- a/src/DPD-BASIC/pair_dpd_ext.cpp +++ b/src/DPD-BASIC/pair_dpd_ext.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -337,7 +338,9 @@ void PairDPDExt::init_style() double PairDPDExt::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]); sigmaT[i][j] = sqrt(2.0*force->boltz*temperature*gammaT[i][j]); diff --git a/src/DPD-MESO/pair_edpd.cpp b/src/DPD-MESO/pair_edpd.cpp index 84c1f92534..3e08de6319 100644 --- a/src/DPD-MESO/pair_edpd.cpp +++ b/src/DPD-MESO/pair_edpd.cpp @@ -24,6 +24,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -387,7 +388,9 @@ void PairEDPD::init_style() double PairEDPD::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; cutT[j][i] = cutT[i][j]; diff --git a/src/DPD-MESO/pair_mdpd.cpp b/src/DPD-MESO/pair_mdpd.cpp index dbc78101ac..8fcfa3d786 100644 --- a/src/DPD-MESO/pair_mdpd.cpp +++ b/src/DPD-MESO/pair_mdpd.cpp @@ -24,6 +24,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -300,7 +301,9 @@ void PairMDPD::init_style() double PairMDPD::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]); diff --git a/src/DPD-MESO/pair_tdpd.cpp b/src/DPD-MESO/pair_tdpd.cpp index cd74c2f501..c4a60a0d16 100644 --- a/src/DPD-MESO/pair_tdpd.cpp +++ b/src/DPD-MESO/pair_tdpd.cpp @@ -24,6 +24,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -340,7 +341,9 @@ void PairTDPD::init_style() double PairTDPD::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]); diff --git a/src/DPD-REACT/pair_dpd_fdt.cpp b/src/DPD-REACT/pair_dpd_fdt.cpp index 24b54cf69d..326130ace3 100644 --- a/src/DPD-REACT/pair_dpd_fdt.cpp +++ b/src/DPD-REACT/pair_dpd_fdt.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "fix.h" #include "force.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -332,7 +333,9 @@ void PairDPDfdt::init_style() double PairDPDfdt::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; a0[j][i] = a0[i][j]; diff --git a/src/DPD-REACT/pair_dpd_fdt_energy.cpp b/src/DPD-REACT/pair_dpd_fdt_energy.cpp index 3bb6d57ec3..1bbcd8bba0 100644 --- a/src/DPD-REACT/pair_dpd_fdt_energy.cpp +++ b/src/DPD-REACT/pair_dpd_fdt_energy.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "fix.h" #include "force.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -430,7 +431,9 @@ void PairDPDfdtEnergy::init_style() double PairDPDfdtEnergy::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; a0[j][i] = a0[i][j]; diff --git a/src/DPD-REACT/pair_exp6_rx.cpp b/src/DPD-REACT/pair_exp6_rx.cpp index d914b0592d..b898eae4ec 100644 --- a/src/DPD-REACT/pair_exp6_rx.cpp +++ b/src/DPD-REACT/pair_exp6_rx.cpp @@ -19,6 +19,7 @@ #include "error.h" #include "fix.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "modify.h" @@ -695,7 +696,9 @@ void PairExp6rx::coeff(int narg, char **arg) double PairExp6rx::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); return cut[i][j]; } diff --git a/src/DPD-REACT/pair_multi_lucy.cpp b/src/DPD-REACT/pair_multi_lucy.cpp index cb9ab92694..3efa7f46ac 100644 --- a/src/DPD-REACT/pair_multi_lucy.cpp +++ b/src/DPD-REACT/pair_multi_lucy.cpp @@ -29,6 +29,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -327,7 +328,9 @@ void PairMultiLucy::coeff(int narg, char **arg) double PairMultiLucy::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); tabindex[j][i] = tabindex[i][j]; diff --git a/src/DPD-REACT/pair_multi_lucy_rx.cpp b/src/DPD-REACT/pair_multi_lucy_rx.cpp index 178b5c3b85..a6f0850b0b 100644 --- a/src/DPD-REACT/pair_multi_lucy_rx.cpp +++ b/src/DPD-REACT/pair_multi_lucy_rx.cpp @@ -30,6 +30,7 @@ #include "error.h" #include "fix.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "modify.h" @@ -461,7 +462,9 @@ void PairMultiLucyRX::coeff(int narg, char **arg) double PairMultiLucyRX::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); tabindex[j][i] = tabindex[i][j]; diff --git a/src/EXTRA-PAIR/pair_beck.cpp b/src/EXTRA-PAIR/pair_beck.cpp index cd24609216..7cfa4810f0 100644 --- a/src/EXTRA-PAIR/pair_beck.cpp +++ b/src/EXTRA-PAIR/pair_beck.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "neigh_list.h" @@ -229,7 +230,9 @@ void PairBeck::coeff(int narg, char **arg) double PairBeck::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); AA[j][i] = AA[i][j]; BB[j][i] = BB[i][j]; diff --git a/src/EXTRA-PAIR/pair_born_coul_dsf.cpp b/src/EXTRA-PAIR/pair_born_coul_dsf.cpp index 6cd19ec54f..e22b40c598 100644 --- a/src/EXTRA-PAIR/pair_born_coul_dsf.cpp +++ b/src/EXTRA-PAIR/pair_born_coul_dsf.cpp @@ -19,10 +19,10 @@ #include "pair_born_coul_dsf.h" -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neighbor.h" #include "neigh_list.h" #include "math_const.h" @@ -30,6 +30,7 @@ #include "error.h" #include "math_special.h" +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-PAIR/pair_born_coul_wolf.cpp b/src/EXTRA-PAIR/pair_born_coul_wolf.cpp index 8dce32ad21..24d6de0fd7 100644 --- a/src/EXTRA-PAIR/pair_born_coul_wolf.cpp +++ b/src/EXTRA-PAIR/pair_born_coul_wolf.cpp @@ -18,16 +18,18 @@ #include "pair_born_coul_wolf.h" -#include + #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neighbor.h" #include "neigh_list.h" #include "math_const.h" #include "memory.h" #include "error.h" +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -294,7 +296,9 @@ void PairBornCoulWolf::init_style() double PairBornCoulWolf::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/EXTRA-PAIR/pair_born_gauss.cpp b/src/EXTRA-PAIR/pair_born_gauss.cpp index 0cd2102c58..b670289727 100644 --- a/src/EXTRA-PAIR/pair_born_gauss.cpp +++ b/src/EXTRA-PAIR/pair_born_gauss.cpp @@ -19,6 +19,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -215,7 +216,9 @@ void PairBornGauss::coeff(int narg, char **arg) double PairBornGauss::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); if (offset_flag) { double dr = cut[i][j] - r0[i][j]; diff --git a/src/EXTRA-PAIR/pair_buck_mdf.cpp b/src/EXTRA-PAIR/pair_buck_mdf.cpp index 3c93c0f5b3..c40a940351 100644 --- a/src/EXTRA-PAIR/pair_buck_mdf.cpp +++ b/src/EXTRA-PAIR/pair_buck_mdf.cpp @@ -18,15 +18,16 @@ #include "pair_buck_mdf.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; @@ -250,7 +251,9 @@ void PairBuckMDF::coeff(int narg, char **arg) double PairBuckMDF::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); rhoinv[i][j] = 1.0/rho[i][j]; buck1[i][j] = a[i][j]/rho[i][j]; diff --git a/src/EXTRA-PAIR/pair_dispersion_d3.cpp b/src/EXTRA-PAIR/pair_dispersion_d3.cpp index d66148828c..1004a5f99a 100644 --- a/src/EXTRA-PAIR/pair_dispersion_d3.cpp +++ b/src/EXTRA-PAIR/pair_dispersion_d3.cpp @@ -26,6 +26,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -1420,7 +1421,9 @@ void PairDispersionD3::set_funcpar(std::string &functional_name) double PairDispersionD3::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); r0ab[j][i] = r0ab[i][j]; diff --git a/src/EXTRA-PAIR/pair_e3b.cpp b/src/EXTRA-PAIR/pair_e3b.cpp index cc81cee03f..b0ae56d86b 100644 --- a/src/EXTRA-PAIR/pair_e3b.cpp +++ b/src/EXTRA-PAIR/pair_e3b.cpp @@ -22,6 +22,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -601,7 +602,9 @@ void PairE3B::presetParam(const int flag, bool &repeatFlag, double &bondL) //pair.cpp::init uses this to set cutsq array, used for neighboring, etc double PairE3B::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/EXTRA-PAIR/pair_lennard_mdf.cpp b/src/EXTRA-PAIR/pair_lennard_mdf.cpp index b56b7407f3..3bb2afcbfa 100644 --- a/src/EXTRA-PAIR/pair_lennard_mdf.cpp +++ b/src/EXTRA-PAIR/pair_lennard_mdf.cpp @@ -19,15 +19,16 @@ #include "pair_lennard_mdf.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; @@ -251,7 +252,9 @@ void PairLennardMDF::coeff(int narg, char **arg) double PairLennardMDF::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cut_inner_sq[i][j] = cut_inner[i][j]*cut_inner[i][j]; diff --git a/src/EXTRA-PAIR/pair_momb.cpp b/src/EXTRA-PAIR/pair_momb.cpp index def4037157..c898590cba 100644 --- a/src/EXTRA-PAIR/pair_momb.cpp +++ b/src/EXTRA-PAIR/pair_momb.cpp @@ -19,16 +19,18 @@ #include "pair_momb.h" -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "memory.h" #include "error.h" #include "citeme.h" +#include + using namespace LAMMPS_NS; static const char cite_momb[] = @@ -252,7 +254,9 @@ void PairMomb::coeff(int narg, char **arg) double PairMomb::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); morse1[i][j] = 2.0*d0[i][j]*alpha[i][j]; diff --git a/src/EXTRA-PAIR/pair_morse_smooth_linear.cpp b/src/EXTRA-PAIR/pair_morse_smooth_linear.cpp index 9d3b3d4dc5..a3ede5f2ed 100644 --- a/src/EXTRA-PAIR/pair_morse_smooth_linear.cpp +++ b/src/EXTRA-PAIR/pair_morse_smooth_linear.cpp @@ -14,15 +14,16 @@ #include "pair_morse_smooth_linear.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; @@ -217,7 +218,9 @@ void PairMorseSmoothLinear::coeff(int narg, char **arg) double PairMorseSmoothLinear::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); morse1[i][j] = 2.0*d0[i][j]*alpha[i][j]; double alpha_dr = -alpha[i][j] * (cut[i][j] - r0[i][j]); diff --git a/src/EXTRA-PAIR/pair_nm_cut.cpp b/src/EXTRA-PAIR/pair_nm_cut.cpp index d3c7dca54d..a8f0687849 100644 --- a/src/EXTRA-PAIR/pair_nm_cut.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut.cpp @@ -21,6 +21,7 @@ #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "math_const.h" #include "memory.h" @@ -237,7 +238,9 @@ void PairNMCut::coeff(int narg, char **arg) double PairNMCut::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); nm[i][j] = nn[i][j]*mm[i][j]; e0nm[i][j] = e0[i][j]/(nn[i][j]-mm[i][j]); diff --git a/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp b/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp index 1fb98e3f4b..bc229cacce 100644 --- a/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -276,7 +277,9 @@ void PairNMCutCoulCut::init_style() double PairNMCutCoulCut::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul[i][j]); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp b/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp index cd36d4a262..488a312bbc 100644 --- a/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "ewald_const.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "memory.h" @@ -42,7 +43,6 @@ PairNMCutCoulLong::PairNMCutCoulLong(LAMMPS *lmp) : Pair(lmp) { ewaldflag = pppmflag = 1; ftable = nullptr; - qdist = 0.0; } /* ---------------------------------------------------------------------- */ @@ -318,11 +318,11 @@ void PairNMCutCoulLong::init_style() double PairNMCutCoulLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); - // include TIP4P qdist in full cutoff, qdist = 0.0 if not TIP4P - - double cut = MAX(cut_lj[i][j],cut_coul+2.0*qdist); + double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; nm[i][j] = nn[i][j]*mm[i][j]; diff --git a/src/EXTRA-PAIR/pair_nm_cut_coul_long.h b/src/EXTRA-PAIR/pair_nm_cut_coul_long.h index 1e1d61ff90..563ebd8abd 100644 --- a/src/EXTRA-PAIR/pair_nm_cut_coul_long.h +++ b/src/EXTRA-PAIR/pair_nm_cut_coul_long.h @@ -50,7 +50,6 @@ class PairNMCutCoulLong : public Pair { double cut_coul, cut_coulsq; double **e0, **r0, **nn, **mm; double **nm, **e0nm, **r0n, **r0m, **offset; - double qdist; // TIP4P distance from O site to negative charge double g_ewald; void allocate(); diff --git a/src/EXTRA-PAIR/pair_pedone.cpp b/src/EXTRA-PAIR/pair_pedone.cpp index 3f97c76a7d..a620895d15 100644 --- a/src/EXTRA-PAIR/pair_pedone.cpp +++ b/src/EXTRA-PAIR/pair_pedone.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -226,7 +227,9 @@ void PairPedone::coeff(int narg, char **arg) double PairPedone::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); pedone1[i][j] = 2.0 * d0[i][j] * alpha[i][j]; pedone2[i][j] = 12.0 * c0[i][j]; diff --git a/src/EXTRA-PAIR/pair_wf_cut.cpp b/src/EXTRA-PAIR/pair_wf_cut.cpp index bb1978ff8c..67057c1707 100644 --- a/src/EXTRA-PAIR/pair_wf_cut.cpp +++ b/src/EXTRA-PAIR/pair_wf_cut.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_special.h" #include "memory.h" @@ -230,12 +231,14 @@ void PairWFCut::coeff(int narg, char **arg) double PairWFCut::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); nm[i][j] = nu[i][j]*mu[i][j]; e0nm[i][j] = epsilon[i][j]*2.0*nu[i][j]*powint(cut[i][j]/sigma[i][j],2*mu[i][j]) - *powint((1+2.0*nu[i][j])/(2.0*nu[i][j])/(MathSpecial::powint(cut[i][j]/sigma[i][j],2*mu[i][j])-1.0), - 2*nu[i][j]+1); + *powint((1+2.0*nu[i][j])/(2.0*nu[i][j]) + /(MathSpecial::powint(cut[i][j]/sigma[i][j],2*mu[i][j])-1.0),2*nu[i][j]+1); rcmu[i][j] = powint(cut[i][j],2*mu[i][j]); sigma_mu[i][j] = powint(sigma[i][j], 2*mu[i][j]); diff --git a/src/FEP/pair_morse_soft.cpp b/src/FEP/pair_morse_soft.cpp index e13defefa6..661acaf10f 100644 --- a/src/FEP/pair_morse_soft.cpp +++ b/src/FEP/pair_morse_soft.cpp @@ -17,6 +17,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "neigh_list.h" @@ -225,7 +226,9 @@ void PairMorseSoft::settings(int narg, char **arg) double PairMorseSoft::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); morse1[i][j] = 2.0 * d0[i][j] * alpha[i][j]; diff --git a/src/GPU/pair_sw_gpu.cpp b/src/GPU/pair_sw_gpu.cpp index 3e916a6571..4528da87cd 100644 --- a/src/GPU/pair_sw_gpu.cpp +++ b/src/GPU/pair_sw_gpu.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "force.h" #include "gpu_extra.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -232,7 +233,9 @@ void PairSWGPU::init_style() double PairSWGPU::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax; cutghost[j][i] = cutmax; diff --git a/src/GPU/pair_tersoff_gpu.cpp b/src/GPU/pair_tersoff_gpu.cpp index 9ba94548c1..10502190fd 100644 --- a/src/GPU/pair_tersoff_gpu.cpp +++ b/src/GPU/pair_tersoff_gpu.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "force.h" #include "gpu_extra.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -236,7 +237,9 @@ void PairTersoffGPU::init_style() double PairTersoffGPU::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax; cutghost[j][i] = cutmax; diff --git a/src/GPU/pair_tersoff_mod_gpu.cpp b/src/GPU/pair_tersoff_mod_gpu.cpp index 1bb09c1403..96e64a271f 100644 --- a/src/GPU/pair_tersoff_mod_gpu.cpp +++ b/src/GPU/pair_tersoff_mod_gpu.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "force.h" #include "gpu_extra.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -237,7 +238,9 @@ void PairTersoffMODGPU::init_style() double PairTersoffMODGPU::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax; cutghost[j][i] = cutmax; diff --git a/src/GPU/pair_tersoff_zbl_gpu.cpp b/src/GPU/pair_tersoff_zbl_gpu.cpp index 8d5e05ce4c..cab2a0f0ed 100644 --- a/src/GPU/pair_tersoff_zbl_gpu.cpp +++ b/src/GPU/pair_tersoff_zbl_gpu.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "force.h" #include "gpu_extra.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neigh_request.h" @@ -255,7 +256,9 @@ void PairTersoffZBLGPU::init_style() double PairTersoffZBLGPU::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax; cutghost[j][i] = cutmax; diff --git a/src/GPU/pair_vashishta_gpu.cpp b/src/GPU/pair_vashishta_gpu.cpp index 38ad2b3c57..9693f670e7 100644 --- a/src/GPU/pair_vashishta_gpu.cpp +++ b/src/GPU/pair_vashishta_gpu.cpp @@ -22,6 +22,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "gpu_extra.h" #include "memory.h" #include "neigh_list.h" @@ -234,8 +235,10 @@ void PairVashishtaGPU::init_style() double PairVashishtaGPU::init_one(int i, int j) { - if (!gpu_allocated) { allocate(); } - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (!gpu_allocated) allocate(); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax; cutghost[j][i] = cutmax; diff --git a/src/INTEL/pair_snap_intel.cpp b/src/INTEL/pair_snap_intel.cpp index 7b388206b4..416f83bd06 100644 --- a/src/INTEL/pair_snap_intel.cpp +++ b/src/INTEL/pair_snap_intel.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -424,7 +425,9 @@ void PairSNAPIntel::init_style() double PairSNAPIntel::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); scale[j][i] = scale[i][j]; return (radelem[map[i]] + radelem[map[j]])*rcutfac; diff --git a/src/INTERLAYER/pair_drip.cpp b/src/INTERLAYER/pair_drip.cpp index 2800bd604d..37989aa94e 100644 --- a/src/INTERLAYER/pair_drip.cpp +++ b/src/INTERLAYER/pair_drip.cpp @@ -26,6 +26,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -136,7 +137,9 @@ void PairDRIP::coeff(int narg, char **arg) double PairDRIP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); int itype = map[i]; int jtype = map[j]; diff --git a/src/INTERLAYER/pair_ilp_graphene_hbn.cpp b/src/INTERLAYER/pair_ilp_graphene_hbn.cpp index a3e3a833c3..5cddbc5edf 100644 --- a/src/INTERLAYER/pair_ilp_graphene_hbn.cpp +++ b/src/INTERLAYER/pair_ilp_graphene_hbn.cpp @@ -25,6 +25,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "interlayer_taper.h" #include "memory.h" #include "my_page.h" @@ -185,8 +186,11 @@ void PairILPGrapheneHBN::coeff(int narg, char **arg) double PairILPGrapheneHBN::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); - if (!offset_flag) error->all(FLERR, "Must use 'pair_modify shift yes' with this pair style"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); + if (!offset_flag) + error->all(FLERR, Error::NOLASTLINE, "Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut_global > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp b/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp index 6bc3a6dde7..be6cefa62a 100644 --- a/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp +++ b/src/INTERLAYER/pair_kolmogorov_crespi_full.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "interlayer_taper.h" #include "memory.h" #include "my_page.h" @@ -164,8 +165,11 @@ void PairKolmogorovCrespiFull::coeff(int narg, char **arg) double PairKolmogorovCrespiFull::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); - if (!offset_flag) error->all(FLERR, "Must use 'pair_modify shift yes' with this pair style"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); + if (!offset_flag) + error->all(FLERR, Error::NOLASTLINE, "Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut_global > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/INTERLAYER/pair_kolmogorov_crespi_z.cpp b/src/INTERLAYER/pair_kolmogorov_crespi_z.cpp index fa0fe9cad1..08bf44b37d 100644 --- a/src/INTERLAYER/pair_kolmogorov_crespi_z.cpp +++ b/src/INTERLAYER/pair_kolmogorov_crespi_z.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -245,7 +246,7 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) void PairKolmogorovCrespiZ::init_style() { if (force->newton_pair == 0) - error->all(FLERR, "Pair style kolmogorov/crespi/z requires newton pair on"); + error->all(FLERR, Error::NOLASTLINE, "Pair style kolmogorov/crespi/z requires newton pair on"); neighbor->add_request(this); } @@ -256,8 +257,11 @@ void PairKolmogorovCrespiZ::init_style() double PairKolmogorovCrespiZ::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); - if (!offset_flag) error->all(FLERR, "Must use 'pair_modify shift yes' with this pair style"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); + if (!offset_flag) + error->all(FLERR, Error::NOLASTLINE, "Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut_global > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/INTERLAYER/pair_lebedeva_z.cpp b/src/INTERLAYER/pair_lebedeva_z.cpp index ff9f9dedaa..58842e805d 100644 --- a/src/INTERLAYER/pair_lebedeva_z.cpp +++ b/src/INTERLAYER/pair_lebedeva_z.cpp @@ -29,6 +29,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neighbor.h" #include "neigh_list.h" @@ -253,9 +254,11 @@ void PairLebedevaZ::init_style() double PairLebedevaZ::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); if (!offset_flag) - error->all(FLERR,"Must use 'pair_modify shift yes' with this pair style"); + error->all(FLERR, Error::NOLASTLINE, "Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut_global > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 93ba759de4..6876dbe6dc 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -64,6 +64,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neigh_request.h" @@ -621,7 +622,9 @@ double PairKIM::init_one(int i, int j) // This is called once of each (unordered) i,j pair for each // "run ...", "minimize ...", etc. read from input - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return kim_global_influence_distance; } diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index fc38cdf19a..64f4025ffb 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -22,6 +22,7 @@ #include "atom_masks.h" #include "error.h" #include "force.h" +#include "info.h" #include "kokkos.h" #include "memory_kokkos.h" #include "neigh_list.h" @@ -483,7 +484,9 @@ void PairTableKokkos::settings(int narg, char **arg) template double PairTableKokkos::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); tabindex[j][i] = tabindex[i][j]; diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index 517c408945..2b04c3aa75 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "fix.h" #include "force.h" +#include "info.h" #include "kokkos.h" #include "kokkos.h" #include "kokkos_few.h" @@ -1159,7 +1160,9 @@ void PairTableRXKokkos::coeff(int narg, char **arg) template double PairTableRXKokkos::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); tabindex[j][i] = tabindex[i][j]; diff --git a/src/KSPACE/pair_born_coul_long.cpp b/src/KSPACE/pair_born_coul_long.cpp index e9abe539c1..22ba32d3c6 100644 --- a/src/KSPACE/pair_born_coul_long.cpp +++ b/src/KSPACE/pair_born_coul_long.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "ewald_const.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "memory.h" @@ -296,7 +297,9 @@ void PairBornCoulLong::coeff(int narg, char **arg) double PairBornCoulLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/KSPACE/pair_buck_coul_long.cpp b/src/KSPACE/pair_buck_coul_long.cpp index f3b7a91c0e..b9c8e2a6f3 100644 --- a/src/KSPACE/pair_buck_coul_long.cpp +++ b/src/KSPACE/pair_buck_coul_long.cpp @@ -19,6 +19,7 @@ #include "error.h" #include "ewald_const.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "memory.h" @@ -292,7 +293,9 @@ void PairBuckCoulLong::coeff(int narg, char **arg) double PairBuckCoulLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/KSPACE/pair_buck_long_coul_long.cpp b/src/KSPACE/pair_buck_long_coul_long.cpp index e1dac0a61b..188b01b2e3 100644 --- a/src/KSPACE/pair_buck_long_coul_long.cpp +++ b/src/KSPACE/pair_buck_long_coul_long.cpp @@ -23,6 +23,7 @@ #include "error.h" #include "ewald_const.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_extra.h" #include "memory.h" @@ -274,7 +275,9 @@ void PairBuckLongCoulLong::init_style() double PairBuckLongCoulLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); if (ewald_order&(1<<6)) cut_buck[i][j] = cut_buck_global; else cut_buck[i][j] = cut_buck_read[i][j]; diff --git a/src/KSPACE/pair_coul_streitz.cpp b/src/KSPACE/pair_coul_streitz.cpp index 5949745953..055d98309b 100644 --- a/src/KSPACE/pair_coul_streitz.cpp +++ b/src/KSPACE/pair_coul_streitz.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "memory.h" @@ -162,7 +163,9 @@ double PairCoulStreitz::init_one(int i, int j) { scale[j][i] = scale[i][j]; - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cut_coul; } diff --git a/src/LEPTON/pair_lepton.cpp b/src/LEPTON/pair_lepton.cpp index e55a77a583..c9f45d8ea1 100644 --- a/src/LEPTON/pair_lepton.cpp +++ b/src/LEPTON/pair_lepton.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -216,7 +217,8 @@ void PairLepton::settings(int narg, char **arg) void PairLepton::coeff(int narg, char **arg) { - if (narg < 3 || narg > 4) error->all(FLERR, "Incorrect number of args for pair coefficients" + utils::errorurl(21)); + if (narg < 3 || narg > 4) + error->all(FLERR, "Incorrect number of args for pair coefficients" + utils::errorurl(21)); if (!allocated) allocate(); int ilo, ihi, jlo, jhi; @@ -277,7 +279,9 @@ void PairLepton::coeff(int narg, char **arg) double PairLepton::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); offset[i][j] = 0.0; if (offset_flag) { diff --git a/src/MACHDYN/pair_smd_hertz.cpp b/src/MACHDYN/pair_smd_hertz.cpp index 32b488ef03..fcdaae76bd 100644 --- a/src/MACHDYN/pair_smd_hertz.cpp +++ b/src/MACHDYN/pair_smd_hertz.cpp @@ -34,6 +34,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -252,37 +253,37 @@ void PairHertz::settings(int narg, char **arg) { ------------------------------------------------------------------------- */ void PairHertz::coeff(int narg, char **arg) { - if (narg != 3) - error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); - if (!allocated) - allocate(); + if (narg != 3) + error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); + if (!allocated) + allocate(); - int ilo, ihi, jlo, jhi; - utils::bounds(FLERR,arg[0], 1, atom->ntypes, ilo, ihi, error); - utils::bounds(FLERR,arg[1], 1, atom->ntypes, jlo, jhi, error); + int ilo, ihi, jlo, jhi; + utils::bounds(FLERR,arg[0], 1, atom->ntypes, ilo, ihi, error); + utils::bounds(FLERR,arg[1], 1, atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); - // set short-range force constant - double kn_one = 0.0; - if (domain->dimension == 3) { - kn_one = (16. / 15.) * bulkmodulus_one; //assuming poisson ratio = 1/4 for 3d - } else { - kn_one = 0.251856195 * (2. / 3.) * bulkmodulus_one; //assuming poisson ratio = 1/3 for 2d - } + // set short-range force constant + double kn_one = 0.0; + if (domain->dimension == 3) { + kn_one = (16. / 15.) * bulkmodulus_one; //assuming poisson ratio = 1/4 for 3d + } else { + kn_one = 0.251856195 * (2. / 3.) * bulkmodulus_one; //assuming poisson ratio = 1/3 for 2d + } - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo, i); j <= jhi; j++) { - bulkmodulus[i][j] = bulkmodulus_one; - kn[i][j] = kn_one; - setflag[i][j] = 1; - count++; - } - } + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo, i); j <= jhi; j++) { + bulkmodulus[i][j] = bulkmodulus_one; + kn[i][j] = kn_one; + setflag[i][j] = 1; + count++; + } + } - if (count == 0) - error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); + if (count == 0) + error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- @@ -291,26 +292,27 @@ void PairHertz::coeff(int narg, char **arg) { double PairHertz::init_one(int i, int j) { - if (!allocated) - allocate(); + if (!allocated) + allocate(); - if (setflag[i][j] == 0) - error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); - bulkmodulus[j][i] = bulkmodulus[i][j]; - kn[j][i] = kn[i][j]; + bulkmodulus[j][i] = bulkmodulus[i][j]; + kn[j][i] = kn[i][j]; - // cutoff = sum of max I,J radii for - // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen + // cutoff = sum of max I,J radii for + // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen - double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; - cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); - cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); + double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; + cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); + cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); - if (comm->me == 0) { - printf("cutoff for pair smd/hertz = %f\n", cutoff); - } - return cutoff; + if (comm->me == 0) { + printf("cutoff for pair smd/hertz = %f\n", cutoff); + } + return cutoff; } /* ---------------------------------------------------------------------- diff --git a/src/MACHDYN/pair_smd_tlsph.cpp b/src/MACHDYN/pair_smd_tlsph.cpp index a1c8fbf1ea..72ea1b4d5f 100644 --- a/src/MACHDYN/pair_smd_tlsph.cpp +++ b/src/MACHDYN/pair_smd_tlsph.cpp @@ -34,6 +34,7 @@ #include "fix.h" #include "force.h" #include "group.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neighbor.h" @@ -1553,10 +1554,11 @@ double PairTlsph::init_one(int i, int j) { allocate(); if (setflag[i][j] == 0) - error->all(FLERR, "All pair coeffs are not set"); + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); if (force->newton == 1) - error->all(FLERR, "Pair style tlsph requires newton off"); + error->all(FLERR, Error::NOLASTLINE, "Pair style tlsph requires newton off"); // cutoff = sum of max I,J radii for // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen diff --git a/src/MACHDYN/pair_smd_triangulated_surface.cpp b/src/MACHDYN/pair_smd_triangulated_surface.cpp index da9d5faa12..c50b7700f6 100644 --- a/src/MACHDYN/pair_smd_triangulated_surface.cpp +++ b/src/MACHDYN/pair_smd_triangulated_surface.cpp @@ -34,6 +34,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -334,37 +335,37 @@ void PairTriSurf::settings(int narg, char **arg) { ------------------------------------------------------------------------- */ void PairTriSurf::coeff(int narg, char **arg) { - if (narg != 3) - error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); - if (!allocated) - allocate(); + if (narg != 3) + error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); + if (!allocated) + allocate(); - int ilo, ihi, jlo, jhi; - utils::bounds(FLERR,arg[0], 1,atom->ntypes, ilo, ihi, error); - utils::bounds(FLERR,arg[1], 1,atom->ntypes, jlo, jhi, error); + int ilo, ihi, jlo, jhi; + utils::bounds(FLERR,arg[0], 1,atom->ntypes, ilo, ihi, error); + utils::bounds(FLERR,arg[1], 1,atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); - // set short-range force constant - double kn_one = 0.0; - if (domain->dimension == 3) { - kn_one = (16. / 15.) * bulkmodulus_one; //assuming poisson ratio = 1/4 for 3d - } else { - kn_one = 0.251856195 * (2. / 3.) * bulkmodulus_one; //assuming poisson ratio = 1/3 for 2d - } + // set short-range force constant + double kn_one = 0.0; + if (domain->dimension == 3) { + kn_one = (16. / 15.) * bulkmodulus_one; //assuming poisson ratio = 1/4 for 3d + } else { + kn_one = 0.251856195 * (2. / 3.) * bulkmodulus_one; //assuming poisson ratio = 1/3 for 2d + } - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo, i); j <= jhi; j++) { - bulkmodulus[i][j] = bulkmodulus_one; - kn[i][j] = kn_one; - setflag[i][j] = 1; - count++; - } - } + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo, i); j <= jhi; j++) { + bulkmodulus[i][j] = bulkmodulus_one; + kn[i][j] = kn_one; + setflag[i][j] = 1; + count++; + } + } - if (count == 0) - error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); + if (count == 0) + error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- @@ -373,26 +374,26 @@ void PairTriSurf::coeff(int narg, char **arg) { double PairTriSurf::init_one(int i, int j) { - if (!allocated) - allocate(); + if (!allocated) + allocate(); - if (setflag[i][j] == 0) - error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); - bulkmodulus[j][i] = bulkmodulus[i][j]; - kn[j][i] = kn[i][j]; + bulkmodulus[j][i] = bulkmodulus[i][j]; + kn[j][i] = kn[i][j]; - // cutoff = sum of max I,J radii for - // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen + // cutoff = sum of max I,J radii for + // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen - double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; - cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); - cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); + double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; + cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); + cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); - if (comm->me == 0) { - printf("cutoff for pair smd/smd/tri_surface = %f\n", cutoff); - } - return cutoff; + if (comm->me == 0) utils::logmesg(lmp, "cutoff for pair smd/smd/tri_surface = {}\n", cutoff); + + return cutoff; } /* ---------------------------------------------------------------------- diff --git a/src/MACHDYN/pair_smd_ulsph.cpp b/src/MACHDYN/pair_smd_ulsph.cpp index 20897a7852..7cbd8c1192 100644 --- a/src/MACHDYN/pair_smd_ulsph.cpp +++ b/src/MACHDYN/pair_smd_ulsph.cpp @@ -29,6 +29,7 @@ #include "comm.h" #include "domain.h" #include "error.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -932,385 +933,385 @@ void PairULSPH::settings(int narg, char **arg) { ------------------------------------------------------------------------- */ void PairULSPH::coeff(int narg, char **arg) { - int ioffset, iarg, iNextKwd, itype, jtype; - std::string s, t; + int ioffset, iarg, iNextKwd, itype, jtype; + std::string s, t; - if (narg < 3) utils::missing_cmd_args(FLERR, "pair ulsph", error); + if (narg < 3) utils::missing_cmd_args(FLERR, "pair ulsph", error); - if (!allocated) allocate(); + if (!allocated) allocate(); + + /* + * if parameters are give in i,i form, i.e., no a cross interaction, set material parameters + */ + + if (utils::inumeric(FLERR, arg[0], false, lmp) == utils::inumeric(FLERR, arg[1], false, lmp)) { + + itype = utils::inumeric(FLERR, arg[0],false,lmp); + eos[itype] = viscosity[itype] = strength[itype] = NONE; + + if (comm->me == 0) { + printf("\n>>========>>========>>========>>========>>========>>========>>========>>========\n"); + printf("...SMD / ULSPH PROPERTIES OF PARTICLE TYPE %d\n\n", itype); + } + + /* + * read parameters which are common -- regardless of material / eos model + */ + + ioffset = 2; + if (strcmp(arg[ioffset], "*COMMON") != 0) error->all(FLERR, "common keyword missing!"); + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *COMMON"); + + if (iNextKwd - ioffset != 5 + 1) + error->all(FLERR, "expected 5 arguments following *COMMON but got {}\n", iNextKwd - ioffset - 1); + + Lookup[REFERENCE_DENSITY][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + Lookup[REFERENCE_SOUNDSPEED][itype] = utils::numeric(FLERR, arg[ioffset + 2],false,lmp); + Q1[itype] = utils::numeric(FLERR, arg[ioffset + 3],false,lmp); + Lookup[HEAT_CAPACITY][itype] = utils::numeric(FLERR, arg[ioffset + 4],false,lmp); + Lookup[HOURGLASS_CONTROL_AMPLITUDE][itype] = utils::numeric(FLERR, arg[ioffset + 5],false,lmp); + + Lookup[BULK_MODULUS][itype] = Lookup[REFERENCE_SOUNDSPEED][itype] * Lookup[REFERENCE_SOUNDSPEED][itype] + * Lookup[REFERENCE_DENSITY][itype]; + + if (comm->me == 0) { + printf("material unspecific properties for SMD/ULSPH definition of particle type %d:\n", itype); + printf(FORMAT1, "reference density", Lookup[REFERENCE_DENSITY][itype]); + printf(FORMAT1, "reference speed of sound", Lookup[REFERENCE_SOUNDSPEED][itype]); + printf(FORMAT1, "linear viscosity coefficient", Q1[itype]); + printf(FORMAT1, "heat capacity [energy / (mass * temperature)]", Lookup[HEAT_CAPACITY][itype]); + printf(FORMAT1, "bulk modulus", Lookup[BULK_MODULUS][itype]); + printf(FORMAT1, "hourglass control amplitude", Lookup[HOURGLASS_CONTROL_AMPLITUDE][itype]); + } + + /* + * read following material cards + */ + + while (true) { + if (strcmp(arg[iNextKwd], "*END") == 0) { + break; + } + + ioffset = iNextKwd; + if (strcmp(arg[ioffset], "*EOS_TAIT") == 0) { /* - * if parameters are give in i,i form, i.e., no a cross interaction, set material parameters + * Tait EOS */ - if (utils::inumeric(FLERR, arg[0], false, lmp) == utils::inumeric(FLERR, arg[1], false, lmp)) { - - itype = utils::inumeric(FLERR, arg[0],false,lmp); - eos[itype] = viscosity[itype] = strength[itype] = NONE; - - if (comm->me == 0) { - printf("\n>>========>>========>>========>>========>>========>>========>>========>>========\n"); - printf("...SMD / ULSPH PROPERTIES OF PARTICLE TYPE %d\n\n", itype); - } - - /* - * read parameters which are common -- regardless of material / eos model - */ - - ioffset = 2; - if (strcmp(arg[ioffset], "*COMMON") != 0) error->all(FLERR, "common keyword missing!"); - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *COMMON"); - - if (iNextKwd - ioffset != 5 + 1) - error->all(FLERR, "expected 5 arguments following *COMMON but got {}\n", iNextKwd - ioffset - 1); - - Lookup[REFERENCE_DENSITY][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - Lookup[REFERENCE_SOUNDSPEED][itype] = utils::numeric(FLERR, arg[ioffset + 2],false,lmp); - Q1[itype] = utils::numeric(FLERR, arg[ioffset + 3],false,lmp); - Lookup[HEAT_CAPACITY][itype] = utils::numeric(FLERR, arg[ioffset + 4],false,lmp); - Lookup[HOURGLASS_CONTROL_AMPLITUDE][itype] = utils::numeric(FLERR, arg[ioffset + 5],false,lmp); - - Lookup[BULK_MODULUS][itype] = Lookup[REFERENCE_SOUNDSPEED][itype] * Lookup[REFERENCE_SOUNDSPEED][itype] - * Lookup[REFERENCE_DENSITY][itype]; - - if (comm->me == 0) { - printf("material unspecific properties for SMD/ULSPH definition of particle type %d:\n", itype); - printf(FORMAT1, "reference density", Lookup[REFERENCE_DENSITY][itype]); - printf(FORMAT1, "reference speed of sound", Lookup[REFERENCE_SOUNDSPEED][itype]); - printf(FORMAT1, "linear viscosity coefficient", Q1[itype]); - printf(FORMAT1, "heat capacity [energy / (mass * temperature)]", Lookup[HEAT_CAPACITY][itype]); - printf(FORMAT1, "bulk modulus", Lookup[BULK_MODULUS][itype]); - printf(FORMAT1, "hourglass control amplitude", Lookup[HOURGLASS_CONTROL_AMPLITUDE][itype]); - } - - /* - * read following material cards - */ - - while (true) { - if (strcmp(arg[iNextKwd], "*END") == 0) { - break; - } - - ioffset = iNextKwd; - if (strcmp(arg[ioffset], "*EOS_TAIT") == 0) { - - /* - * Tait EOS - */ - - eos[itype] = EOS_TAIT; - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_TAIT"); - - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *EOS_TAIT but got {}\n", iNextKwd - ioffset - 1); - - Lookup[EOS_TAIT_EXPONENT][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "Tait EOS"); - printf(FORMAT1, "Exponent", Lookup[EOS_TAIT_EXPONENT][itype]); - } - } // end Tait EOS - - else if (strcmp(arg[ioffset], "*EOS_PERFECT_GAS") == 0) { - - /* - * Perfect Gas EOS - */ - - eos[itype] = EOS_PERFECT_GAS; - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_PERFECT_GAS"); - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *EOS_PERFECT_GAS but got {}\n", iNextKwd - ioffset - 1); - - Lookup[EOS_PERFECT_GAS_GAMMA][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "Perfect Gas EOS"); - printf(FORMAT1, "Heat Capacity Ratio Gamma", Lookup[EOS_PERFECT_GAS_GAMMA][itype]); - } - } // end Perfect Gas EOS - else if (strcmp(arg[ioffset], "*EOS_LINEAR") == 0) { - - /* - * Linear EOS - */ - - eos[itype] = EOS_LINEAR; - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_LINEAR"); - if (iNextKwd - ioffset != 0 + 1) - error->all(FLERR, "expected 0 arguments following *EOS_LINEAR but got {}\n", iNextKwd - ioffset - 1); - - if (comm->me == 0) { - printf(FORMAT2, "Linear EOS"); - printf(FORMAT1, "Bulk modulus", Lookup[BULK_MODULUS][itype]); - } - } // end Linear EOS - else if (strcmp(arg[ioffset], "*STRENGTH_LINEAR_PLASTIC") == 0) { - - if (!velocity_gradient) { - error->all(FLERR, "A strength model was requested but *VELOCITY_GRADIENT is not set"); - } - - /* - * linear elastic / ideal plastic material model with strength - */ - - strength[itype] = STRENGTH_LINEAR_PLASTIC; - velocity_gradient_required = true; - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *STRENGTH_LINEAR_PLASTIC"); - if (iNextKwd - ioffset != 3 + 1) - error->all(FLERR, "expected 3 arguments following *STRENGTH_LINEAR_PLASTIC but got {}\n", iNextKwd - ioffset - 1); - - Lookup[SHEAR_MODULUS][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - Lookup[YIELD_STRENGTH][itype] = utils::numeric(FLERR, arg[ioffset + 2],false,lmp); - Lookup[HARDENING_PARAMETER][itype] = utils::numeric(FLERR, arg[ioffset + 3],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "linear elastic / ideal plastic material mode"); - printf(FORMAT1, "yield_strength", Lookup[YIELD_STRENGTH][itype]); - printf(FORMAT1, "constant hardening parameter", Lookup[HARDENING_PARAMETER][itype]); - printf(FORMAT1, "shear modulus", Lookup[SHEAR_MODULUS][itype]); - } - } // end *STRENGTH_LINEAR_PLASTIC - else if (strcmp(arg[ioffset], "*STRENGTH_LINEAR") == 0) { - - if (!velocity_gradient) { - error->all(FLERR, "A strength model was requested but *VELOCITY_GRADIENT is not set"); - } - - /* - * linear elastic / ideal plastic material model with strength - */ - - strength[itype] = STRENGTH_LINEAR; - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *STRENGTH_LINEAR"); - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *STRENGTH_LINEAR but got {}\n", iNextKwd - ioffset - 1); - - Lookup[SHEAR_MODULUS][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "linear elastic strength model"); - printf(FORMAT1, "shear modulus", Lookup[SHEAR_MODULUS][itype]); - } - } // end *STRENGTH_LINEAR - else if (strcmp(arg[ioffset], "*VISCOSITY_NEWTON") == 0) { - - if (!velocity_gradient) { - error->all(FLERR, "A viscosity model was requested but *VELOCITY_GRADIENT is not set"); - } - - /* - * linear elastic / ideal plastic material model with strength - */ - - viscosity[itype] = VISCOSITY_NEWTON; - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *VISCOSITY_NEWTON"); - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *VISCOSITY_NEWTON but got {}\n", iNextKwd - ioffset - 1); - - Lookup[VISCOSITY_MU][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "Newton viscosity model"); - printf(FORMAT1, "viscosity mu", Lookup[VISCOSITY_MU][itype]); - } - } // end *STRENGTH_VISCOSITY_NEWTON - - else if (strcmp(arg[ioffset], "*ARTIFICIAL_PRESSURE") == 0) { - - /* - * use Monaghan's artificial pressure to prevent particle clumping - */ - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *ARTIFICIAL_PRESSURE"); - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *ARTIFICIAL_PRESSURE but got {}\n", iNextKwd - ioffset - 1); - - artificial_pressure[itype][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "Artificial Pressure is enabled."); - printf(FORMAT1, "Artificial Pressure amplitude", artificial_pressure[itype][itype]); - } - } // end *ARTIFICIAL_PRESSURE - - else if (strcmp(arg[ioffset], "*ARTIFICIAL_STRESS") == 0) { - - /* - * use Monaghan's artificial stress to prevent particle clumping - */ - - t = string("*"); - iNextKwd = -1; - for (iarg = ioffset + 1; iarg < narg; iarg++) { - s = string(arg[iarg]); - if (s.compare(0, t.length(), t) == 0) { - iNextKwd = iarg; - break; - } - } - - if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *ARTIFICIAL_STRESS"); - if (iNextKwd - ioffset != 1 + 1) - error->all(FLERR, "expected 1 arguments following *ARTIFICIAL_STRESS but got {}\n", iNextKwd - ioffset - 1); - - artificial_stress[itype][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); - - if (comm->me == 0) { - printf(FORMAT2, "Artificial Stress is enabled."); - printf(FORMAT1, "Artificial Stress amplitude", artificial_stress[itype][itype]); - } - } // end *ARTIFICIAL_STRESS - - else error->all(FLERR, "unknown *KEYWORD: {}", arg[ioffset]); - } - - /* - * copy data which is looked up in inner pairwise loops from slow maps to fast arrays - */ - - rho0[itype] = Lookup[REFERENCE_DENSITY][itype]; - c0_type[itype] = Lookup[REFERENCE_SOUNDSPEED][itype]; - setflag[itype][itype] = 1; - - /* - * error checks - */ - - if ((viscosity[itype] != NONE) && (strength[itype] != NONE)) - error->all(FLERR, "cannot have both a strength and viscosity model for particle type {}", itype); - - if (eos[itype] == NONE) - error->all(FLERR, "must specify an EOS for particle type {}", itype); - - } else { - /* - * we are reading a cross-interaction line for particle types i, j - */ - - itype = utils::inumeric(FLERR, arg[0],false,lmp); - jtype = utils::inumeric(FLERR, arg[1],false,lmp); - - if (strcmp(arg[2], "*CROSS") != 0) - error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, *CROSS keyword is missing", - itype, jtype); - - if (setflag[itype][itype] != 1) - error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, properties of type {} have not yet been specified", itype, jtype, itype); - - if (setflag[jtype][jtype] != 1) - error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, properties of type {} have not yet been specified", itype, jtype, jtype); - - setflag[itype][jtype] = 1; - setflag[jtype][itype] = 1; - - if ((artificial_pressure[itype][itype] > 0.0) && (artificial_pressure[jtype][jtype] > 0.0)) { - artificial_pressure[itype][jtype] = 0.5 * (artificial_pressure[itype][itype] + artificial_pressure[jtype][jtype]); - artificial_pressure[jtype][itype] = artificial_pressure[itype][jtype]; - } else { - artificial_pressure[itype][jtype] = artificial_pressure[jtype][itype] = 0.0; - } - - if ((artificial_stress[itype][itype] > 0.0) && (artificial_stress[jtype][jtype] > 0.0)) { - artificial_stress[itype][jtype] = 0.5 * (artificial_stress[itype][itype] + artificial_stress[jtype][jtype]); - artificial_stress[jtype][itype] = artificial_stress[itype][jtype]; - } else { - artificial_stress[itype][jtype] = artificial_stress[jtype][itype] = 0.0; - } - - if (comm->me == 0) { - printf(">>========>>========>>========>>========>>========>>========>>========>>========\n"); - } - + eos[itype] = EOS_TAIT; + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_TAIT"); + + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *EOS_TAIT but got {}\n", iNextKwd - ioffset - 1); + + Lookup[EOS_TAIT_EXPONENT][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "Tait EOS"); + printf(FORMAT1, "Exponent", Lookup[EOS_TAIT_EXPONENT][itype]); + } + } // end Tait EOS + + else if (strcmp(arg[ioffset], "*EOS_PERFECT_GAS") == 0) { + + /* + * Perfect Gas EOS + */ + + eos[itype] = EOS_PERFECT_GAS; + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_PERFECT_GAS"); + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *EOS_PERFECT_GAS but got {}\n", iNextKwd - ioffset - 1); + + Lookup[EOS_PERFECT_GAS_GAMMA][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "Perfect Gas EOS"); + printf(FORMAT1, "Heat Capacity Ratio Gamma", Lookup[EOS_PERFECT_GAS_GAMMA][itype]); + } + } // end Perfect Gas EOS + else if (strcmp(arg[ioffset], "*EOS_LINEAR") == 0) { + + /* + * Linear EOS + */ + + eos[itype] = EOS_LINEAR; + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *EOS_LINEAR"); + if (iNextKwd - ioffset != 0 + 1) + error->all(FLERR, "expected 0 arguments following *EOS_LINEAR but got {}\n", iNextKwd - ioffset - 1); + + if (comm->me == 0) { + printf(FORMAT2, "Linear EOS"); + printf(FORMAT1, "Bulk modulus", Lookup[BULK_MODULUS][itype]); + } + } // end Linear EOS + else if (strcmp(arg[ioffset], "*STRENGTH_LINEAR_PLASTIC") == 0) { + + if (!velocity_gradient) { + error->all(FLERR, "A strength model was requested but *VELOCITY_GRADIENT is not set"); + } + + /* + * linear elastic / ideal plastic material model with strength + */ + + strength[itype] = STRENGTH_LINEAR_PLASTIC; + velocity_gradient_required = true; + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *STRENGTH_LINEAR_PLASTIC"); + if (iNextKwd - ioffset != 3 + 1) + error->all(FLERR, "expected 3 arguments following *STRENGTH_LINEAR_PLASTIC but got {}\n", iNextKwd - ioffset - 1); + + Lookup[SHEAR_MODULUS][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + Lookup[YIELD_STRENGTH][itype] = utils::numeric(FLERR, arg[ioffset + 2],false,lmp); + Lookup[HARDENING_PARAMETER][itype] = utils::numeric(FLERR, arg[ioffset + 3],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "linear elastic / ideal plastic material mode"); + printf(FORMAT1, "yield_strength", Lookup[YIELD_STRENGTH][itype]); + printf(FORMAT1, "constant hardening parameter", Lookup[HARDENING_PARAMETER][itype]); + printf(FORMAT1, "shear modulus", Lookup[SHEAR_MODULUS][itype]); + } + } // end *STRENGTH_LINEAR_PLASTIC + else if (strcmp(arg[ioffset], "*STRENGTH_LINEAR") == 0) { + + if (!velocity_gradient) { + error->all(FLERR, "A strength model was requested but *VELOCITY_GRADIENT is not set"); + } + + /* + * linear elastic / ideal plastic material model with strength + */ + + strength[itype] = STRENGTH_LINEAR; + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *STRENGTH_LINEAR"); + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *STRENGTH_LINEAR but got {}\n", iNextKwd - ioffset - 1); + + Lookup[SHEAR_MODULUS][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "linear elastic strength model"); + printf(FORMAT1, "shear modulus", Lookup[SHEAR_MODULUS][itype]); + } + } // end *STRENGTH_LINEAR + else if (strcmp(arg[ioffset], "*VISCOSITY_NEWTON") == 0) { + + if (!velocity_gradient) { + error->all(FLERR, "A viscosity model was requested but *VELOCITY_GRADIENT is not set"); + } + + /* + * linear elastic / ideal plastic material model with strength + */ + + viscosity[itype] = VISCOSITY_NEWTON; + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *VISCOSITY_NEWTON"); + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *VISCOSITY_NEWTON but got {}\n", iNextKwd - ioffset - 1); + + Lookup[VISCOSITY_MU][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "Newton viscosity model"); + printf(FORMAT1, "viscosity mu", Lookup[VISCOSITY_MU][itype]); + } + } // end *STRENGTH_VISCOSITY_NEWTON + + else if (strcmp(arg[ioffset], "*ARTIFICIAL_PRESSURE") == 0) { + + /* + * use Monaghan's artificial pressure to prevent particle clumping + */ + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *ARTIFICIAL_PRESSURE"); + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *ARTIFICIAL_PRESSURE but got {}\n", iNextKwd - ioffset - 1); + + artificial_pressure[itype][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "Artificial Pressure is enabled."); + printf(FORMAT1, "Artificial Pressure amplitude", artificial_pressure[itype][itype]); + } + } // end *ARTIFICIAL_PRESSURE + + else if (strcmp(arg[ioffset], "*ARTIFICIAL_STRESS") == 0) { + + /* + * use Monaghan's artificial stress to prevent particle clumping + */ + + t = string("*"); + iNextKwd = -1; + for (iarg = ioffset + 1; iarg < narg; iarg++) { + s = string(arg[iarg]); + if (s.compare(0, t.length(), t) == 0) { + iNextKwd = iarg; + break; + } + } + + if (iNextKwd < 0) error->all(FLERR, "no *KEYWORD terminates *ARTIFICIAL_STRESS"); + if (iNextKwd - ioffset != 1 + 1) + error->all(FLERR, "expected 1 arguments following *ARTIFICIAL_STRESS but got {}\n", iNextKwd - ioffset - 1); + + artificial_stress[itype][itype] = utils::numeric(FLERR, arg[ioffset + 1],false,lmp); + + if (comm->me == 0) { + printf(FORMAT2, "Artificial Stress is enabled."); + printf(FORMAT1, "Artificial Stress amplitude", artificial_stress[itype][itype]); + } + } // end *ARTIFICIAL_STRESS + + else error->all(FLERR, "unknown *KEYWORD: {}", arg[ioffset]); + } + + /* + * copy data which is looked up in inner pairwise loops from slow maps to fast arrays + */ + + rho0[itype] = Lookup[REFERENCE_DENSITY][itype]; + c0_type[itype] = Lookup[REFERENCE_SOUNDSPEED][itype]; + setflag[itype][itype] = 1; + + /* + * error checks + */ + + if ((viscosity[itype] != NONE) && (strength[itype] != NONE)) + error->all(FLERR, "cannot have both a strength and viscosity model for particle type {}", itype); + + if (eos[itype] == NONE) + error->all(FLERR, "must specify an EOS for particle type {}", itype); + + } else { + /* + * we are reading a cross-interaction line for particle types i, j + */ + + itype = utils::inumeric(FLERR, arg[0],false,lmp); + jtype = utils::inumeric(FLERR, arg[1],false,lmp); + + if (strcmp(arg[2], "*CROSS") != 0) + error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, *CROSS keyword is missing", + itype, jtype); + + if (setflag[itype][itype] != 1) + error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, properties of type {} have not yet been specified", itype, jtype, itype); + + if (setflag[jtype][jtype] != 1) + error->all(FLERR, "ulsph cross interaction between particle type {} and {} requested, however, properties of type {} have not yet been specified", itype, jtype, jtype); + + setflag[itype][jtype] = 1; + setflag[jtype][itype] = 1; + + if ((artificial_pressure[itype][itype] > 0.0) && (artificial_pressure[jtype][jtype] > 0.0)) { + artificial_pressure[itype][jtype] = 0.5 * (artificial_pressure[itype][itype] + artificial_pressure[jtype][jtype]); + artificial_pressure[jtype][itype] = artificial_pressure[itype][jtype]; + } else { + artificial_pressure[itype][jtype] = artificial_pressure[jtype][itype] = 0.0; + } + + if ((artificial_stress[itype][itype] > 0.0) && (artificial_stress[jtype][jtype] > 0.0)) { + artificial_stress[itype][jtype] = 0.5 * (artificial_stress[itype][itype] + artificial_stress[jtype][jtype]); + artificial_stress[jtype][itype] = artificial_stress[itype][jtype]; + } else { + artificial_stress[itype][jtype] = artificial_stress[jtype][itype] = 0.0; + } + + if (comm->me == 0) { + printf(">>========>>========>>========>>========>>========>>========>>========>>========\n"); + } + + } } /* ---------------------------------------------------------------------- @@ -1319,17 +1320,19 @@ void PairULSPH::coeff(int narg, char **arg) { double PairULSPH::init_one(int i, int j) { - if (!allocated) allocate(); + if (!allocated) allocate(); - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); // cutoff = sum of max I,J radii for // dynamic/dynamic & dynamic/frozen interactions, but not frozen/frozen - double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; - cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); - cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); - return cutoff; + double cutoff = maxrad_dynamic[i] + maxrad_dynamic[j]; + cutoff = MAX(cutoff, maxrad_frozen[i] + maxrad_dynamic[j]); + cutoff = MAX(cutoff, maxrad_dynamic[i] + maxrad_frozen[j]); + return cutoff; } /* ---------------------------------------------------------------------- diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index 4a3c3351ba..705fa34f8b 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "my_page.h" @@ -259,7 +260,9 @@ void PairAIREBO::init_style() double PairAIREBO::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); // convert to C,H types diff --git a/src/MANYBODY/pair_atm.cpp b/src/MANYBODY/pair_atm.cpp index 3d7e5e2600..03f11c1625 100644 --- a/src/MANYBODY/pair_atm.cpp +++ b/src/MANYBODY/pair_atm.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -269,7 +270,7 @@ void PairATM::coeff(int narg, char **arg) void PairATM::init_style() { if (force->newton_pair == 0) - error->all(FLERR,"Pair style ATM requires newton pair on"); + error->all(FLERR, Error::NOLASTLINE, "Pair style ATM requires newton pair on"); // need a full neighbor list @@ -283,7 +284,9 @@ void PairATM::init_style() double PairATM::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); // set all 6 symmetric permutations of I,J,K types to same nu value diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index ae50736455..a158b91f03 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -42,6 +42,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "neigh_list.h" @@ -437,7 +438,9 @@ void PairBOP::init_style() double PairBOP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); int itype = map[i]; int jtype = map[j]; diff --git a/src/MANYBODY/pair_comb.cpp b/src/MANYBODY/pair_comb.cpp index 609e4efcf8..f3cd29b43d 100644 --- a/src/MANYBODY/pair_comb.cpp +++ b/src/MANYBODY/pair_comb.cpp @@ -26,6 +26,7 @@ #include "error.h" #include "force.h" #include "group.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "math_special.h" @@ -466,11 +467,11 @@ void PairComb::coeff(int narg, char **arg) void PairComb::init_style() { if (atom->tag_enable == 0) - error->all(FLERR,"Pair style COMB requires atom IDs"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB requires atom IDs"); if (force->newton_pair == 0) - error->all(FLERR,"Pair style COMB requires newton pair on"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB requires newton pair on"); if (!atom->q_flag) - error->all(FLERR,"Pair style COMB requires atom attribute q"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB requires atom attribute q"); // ptr to QEQ fix @@ -509,7 +510,9 @@ void PairComb::init_style() double PairComb::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_comb3.cpp b/src/MANYBODY/pair_comb3.cpp index 3a02ed73b1..bc74bf6361 100644 --- a/src/MANYBODY/pair_comb3.cpp +++ b/src/MANYBODY/pair_comb3.cpp @@ -25,6 +25,7 @@ #include "error.h" #include "force.h" #include "group.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "math_special.h" @@ -208,11 +209,11 @@ void PairComb3::coeff(int narg, char **arg) void PairComb3::init_style() { if (atom->tag_enable == 0) - error->all(FLERR,"Pair style COMB3 requires atom IDs"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB3 requires atom IDs"); if (force->newton_pair == 0) - error->all(FLERR,"Pair style COMB3 requires newton pair on"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB3 requires newton pair on"); if (!atom->q_flag) - error->all(FLERR,"Pair style COMB3 requires atom attribute q"); + error->all(FLERR, Error::NOLASTLINE, "Pair style COMB3 requires atom attribute q"); // need a full neighbor list neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_GHOST); @@ -243,7 +244,9 @@ void PairComb3::init_style() double PairComb3::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cutghost[j][i] = cutghost[i][j] = cutmax; return cutmax; } diff --git a/src/MANYBODY/pair_edip.cpp b/src/MANYBODY/pair_edip.cpp index 1eac053ebd..b94e743f8e 100644 --- a/src/MANYBODY/pair_edip.cpp +++ b/src/MANYBODY/pair_edip.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -740,7 +741,8 @@ void PairEDIP::coeff(int narg, char **arg) void PairEDIP::init_style() { - if (force->newton_pair == 0) error->all(FLERR, "Pair style edip requires newton pair on"); + if (force->newton_pair == 0) + error->all(FLERR, Error::NOLASTLINE, "Pair style edip requires newton pair on"); // need a full neighbor list @@ -753,7 +755,9 @@ void PairEDIP::init_style() double PairEDIP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_edip_multi.cpp b/src/MANYBODY/pair_edip_multi.cpp index 32e21861f3..e8bca44ac4 100644 --- a/src/MANYBODY/pair_edip_multi.cpp +++ b/src/MANYBODY/pair_edip_multi.cpp @@ -25,6 +25,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_extra.h" #include "memory.h" #include "neigh_list.h" @@ -570,7 +571,9 @@ void PairEDIPMulti::init_style() double PairEDIPMulti::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_extep.cpp b/src/MANYBODY/pair_extep.cpp index 607106b4ce..6915ee81cb 100644 --- a/src/MANYBODY/pair_extep.cpp +++ b/src/MANYBODY/pair_extep.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "memory.h" @@ -498,7 +499,9 @@ void PairExTeP::init_style() double PairExTeP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutmax ; cutghost[j][i] = cutghost[i][j]; diff --git a/src/MANYBODY/pair_gw.cpp b/src/MANYBODY/pair_gw.cpp index 471896851a..5255cf4905 100644 --- a/src/MANYBODY/pair_gw.cpp +++ b/src/MANYBODY/pair_gw.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "memory.h" @@ -279,9 +280,9 @@ void PairGW::coeff(int narg, char **arg) void PairGW::init_style() { if (atom->tag_enable == 0) - error->all(FLERR,"Pair style GW requires atom IDs"); + error->all(FLERR, Error::NOLASTLINE, "Pair style GW requires atom IDs"); if (force->newton_pair == 0) - error->all(FLERR,"Pair style GW requires newton pair on"); + error->all(FLERR, Error::NOLASTLINE, "Pair style GW requires newton pair on"); // need a full neighbor list @@ -294,7 +295,9 @@ void PairGW::init_style() double PairGW::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_lcbop.cpp b/src/MANYBODY/pair_lcbop.cpp index 75fd0f441e..3e8020c3af 100644 --- a/src/MANYBODY/pair_lcbop.cpp +++ b/src/MANYBODY/pair_lcbop.cpp @@ -20,13 +20,14 @@ #include "pair_lcbop.h" #include "atom.h" -#include "force.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "my_page.h" -#include "memory.h" #include "error.h" +#include "force.h" +#include "info.h" +#include "memory.h" +#include "my_page.h" +#include "neigh_list.h" +#include "neighbor.h" #include #include @@ -180,7 +181,9 @@ void PairLCBOP::init_style() double PairLCBOP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); // cut3rebo = 3 SR distances diff --git a/src/MANYBODY/pair_nb3b_harmonic.cpp b/src/MANYBODY/pair_nb3b_harmonic.cpp index 51e554694c..db7e6ea080 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.cpp +++ b/src/MANYBODY/pair_nb3b_harmonic.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -208,7 +209,9 @@ void PairNb3bHarmonic::init_style() double PairNb3bHarmonic::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_polymorphic.cpp b/src/MANYBODY/pair_polymorphic.cpp index 535fb766bc..bdda442497 100644 --- a/src/MANYBODY/pair_polymorphic.cpp +++ b/src/MANYBODY/pair_polymorphic.cpp @@ -26,6 +26,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_extra.h" #include "memory.h" #include "neigh_list.h" @@ -529,7 +530,9 @@ void PairPolymorphic::init_style() double PairPolymorphic::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_rebomos.cpp b/src/MANYBODY/pair_rebomos.cpp index b8f3c6fde5..d912c37290 100644 --- a/src/MANYBODY/pair_rebomos.cpp +++ b/src/MANYBODY/pair_rebomos.cpp @@ -33,6 +33,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_special.h" #include "memory.h" #include "my_page.h" @@ -242,7 +243,9 @@ void PairREBOMoS::init_style() double PairREBOMoS::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); // convert to Mo,S types diff --git a/src/MANYBODY/pair_sw.cpp b/src/MANYBODY/pair_sw.cpp index a28e523831..0c864bf292 100644 --- a/src/MANYBODY/pair_sw.cpp +++ b/src/MANYBODY/pair_sw.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -334,7 +335,9 @@ void PairSW::init_style() double PairSW::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_tersoff.cpp b/src/MANYBODY/pair_tersoff.cpp index e3c8c83416..f0d52d3075 100644 --- a/src/MANYBODY/pair_tersoff.cpp +++ b/src/MANYBODY/pair_tersoff.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "math_special.h" @@ -405,7 +406,9 @@ void PairTersoff::init_style() double PairTersoff::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_tersoff_table.cpp b/src/MANYBODY/pair_tersoff_table.cpp index b2aec2653c..3e26682300 100644 --- a/src/MANYBODY/pair_tersoff_table.cpp +++ b/src/MANYBODY/pair_tersoff_table.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -750,7 +751,9 @@ void PairTersoffTable::init_style() double PairTersoffTable::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_threebody_table.cpp b/src/MANYBODY/pair_threebody_table.cpp index 20b26edbfa..1fa771a6d0 100644 --- a/src/MANYBODY/pair_threebody_table.cpp +++ b/src/MANYBODY/pair_threebody_table.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -263,7 +264,9 @@ void PairThreebodyTable::init_style() double PairThreebodyTable::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MANYBODY/pair_vashishta.cpp b/src/MANYBODY/pair_vashishta.cpp index 79df1f36d7..a65bce917f 100644 --- a/src/MANYBODY/pair_vashishta.cpp +++ b/src/MANYBODY/pair_vashishta.cpp @@ -23,6 +23,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neighbor.h" #include "neigh_list.h" @@ -278,7 +279,9 @@ void PairVashishta::init_style() double PairVashishta::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MISC/pair_agni.cpp b/src/MISC/pair_agni.cpp index cbc6cf6c92..041302b702 100644 --- a/src/MISC/pair_agni.cpp +++ b/src/MISC/pair_agni.cpp @@ -21,8 +21,9 @@ #include "atom.h" #include "citeme.h" #include "comm.h" -#include "force.h" #include "error.h" +#include "force.h" +#include "info.h" #include "math_const.h" #include "math_special.h" #include "memory.h" @@ -254,7 +255,9 @@ void PairAGNI::init_style() double PairAGNI::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/MISC/pair_srp.cpp b/src/MISC/pair_srp.cpp index 1fe19bc30c..c81fd3c969 100644 --- a/src/MISC/pair_srp.cpp +++ b/src/MISC/pair_srp.cpp @@ -35,6 +35,7 @@ Please contact Timothy Sirk for questions (tim.sirk@us.army.mil). #include "error.h" #include "fix_srp.h" #include "force.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -493,7 +494,9 @@ void PairSRP::init_style() double PairSRP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"PairSRP: All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; a0[j][i] = a0[i][j]; diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index b72e9bd481..b379501c4d 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -35,6 +35,7 @@ #include "atom.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neighbor.h" @@ -357,7 +358,10 @@ void PairMLIAP::init_style() double PairMLIAP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); + double cutmax = sqrt(descriptor->cutsq[map[i]][map[j]]); cutghost[i][j] = cutghost[j][i] = 2.0 * cutmax + neighbor->skin; return cutmax; diff --git a/src/ML-PACE/pair_pace.cpp b/src/ML-PACE/pair_pace.cpp index e9bd25f9d7..56dd34916f 100644 --- a/src/ML-PACE/pair_pace.cpp +++ b/src/ML-PACE/pair_pace.cpp @@ -31,6 +31,7 @@ Copyright 2021 Yury Lysogorskiy^1, Cas van der Oord^2, Anton Bochkarev^1, #include "atom.h" #include "comm.h" #include "error.h" +#include "info.h" #include "force.h" #include "math_const.h" #include "memory.h" @@ -387,7 +388,9 @@ void PairPACE::init_style() double PairPACE::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); //cutoff from the basis set's radial functions settings scale[j][i] = scale[i][j]; return aceimpl->basis_set->radial_functions->cut(map[i], map[j]); diff --git a/src/ML-PACE/pair_pace_extrapolation.cpp b/src/ML-PACE/pair_pace_extrapolation.cpp index ec42d232af..957e53d0ad 100644 --- a/src/ML-PACE/pair_pace_extrapolation.cpp +++ b/src/ML-PACE/pair_pace_extrapolation.cpp @@ -27,6 +27,7 @@ Copyright 2022 Yury Lysogorskiy^1, Anton Bochkarev^1, Matous Mrovec^1, Ralf Drau #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -439,7 +440,9 @@ void PairPACEExtrapolation::init_style() double PairPACEExtrapolation::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); //cutoff from the basis set's radial functions settings scale[j][i] = scale[i][j]; return aceimpl->basis_set->radial_functions->cut(map[i], map[j]); diff --git a/src/ML-POD/pair_pod.cpp b/src/ML-POD/pair_pod.cpp index f76191328f..6762653413 100644 --- a/src/ML-POD/pair_pod.cpp +++ b/src/ML-POD/pair_pod.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_special.h" #include "memory.h" @@ -335,7 +336,9 @@ void PairPOD::init_style() double PairPOD::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); double rcut = 0.0; rcut = fastpodptr->rcut; diff --git a/src/ML-SNAP/pair_snap.cpp b/src/ML-SNAP/pair_snap.cpp index 5011256dd2..3e7d1aaa42 100644 --- a/src/ML-SNAP/pair_snap.cpp +++ b/src/ML-SNAP/pair_snap.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -453,10 +454,11 @@ void PairSNAP::init_style() double PairSNAP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); scale[j][i] = scale[i][j]; - return (radelem[map[i]] + - radelem[map[j]])*rcutfac; + return (radelem[map[i]] + radelem[map[j]])*rcutfac; } /* ---------------------------------------------------------------------- */ diff --git a/src/MOFFF/pair_buck6d_coul_gauss_dsf.cpp b/src/MOFFF/pair_buck6d_coul_gauss_dsf.cpp index ced0528ac6..a4fcfa4ebd 100644 --- a/src/MOFFF/pair_buck6d_coul_gauss_dsf.cpp +++ b/src/MOFFF/pair_buck6d_coul_gauss_dsf.cpp @@ -25,6 +25,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -327,7 +328,9 @@ void PairBuck6dCoulGaussDSF::init_style() double PairBuck6dCoulGaussDSF::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/MOFFF/pair_buck6d_coul_gauss_long.cpp b/src/MOFFF/pair_buck6d_coul_gauss_long.cpp index 72919312e5..6bb6357775 100644 --- a/src/MOFFF/pair_buck6d_coul_gauss_long.cpp +++ b/src/MOFFF/pair_buck6d_coul_gauss_long.cpp @@ -24,6 +24,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "memory.h" #include "neigh_list.h" @@ -365,7 +366,9 @@ void PairBuck6dCoulGaussLong::init_style() double PairBuck6dCoulGaussLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/PERI/pair_peri_eps.cpp b/src/PERI/pair_peri_eps.cpp index fccfee60c7..c0732d48e4 100644 --- a/src/PERI/pair_peri_eps.cpp +++ b/src/PERI/pair_peri_eps.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "fix_peri_neigh.h" #include "force.h" +#include "info.h" #include "lattice.h" #include "math_const.h" #include "math_special.h" @@ -397,7 +398,9 @@ void PairPeriEPS::coeff(int narg, char **arg) double PairPeriEPS::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); bulkmodulus[j][i] = bulkmodulus[i][j]; shearmodulus[j][i] = shearmodulus[i][j]; diff --git a/src/PERI/pair_peri_lps.cpp b/src/PERI/pair_peri_lps.cpp index 34420b6ef2..b7b7e6577a 100644 --- a/src/PERI/pair_peri_lps.cpp +++ b/src/PERI/pair_peri_lps.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "fix_peri_neigh.h" #include "force.h" +#include "info.h" #include "lattice.h" #include "math_const.h" #include "memory.h" @@ -341,7 +342,9 @@ void PairPeriLPS::coeff(int narg, char **arg) double PairPeriLPS::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); bulkmodulus[j][i] = bulkmodulus[i][j]; shearmodulus[j][i] = shearmodulus[i][j]; diff --git a/src/PERI/pair_peri_pmb.cpp b/src/PERI/pair_peri_pmb.cpp index 85c16f6ff8..0bacb3a2f0 100644 --- a/src/PERI/pair_peri_pmb.cpp +++ b/src/PERI/pair_peri_pmb.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "fix_peri_neigh.h" #include "force.h" +#include "info.h" #include "lattice.h" #include "memory.h" #include "neigh_list.h" @@ -278,7 +279,9 @@ void PairPeriPMB::coeff(int narg, char **arg) double PairPeriPMB::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); kspring[j][i] = kspring[i][j]; alpha[j][i] = alpha[i][j]; diff --git a/src/PERI/pair_peri_ves.cpp b/src/PERI/pair_peri_ves.cpp index 24f6deb2d8..d814ce6f05 100644 --- a/src/PERI/pair_peri_ves.cpp +++ b/src/PERI/pair_peri_ves.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "fix_peri_neigh.h" #include "force.h" +#include "info.h" #include "lattice.h" #include "memory.h" #include "neigh_list.h" @@ -385,7 +386,9 @@ void PairPeriVES::coeff(int narg, char **arg) double PairPeriVES::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); bulkmodulus[j][i] = bulkmodulus[i][j]; shearmodulus[j][i] = shearmodulus[i][j]; diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index b36d9e79aa..dd48b836fd 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -30,6 +30,7 @@ #include "error.h" #include "fix_reaxff.h" #include "force.h" +#include "info.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" @@ -442,7 +443,9 @@ void PairReaxFF::setup() double PairReaxFF::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cutghost[i][j] = cutghost[j][i] = cutmax; return cutmax; diff --git a/src/SMTBQ/pair_smatb.cpp b/src/SMTBQ/pair_smatb.cpp index 0b97a62c32..f0449f8619 100644 --- a/src/SMTBQ/pair_smatb.cpp +++ b/src/SMTBQ/pair_smatb.cpp @@ -20,6 +20,7 @@ #include "atom.h" #include "comm.h" #include "error.h" +#include "info.h" #include "force.h" #include "memory.h" #include "neigh_list.h" @@ -352,7 +353,8 @@ double PairSMATB::init_one(int i, int j) cutOffStart[i][j] = MIN(cutOffStart[i][i], cutOffStart[j][j]); cutOffEnd[i][j] = MAX(cutOffEnd[i][i], cutOffEnd[j][j]); - error->all(FLERR, "All pair coeffs are not set"); + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); } double es = cutOffEnd[i][j] - cutOffStart[i][j]; diff --git a/src/SMTBQ/pair_smatb_single.cpp b/src/SMTBQ/pair_smatb_single.cpp index fb72971c90..b509955a5e 100644 --- a/src/SMTBQ/pair_smatb_single.cpp +++ b/src/SMTBQ/pair_smatb_single.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -296,7 +297,9 @@ void PairSMATBSingle::init_style() double PairSMATBSingle::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); //calculating the polynomial linking to zero double es = cutOffEnd - cutOffStart; diff --git a/src/SMTBQ/pair_smtbq.cpp b/src/SMTBQ/pair_smtbq.cpp index 78ac34aea4..6d5008c637 100644 --- a/src/SMTBQ/pair_smtbq.cpp +++ b/src/SMTBQ/pair_smtbq.cpp @@ -47,6 +47,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "math_extra.h" #include "math_special.h" @@ -306,7 +307,9 @@ void PairSMTBQ::init_style() double PairSMTBQ::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); return cutmax; } diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index 8e5c125895..867a3dbe8e 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -28,6 +28,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -127,7 +128,9 @@ void PairSpinDipoleCut::coeff(int narg, char **arg) double PairSpinDipoleCut::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cut_spin_long[j][i] = cut_spin_long[i][j]; diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index 8f03c37b7c..12f278cfb2 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -24,6 +24,7 @@ #include "error.h" #include "ewald_const.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "memory.h" @@ -140,7 +141,9 @@ void PairSpinDipoleLong::init_style() double PairSpinDipoleLong::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); cut_spin_long[j][i] = cut_spin_long[i][j]; diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 6dec238163..1170413fe0 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -28,6 +28,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -135,7 +136,9 @@ void PairSpinDmi::coeff(int narg, char **arg) double PairSpinDmi::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); DM[j][i] = DM[i][j]; v_dmx[j][i] = v_dmx[i][j]; diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index b0c9edef27..a807e303a5 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -27,6 +27,7 @@ #include "atom.h" #include "comm.h" #include "error.h" +#include "info.h" #include "force.h" #include "memory.h" #include "neigh_list.h" @@ -143,7 +144,9 @@ void PairSpinExchange::coeff(int narg, char **arg) double PairSpinExchange::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); J1_mag[j][i] = J1_mag[i][j]; J1_mech[j][i] = J1_mech[i][j]; diff --git a/src/SPIN/pair_spin_exchange_biquadratic.cpp b/src/SPIN/pair_spin_exchange_biquadratic.cpp index 7c50659b45..24e75f9c2c 100644 --- a/src/SPIN/pair_spin_exchange_biquadratic.cpp +++ b/src/SPIN/pair_spin_exchange_biquadratic.cpp @@ -28,6 +28,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -153,7 +154,9 @@ void PairSpinExchangeBiquadratic::coeff(int narg, char **arg) double PairSpinExchangeBiquadratic::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); J1_mag[j][i] = J1_mag[i][j]; J1_mech[j][i] = J1_mech[i][j]; diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index 3d22a652b3..daba2564d6 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -28,6 +28,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -130,7 +131,9 @@ void PairSpinMagelec::coeff(int narg, char **arg) double PairSpinMagelec::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status\n" + Info::get_pair_coeff_status(lmp)); ME[j][i] = ME[i][j]; ME_mech[j][i] = ME_mech[i][j]; diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index a9ed7d6966..320bc001a4 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -28,6 +28,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -135,7 +136,9 @@ void PairSpinNeel::coeff(int narg, char **arg) double PairSpinNeel::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); g1[j][i] = g1[i][j]; g1_mech[j][i] = g1_mech[i][j]; diff --git a/src/pair.cpp b/src/pair.cpp index 652f231908..52fea894df 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -24,6 +24,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "kspace.h" #include "math_const.h" #include "math_special.h" @@ -247,10 +248,15 @@ void Pair::init() // I,I coeffs must be set // init_one() will check if I,J is set explicitly or inferred by mixing - if (!allocated) error->all(FLERR,"All pair coeffs are not set"); - - for (i = 1; i <= atom->ntypes; i++) - if (setflag[i][i] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (!allocated) { + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); + } else { + for (i = 1; i <= atom->ntypes; i++) + if (setflag[i][i] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); + } // style-specific initialization diff --git a/src/pair_born.cpp b/src/pair_born.cpp index fe041b2ada..a881bc18db 100644 --- a/src/pair_born.cpp +++ b/src/pair_born.cpp @@ -18,16 +18,17 @@ #include "pair_born.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "math_const.h" #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -237,7 +238,9 @@ void PairBorn::coeff(int narg, char **arg) double PairBorn::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); rhoinv[i][j] = 1.0/rho[i][j]; born1[i][j] = a[i][j]/rho[i][j]; diff --git a/src/pair_buck.cpp b/src/pair_buck.cpp index 660a4b32ec..f06ccbf223 100644 --- a/src/pair_buck.cpp +++ b/src/pair_buck.cpp @@ -14,16 +14,17 @@ #include "pair_buck.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" +#include "info.h" #include "neigh_list.h" #include "math_const.h" #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -225,7 +226,9 @@ void PairBuck::coeff(int narg, char **arg) double PairBuck::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); rhoinv[i][j] = 1.0/rho[i][j]; buck1[i][j] = a[i][j]/rho[i][j]; diff --git a/src/pair_buck_coul_cut.cpp b/src/pair_buck_coul_cut.cpp index cf342b4302..9b6ed918f9 100644 --- a/src/pair_buck_coul_cut.cpp +++ b/src/pair_buck_coul_cut.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "neigh_list.h" @@ -274,7 +275,9 @@ void PairBuckCoulCut::init_style() double PairBuckCoulCut::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j], cut_coul[i][j]); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index 4fb757cbab..a90f0ea3e2 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -19,6 +19,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_request.h" #include "neighbor.h" @@ -718,7 +719,8 @@ double PairHybrid::init_one(int i, int j) if (setflag[i][j] == 0) { if (nmap[i][i] != 1 || nmap[j][j] != 1 || map[i][i][0] != map[j][j][0]) - error->one(FLERR,"All pair coeffs are not set"); + error->one(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); nmap[i][j] = 1; map[i][j][0] = map[i][i][0]; } diff --git a/src/pair_hybrid_molecular.cpp b/src/pair_hybrid_molecular.cpp index ec68cefafb..6750cf397d 100644 --- a/src/pair_hybrid_molecular.cpp +++ b/src/pair_hybrid_molecular.cpp @@ -15,6 +15,7 @@ #include "atom.h" #include "error.h" +#include "info.h" #include "neigh_request.h" #include "neighbor.h" @@ -31,9 +32,11 @@ PairHybridMolecular::PairHybridMolecular(LAMMPS *lmp) : PairHybridOverlay(lmp) { void PairHybridMolecular::init_style() { if (!atom->molecule_flag) - error->all(FLERR, "Pair style hybrid/molecular requires atom attribute molecule"); + error->all(FLERR, Error::NOLASTLINE, + "Pair style hybrid/molecular requires atom attribute molecule"); if (manybody_flag) - error->all(FLERR, "Pair style hybrid/molecular is not compatible with manybody potentials"); + error->all(FLERR, Error::NOLASTLINE, + "Pair style hybrid/molecular is not compatible with manybody potentials"); PairHybridOverlay::init_style(); @@ -62,7 +65,9 @@ double PairHybridMolecular::init_one(int i, int j) // plus I,I and J,J need the same number of substyles if (setflag[i][j] == 0) { - if (nmap[i][i] != nmap[j][j]) error->one(FLERR, "All pair coeffs are not set"); + if (nmap[i][i] != nmap[j][j]) + error->one(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); int num = 0; for (int k = 0; k < nmap[i][i]; ++k) { for (int l = 0; l < nmap[j][j]; ++l) { @@ -73,7 +78,9 @@ double PairHybridMolecular::init_one(int i, int j) } } } - if (nmap[i][i] != nmap[i][j]) error->one(FLERR, "All pair coeffs are not set"); + if (nmap[i][i] != nmap[i][j]) + error->one(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); } nmap[j][i] = nmap[i][j]; diff --git a/src/pair_morse.cpp b/src/pair_morse.cpp index 83ca375818..48b8a046e3 100644 --- a/src/pair_morse.cpp +++ b/src/pair_morse.cpp @@ -17,6 +17,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -209,7 +210,9 @@ void PairMorse::coeff(int narg, char **arg) double PairMorse::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); morse1[i][j] = 2.0 * d0[i][j] * alpha[i][j]; diff --git a/src/pair_table.cpp b/src/pair_table.cpp index 730107c856..32186d0f36 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "table_file_reader.h" @@ -341,7 +342,9 @@ void PairTable::coeff(int narg, char **arg) double PairTable::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); tabindex[j][i] = tabindex[i][j]; @@ -1035,7 +1038,9 @@ double PairTable::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, void *PairTable::extract(const char *str, int &dim) { if (strcmp(str, "cut_coul") != 0) return nullptr; - if (ntables == 0) error->all(FLERR, "All pair coeffs are not set"); + if (ntables == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); // only check for cutoff consistency if claiming to be KSpace compatible @@ -1043,7 +1048,8 @@ void *PairTable::extract(const char *str, int &dim) double cut_coul = tables[0].cut; for (int m = 1; m < ntables; m++) if (tables[m].cut != cut_coul) - error->all(FLERR, "Pair table cutoffs must all be equal to use with KSpace"); + error->all(FLERR, Error::NOLASTLINE, + "Pair table cutoffs must all be equal to use with KSpace"); dim = 0; return &tables[0].cut; } else From afbae53a0aaeb19dd1b107b823dc1ec10967c14d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 16 Mar 2025 06:03:23 -0400 Subject: [PATCH 08/33] convert remaining errors to print coeff status --- src/ASPHERE/pair_line_lj.cpp | 16 +++++++++------ src/DPD-MESO/pair_mdpd_rhosum.cpp | 7 ++++--- src/EXTRA-PAIR/pair_born_coul_dsf.cpp | 6 ++++-- src/RHEO/pair_rheo.cpp | 5 ++++- src/SPH/pair_sph_heatconduction.cpp | 8 +++++--- src/SPH/pair_sph_idealgas.cpp | 8 +++++--- src/SPH/pair_sph_lj.cpp | 29 ++++----------------------- src/SPH/pair_sph_rhosum.cpp | 13 +++++++----- src/SPH/pair_sph_taitwater.cpp | 5 ++++- src/SPH/pair_sph_taitwater_morris.cpp | 10 ++++++--- src/angle.cpp | 9 +++++++-- src/bond.cpp | 9 +++++++-- src/dihedral.cpp | 10 +++++++-- src/improper.cpp | 10 +++++++-- 14 files changed, 85 insertions(+), 60 deletions(-) diff --git a/src/ASPHERE/pair_line_lj.cpp b/src/ASPHERE/pair_line_lj.cpp index a9db2a21ca..aa0a04954f 100644 --- a/src/ASPHERE/pair_line_lj.cpp +++ b/src/ASPHERE/pair_line_lj.cpp @@ -13,15 +13,17 @@ ------------------------------------------------------------------------- */ #include "pair_line_lj.h" -#include + #include "atom.h" #include "atom_vec_line.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "memory.h" #include "error.h" +#include "force.h" +#include "info.h" +#include "memory.h" +#include "neigh_list.h" +#include "neighbor.h" +#include using namespace LAMMPS_NS; @@ -414,7 +416,9 @@ void PairLineLJ::init_style() double PairLineLJ::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); cutsubsq[i][j] = cutsub[i][j] * cutsub[i][j]; diff --git a/src/DPD-MESO/pair_mdpd_rhosum.cpp b/src/DPD-MESO/pair_mdpd_rhosum.cpp index 0e25b16352..7526ea75d7 100644 --- a/src/DPD-MESO/pair_mdpd_rhosum.cpp +++ b/src/DPD-MESO/pair_mdpd_rhosum.cpp @@ -25,6 +25,7 @@ #include "atom.h" #include "comm.h" #include "error.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -218,9 +219,9 @@ void PairMDPDRhoSum::coeff(int narg, char **arg) { ------------------------------------------------------------------------- */ double PairMDPDRhoSum::init_one(int i, int j) { - if (setflag[i][j] == 0) { - error->all(FLERR,"All pair mdpd/rhosum coeffs are not set"); - } + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, "All pair mdpd/rhosum coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; diff --git a/src/EXTRA-PAIR/pair_born_coul_dsf.cpp b/src/EXTRA-PAIR/pair_born_coul_dsf.cpp index e22b40c598..b7ca3ae841 100644 --- a/src/EXTRA-PAIR/pair_born_coul_dsf.cpp +++ b/src/EXTRA-PAIR/pair_born_coul_dsf.cpp @@ -279,7 +279,7 @@ void PairBornCoulDSF::coeff(int narg, char **arg) void PairBornCoulDSF::init_style() { if (!atom->q_flag) - error->all(FLERR,"Pair style born/coul/dsf requires atom attribute q"); + error->all(FLERR, Error::NOLASTLINE, "Pair style born/coul/dsf requires atom attribute q"); neighbor->add_request(this); @@ -296,7 +296,9 @@ void PairBornCoulDSF::init_style() double PairBornCoulDSF::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair coeffs are not set. Status:\n" + Info::get_pair_coeff_status(lmp)); double cut = MAX(cut_lj[i][j],cut_coul); cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; diff --git a/src/RHEO/pair_rheo.cpp b/src/RHEO/pair_rheo.cpp index 5e06c45a3c..be2dfc6ecf 100644 --- a/src/RHEO/pair_rheo.cpp +++ b/src/RHEO/pair_rheo.cpp @@ -28,6 +28,7 @@ #include "fix_rheo.h" #include "fix_rheo_pressure.h" #include "force.h" +#include "info.h" #include "math_extra.h" #include "memory.h" #include "modify.h" @@ -527,7 +528,9 @@ void PairRHEO::setup() double PairRHEO::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR, "All pair rheo coeffs are not set"); + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, "All pair rheo coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); return cutk; } diff --git a/src/SPH/pair_sph_heatconduction.cpp b/src/SPH/pair_sph_heatconduction.cpp index 0bff61d190..bb163c0eff 100644 --- a/src/SPH/pair_sph_heatconduction.cpp +++ b/src/SPH/pair_sph_heatconduction.cpp @@ -18,6 +18,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -204,9 +205,10 @@ void PairSPHHeatConduction::coeff(int narg, char **arg) double PairSPHHeatConduction::init_one(int i, int j) { - if (setflag[i][j] == 0) { - error->all(FLERR,"All pair sph/heatconduction coeffs are not set"); - } + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/heatconduction coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; alpha[j][i] = alpha[i][j]; diff --git a/src/SPH/pair_sph_idealgas.cpp b/src/SPH/pair_sph_idealgas.cpp index 97cbda2ab3..963579aee3 100644 --- a/src/SPH/pair_sph_idealgas.cpp +++ b/src/SPH/pair_sph_idealgas.cpp @@ -18,6 +18,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -243,9 +244,10 @@ void PairSPHIdealGas::coeff(int narg, char **arg) double PairSPHIdealGas::init_one(int i, int j) { - if (setflag[i][j] == 0) { - error->all(FLERR,"All pair sph/idealgas coeffs are not set"); - } + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/idealgas coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; diff --git a/src/SPH/pair_sph_lj.cpp b/src/SPH/pair_sph_lj.cpp index 6f05c45638..533cd06a29 100644 --- a/src/SPH/pair_sph_lj.cpp +++ b/src/SPH/pair_sph_lj.cpp @@ -18,6 +18,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -256,7 +257,9 @@ void PairSPHLJ::coeff(int narg, char **arg) double PairSPHLJ::init_one(int i, int j) { if (setflag[i][j] == 0) { - error->all(FLERR,"All pair sph/lj coeffs are not set"); + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/lj coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); } cut[j][i] = cut[i][j]; @@ -265,30 +268,6 @@ double PairSPHLJ::init_one(int i, int j) return cut[i][j]; } -/*double PairSPHLJ::LJEOS2(double rho, double e, double cv) { - - - double T = e / cv; - if (T < 1.e-2) T = 1.e-2; - //printf("%f %f\n", T, rho); - double iT = 0.1e1 / T; - //double itpow1_4 = exp(0.25 * log(iT)); //pow(iT, 0.1e1 / 0.4e1); - double itpow1_4 = pow(iT, 0.1e1 / 0.4e1); - double x = rho * itpow1_4; - double xsq = x * x; - double xpow3 = xsq * x; - double xpow4 = xsq * xsq; - double xpow9 = xpow3 * xpow3 * xpow3; - - - return (0.1e1 + rho * (0.3629e1 + 0.7264e1 * x + 0.104925e2 * xsq + 0.11460e2 - * xpow3 + 0.21760e1 * xpow9 - itpow1_4 * itpow1_4 * (0.5369e1 + 0.13160e2 - * x + 0.18525e2 * xsq - 0.17076e2 * xpow3 + 0.9320e1 * xpow4) + iT - * (-0.3492e1 + 0.18698e2 * x - 0.35505e2 * xsq + 0.31816e2 * xpow3 - - 0.11195e2 * xpow4)) * itpow1_4) * rho * T; -}*/ - - /* --------------------------------------------------------------------------------------------- */ /* Lennard-Jones EOS, Francis H. Ree diff --git a/src/SPH/pair_sph_rhosum.cpp b/src/SPH/pair_sph_rhosum.cpp index 97062b16c1..e4c2b7c918 100644 --- a/src/SPH/pair_sph_rhosum.cpp +++ b/src/SPH/pair_sph_rhosum.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "domain.h" #include "error.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" @@ -30,7 +31,8 @@ using namespace LAMMPS_NS; PairSPHRhoSum::PairSPHRhoSum(LAMMPS *lmp) : Pair(lmp) { if (atom->rho_flag != 1) - error->all(FLERR, "Pair sph/rhosum requires atom attribute density, e.g. in atom_style sph"); + error->all(FLERR, Error::NOLASTLINE, + "Pair sph/rhosum requires atom attribute density, e.g. in atom_style sph"); restartinfo = 0; @@ -206,7 +208,7 @@ void PairSPHRhoSum::allocate() void PairSPHRhoSum::settings(int narg, char **arg) { if (narg != 1) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Illegal number of arguments for pair_style sph/rhosum"); nstep = utils::inumeric(FLERR,arg[0],false,lmp); } @@ -247,9 +249,10 @@ void PairSPHRhoSum::coeff(int narg, char **arg) double PairSPHRhoSum::init_one(int i, int j) { - if (setflag[i][j] == 0) { - error->all(FLERR,"All pair sph/rhosum coeffs are not set"); - } + if (setflag[i][j] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/rhosum coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); cut[j][i] = cut[i][j]; diff --git a/src/SPH/pair_sph_taitwater.cpp b/src/SPH/pair_sph_taitwater.cpp index 442ac833cb..892146f367 100644 --- a/src/SPH/pair_sph_taitwater.cpp +++ b/src/SPH/pair_sph_taitwater.cpp @@ -19,6 +19,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -264,7 +265,9 @@ void PairSPHTaitwater::coeff(int narg, char **arg) double PairSPHTaitwater::init_one(int i, int j) { if (setflag[i][j] == 0) { - error->all(FLERR, "All pair sph/taitwater coeffs are not set"); + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/taitwater coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); } cut[j][i] = cut[i][j]; diff --git a/src/SPH/pair_sph_taitwater_morris.cpp b/src/SPH/pair_sph_taitwater_morris.cpp index 48493a1e09..e05b7c1283 100644 --- a/src/SPH/pair_sph_taitwater_morris.cpp +++ b/src/SPH/pair_sph_taitwater_morris.cpp @@ -19,6 +19,7 @@ #include "domain.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neigh_list.h" @@ -31,7 +32,8 @@ using namespace LAMMPS_NS; PairSPHTaitwaterMorris::PairSPHTaitwaterMorris(LAMMPS *lmp) : Pair(lmp) { if ((atom->esph_flag != 1) || (atom->rho_flag != 1) || (atom->vest_flag != 1)) - error->all(FLERR, "Pair sph/taitwater/morris requires atom attributes energy, density, and velocity estimates, e.g. in atom_style sph"); + error->all(FLERR, Error::NOLASTLINE, "Pair sph/taitwater/morris requires atom attributes " + "energy, density, and velocity estimates, e.g. in atom_style sph"); restartinfo = 0; first = 1; @@ -214,7 +216,7 @@ void PairSPHTaitwaterMorris::allocate() void PairSPHTaitwaterMorris::settings(int narg, char **/*arg*/) { if (narg != 0) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Illegal number of arguments for pair_style sph/taitwater/morris"); } @@ -265,7 +267,9 @@ void PairSPHTaitwaterMorris::coeff(int narg, char **arg) double PairSPHTaitwaterMorris::init_one(int i, int j) { if (setflag[i][j] == 0) { - error->all(FLERR,"All pair sph/taitwater/morris coeffs are not set"); + error->all(FLERR, Error::NOLASTLINE, + "All pair sph/taitwater/morris coeffs are not set. Status:\n" + + Info::get_pair_coeff_status(lmp)); } cut[j][i] = cut[i][j]; diff --git a/src/angle.cpp b/src/angle.cpp index ccb53dc84f..2bbe8eb129 100644 --- a/src/angle.cpp +++ b/src/angle.cpp @@ -17,6 +17,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "math_const.h" #include "memory.h" #include "suffix.h" @@ -70,9 +71,13 @@ Angle::~Angle() void Angle::init() { - if (!allocated && atom->nangletypes) error->all(FLERR, "Angle coeffs are not set"); + if (!allocated && atom->nangletypes) + error->all(FLERR, Error::NOLASTLINE, + "Angle coeffs are not set. Status:\n" + Info::get_angle_coeff_status(lmp)); for (int i = 1; i <= atom->nangletypes; i++) - if (setflag[i] == 0) error->all(FLERR, "All angle coeffs are not set"); + if (setflag[i] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All angle coeffs are not set. Status:\n" + Info::get_angle_coeff_status(lmp)); init_style(); } diff --git a/src/bond.cpp b/src/bond.cpp index d42dd6fd24..802ac2b6c1 100644 --- a/src/bond.cpp +++ b/src/bond.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "neighbor.h" #include "safe_pointers.h" @@ -80,9 +81,13 @@ Bond::~Bond() void Bond::init() { - if (!allocated && atom->nbondtypes) error->all(FLERR, "Bond coeffs are not set"); + if (!allocated && atom->nbondtypes) + error->all(FLERR, Error::NOLASTLINE, + "Bond coeffs are not set. Status:\n" + Info::get_bond_coeff_status(lmp)); for (int i = 1; i <= atom->nbondtypes; i++) - if (setflag[i] == 0) error->all(FLERR, "All bond coeffs are not set"); + if (setflag[i] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All bond coeffs are not set. Status:\n" + Info::get_bond_coeff_status(lmp)); init_style(); } diff --git a/src/dihedral.cpp b/src/dihedral.cpp index 2f591b1fc1..14b59d2542 100644 --- a/src/dihedral.cpp +++ b/src/dihedral.cpp @@ -17,6 +17,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "suffix.h" #include "update.h" @@ -68,9 +69,14 @@ Dihedral::~Dihedral() void Dihedral::init() { - if (!allocated && atom->ndihedraltypes) error->all(FLERR, "Dihedral coeffs are not set"); + if (!allocated && atom->ndihedraltypes) + error->all(FLERR, Error::NOLASTLINE, + "Dihedral coeffs are not set. Status:\n" + Info::get_dihedral_coeff_status(lmp)); for (int i = 1; i <= atom->ndihedraltypes; i++) - if (setflag[i] == 0) error->all(FLERR, "All dihedral coeffs are not set"); + if (setflag[i] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All dihedral coeffs are not set. Status:\n" + + Info::get_dihedral_coeff_status(lmp)); init_style(); } diff --git a/src/improper.cpp b/src/improper.cpp index 3476bcdb50..02158dfff1 100644 --- a/src/improper.cpp +++ b/src/improper.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "error.h" #include "force.h" +#include "info.h" #include "memory.h" #include "suffix.h" #include "update.h" @@ -67,9 +68,14 @@ Improper::~Improper() void Improper::init() { - if (!allocated && atom->nimpropertypes) error->all(FLERR, "Improper coeffs are not set"); + if (!allocated && atom->nimpropertypes) + error->all(FLERR, Error::NOLASTLINE, + "Improper coeffs are not set. Status:\n" + Info::get_improper_coeff_status(lmp)); for (int i = 1; i <= atom->nimpropertypes; i++) - if (setflag[i] == 0) error->all(FLERR, "All improper coeffs are not set"); + if (setflag[i] == 0) + error->all(FLERR, Error::NOLASTLINE, + "All improper coeffs are not set. Status:\n" + + Info::get_improper_coeff_status(lmp)); init_style(); } From d42330edbd3052ee805dca32dfa52917d44cba07 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Mar 2025 11:40:36 -0400 Subject: [PATCH 09/33] consolidate errors #6 and #7 plus handle non-numeric box. add missing entries. --- doc/src/Errors_details.rst | 28 +++++++++++++++++----------- src/BOCS/fix_bocs.cpp | 4 ++-- src/DRUDE/fix_tgnh_drude.cpp | 4 ++-- src/EXTRA-FIX/fix_npt_cauchy.cpp | 4 ++-- src/INTEL/pppm_disp_intel.cpp | 2 +- src/INTEL/pppm_intel.cpp | 2 +- src/KOKKOS/pppm_kokkos.cpp | 2 +- src/KSPACE/msm.cpp | 2 +- src/KSPACE/msm_cg.cpp | 2 +- src/KSPACE/pppm.cpp | 2 +- src/KSPACE/pppm_cg.cpp | 2 +- src/KSPACE/pppm_disp.cpp | 2 +- src/KSPACE/pppm_disp_tip4p.cpp | 2 +- src/KSPACE/pppm_stagger.cpp | 2 +- src/KSPACE/pppm_tip4p.cpp | 2 +- src/OPENMP/domain_omp.cpp | 2 +- src/OPENMP/msm_cg_omp.cpp | 2 +- src/OPENMP/pppm_disp_tip4p_omp.cpp | 2 +- src/OPENMP/pppm_tip4p_omp.cpp | 2 +- src/fix_box_relax.cpp | 4 ++-- src/fix_nh.cpp | 4 ++-- src/npair.cpp | 4 ++-- 22 files changed, 44 insertions(+), 38 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index d0e6233fb2..aebdcebdbe 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -372,20 +372,22 @@ warning or turned off using the *lost/bond* keyword in the :doc:`thermo_modify .. _err0006: -Non-numeric atom coords - simulation unstable ---------------------------------------------- -This error usually occurs due to issues with system geometry or the potential in -use. See :ref:`Pressure, forces, positions becoming NaN or Inf ` above in the -general troubleshooting section. +Non-numeric atom coords or pressure or box dimensions - simulation unstable +--------------------------------------------------------------------------- -.. _err0007: +This kind of error usually occurs due to issues with system geometry or +the potential in use, or too aggressive simulation settings. See +:ref:`Pressure, forces, positions becoming NaN or Inf ` above in +the general troubleshooting section. It is more likely to happen during +equilibration, so it can help to do a minimization before or even add a +second or third minimization after running a few equilibration MD steps. +It also is more likely when using a Nose-Hoover barostat directly, and +thus it may be advisable to run with only a thermostat for a bit until +the potential energy has stabilized. -Non-numeric pressure - simulation unstable ------------------------------------------- -This error usually occurs due to issues with system geometry or the potential in -use. See :ref:`Pressure, forces, positions becoming NaN or Inf ` above in the -general troubleshooting section. +.. _err007: +.. currently unused .. _err0008: @@ -436,6 +438,10 @@ If this error is occurring with an executable that the user does not control (e.g., through a module on HPC clusters), the user will need to get in contact with the relevant person or people who can update the executable. +.. _err011: + +.. currently unused + .. _err0012: fmt::format_error diff --git a/src/BOCS/fix_bocs.cpp b/src/BOCS/fix_bocs.cpp index 0c4d6a41ad..80c6789575 100644 --- a/src/BOCS/fix_bocs.cpp +++ b/src/BOCS/fix_bocs.cpp @@ -1089,7 +1089,7 @@ void FixBocs::couple() } if (!std::isfinite(p_current[0]) || !std::isfinite(p_current[1]) || !std::isfinite(p_current[2])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); // switch order from xy-xz-yz to Voigt @@ -1099,7 +1099,7 @@ void FixBocs::couple() p_current[5] = tensor[3]; if (!std::isfinite(p_current[3]) || !std::isfinite(p_current[4]) || !std::isfinite(p_current[5])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); } } diff --git a/src/DRUDE/fix_tgnh_drude.cpp b/src/DRUDE/fix_tgnh_drude.cpp index 503cac604a..fa6dbb62fd 100644 --- a/src/DRUDE/fix_tgnh_drude.cpp +++ b/src/DRUDE/fix_tgnh_drude.cpp @@ -1063,7 +1063,7 @@ void FixTGNHDrude::couple() } if (!std::isfinite(p_current[0]) || !std::isfinite(p_current[1]) || !std::isfinite(p_current[2])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); // switch order from xy-xz-yz to Voigt @@ -1073,7 +1073,7 @@ void FixTGNHDrude::couple() p_current[5] = tensor[3]; if (!std::isfinite(p_current[3]) || !std::isfinite(p_current[4]) || !std::isfinite(p_current[5])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); } } diff --git a/src/EXTRA-FIX/fix_npt_cauchy.cpp b/src/EXTRA-FIX/fix_npt_cauchy.cpp index e94177233f..bb5d863e5d 100644 --- a/src/EXTRA-FIX/fix_npt_cauchy.cpp +++ b/src/EXTRA-FIX/fix_npt_cauchy.cpp @@ -1036,7 +1036,7 @@ void FixNPTCauchy::couple() } if (!std::isfinite(p_current[0]) || !std::isfinite(p_current[1]) || !std::isfinite(p_current[2])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); // switch order from xy-xz-yz to Voigt @@ -1046,7 +1046,7 @@ void FixNPTCauchy::couple() p_current[5] = tensor[3]; if (!std::isfinite(p_current[3]) || !std::isfinite(p_current[4]) || !std::isfinite(p_current[5])) - error->all(FLERR,"Non-numeric pressure - simulation unstable"); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); } } diff --git a/src/INTEL/pppm_disp_intel.cpp b/src/INTEL/pppm_disp_intel.cpp index 8053036112..8816ed553b 100644 --- a/src/INTEL/pppm_disp_intel.cpp +++ b/src/INTEL/pppm_disp_intel.cpp @@ -723,7 +723,7 @@ void PPPMDispIntel::particle_map_intel(double delx, double dely, double delz, int nthr = comm->nthreads; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; diff --git a/src/INTEL/pppm_intel.cpp b/src/INTEL/pppm_intel.cpp index 8d46cc28e9..8b75b86e07 100644 --- a/src/INTEL/pppm_intel.cpp +++ b/src/INTEL/pppm_intel.cpp @@ -356,7 +356,7 @@ void PPPMIntel::particle_map(IntelBuffers *buffers) int flag = 0; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); #if defined(_OPENMP) #pragma omp parallel LMP_DEFAULT_NONE \ diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 34c3d7579e..40faaed8d5 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -1138,7 +1138,7 @@ void PPPMKokkos::particle_map() k_flag.template sync(); if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); copymode = 1; Kokkos::parallel_for(Kokkos::RangePolicy(0,nlocal),*this); diff --git a/src/KSPACE/msm.cpp b/src/KSPACE/msm.cpp index 72e35ae9f3..c4008967f8 100644 --- a/src/KSPACE/msm.cpp +++ b/src/KSPACE/msm.cpp @@ -1442,7 +1442,7 @@ void MSM::particle_map() int flag = 0; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR, Error::NOLASTLINE, "Non-numeric box dimensions - simulation unstable"); + error->one(FLERR, Error::NOLASTLINE, "Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); for (int i = 0; i < nlocal; i++) { diff --git a/src/KSPACE/msm_cg.cpp b/src/KSPACE/msm_cg.cpp index 60aebc0f60..62e23c564c 100644 --- a/src/KSPACE/msm_cg.cpp +++ b/src/KSPACE/msm_cg.cpp @@ -310,7 +310,7 @@ void MSMCG::particle_map() int i; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); for (int j = 0; j < num_charged; j++) { i = is_charged[j]; diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index 611e29360b..aeaf53f4e1 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -1803,7 +1803,7 @@ void PPPM::particle_map() int flag = 0; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); for (int i = 0; i < nlocal; i++) { diff --git a/src/KSPACE/pppm_cg.cpp b/src/KSPACE/pppm_cg.cpp index 5e244c8a37..5f474efd54 100644 --- a/src/KSPACE/pppm_cg.cpp +++ b/src/KSPACE/pppm_cg.cpp @@ -278,7 +278,7 @@ void PPPMCG::particle_map() double **x = atom->x; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; for (int j = 0; j < num_charged; j++) { diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index 8ff2ae2635..1e6aec5029 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -4227,7 +4227,7 @@ void PPPMDisp::particle_map(double delx, double dely, double delz, int nlocal = atom->nlocal; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; for (int i = 0; i < nlocal; i++) { diff --git a/src/KSPACE/pppm_disp_tip4p.cpp b/src/KSPACE/pppm_disp_tip4p.cpp index a07387443b..1542304e35 100644 --- a/src/KSPACE/pppm_disp_tip4p.cpp +++ b/src/KSPACE/pppm_disp_tip4p.cpp @@ -71,7 +71,7 @@ void PPPMDispTIP4P::particle_map_c(double delx, double dely, double delz, int nlocal = atom->nlocal; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; for (int i = 0; i < nlocal; i++) { diff --git a/src/KSPACE/pppm_stagger.cpp b/src/KSPACE/pppm_stagger.cpp index 4d0fb7f20a..4a1946e32b 100644 --- a/src/KSPACE/pppm_stagger.cpp +++ b/src/KSPACE/pppm_stagger.cpp @@ -674,7 +674,7 @@ void PPPMStagger::particle_map() int nlocal = atom->nlocal; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; for (int i = 0; i < nlocal; i++) { diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index 0ece29768e..d1e723a60f 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -68,7 +68,7 @@ void PPPMTIP4P::particle_map() int nlocal = atom->nlocal; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; for (int i = 0; i < nlocal; i++) { diff --git a/src/OPENMP/domain_omp.cpp b/src/OPENMP/domain_omp.cpp index 32eebe45e9..668a26ce78 100644 --- a/src/OPENMP/domain_omp.cpp +++ b/src/OPENMP/domain_omp.cpp @@ -55,7 +55,7 @@ void DomainOMP::pbc() #endif // clang-format on for (int i = 0; i < n3; i++) if (!std::isfinite(coord[i])) flag = 1; - if (flag) error->one(FLERR, "Non-numeric atom coords - simulation unstable"); + if (flag) error->one(FLERR, "Non-numeric atom coords - simulation unstable" + utils::errorurl(6)); auto *_noalias const x = (dbl3_t *) atom->x[0]; auto *_noalias const v = (dbl3_t *) atom->v[0]; diff --git a/src/OPENMP/msm_cg_omp.cpp b/src/OPENMP/msm_cg_omp.cpp index 111d2bf4e4..48ce876e1e 100644 --- a/src/OPENMP/msm_cg_omp.cpp +++ b/src/OPENMP/msm_cg_omp.cpp @@ -330,7 +330,7 @@ void MSMCGOMP::particle_map() int i; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR, Error::NOLASTLINE, "Non-numeric box dimensions - simulation unstable"); + error->one(FLERR, Error::NOLASTLINE, "Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); // XXX: O(N). is it worth to add OpenMP here? for (int j = 0; j < num_charged; j++) { diff --git a/src/OPENMP/pppm_disp_tip4p_omp.cpp b/src/OPENMP/pppm_disp_tip4p_omp.cpp index d3a9c9528c..a62e1cb6f3 100644 --- a/src/OPENMP/pppm_disp_tip4p_omp.cpp +++ b/src/OPENMP/pppm_disp_tip4p_omp.cpp @@ -354,7 +354,7 @@ void PPPMDispTIP4POMP::particle_map_c(double dxinv, double dyinv, const int nzhi_out = nzhi_o; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; #if defined(_OPENMP) diff --git a/src/OPENMP/pppm_tip4p_omp.cpp b/src/OPENMP/pppm_tip4p_omp.cpp index 640b7d4d35..167c722a0e 100644 --- a/src/OPENMP/pppm_tip4p_omp.cpp +++ b/src/OPENMP/pppm_tip4p_omp.cpp @@ -350,7 +350,7 @@ void PPPMTIP4POMP::particle_map() const int nlocal = atom->nlocal; if (!std::isfinite(boxlox) || !std::isfinite(boxloy) || !std::isfinite(boxloz)) - error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); + error->one(FLERR,"Non-numeric box dimensions - simulation unstable" + utils::errorurl(6)); int flag = 0; #if defined(_OPENMP) diff --git a/src/fix_box_relax.cpp b/src/fix_box_relax.cpp index c8540e1d9c..3778847ef5 100644 --- a/src/fix_box_relax.cpp +++ b/src/fix_box_relax.cpp @@ -700,7 +700,7 @@ void FixBoxRelax::couple() } if (!std::isfinite(p_current[0]) || !std::isfinite(p_current[1]) || !std::isfinite(p_current[2])) - error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(7)); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); // switch order from xy-xz-yz to Voigt ordering @@ -710,7 +710,7 @@ void FixBoxRelax::couple() p_current[5] = tensor[3]; if (!std::isfinite(p_current[3]) || !std::isfinite(p_current[4]) || !std::isfinite(p_current[5])) - error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(7)); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); } } diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index d13ddcb819..7e7e6410a1 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -1045,7 +1045,7 @@ void FixNH::couple() } if (!std::isfinite(p_current[0]) || !std::isfinite(p_current[1]) || !std::isfinite(p_current[2])) - error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(7)); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); // switch order from xy-xz-yz to Voigt ordering @@ -1055,7 +1055,7 @@ void FixNH::couple() p_current[5] = tensor[3]; if (!std::isfinite(p_current[3]) || !std::isfinite(p_current[4]) || !std::isfinite(p_current[5])) - error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(7)); + error->all(FLERR,"Non-numeric pressure - simulation unstable" + utils::errorurl(6)); } } diff --git a/src/npair.cpp b/src/npair.cpp index c60d37208e..e1ceeb5c41 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -239,7 +239,7 @@ int NPair::exclusion(int i, int j, int itype, int jtype, int NPair::coord2bin(double *x, int &ix, int &iy, int &iz) { if (!std::isfinite(x[0]) || !std::isfinite(x[1]) || !std::isfinite(x[2])) - error->one(FLERR,"Non-numeric positions - simulation unstable" + utils::errorurl(7)); + error->one(FLERR,"Non-numeric positions - simulation unstable" + utils::errorurl(6)); if (x[0] >= bboxhi[0]) ix = static_cast ((x[0]-bboxhi[0])*bininvx) + nbinx; @@ -282,7 +282,7 @@ int NPair::coord2bin(double *x, int ic) int ibin; if (!std::isfinite(x[0]) || !std::isfinite(x[1]) || !std::isfinite(x[2])) - error->one(FLERR,"Non-numeric positions - simulation unstable" + utils::errorurl(7)); + error->one(FLERR,"Non-numeric positions - simulation unstable" + utils::errorurl(6)); if (x[0] >= bboxhi[0]) ix = static_cast ((x[0]-bboxhi[0])*bininvx_multi[ic]) + nbinx_multi[ic]; From 68c92f32675b627a92197fd023456443358843f5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Mar 2025 12:18:32 -0400 Subject: [PATCH 10/33] add new explanation for warning about multiple time integrations --- doc/src/Errors_details.rst | 12 ++++++++++++ src/modify.cpp | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index aebdcebdbe..31babe9bc6 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -868,3 +868,15 @@ keyword, LAMMPS stops with the 'Invalid thermo keyword' error. But it is also possible, that there is just a typo in the name of a valid variable function. Thus it is recommended to check the failing variable expression very carefully. + +.. _err0032: + +One or more atoms are time integrated more than once +---------------------------------------------------- + +This is probably an error since you typically do not want to advance the +positions or velocities of an atom more than once per timestep. This +typically happens when there are multiple fix commands that advance atom +positions with overlapping groups. Also, for some fix styles it is not +immediately obvious that they include time integration. Please check +the documentation carefully. diff --git a/src/modify.cpp b/src/modify.cpp index 9908b96d79..e571440ddd 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -295,7 +295,8 @@ void Modify::init() int checkall; MPI_Allreduce(&check, &checkall, 1, MPI_INT, MPI_SUM, world); if (comm->me == 0 && checkall) - error->warning(FLERR, "One or more atoms are time integrated more than once"); + error->warning(FLERR, "One or more atoms are time integrated more than once" + + utils::errorurl(32)); } /* ---------------------------------------------------------------------- From afaf440895d51f05db88bcfee5d406981cdb619c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Mar 2025 12:20:07 -0400 Subject: [PATCH 11/33] expand/clarify some discussions --- doc/src/Errors_details.rst | 71 +++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index 31babe9bc6..6daf14f91a 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -395,44 +395,52 @@ Lost atoms ... -------------- A simulation stopping with an error due to lost atoms can have multiple -causes. In the majority of cases, lost atoms are unexpected and a result -of extremely high velocities causing instabilities in the system, and -those velocities can result from a variety of issues. For ideas on how -to track down issues with unexpected lost atoms, see :ref:`Fast moving -atoms ` and :ref:`Neighbor list settings ` in the -general troubleshooting section above. In specific situations however, -losing atoms is expected material behavior (e.g. with sputtering and -surface evaporation simulations) and an unwanted crash can be resolved -by changing the :doc:`thermo_modify lost ` keyword from -the default 'error' to 'warn' or 'ignore' (though heed the advice in -:ref:`Ignoring lost atoms ` above!). +causes. By default, LAMMPS checks for whether the total number of atoms +is consistent with the sum of atoms "owned" by MPI processors every time +that thermodynamic output is written. In the majority of cases, lost +atoms are unexpected and a result of extremely high velocities causing +instabilities in the system, and those velocities can result from a +variety of issues. For ideas on how to track down issues with +unexpected lost atoms, see :ref:`Fast moving atoms ` and +:ref:`Neighbor list settings ` in the general troubleshooting +section above. In specific situations however, losing atoms is expected +material behavior (e.g. with sputtering and surface evaporation +simulations) and an unwanted crash can be resolved by changing the +:doc:`thermo_modify lost ` keyword from the default +'error' to 'warn' or 'ignore' (though heed the advice in :ref:`Ignoring +lost atoms ` above!). .. _err0009: Too many neighbor bins ---------------------- -The simulation box has become too large relative to the size of a -neighbor bin and LAMMPS is unable to store the needed number of -bins. This typically implies the simulation box has expanded too far. -This can happen when some atoms move rapidly apart with shrink-wrap boundaries -or when a fix (like fix deform or a barostat) excessively grows the simulation -box. +The simulation box is or has become too large relative to the size of a +neighbor bin (which in turn depends on the largest pair-wise cutoff by +default) and LAMMPS is unable to store the needed number of bins. This +typically implies the simulation box has expanded too far. That can +happen when some atoms move rapidly apart with shrink-wrap boundaries or +when a fix (like fix deform or a barostat) excessively grows the +simulation box. This can also happen, if the largest pair-wise cutoff +is small. In this case, the error can be avoided by using the +:doc:`neigh_modify command ` to set the bin width to a +suitably large value. .. _err0010: -Unrecognized pair style ... is part of ... package which is not enabled in this LAMMPS binary ---------------------------------------------------------------------------------------------- +Unrecognized ... style ... is part of ... package which is not enabled in this LAMMPS binary +-------------------------------------------------------------------------------------------- -The LAMMPS executable (binary) being used was not compiled with a package -containing the specified pair style. This indicates that the executable needs to -be re-built after enabling the correct package in the relevant Makefile or CMake -build directory. See :doc:`Section 3. Build LAMMPS ` for more details. -One can check if the expected package and pair style is present in the -executable by running it with the ``-help`` (or ``-h``) flag on the command -line. One common oversight, especially for beginner LAMMPS users, is to enable -the package, but to forget to run commands to rebuild (e.g., to run the final -``make`` or ``cmake`` command). +The LAMMPS executable (binary) being used was not compiled with a +package containing the specified style. This indicates that the +executable needs to be re-built after enabling the correct package in +the relevant Makefile or CMake build directory. See +:doc:`Section 3. Build LAMMPS ` for more details. One can check +if the expected package and pair style is present in the executable by +running it with the ``-help`` (or ``-h``) flag on the command line. One +common oversight, especially for beginner LAMMPS users, is to enable the +package, but to forget to run commands to rebuild (e.g., to run the +final ``make`` or ``cmake`` command). If this error is occurring with an executable that the user does not control (e.g., through a module on HPC clusters), the user will need to get in contact @@ -770,9 +778,10 @@ with periodic boundaries or larger than the box with non-periodic boundaries. It means that the positions and image flags have become inconsistent. LAMMPS will still compute bonded interactions based on the closest periodic images of the atoms and thus in most cases the -results will be correct. Nevertheless, it is good practice to update -the system so that the message does not appear. It will help with -future manipulations of the system. +results will be correct. However they can cause problems when such +atoms are used with the fix rigid or replicate commands. Thus, it is +good practice to update the system so that the message does not appear. +It will help with future manipulations of the system. There is one case where this warning *must* appear: when you have a chain of connected bonds that pass through the entire box and connect From aee02c7ed4fa4b86d63a8b02dace0bbbbe07cbbd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Mar 2025 12:20:30 -0400 Subject: [PATCH 12/33] remove entries that are now covered by Errors_details.rst --- doc/src/Errors_messages.rst | 261 ------------------------------------ doc/src/Errors_warnings.rst | 21 --- 2 files changed, 282 deletions(-) diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index a63d72b027..776207fb05 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -74,18 +74,6 @@ Please also see the page with :doc:`Warning messages `. a particular processor. The pairwise cutoff is too short or the atoms are too far apart to make a valid angle. -*Angle atoms %d %d %d missing on proc %d at step %ld* - One or more of three atoms needed to compute a particular angle are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the angle has blown apart and an atom is - too far away. - -*Angle atoms missing on proc %d at step %ld* - One or more of three atoms needed to compute a particular angle are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the angle has blown apart and an atom is - too far away. - *Angle coeff for hybrid has invalid style* Angle style hybrid uses another angle style as one of its coefficients. The angle style used in the angle_coeff command or read @@ -305,26 +293,11 @@ Please also see the page with :doc:`Warning messages `. bond on a particular processor. The pairwise cutoff is too short or the atoms are too far apart to make a valid bond. -*Bond atom missing in image check* - The second atom in a particular bond is missing on this processor. - Typically this is because the pairwise cutoff is set too short or the - bond has blown apart and an atom is too far away. - *Bond atom missing in set command* The set command cannot find one or more atoms in a particular bond on a particular processor. The pairwise cutoff is too short or the atoms are too far apart to make a valid bond. -*Bond atoms %d %d missing on proc %d at step %ld* - The second atom needed to compute a particular bond is missing on this - processor. Typically this is because the pairwise cutoff is set too - short or the bond has blown apart and an atom is too far away. - -*Bond atoms missing on proc %d at step %ld* - The second atom needed to compute a particular bond is missing on this - processor. Typically this is because the pairwise cutoff is set too - short or the bond has blown apart and an atom is too far away. - *Bond coeff for hybrid has invalid style* Bond style hybrid uses another bond style as one of its coefficients. The bond style used in the bond_coeff command or read from a restart @@ -1070,11 +1043,6 @@ Please also see the page with :doc:`Warning messages `. This is a current limitation of the GPU implementation in LAMMPS. -*Cannot use neighbor bins - box size << cutoff* - Too many neighbor bins will be created. This typically happens when - the simulation box is very small in some dimension, compared to the - neighbor cutoff. Use the "nsq" style instead of "bin" style. - *Cannot use non-zero forces in an energy minimization* Fix setforce cannot be used in this manner. Use fix addforce instead. @@ -1217,12 +1185,6 @@ Please also see the page with :doc:`Warning messages `. *Compute chunk/atom bin/sphere radius is too large for periodic box* Radius cannot be bigger than 1/2 of any periodic dimension. -*Compute chunk/atom compute array is accessed out-of-range* - The index for the array is out of bounds. - -*Compute chunk/atom fix array is accessed out-of-range* - The index for the array is out of bounds. - *Compute chunk/atom ids once but nchunk is not once* You cannot assign chunks IDs to atom permanently if the number of chunks may change. @@ -1333,30 +1295,12 @@ Please also see the page with :doc:`Warning messages `. Only inputs that generate the same number of datums can be used together. E.g. bond and angle quantities cannot be mixed. -*Compute reduce compute array is accessed out-of-range* - An index for the array is out of bounds. - *Compute reduce compute calculates global values* A compute that calculates peratom or local values is required. -*Compute reduce fix array is accessed out-of-range* - An index for the array is out of bounds. - *Compute reduce fix calculates global values* A fix that calculates peratom or local values is required. -*Compute slice compute array is accessed out-of-range* - An index for the array is out of bounds. - -*Compute slice compute vector is accessed out-of-range* - The index for the vector is out of bounds. - -*Compute slice fix array is accessed out-of-range* - An index for the array is out of bounds. - -*Compute slice fix vector is accessed out-of-range* - The index for the vector is out of bounds. - *Compute stress/atom temperature ID does not compute temperature* The specified compute must compute temperature. @@ -1654,11 +1598,6 @@ Please also see the page with :doc:`Warning messages `. *Delete_bonds command with no atoms existing* No atoms are yet defined so the delete_bonds command cannot be used. -*Did not assign all atoms correctly* - Atoms read in from a data file were not assigned correctly to - processors. This is likely due to some atom coordinates being - outside a non-periodic simulation box. - *Did not assign all restart atoms correctly* Atoms read in from the restart file were not assigned correctly to processors. This is likely due to some atom coordinates being outside @@ -1697,18 +1636,6 @@ Please also see the page with :doc:`Warning messages `. on a particular processor. The pairwise cutoff is too short or the atoms are too far apart to make a valid dihedral. -*Dihedral atoms %d %d %d %d missing on proc %d at step %ld* - One or more of 4 atoms needed to compute a particular dihedral are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the dihedral has blown apart and an atom is - too far away. - -*Dihedral atoms missing on proc %d at step %ld* - One or more of 4 atoms needed to compute a particular dihedral are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the dihedral has blown apart and an atom is - too far away. - *Dihedral charmm is incompatible with Pair style* Dihedral style charmm must be used with a pair style charmm in order for the 1-4 epsilon/sigma parameters to be defined. @@ -1769,11 +1696,6 @@ Please also see the page with :doc:`Warning messages `. This should not normally occur. It is likely a problem with your model. -*Domain too large for neighbor bins* - The domain has become extremely large so that neighbor bins cannot be - used. Most likely, one or more atoms have been blown out of the - simulation box to a great distance. - *Dump atom/gz only writes compressed files* The dump atom/gz output file name must have a .gz suffix. @@ -1855,11 +1777,6 @@ Please also see the page with :doc:`Warning messages `. There is no variable syntax that uses empty brackets. Check the variable doc page. -*Energy was not tallied on needed timestep* - You are using a thermo keyword that requires potentials to - have tallied energy, but they did not on this timestep. See the - variable page for ideas on how to make this work. - *Epsilon or sigma reference not set by pair style in ewald/n* The pair style is not providing the needed epsilon or sigma values. @@ -1955,12 +1872,6 @@ Please also see the page with :doc:`Warning messages `. *Fix ave/chunk does not use chunk/atom compute* The specified compute is not for a compute chunk/atom command. -*Fix ave/correlate compute vector is accessed out-of-range* - The index for the vector is out of bounds. - -*Fix ave/correlate fix vector is accessed out-of-range* - The index for the vector is out of bounds. - *Fix ave/histo inputs are not all global, peratom, or local* All inputs in a single fix ave/histo command must be of the same style. @@ -1973,18 +1884,6 @@ Please also see the page with :doc:`Warning messages `. *Fix ave/time cannot use variable with vector mode* Variables produce scalar values. -*Fix ave/time compute array is accessed out-of-range* - An index for the array is out of bounds. - -*Fix ave/time compute vector is accessed out-of-range* - The index for the vector is out of bounds. - -*Fix ave/time fix array is accessed out-of-range* - An index for the array is out of bounds. - -*Fix ave/time fix vector is accessed out-of-range* - The index for the vector is out of bounds. - *Fix balance rcb cannot be used with comm_style brick* Comm_style tiled must be used instead. @@ -2560,18 +2459,6 @@ Please also see the page with :doc:`Warning messages `. on a particular processor. The pairwise cutoff is too short or the atoms are too far apart to make a valid improper. -*Improper atoms %d %d %d %d missing on proc %d at step %ld* - One or more of 4 atoms needed to compute a particular improper are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the improper has blown apart and an atom is - too far away. - -*Improper atoms missing on proc %d at step %ld* - One or more of 4 atoms needed to compute a particular improper are - missing on this processor. Typically this is because the pairwise - cutoff is set too short or the improper has blown apart and an atom is - too far away. - *Improper coeff for hybrid has invalid style* Improper style hybrid uses another improper style as one of its coefficients. The improper style used in the improper_coeff command @@ -2681,10 +2568,6 @@ Please also see the page with :doc:`Warning messages `. *Incorrect element names in EAM potential file* The element names in the EAM file do not match those requested. -*Incorrect format of ... section in data file* - Number or type of values per line in the given section of the data file - is not consistent with the requirements for this section. - *Incorrect format in COMB potential file* Incorrect number of words per line in the potential file. @@ -3213,9 +3096,6 @@ Please also see the page with :doc:`Warning messages `. The template indices must be between 1 to N, where N is the number of molecules in the template. -*Invalid thermo keyword in variable formula* - The keyword is not recognized. - *Invalid threads_per_atom specified.* For 3-body potentials on the GPU, the threads_per_atom setting cannot be greater than 4 for NVIDIA GPUs. @@ -3378,13 +3258,6 @@ Please also see the page with :doc:`Warning messages `. *Lost atoms via balance: original %ld current %ld* This should not occur. Report the problem to the developers. -*Lost atoms: original %ld current %ld* - Lost atoms are checked for each time thermo output is done. See the - thermo_modify lost command for options. Lost atoms usually indicate - bad dynamics, e.g. atoms have been blown far out of the simulation - box, or moved further than one processor's subdomain away before - reneighboring. - *MEAM library error %d* A call to the MEAM Fortran library returned an error. @@ -3445,9 +3318,6 @@ Please also see the page with :doc:`Warning messages `. The IDs must not be larger than can be stored in a 32-bit integer since chunk IDs are 32-bit integers. -*Molecule auto special bond generation overflow* - Counts exceed maxspecial setting for other atoms in system. - *Molecule file shake flags not before shake atoms* The order of the two sections is important. @@ -3460,16 +3330,6 @@ Please also see the page with :doc:`Warning messages `. *Molecule file special list does not match special count* The number of values in an atom's special list does not match count. -*Molecule topology/atom exceeds system topology/atom* - The number of bonds, angles, etc per-atom in the molecule exceeds the - system setting. See the create_box command for how to specify these - values. - -*Molecule topology type exceeds system topology type* - The number of bond, angle, etc types in the molecule exceeds the - system setting. See the create_box command for how to specify these - values. - *More than one fix deform* Only one fix deform can be defined at a time. @@ -3749,17 +3609,9 @@ Please also see the page with :doc:`Warning messages `. Swap frequency in temper command must evenly divide the total # of timesteps. -*Non-numeric box dimensions - simulation unstable* - The box size has apparently blown up. - *Number of core atoms != number of shell atoms* There must be a one-to-one pairing of core and shell atoms. -*Numeric index is out of bounds* - A command with an argument that specifies an integer or range of - integers is using a value that is less than 1 or greater than the - maximum allowed limit. - *One or more Atom IDs is negative* Atom IDs must be positive integers. @@ -3778,51 +3630,6 @@ Please also see the page with :doc:`Warning messages `. Any rigid body defined by the fix rigid command must contain 2 or more atoms. -*Out of range atoms - cannot compute MSM* - One or more atoms are attempting to map their charge to a MSM grid point - that is not owned by a processor. This is likely for one of two - reasons, both of them bad. First, it may mean that an atom near the - boundary of a processor's subdomain has moved more than 1/2 the - :doc:`neighbor skin distance ` without neighbor lists being - rebuilt and atoms being migrated to new processors. This also means - you may be missing pairwise interactions that need to be computed. - The solution is to change the re-neighboring criteria via the - :doc:`neigh_modify ` command. The safest settings are - "delay 0 every 1 check yes". Second, it may mean that an atom has - moved far outside a processor's subdomain or even the entire - simulation box. This indicates bad physics, e.g. due to highly - overlapping atoms, too large a timestep, etc. - -*Out of range atoms - cannot compute PPPM* - One or more atoms are attempting to map their charge to a PPPM grid - point that is not owned by a processor. This is likely for one of two - reasons, both of them bad. First, it may mean that an atom near the - boundary of a processor's subdomain has moved more than 1/2 the - :doc:`neighbor skin distance ` without neighbor lists being - rebuilt and atoms being migrated to new processors. This also means - you may be missing pairwise interactions that need to be computed. - The solution is to change the re-neighboring criteria via the - :doc:`neigh_modify ` command. The safest settings are - "delay 0 every 1 check yes". Second, it may mean that an atom has - moved far outside a processor's subdomain or even the entire - simulation box. This indicates bad physics, e.g. due to highly - overlapping atoms, too large a timestep, etc. - -*Out of range atoms - cannot compute PPPMDisp* - One or more atoms are attempting to map their charge to a PPPM grid - point that is not owned by a processor. This is likely for one of two - reasons, both of them bad. First, it may mean that an atom near the - boundary of a processor's subdomain has moved more than 1/2 the - :doc:`neighbor skin distance ` without neighbor lists being - rebuilt and atoms being migrated to new processors. This also means - you may be missing pairwise interactions that need to be computed. - The solution is to change the re-neighboring criteria via the - :doc:`neigh_modify ` command. The safest settings are - "delay 0 every 1 check yes". Second, it may mean that an atom has - moved far outside a processor's subdomain or even the entire - simulation box. This indicates bad physics, e.g. due to highly - overlapping atoms, too large a timestep, etc. - *Overflow of allocated fix vector storage* This should not normally happen if the fix correctly calculated how long the vector will grow to. Contact the developers. @@ -4342,19 +4149,9 @@ Please also see the page with :doc:`Warning messages `. *Per-atom compute in equal-style variable formula* Equal-style variables cannot use per-atom quantities. -*Per-atom energy was not tallied on needed timestep* - You are using a thermo keyword that requires potentials to - have tallied energy, but they did not on this timestep. See the - variable page for ideas on how to make this work. - *Per-atom fix in equal-style variable formula* Equal-style variables cannot use per-atom quantities. -*Per-atom virial was not tallied on needed timestep* - You are using a thermo keyword that requires potentials to have - tallied the virial, but they did not on this timestep. See the - variable page for ideas on how to make this work. - *Per-processor system is too big* The number of owned atoms plus ghost atoms on a single processor must fit in 32-bit integer. @@ -4717,10 +4514,6 @@ Please also see the page with :doc:`Warning messages `. See the extra/improper/per/atom keyword for the create_box or the read_data command to set this limit larger -*Substitution for illegal variable* - Input script line contained a variable that could not be substituted - for. - *Support for writing images in JPEG format not included* LAMMPS was not built with the -DLAMMPS_JPEG switch in the Makefile. @@ -4924,10 +4717,6 @@ Please also see the page with :doc:`Warning messages `. *Too many molecules for fix rigid* The limit is 2\^31 = ~2 billion molecules. -*Too many neighbor bins* - This is likely due to an immense simulation box that has blown up - to a large size. - *Too many timesteps* The cumulative timesteps must fit in a 64-bit integer. @@ -5019,57 +4808,12 @@ Please also see the page with :doc:`Warning messages `. A universe or uloop style variable must specify a number of values >= to the number of processor partitions. -*Unrecognized angle style* - The choice of angle style is unknown. - -*Unrecognized atom style* - The choice of atom style is unknown. - -*Unrecognized body style* - The choice of body style is unknown. - -*Unrecognized bond style* - The choice of bond style is unknown. - -*Unrecognized command: %s* - The command is not known to LAMMPS. Check the input script. - -*Unrecognized compute style* - The choice of compute style is unknown. - -*Unrecognized dihedral style* - The choice of dihedral style is unknown. - -*Unrecognized dump reader style* - The choice of dump reader style via the format keyword is unknown. - -*Unrecognized dump style* - The choice of dump style is unknown. - -*Unrecognized fix style* - The choice of fix style is unknown. - -*Unknown identifier in data file: %s* - A section of the data file cannot be read by LAMMPS. - -*Unrecognized improper style* - The choice of improper style is unknown. - *Unknown keyword in thermo_style custom command* One or more specified keywords are not recognized. -*Unrecognized kspace style* - The choice of kspace style is unknown. - -*Unrecognized pair style* - The choice of pair style is unknown. - *Unknown pair_modify hybrid sub-style* The choice of sub-style is unknown. -*Unrecognized region style* - The choice of region style is unknown. - *Unknown table style in pair_style command* Style of table is invalid for use with pair_style table command. @@ -5260,11 +5004,6 @@ Please also see the page with :doc:`Warning messages `. This is so there is an equal number of Rspace processors for every Kspace processor. -*Virial was not tallied on needed timestep* - You are using a thermo keyword that requires potentials to - have tallied the virial, but they did not on this timestep. See the - variable page for ideas on how to make this work. - *Voro++ error: narea and neigh have a different size* This error is returned by the Voro++ library. diff --git a/doc/src/Errors_warnings.rst b/doc/src/Errors_warnings.rst index f152e66f4a..c99b3f6b7c 100644 --- a/doc/src/Errors_warnings.rst +++ b/doc/src/Errors_warnings.rst @@ -270,23 +270,6 @@ Please also see the page with :doc:`Error messages ` The topology contains impropers, but there are no improper forces computed since there was no improper_style command. -*Inconsistent image flags* - The image flags for a pair on bonded atoms appear to be inconsistent. - Inconsistent means that when the coordinates of the two atoms are - unwrapped using the image flags, the two atoms are far apart. - Specifically they are further apart than half a periodic box length. - Or they are more than a box length apart in a non-periodic dimension. - This is usually due to the initial data file not having correct image - flags for the two atoms in a bond that straddles a periodic boundary. - They should be different by 1 in that case. This is a warning because - inconsistent image flags will not cause problems for dynamics or most - LAMMPS simulations. However they can cause problems when such atoms - are used with the fix rigid or replicate commands. Note that if you - have an infinite periodic crystal with bonds then it is impossible to - have fully consistent image flags, since some bonds will cross - periodic boundaries and connect two atoms with the same image - flag. - *Increasing communication cutoff for GPU style* The pair style has increased the communication cutoff to be consistent with the communication cutoff requirements for this pair style when run on the GPU. @@ -346,10 +329,6 @@ Please also see the page with :doc:`Error messages ` The temperature computation used by the velocity command will not be on the same group of atoms that velocities are being set for. -*Molecule attributes do not match system attributes* - An attribute is specified (e.g. diameter, charge) that is - not defined for the specified atom style. - *Molecule has bond topology but no special bond settings* This means the bonded atoms will not be excluded in pairwise interactions. From b936673935688a6744611dcfca3e2da049bea446 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Mar 2025 02:23:10 -0400 Subject: [PATCH 13/33] consolidate calls to utils::errorurl() with corresponding error class calls. --- doc/src/Errors_details.rst | 4 ++-- src/GPU/pppm_gpu.cpp | 2 +- src/INTEL/pppm_disp_intel.cpp | 2 +- src/INTEL/pppm_intel.cpp | 2 +- src/KOKKOS/fix_shake_kokkos.cpp | 4 ++-- src/KOKKOS/pppm_kokkos.cpp | 2 +- src/KSPACE/msm.cpp | 4 ++-- src/KSPACE/msm_cg.cpp | 2 +- src/KSPACE/pppm.cpp | 2 +- src/KSPACE/pppm_cg.cpp | 2 +- src/KSPACE/pppm_disp.cpp | 2 +- src/KSPACE/pppm_disp_tip4p.cpp | 2 +- src/KSPACE/pppm_stagger.cpp | 2 +- src/KSPACE/pppm_tip4p.cpp | 2 +- src/OPENMP/msm_cg_omp.cpp | 4 ++-- src/OPENMP/pppm_disp_omp.cpp | 4 ++-- src/OPENMP/pppm_disp_tip4p_omp.cpp | 8 ++++++-- src/OPENMP/pppm_tip4p_omp.cpp | 2 +- src/RIGID/fix_shake.cpp | 16 ++++++++-------- src/balance.cpp | 4 ++-- src/change_box.cpp | 4 ++-- src/compute_pressure.cpp | 24 +++++++++++++++--------- src/displace_atoms.cpp | 4 ++-- src/variable.cpp | 6 +++--- 24 files changed, 60 insertions(+), 50 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index 6daf14f91a..72148c2626 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -347,8 +347,8 @@ long-range solver. .. _err0005: -Bond (or angle, dihedral, or improper) atoms missing ----------------------------------------------------- +Bond (or angle, dihedral, improper, cmap, or shake) atoms missing +----------------------------------------------------------------- The second atom needed to compute a particular bond (or the third or fourth atom for angle, dihedral, or improper) is missing on the indicated timestep diff --git a/src/GPU/pppm_gpu.cpp b/src/GPU/pppm_gpu.cpp index 593aed827c..47fe71e872 100644 --- a/src/GPU/pppm_gpu.cpp +++ b/src/GPU/pppm_gpu.cpp @@ -197,7 +197,7 @@ void PPPMGPU::compute(int eflag, int vflag) if (!success) error->one(FLERR,"Insufficient memory on accelerator"); if (flag != 0) - error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } // convert atoms from box to lamda coords diff --git a/src/INTEL/pppm_disp_intel.cpp b/src/INTEL/pppm_disp_intel.cpp index 8816ed553b..3af670d325 100644 --- a/src/INTEL/pppm_disp_intel.cpp +++ b/src/INTEL/pppm_disp_intel.cpp @@ -777,7 +777,7 @@ void PPPMDispIntel::particle_map_intel(double delx, double dely, double delz, } } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPMDisp" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPMDisp" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/INTEL/pppm_intel.cpp b/src/INTEL/pppm_intel.cpp index 8b75b86e07..1ebfc29b99 100644 --- a/src/INTEL/pppm_intel.cpp +++ b/src/INTEL/pppm_intel.cpp @@ -404,7 +404,7 @@ void PPPMIntel::particle_map(IntelBuffers *buffers) } } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } diff --git a/src/KOKKOS/fix_shake_kokkos.cpp b/src/KOKKOS/fix_shake_kokkos.cpp index 52826d7b04..05873120d7 100644 --- a/src/KOKKOS/fix_shake_kokkos.cpp +++ b/src/KOKKOS/fix_shake_kokkos.cpp @@ -257,8 +257,8 @@ void FixShakeKokkos::pre_neighbor() nlist = h_nlist(); if (h_error_flag() == 1) { - error->one(FLERR,"Shake atoms missing on proc " - "{} at step {}",comm->me,update->ntimestep); + error->one(FLERR,"Shake atoms missing on proc {} at step {}{}", + comm->me,update->ntimestep, utils::errorurl(5)); } } diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 40faaed8d5..84bff03c80 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -1147,7 +1147,7 @@ void PPPMKokkos::particle_map() k_flag.template modify(); k_flag.template sync(); if (k_flag.h_view()) - error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } template diff --git a/src/KSPACE/msm.cpp b/src/KSPACE/msm.cpp index c4008967f8..2cdeb74ec0 100644 --- a/src/KSPACE/msm.cpp +++ b/src/KSPACE/msm.cpp @@ -1466,8 +1466,8 @@ void MSM::particle_map() } if (flag) - error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute MSM{}", - utils::errorurl(4)); + error->one(FLERR, Error::NOLASTLINE, + "Out of range atoms - cannot compute MSM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/msm_cg.cpp b/src/KSPACE/msm_cg.cpp index 62e23c564c..9ba52a68d5 100644 --- a/src/KSPACE/msm_cg.cpp +++ b/src/KSPACE/msm_cg.cpp @@ -335,7 +335,7 @@ void MSMCG::particle_map() flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute MSM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute MSM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index aeaf53f4e1..8eaa60ac92 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -1830,7 +1830,7 @@ void PPPM::particle_map() flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm_cg.cpp b/src/KSPACE/pppm_cg.cpp index 5f474efd54..fe0176bf13 100644 --- a/src/KSPACE/pppm_cg.cpp +++ b/src/KSPACE/pppm_cg.cpp @@ -304,7 +304,7 @@ void PPPMCG::particle_map() flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index 1e6aec5029..f2882582bb 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -4252,7 +4252,7 @@ void PPPMDisp::particle_map(double delx, double dely, double delz, flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPMDisp" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPMDisp" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm_disp_tip4p.cpp b/src/KSPACE/pppm_disp_tip4p.cpp index 1542304e35..1417aca4a3 100644 --- a/src/KSPACE/pppm_disp_tip4p.cpp +++ b/src/KSPACE/pppm_disp_tip4p.cpp @@ -100,7 +100,7 @@ void PPPMDispTIP4P::particle_map_c(double delx, double dely, double delz, flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm_stagger.cpp b/src/KSPACE/pppm_stagger.cpp index 4a1946e32b..9681351ec1 100644 --- a/src/KSPACE/pppm_stagger.cpp +++ b/src/KSPACE/pppm_stagger.cpp @@ -699,7 +699,7 @@ void PPPMStagger::particle_map() flag = 1; } - if (flag) error->one(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag) error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index d1e723a60f..631eebc65c 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -98,7 +98,7 @@ void PPPMTIP4P::particle_map() int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag_all) error->all(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/msm_cg_omp.cpp b/src/OPENMP/msm_cg_omp.cpp index 48ce876e1e..008d27f99a 100644 --- a/src/OPENMP/msm_cg_omp.cpp +++ b/src/OPENMP/msm_cg_omp.cpp @@ -357,8 +357,8 @@ void MSMCGOMP::particle_map() } if (flag) - error->one(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute MSM{}", - utils::errorurl(4)); + error->one(FLERR, Error::NOLASTLINE, + "Out of range atoms - cannot compute MSM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/pppm_disp_omp.cpp b/src/OPENMP/pppm_disp_omp.cpp index 6fceca6a14..e7f8d1c360 100644 --- a/src/OPENMP/pppm_disp_omp.cpp +++ b/src/OPENMP/pppm_disp_omp.cpp @@ -358,7 +358,7 @@ void PPPMDispOMP::particle_map(double dxinv, double dyinv, const int nzhi_out = nzhi_o; if (!std::isfinite(boxlo[0]) || !std::isfinite(boxlo[1]) || !std::isfinite(boxlo[2])) - error->one(FLERR,"Non-numeric box dimensions. Simulation unstable."); + error->one(FLERR,"Non-numeric box dimensions. Simulation unstable."+utils::errorurl(6)); int flag = 0; #if defined(_OPENMP) @@ -388,7 +388,7 @@ void PPPMDispOMP::particle_map(double dxinv, double dyinv, int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag_all) error->all(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/pppm_disp_tip4p_omp.cpp b/src/OPENMP/pppm_disp_tip4p_omp.cpp index a62e1cb6f3..7cadbbb2ac 100644 --- a/src/OPENMP/pppm_disp_tip4p_omp.cpp +++ b/src/OPENMP/pppm_disp_tip4p_omp.cpp @@ -392,7 +392,9 @@ void PPPMDispTIP4POMP::particle_map_c(double dxinv, double dyinv, int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag_all) + error->all(FLERR, Error::NOLASTLINE, + "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- @@ -460,7 +462,9 @@ void PPPMDispTIP4POMP::particle_map(double dxinv, double dyinv, int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPM"); + if (flag_all) + error->all(FLERR, Error::NOLASTLINE, + "Out of range atoms - cannot compute PPPM", utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/pppm_tip4p_omp.cpp b/src/OPENMP/pppm_tip4p_omp.cpp index 167c722a0e..e2cf98b0d2 100644 --- a/src/OPENMP/pppm_tip4p_omp.cpp +++ b/src/OPENMP/pppm_tip4p_omp.cpp @@ -388,7 +388,7 @@ void PPPMTIP4POMP::particle_map() int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); - if (flag_all) error->all(FLERR,"Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); + if (flag_all) error->all(FLERR, Error::NOLASTLINE, "Out of range atoms - cannot compute PPPM" + utils::errorurl(4)); } /* ---------------------------------------------------------------------- diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 41708823bb..89b8ffd942 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -596,8 +596,8 @@ void FixShake::pre_neighbor() atom1 = atom->map(shake_atom[i][0]); atom2 = atom->map(shake_atom[i][1]); if (atom1 == -1 || atom2 == -1) - error->one(FLERR,"Shake atoms {} {} missing on proc {} at step {}",shake_atom[i][0], - shake_atom[i][1],comm->me,update->ntimestep); + error->one(FLERR,"Shake atoms {} {} missing on proc {} at step {}{}",shake_atom[i][0], + shake_atom[i][1],comm->me,update->ntimestep,utils::errorurl(5)); atom1 = domain->closest_image(i, atom1); atom2 = domain->closest_image(i, atom2); if (i <= atom1 && i <= atom2) { @@ -611,9 +611,9 @@ void FixShake::pre_neighbor() atom2 = atom->map(shake_atom[i][1]); atom3 = atom->map(shake_atom[i][2]); if (atom1 == -1 || atom2 == -1 || atom3 == -1) - error->one(FLERR,"Shake atoms {} {} {} missing on proc {} at step {}",shake_atom[i][0], - shake_atom[i][1],shake_atom[i][2], - comm->me,update->ntimestep); + error->one(FLERR,"Shake atoms {} {} {} missing on proc {} at step {}{}",shake_atom[i][0], + shake_atom[i][1],shake_atom[i][2],comm->me,update->ntimestep, + utils::errorurl(5)); atom1 = domain->closest_image(i, atom1); atom2 = domain->closest_image(i, atom2); atom3 = domain->closest_image(i, atom3); @@ -630,9 +630,9 @@ void FixShake::pre_neighbor() atom3 = atom->map(shake_atom[i][2]); atom4 = atom->map(shake_atom[i][3]); if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1) - error->one(FLERR,"Shake atoms {} {} {} {} missing on proc {} at step {}",shake_atom[i][0], - shake_atom[i][1],shake_atom[i][2], - shake_atom[i][3],comm->me,update->ntimestep); + error->one(FLERR,"Shake atoms {} {} {} {} missing on proc {} at step {}{}", + shake_atom[i][0],shake_atom[i][1],shake_atom[i][2],shake_atom[i][3], + comm->me,update->ntimestep,utils::errorurl(5)); atom1 = domain->closest_image(i, atom1); atom2 = domain->closest_image(i, atom2); atom3 = domain->closest_image(i, atom3); diff --git a/src/balance.cpp b/src/balance.cpp index 3e45efed49..5ebe242bfb 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -377,8 +377,8 @@ void Balance::command(int narg, char **arg) bigint nblocal = atom->nlocal; MPI_Allreduce(&nblocal,&natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); if (natoms != atom->natoms) - error->all(FLERR,"Lost atoms via balance: original {} current {}"+utils::errorurl(8), - atom->natoms,natoms); + error->all(FLERR,Error::NOLASTLINE,"Lost atoms via balance: original {} current {}" + +utils::errorurl(8),atom->natoms,natoms); // imbfinal = final imbalance // set disable = 1, so weights no longer migrate with atoms diff --git a/src/change_box.cpp b/src/change_box.cpp index dd6c427a18..5223218f3d 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -380,8 +380,8 @@ void ChangeBox::command(int narg, char **arg) bigint nblocal = atom->nlocal; MPI_Allreduce(&nblocal,&natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); if (natoms != atom->natoms && comm->me == 0) - error->warning(FLERR,"Lost atoms via change_box: original {} " - "current {}"+utils::errorurl(8),atom->natoms,natoms); + error->warning(FLERR,"Lost atoms via change_box: original {} current {}"+utils::errorurl(8), + atom->natoms,natoms); } /* ---------------------------------------------------------------------- diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index 91a9cb531d..7843caecba 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -92,7 +92,7 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : nsub = utils::inumeric(FLERR,arg[iarg],false,lmp); ++iarg; if (nsub <= 0) - error->all(FLERR,"Illegal compute pressure command"); + error->all(FLERR, iarg, "Illegal compute pressure hybrid sub-style index {}", nsub); } } @@ -105,7 +105,8 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : } if (!pairhybrid) - error->all(FLERR,"Unrecognized pair style in compute pressure command"); + error->all(FLERR, iarg - (nsub ? 1 : 0), + "Unrecognized pair style {} in compute pressure command", pstyle); pairhybridflag = 1; } @@ -120,7 +121,7 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : pairflag = 1; bondflag = angleflag = dihedralflag = improperflag = 1; kspaceflag = fixflag = 1; - } else error->all(FLERR,"Illegal compute pressure command"); + } else error->all(FLERR, iarg, "Unknown compute pressure keyword {}", arg[iarg]); iarg++; } } @@ -128,7 +129,8 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : // error check if (keflag && id_temp == nullptr) - error->all(FLERR,"Compute pressure requires temperature ID to include kinetic energy"); + error->all(FLERR, Error::NOLASTLINE, + "Compute pressure requires temperature ID to include kinetic energy"); vector = new double[size_vector]; nvirial = 0; @@ -164,7 +166,8 @@ void ComputePressure::init() if (keflag) { temperature = modify->get_compute_by_id(id_temp); if (!temperature) - error->all(FLERR,"Could not find compute pressure temperature ID {}", id_temp); + error->all(FLERR, Error::NOLASTLINE, + "Could not find compute pressure temperature ID {}", id_temp); } // recheck if pair style with and without suffix exists @@ -178,7 +181,8 @@ void ComputePressure::init() } if (!pairhybrid) - error->all(FLERR,"Unrecognized pair style in compute pressure command"); + error->all(FLERR, Error::NOLASTLINE, + "Unrecognized pair style {} in compute pressure command", pstyle); } // detect contributions to virial @@ -235,7 +239,8 @@ double ComputePressure::compute_scalar() { invoked_scalar = update->ntimestep; if (update->vflag_global != invoked_scalar) - error->all(FLERR, Error::NOLASTLINE, "Virial was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, "Virial was not tallied on needed timestep" + + utils::errorurl(22)); // invoke temperature if it hasn't been already @@ -274,10 +279,11 @@ void ComputePressure::compute_vector() { invoked_vector = update->ntimestep; if (update->vflag_global != invoked_vector) - error->all(FLERR, Error::NOLASTLINE, "Virial was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Virial was not tallied on needed timestep" + utils::errorurl(22)); if (force->kspace && kspace_virial && force->kspace->scalar_pressure_flag) - error->all(FLERR,"Must use 'kspace_modify pressure/scalar no' for " + error->all(FLERR, Error::NOLASTLINE, "Must use 'kspace_modify pressure/scalar no' for " "tensor components with kspace_style msm"); // invoke temperature if it hasn't been already diff --git a/src/displace_atoms.cpp b/src/displace_atoms.cpp index 6f237c03c9..f930fa0980 100644 --- a/src/displace_atoms.cpp +++ b/src/displace_atoms.cpp @@ -363,8 +363,8 @@ void DisplaceAtoms::command(int narg, char **arg) bigint nblocal = atom->nlocal; MPI_Allreduce(&nblocal,&natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); if (natoms != atom->natoms && comm->me == 0) - error->warning(FLERR,"Lost atoms via displace_atoms: original {} " - "current {}"+utils::errorurl(8),atom->natoms,natoms); + error->warning(FLERR,"Lost atoms via displace_atoms: original {} current {}"+utils::errorurl(8), + atom->natoms,natoms); } /* ---------------------------------------------------------------------- diff --git a/src/variable.cpp b/src/variable.cpp index 5ca3dbc2fb..4e1306e893 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -188,8 +188,8 @@ void Variable::set(int narg, char **arg) if (strcmp(arg[1], "delete") == 0) { if (narg > 2) - error->all(FLERR, 2, "Illegal variable delete command: expected 2 arguments but found {}", - narg); + error->all(FLERR, 2, "Illegal variable delete command: expected 2 arguments but found {}{}", + narg, utils::errorurl(3)); if (find(arg[0]) >= 0) remove(find(arg[0])); return; @@ -278,7 +278,7 @@ void Variable::set(int narg, char **arg) copy(num[nvar], &arg[2], data[nvar]); } else if (strcmp(arg[1], "uloop") == 0) { if (narg < 3 || narg > 4) - error->all(FLERR, 1, "Illegal variable command: expected 3 or 4 arguments but found {}: {}", + error->all(FLERR, 1, "Illegal variable command: expected 3 or 4 arguments but found {}{}", narg, utils::errorurl(3)); if (narg == 4 && strcmp(arg[3], "pad") != 0) error->all(FLERR, 3, "Invalid variable uloop argument: {}", arg[3]); From 04bb57f8e263f89ac2be56a2681b9410c4b88ea0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Mar 2025 17:17:47 -0400 Subject: [PATCH 14/33] update a bunch more error messages --- doc/src/Errors_details.rst | 12 ++- src/OPENMP/reaxff_forces_omp.cpp | 10 +- src/compute_chunk_atom.cpp | 164 +++++++++++++++++------------- src/compute_chunk_spread_atom.cpp | 62 ++++++----- src/compute_chunk_spread_atom.h | 1 + src/compute_global_atom.cpp | 115 ++++++++++++--------- src/compute_global_atom.h | 1 + src/compute_reduce.cpp | 128 +++++++++++++++-------- src/compute_reduce.h | 1 + src/compute_reduce_chunk.cpp | 64 +++++++----- src/compute_reduce_chunk.h | 1 + src/compute_slice.cpp | 76 +++++++++----- src/compute_slice.h | 1 + src/dump_custom.cpp | 54 ++++++---- src/dump_local.cpp | 70 ++++++++----- src/fix_ave_atom.cpp | 33 ++++-- src/fix_ave_chunk.cpp | 39 ++++--- src/fix_ave_correlate.cpp | 16 ++- 18 files changed, 521 insertions(+), 327 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index 72148c2626..9af9b984fb 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -387,7 +387,17 @@ the potential energy has stabilized. .. _err007: -.. currently unused +Fix used in ... not computed at compatible time +----------------------------------------------- + +Many fix styles are invoked only every *nevery* timesteps, which means +their data is only valid on those steps. When data from a fix is used +as input for a compute, a dump, another fix, or thermo output, it must +read that data at timesteps when the fix in question was invoked, i.e. +on timesteps that are multiples of its *nevery* setting. If this is +not the case, LAMMPS will stop with an error. To remedy this, it may +be required to change the output frequency or the *nevery* setting of +the fix. .. _err0008: diff --git a/src/OPENMP/reaxff_forces_omp.cpp b/src/OPENMP/reaxff_forces_omp.cpp index ce8ad0716f..e27460c425 100644 --- a/src/OPENMP/reaxff_forces_omp.cpp +++ b/src/OPENMP/reaxff_forces_omp.cpp @@ -37,6 +37,7 @@ #include using namespace LAMMPS_NS; +using utils::errorurl; namespace ReaxFF { /* ---------------------------------------------------------------------- */ @@ -182,8 +183,8 @@ namespace ReaxFF { if (End_Index(i, bonds) > comp) system->error_ptr->one(FLERR, fmt::format("step {}: bondchk failed: " - "i={} end(i)={} str(i+1)={}\n", - step,i,End_Index(i,bonds),comp)); + "i={} end(i)={} str(i+1)={}{}", + step,i,End_Index(i,bonds),comp,errorurl(18))); } } @@ -207,8 +208,9 @@ namespace ReaxFF { if (End_Index(Hindex, hbonds) > comp) system->error_ptr->one(FLERR, fmt::format("step {}: hbondchk failed: " - "H={} end(H)={} str(H+1)={}\n", - step, Hindex,End_Index(Hindex,hbonds),comp)); + "H={} end(H)={} str(H+1)={}{}", + step, Hindex,End_Index(Hindex,hbonds),comp, + errorurl(18))); } } } diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp index a1d595a086..f8ea7d9efa 100644 --- a/src/compute_chunk_atom.cpp +++ b/src/compute_chunk_atom.cpp @@ -56,7 +56,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : fchunk(nullptr), varatom(nullptr), id_fix(nullptr), fixstore(nullptr), lockfix(nullptr), chunk(nullptr), exclude(nullptr), hash(nullptr) { - if (narg < 4) error->all(FLERR, "Illegal compute chunk/atom command"); + if (narg < 4) utils::missing_cmd_args(FLERR, "compute chunk/atom", error); peratom_flag = 1; scalar_flag = 1; @@ -101,7 +101,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : which = ArgInfo::BINSPHERE; ncoord = 1; iarg = 4; - if (iarg + 6 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 6 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bin/sphere", error); sorigin_user[0] = utils::numeric(FLERR, arg[iarg], false, lmp); sorigin_user[1] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); sorigin_user[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); @@ -126,7 +126,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : cdim1 = 0; cdim2 = 1; } - if (iarg + 5 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 5 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bin/cylinder", error); corigin_user[dim[0]] = 0.0; corigin_user[cdim1] = utils::numeric(FLERR, arg[iarg], false, lmp); corigin_user[cdim2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); @@ -151,7 +151,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : cfvid = argi.copy_name(); if ((which == ArgInfo::UNKNOWN) || (which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, 3, "Invalid compute chunk/atom argument {}", arg[3]); iarg = 4; } @@ -178,40 +178,42 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : while (iarg < narg) { if (strcmp(arg[iarg], "region") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom region", error); if (!domain->get_region_by_id(arg[iarg + 1])) - error->all(FLERR, "Region {} for compute chunk/atom does not exist", arg[iarg + 1]); + error->all(FLERR, iarg + 1, "Region {} for compute chunk/atom does not exist", + arg[iarg + 1]); idregion = utils::strdup(arg[iarg + 1]); regionflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "nchunk") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom nchunk", error); if (strcmp(arg[iarg + 1], "once") == 0) nchunkflag = ONCE; else if (strcmp(arg[iarg + 1], "every") == 0) nchunkflag = EVERY; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg + 1, "Unknown compute chunk/atom nchunk argument {}", arg[iarg + 1]); nchunksetflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "limit") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom limit", error); limit = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); - if (limit < 0) error->all(FLERR, "Illegal compute chunk/atom command"); + if (limit < 0) + error->all(FLERR, iarg + 1, "Illegal compute chunk/atom limit value {}", limit); if (limit && !compress) limitfirst = 1; iarg += 2; if (limit) { - if (iarg > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom limit", error); if (strcmp(arg[iarg], "max") == 0) limitstyle = LIMITMAX; else if (strcmp(arg[iarg], "exact") == 0) limitstyle = LIMITEXACT; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg, "Unknown compute chunk/atom limit keyword {}", arg[iarg]); iarg++; } } else if (strcmp(arg[iarg], "ids") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom ids", error); if (strcmp(arg[iarg + 1], "once") == 0) idsflag = ONCE; else if (strcmp(arg[iarg + 1], "nfreq") == 0) @@ -219,14 +221,14 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg + 1], "every") == 0) idsflag = EVERY; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg + 1, "Unknown compute chunk/atom ids argument {}", arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "compress") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom compress", error); compress = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; } else if (strcmp(arg[iarg], "discard") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom discard", error); if (strcmp(arg[iarg + 1], "mixed") == 0) discard = MIXED; else if (strcmp(arg[iarg + 1], "no") == 0) @@ -234,11 +236,12 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg + 1], "yes") == 0) discard = YESDISCARD; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg + 1, "Unknown compute chunk/atom discard argument {}", + arg[iarg + 1]); discardsetflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "bound") == 0) { - if (iarg + 4 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 4 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bound", error); int idim = 0; if (strcmp(arg[iarg + 1], "x") == 0) idim = 0; @@ -247,7 +250,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg + 1], "z") == 0) idim = 2; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg + 1, "Unknown compute chunk/atom bound argument {}", arg[iarg + 1]); minflag[idim] = COORD; if (strcmp(arg[iarg + 2], "lower") == 0) minflag[idim] = LOWER; @@ -260,7 +263,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : maxvalue[idim] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); iarg += 4; } else if (strcmp(arg[iarg], "units") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom units", error); if (strcmp(arg[iarg + 1], "box") == 0) scaleflag = BOX; else if (strcmp(arg[iarg + 1], "lattice") == 0) @@ -268,14 +271,14 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg + 1], "reduced") == 0) scaleflag = REDUCED; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg + 1, "Unknown compute chunk/atom units argument {}", arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "pbc") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom pbc", error); pbcflag = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; } else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg, "Unknown compute chunk/atom keyword {}", arg[iarg]); } // set nchunkflag and discard to default values if not explicitly set @@ -309,74 +312,82 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) : // error checks if (which == ArgInfo::MOLECULE && !atom->molecule_flag) - error->all(FLERR, "Compute chunk/atom molecule for non-molecular system"); + error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom molecule for non-molecular system"); if (!binflag && discard == MIXED) - error->all(FLERR, - "Compute chunk/atom without bins " - "cannot use discard mixed"); + error->all(FLERR, Error::NOLASTLINE, + "Compute chunk/atom without bins cannot use discard mixed"); if (which == ArgInfo::BIN1D && delta[0] <= 0.0) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/1d command"); if (which == ArgInfo::BIN2D && (delta[0] <= 0.0 || delta[1] <= 0.0)) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/2d command"); if (which == ArgInfo::BIN2D && (dim[0] == dim[1])) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/2d command"); if (which == ArgInfo::BIN3D && (delta[0] <= 0.0 || delta[1] <= 0.0 || delta[2] <= 0.0)) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/3d command"); if (which == ArgInfo::BIN3D && (dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2])) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/3d command"); if (which == ArgInfo::BINSPHERE) { if (domain->dimension == 2 && sorigin_user[2] != 0.0) - error->all(FLERR, "Compute chunk/atom sphere z origin must be 0.0 for 2d"); + error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom sphere z origin must be 0.0 for 2d"); if (sradmin_user < 0.0 || sradmin_user >= sradmax_user || nsbin < 1) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/sphere command"); } if (which == ArgInfo::BINCYLINDER) { - if (delta[0] <= 0.0) error->all(FLERR, "Illegal compute chunk/atom command"); + if (delta[0] <= 0.0) + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/cylinder command"); if (domain->dimension == 2 && dim[0] != 2) - error->all(FLERR, "Compute chunk/atom cylinder axis must be z for 2d"); + error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom cylinder axis must be z for 2d"); if (cradmin_user < 0.0 || cradmin_user >= cradmax_user || ncbin < 1) - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/cylinder command"); } if (which == ArgInfo::COMPUTE) { cchunk = modify->get_compute_by_id(cfvid); - if (!cchunk) error->all(FLERR, "Compute ID {} for compute chunk /atom does not exist", cfvid); + if (!cchunk) + error->all(FLERR, 3, "Compute ID {} for compute chunk /atom does not exist", cfvid); if (cchunk->peratom_flag == 0) - error->all(FLERR, "Compute chunk/atom compute does not calculate per-atom values"); + error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate per-atom values", + cfvid); if ((argindex == 0) && (cchunk->size_peratom_cols != 0)) - error->all(FLERR, "Compute chunk/atom compute does not calculate a per-atom vector"); + error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate a per-atom vector", + cfvid); if (argindex && (cchunk->size_peratom_cols == 0)) - error->all(FLERR, "Compute chunk/atom compute does not calculate a per-atom array"); + error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate a per-atom array", + cfvid); if (argindex && argindex > cchunk->size_peratom_cols) - error->all(FLERR, "Compute chunk/atom compute array is accessed out-of-range"); + error->all(FLERR, 3, "Compute chunk/atom compute {} array is accessed out-of-range{}", cfvid, + utils::errorurl(20)); } if (which == ArgInfo::FIX) { fchunk = modify->get_fix_by_id(cfvid); - if (!fchunk) error->all(FLERR, "Fix ID {} for compute chunk/atom does not exist", cfvid); + if (!fchunk) error->all(FLERR, 3, "Fix ID {} for compute chunk/atom does not exist", cfvid); if (fchunk->peratom_flag == 0) - error->all(FLERR, "Compute chunk/atom fix does not calculate per-atom values"); + error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate per-atom values", cfvid); if (argindex == 0 && fchunk->size_peratom_cols != 0) - error->all(FLERR, "Compute chunk/atom fix does not calculate a per-atom vector"); + error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate a per-atom vector", cfvid); if (argindex && fchunk->size_peratom_cols == 0) - error->all(FLERR, "Compute chunk/atom fix does not calculate a per-atom array"); + error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate a per-atom array", cfvid); if (argindex && argindex > fchunk->size_peratom_cols) - error->all(FLERR, "Compute chunk/atom fix array is accessed out-of-range"); + error->all(FLERR, 3, "Compute chunk/atom fix {} array is accessed out-of-range{}", cfvid, + utils::errorurl(20)); } if (which == ArgInfo::VARIABLE) { int ivariable = input->variable->find(cfvid); - if (ivariable < 0) error->all(FLERR, "Variable name for compute chunk/atom does not exist"); + if (ivariable < 0) + error->all(FLERR, 3, "Variable name {} for compute chunk/atom does not exist", cfvid); if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR, "Compute chunk/atom variable is not atom-style variable"); + error->all(FLERR, 3, "Compute chunk/atom variable {} is not atom-style variable", cfvid); } // setup scaling if (binflag) { if (domain->triclinic == 1 && scaleflag != REDUCED) - error->all(FLERR, "Compute chunk/atom for triclinic boxes requires units reduced"); + error->all(FLERR, Error::NOLASTLINE, + "Compute chunk/atom for triclinic boxes requires units reduced"); } if (scaleflag == LATTICE) { @@ -512,20 +523,27 @@ void ComputeChunkAtom::init() if (regionflag) { region = domain->get_region_by_id(idregion); - if (!region) error->all(FLERR, "Region {} for compute chunk/atom does not exist", idregion); + if (!region) + error->all(FLERR, Error::NOLASTLINE, "Region {} for compute chunk/atom does not exist", + idregion); } // set compute,fix,variable if (which == ArgInfo::COMPUTE) { cchunk = modify->get_compute_by_id(cfvid); - if (!cchunk) error->all(FLERR, "Compute ID {} for compute chunk/atom does not exist", cfvid); + if (!cchunk) + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute chunk/atom does not exist", + cfvid); } else if (which == ArgInfo::FIX) { fchunk = modify->get_fix_by_id(cfvid); - if (!fchunk) error->all(FLERR, "Fix ID {} for compute chunk/atom does not exist", cfvid); + if (!fchunk) + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute chunk/atom does not exist", + cfvid); } else if (which == ArgInfo::VARIABLE) { int ivariable = input->variable->find(cfvid); - if (ivariable < 0) error->all(FLERR, "Variable name for compute chunk/atom does not exist"); + if (ivariable < 0) + error->all(FLERR, Error::NOLASTLINE, "Variable name for compute chunk/atom does not exist"); vchunk = ivariable; } @@ -540,7 +558,8 @@ void ComputeChunkAtom::init() if (molecule[i] > maxone) maxone = molecule[i]; tagint maxall; MPI_Allreduce(&maxone, &maxall, 1, MPI_LMP_TAGINT, MPI_MAX, world); - if (maxall > MAXSMALLINT) error->all(FLERR, "Molecule IDs too large for compute chunk/atom"); + if (maxall > MAXSMALLINT) + error->all(FLERR, Error::NOLASTLINE, "Molecule IDs too large for compute chunk/atom"); } // for binning, if nchunkflag not already set, set it to ONCE or EVERY @@ -560,7 +579,7 @@ void ComputeChunkAtom::init() // can't check until now since nchunkflag may have been adjusted in init() if (idsflag == ONCE && nchunkflag != ONCE) - error->all(FLERR, "Compute chunk/atom ids once but nchunk is not once"); + error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom ids once but nchunk is not once"); // create/destroy fix STORE for persistent chunk IDs as needed // need to do this if idsflag = ONCE or locks will be used by other commands @@ -658,9 +677,8 @@ void ComputeChunkAtom::lock(Fix *fixptr, bigint startstep, bigint stopstep) } if (startstep != lockstart || stopstep != lockstop) - error->all(FLERR, - "Two fix commands using " - "same compute chunk/atom command in incompatible ways"); + error->all(FLERR, Error::NOLASTLINE, + "Two fix commands using same compute chunk/atom command in incompatible ways"); // set lock to last calling Fix, since it will be last to unlock() @@ -910,7 +928,9 @@ void ComputeChunkAtom::assign_chunk_ids() if (regionflag) { region = domain->get_region_by_id(idregion); - if (!region) error->all(FLERR, "Region {} for compute chunk/atom does not exist", idregion); + if (!region) + error->all(FLERR, Error::NOLASTLINE, "Region {} for compute chunk/atom does not exist", + idregion); region->prematch(); } @@ -989,9 +1009,9 @@ void ComputeChunkAtom::assign_chunk_ids() } else if (which == ArgInfo::FIX) { if (update->ntimestep % fchunk->peratom_freq) - error->all(FLERR, - "Fix used in compute chunk/atom not " - "computed at compatible time"); + error->all(FLERR, Error::NOLASTLINE, + "Fix used in compute chunk/atom not computed at compatible time" + + utils::errorurl(7)); if (argindex == 0) { double *vec = fchunk->vector_atom; @@ -1245,7 +1265,7 @@ int ComputeChunkAtom::setup_xyz_bins() hi = origin[m] - n * delta[m]; } - if (lo > hi) error->all(FLERR, "Invalid bin bounds in compute chunk/atom"); + if (lo > hi) error->all(FLERR, Error::NOLASTLINE, "Invalid bin bounds in compute chunk/atom"); offset[m] = lo; nlayers[m] = static_cast((hi - lo) * invdelta[m] + 0.5); @@ -1324,9 +1344,8 @@ int ComputeChunkAtom::setup_sphere_bins() if (periodicity[1] && sradmax > prd_half[1]) flag = 1; if (domain->dimension == 3 && periodicity[2] && sradmax > prd_half[2]) flag = 1; if (flag) - error->all(FLERR, - "Compute chunk/atom bin/sphere radius " - "is too large for periodic box"); + error->all(FLERR, Error::NOLASTLINE, + "Compute chunk/atom bin/sphere radius is too large for periodic box"); } sinvrad = nsbin / (sradmax - sradmin); @@ -1388,9 +1407,8 @@ int ComputeChunkAtom::setup_cylinder_bins() if (periodicity[cdim1] && sradmax > prd_half[cdim1]) flag = 1; if (periodicity[cdim2] && sradmax > prd_half[cdim2]) flag = 1; if (flag) - error->all(FLERR, - "Compute chunk/atom bin/cylinder radius " - "is too large for periodic box"); + error->all(FLERR, Error::NOLASTLINE, + "Compute chunk/atom bin/cylinder radius is too large for periodic box"); } cinvrad = ncbin / (cradmax - cradmin); @@ -2002,7 +2020,7 @@ void ComputeChunkAtom::atom2bincylinder() void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim) { - if (narg < iarg + 3) error->all(FLERR, "Illegal compute chunk/atom command"); + if (narg < iarg + 3) utils::missing_cmd_args(FLERR, "compute chunk/atom", error); if (strcmp(arg[iarg], "x") == 0) dim[idim] = 0; else if (strcmp(arg[iarg], "y") == 0) @@ -2010,10 +2028,10 @@ void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim) else if (strcmp(arg[iarg], "z") == 0) dim[idim] = 2; else - error->all(FLERR, "Illegal compute chunk/atom command"); + error->all(FLERR, iarg, "Illegal compute chunk/atom dimension {}", arg[iarg]); if (dim[idim] == 2 && domain->dimension == 2) - error->all(FLERR, "Cannot use compute chunk/atom bin z for 2d model"); + error->all(FLERR, iarg, "Cannot use compute chunk/atom bin z for 2d model"); if (strcmp(arg[iarg + 1], "lower") == 0) originflag[idim] = LOWER; diff --git a/src/compute_chunk_spread_atom.cpp b/src/compute_chunk_spread_atom.cpp index 53b8517c22..5c47b7770e 100644 --- a/src/compute_chunk_spread_atom.cpp +++ b/src/compute_chunk_spread_atom.cpp @@ -34,7 +34,7 @@ ComputeChunkSpreadAtom:: ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), idchunk(nullptr) { - if (narg < 5) error->all(FLERR,"Illegal compute chunk/spread/atom command"); + if (narg < 5) utils::missing_cmd_args(FLERR,"compute chunk/spread/atom", error); // ID of compute chunk/atom @@ -43,10 +43,12 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : // expand args if any have wildcard character "*" - int iarg = 4; + const int ioffset = 4; + int iarg = ioffset; int expand = 0; char **earg; - int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp); + int *amap = nullptr; + int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp,&amap); if (earg != &arg[iarg]) expand = 1; arg = earg; @@ -60,11 +62,13 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : value_t val; val.which = argi.get_type(); val.argindex = argi.get_index1(); + if (expand) val.iarg = amap[iarg] + ioffset; + else val.iarg = iarg + ioffset; val.id = argi.get_name(); val.val.c = nullptr; if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR,"Illegal compute chunk/spread/atom argument: {}", arg[iarg]); + error->all(FLERR, val.iarg, "Illegal compute chunk/spread/atom argument: {}", arg[iarg]); values.push_back(val); } @@ -84,41 +88,48 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : if (val.which == ArgInfo::COMPUTE) { auto icompute = modify->get_compute_by_id(val.id); if (!icompute) - error->all(FLERR,"Compute ID {} for compute chunk/spread/atom does not exist", val.id); + error->all(FLERR, val.iarg, "Compute ID {} for compute chunk/spread/atom does not exist", + val.id); if (!utils::strmatch(icompute->style,"/chunk$")) - error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate per-chunk values", + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom compute {} does not calculate per-chunk values", val.id); if (val.argindex == 0) { if (!icompute->vector_flag) - error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate global vector", + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom compute {} does not calculate global vector", val.id); } else { if (!icompute->array_flag) - error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate global array", + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom compute {} does not calculate global array", val.id); if (val.argindex > icompute->size_array_cols) - error->all(FLERR,"Compute chunk/spread/atom compute {} array is accessed out-of-range", - val.id); + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom compute {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } val.val.c = icompute; } else if (val.which == ArgInfo::FIX) { auto ifix = modify->get_fix_by_id(val.id); if (!ifix) - error->all(FLERR,"Fix ID {} for compute chunk/spread/atom does not exist", val.id); + error->all(FLERR, val.iarg, + "Fix ID {} for compute chunk/spread/atom does not exist", val.id); if (val.argindex == 0) { if (!ifix->vector_flag) - error->all(FLERR,"Compute chunk/spread/atom {} fix does not calculate global vector", - val.id); + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom {} fix does not calculate global vector", val.id); } else { if (!ifix->array_flag) - error->all(FLERR,"Compute chunk/spread/atom {} fix does not calculate global array", - val.id); + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom {} fix does not calculate global array", val.id); if (val.argindex > ifix->size_array_cols) - error->all(FLERR,"Compute chunk/spread/atom fix {} array is accessed out-of-range", - val.id); + error->all(FLERR, val.iarg, + "Compute chunk/spread/atom fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } } } @@ -158,12 +169,14 @@ void ComputeChunkSpreadAtom::init() if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR,"Compute ID {} for compute chunk/spread/atom does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, + "Compute ID {} for compute chunk/spread/atom does not exist", val.id); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) - error->all(FLERR,"Fix ID {} for compute chunk/spread/atom does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, + "Fix ID {} for compute chunk/spread/atom does not exist", val.id); } } } @@ -174,10 +187,12 @@ void ComputeChunkSpreadAtom::init_chunk() { cchunk = dynamic_cast(modify->get_compute_by_id(idchunk)); if (!cchunk) - error->all(FLERR,"Chunk/atom compute {} does not exist for compute chunk/spread/atom " + error->all(FLERR, Error::NOLASTLINE, + "Chunk/atom compute {} does not exist for compute chunk/spread/atom " "or is of invalid style", idchunk); if (strcmp(cchunk->style,"chunk/atom") != 0) - error->all(FLERR,"Compute chunk/spread/atom {} does not use chunk/atom compute", idchunk); + error->all(FLERR, Error::NOLASTLINE, + "Compute chunk/spread/atom {} does not use chunk/atom compute", idchunk); } /* ---------------------------------------------------------------------- */ @@ -273,8 +288,9 @@ void ComputeChunkSpreadAtom::compute_peratom() } else if (val.which == ArgInfo::FIX) { Fix *fix = val.val.f; if (update->ntimestep % fix->global_freq) - error->all(FLERR,"Fix {} used in compute chunk/spread/atom not computed at compatible time", - val.id); + error->all(FLERR, Error::NOLASTLINE, + "Fix {} used in compute chunk/spread/atom not computed at compatible time{}", + val.id, utils::errorurl(7)); if (val.argindex == 0) { int nfix = fix->size_vector; diff --git a/src/compute_chunk_spread_atom.h b/src/compute_chunk_spread_atom.h index 4ea88e89ec..7ec646d0e5 100644 --- a/src/compute_chunk_spread_atom.h +++ b/src/compute_chunk_spread_atom.h @@ -36,6 +36,7 @@ class ComputeChunkSpreadAtom : public Compute { struct value_t { int which; int argindex; + int iarg; std::string id; union { class Compute *c; diff --git a/src/compute_global_atom.cpp b/src/compute_global_atom.cpp index f968d0c014..a68260067e 100644 --- a/src/compute_global_atom.cpp +++ b/src/compute_global_atom.cpp @@ -37,16 +37,18 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) : // process index arg - int iarg = 3; + const int ioffset = 3; + int iarg = ioffset; ArgInfo argi(arg[iarg]); reference.which = argi.get_type(); reference.argindex = argi.get_index1(); reference.id = argi.get_name(); + reference.iarg = iarg; if ((reference.which == ArgInfo::UNKNOWN) || (reference.which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR,"Illegal compute global/atom index property: {}", arg[iarg]); + error->all(FLERR, iarg, "Illegal compute global/atom index property: {}", arg[iarg]); iarg++; @@ -54,7 +56,8 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) : int expand = 0; char **earg; - int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp); + int *amap = nullptr; + int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp,&amap); if (earg != &arg[iarg]) expand = 1; arg = earg; @@ -69,12 +72,14 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) : value_t val; val.which = argi2.get_type(); val.argindex = argi2.get_index1(); + if (expand) val.iarg = amap[iarg] + ioffset; + else val.iarg = iarg + ioffset; val.id = argi2.get_name(); val.val.c = nullptr; if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi2.get_dim() > 1)) - error->all(FLERR,"Illegal compute global/atom global property: {}", arg[iarg]); + error->all(FLERR, val.iarg, "Illegal compute global/atom global property: {}", arg[iarg]); values.push_back(val); } @@ -91,85 +96,92 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) : if (reference.which == ArgInfo::COMPUTE) { reference.val.c = modify->get_compute_by_id(reference.id); if (!reference.val.c) - error->all(FLERR,"Compute ID {} for compute global/atom index", reference.id); + error->all(FLERR,reference.iarg,"Compute ID {} for compute global/atom index",reference.id); if (!reference.val.c->peratom_flag) - error->all(FLERR,"Compute global/atom compute {} does not calculate a per-atom " - "vector or array", reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom compute {} does not calculate a " + "per-atom vector or array", reference.id); if ((reference.argindex == 0) && (reference.val.c->size_peratom_cols != 0)) - error->all(FLERR,"Compute global/atom compute {} does not calculate a per-atom " - "vector", reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom compute {} does not calculate a " + "per-atom vector", reference.id); if (reference.argindex && (reference.val.c->size_peratom_cols == 0)) - error->all(FLERR,"Compute global/atom compute does not calculate a per-atom " + error->all(FLERR, reference.iarg, "Compute global/atom compute does not calculate a per-atom " "array", reference.id); if (reference.argindex && (reference.argindex > reference.val.c->size_peratom_cols)) - error->all(FLERR, "Compute global/atom compute array {} is accessed out-of-range", - reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom compute array {} is accessed " + "out-of-range{}", reference.id, utils::errorurl(20)); } else if (reference.which == ArgInfo::FIX) { reference.val.f =modify->get_fix_by_id(reference.id); if (!reference.val.f) - error->all(FLERR,"Fix ID {} for compute global/atom does not exist", reference.id); + error->all(FLERR, reference.iarg, "Fix ID {} for compute global/atom does not exist", + reference.id); if (!reference.val.f->peratom_flag) - error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom vector " - "or array", reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom " + "vector or array", reference.id); if (reference.argindex == 0 && (reference.val.f->size_peratom_cols != 0)) - error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom vector", - reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom " + "vector", reference.id); if (reference.argindex && (reference.val.f->size_peratom_cols == 0)) - error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom array", - reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom " + "array", reference.id); if (reference.argindex && (reference.argindex > reference.val.f->size_peratom_cols)) - error->all(FLERR, "Compute global/atom fix {} array is accessed out-of-range", reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom fix {} array is accessed " + "out-of-range{}", reference.id, utils::errorurl(20)); } else if (reference.which == ArgInfo::VARIABLE) { reference.val.v = input->variable->find(reference.id.c_str()); if (reference.val.v < 0) - error->all(FLERR,"Variable name {} for compute global/atom index does not exist", - reference.id); + error->all(FLERR, reference.iarg, "Variable name {} for compute global/atom index does " + "not exist", reference.id); if (input->variable->atomstyle(reference.val.v) == 0) - error->all(FLERR,"Compute global/atom index variable {} is not atom-style variable", - reference.id); + error->all(FLERR, reference.iarg, "Compute global/atom index variable {} is not atom-style " + "variable", reference.id); } for (auto &val : values) { if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR,"Compute ID {} for compute global/atom does not exist", val.id); + error->all(FLERR, val.iarg, "Compute ID {} for compute global/atom does not exist", val.id); if (val.argindex == 0) { if (!val.val.c->vector_flag) - error->all(FLERR,"Compute ID {} for global/atom compute does not calculate " + error->all(FLERR, val.iarg, "Compute ID {} for global/atom compute does not calculate " "a global vector", val.id); } else { if (!val.val.c->array_flag) - error->all(FLERR,"Compute ID {} for global/atom compute does not calculate " + error->all(FLERR, val.iarg, "Compute ID {} for global/atom compute does not calculate " "a global array", val.id); if (val.argindex > val.val.c->size_array_cols) - error->all(FLERR,"Compute global/atom compute {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute global/atom compute {} array is accessed " + "out-of-range{}", val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR,"Fix ID {} for compute global/atom does not exist", val.id); + if (!val.val.f) + error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom does not exist", val.id); if (val.argindex == 0) { if (!val.val.f->vector_flag) - error->all(FLERR,"Fix ID {} for compute global/atom compute does not calculate " - "a global vector", val.id); + error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom compute does not " + "calculate a global vector", val.id); } else { if (!val.val.f->array_flag) - error->all(FLERR,"Fix ID {} for compute global/atom compute does not calculate " - "a global array", val.id); + error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom compute does not " + "calculate a global array", val.id); if (val.argindex > val.val.f->size_array_cols) - error->all(FLERR,"Compute global/atom fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute global/atom fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR,"Variable name {} for compute global/atom does not exist", val.id); + error->all(FLERR, val.iarg, "Variable name {} for compute global/atom does not exist", + val.id); if (input->variable->vectorstyle(val.val.v) == 0) - error->all(FLERR,"Compute global/atom variable {} is not vector-style variable", val.id); + error->all(FLERR, val.iarg, "Compute global/atom variable {} is not vector-style variable", + val.id); } } @@ -203,33 +215,38 @@ void ComputeGlobalAtom::init() if (reference.which == ArgInfo::COMPUTE) { reference.val.c = modify->get_compute_by_id(reference.id); if (!reference.val.c) - error->all(FLERR,"Compute ID {} for compute global/atom index does not exist", reference.id); + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute global/atom index does not " + "exist", reference.id); } else if (reference.which == ArgInfo::FIX) { reference.val.f = modify->get_fix_by_id(reference.id); if (reference.val.f) - error->all(FLERR,"Fix ID {} for compute global/atom index does not exist", reference.id); + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute global/atom index does not exist", + reference.id); } else if (reference.which == ArgInfo::VARIABLE) { reference.val.v = input->variable->find(reference.id.c_str()); if (reference.val.v < 0) - error->all(FLERR,"Variable name {} for compute global/atom index does not exist", - reference.id); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute global/atom index does " + "not exist", reference.id); } for (auto &val : values) { if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR,"Compute ID {} for compute global/atom does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute global/atom does not exist", + val.id); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) - error->all(FLERR,"Fix ID {} for compute global/atom does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute global/atom does not exist", + val.id); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR,"Variable name {} for compute global/atom does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute global/atom does not " + "exist", val.id); } } } @@ -288,8 +305,8 @@ void ComputeGlobalAtom::compute_peratom() } else if (reference.which == ArgInfo::FIX) { if (update->ntimestep % reference.val.f->peratom_freq) - error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time", - reference.id); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed at " + "compatible time{}", reference.id, utils::errorurl(7)); if (reference.argindex == 0) { double *fix_vector = reference.val.f->vector_atom; @@ -334,8 +351,8 @@ void ComputeGlobalAtom::compute_peratom() } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time", - val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed " + "at compatible time{}", val.id, utils::errorurl(7)); vmax = reference.val.f->size_vector; if (vmax > maxvector) { @@ -401,8 +418,8 @@ void ComputeGlobalAtom::compute_peratom() } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time", - val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed " + "at compatible time{}", val.id, utils::errorurl(7)); vmax = val.val.f->size_array_rows; if (vmax > maxvector) { diff --git a/src/compute_global_atom.h b/src/compute_global_atom.h index b8d49bf7a5..909be7b20b 100644 --- a/src/compute_global_atom.h +++ b/src/compute_global_atom.h @@ -36,6 +36,7 @@ class ComputeGlobalAtom : public Compute { struct value_t { int which; int argindex; + int iarg; std::string id; union { class Compute *c; diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 6c4bafab4f..622e568200 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -79,7 +79,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(style, "reduce/region") == 0) { if (narg < 6) utils::missing_cmd_args(FLERR, "compute reduce/region", error); if (!domain->get_region_by_id(arg[3])) - error->all(FLERR, "Region {} for compute reduce/region does not exist", arg[3]); + error->all(FLERR, 3, "Region {} for compute reduce/region does not exist", arg[3]); idregion = utils::strdup(arg[3]); iarg = 4; } @@ -105,7 +105,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg], "minabs") == 0) mode = MINABS; else - error->all(FLERR, "Unknown compute {} mode: {}", style, arg[iarg]); + error->all(FLERR, iarg, "Unknown compute {} mode: {}", style, arg[iarg]); iarg++; if (mode == SUM || mode == SUMSQ || mode == SUMABS) { @@ -124,9 +124,12 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : // expand args if any have wildcard character "*" + int ioffset = iarg; int expand = 0; char **earg; - int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp); + char **oarg = arg; + int *amap = nullptr; + int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp, &amap); if (earg != &arg[iarg]) expand = 1; arg = earg; @@ -140,6 +143,8 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : val.id = ""; val.val.c = nullptr; + if (expand) val.iarg = amap[iarg] + ioffset; + else val.iarg = iarg + ioffset; if (strcmp(arg[iarg], "x") == 0) { val.which = ArgInfo::X; @@ -180,7 +185,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : val.id = argi.get_name(); if ((val.which == ArgInfo::UNKNOWN) || (argi.get_dim() > 1)) - error->all(FLERR, "Illegal compute {} argument: {}", style, arg[iarg]); + error->all(FLERR, val.iarg, "Illegal compute {} argument: {}", style, arg[iarg]); if (val.which == ArgInfo::NONE) break; } @@ -196,31 +201,42 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : std::string mycmd = "compute "; mycmd += style; + for (int i = 0; i < narg; ++i) { + if (strcmp(oarg[i],arg[nvalues]) == 0) + ioffset = i - nvalues; + } for (int iarg = nvalues; iarg < nargnew; iarg++) { + int errptr = iarg + ioffset; if (strcmp(arg[iarg], "replace") == 0) { - if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, mycmd + " replace", error); + if (iarg + 3 > nargnew) utils::missing_cmd_args(FLERR, mycmd + " replace", error); if (mode != MINN && mode != MAXX) - error->all(FLERR, "Compute {} replace requires min or max mode", style); + error->all(FLERR, errptr, "Compute {} replace requires min or max mode", style); int col1 = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; int col2 = utils::inumeric(FLERR, arg[iarg + 2], false, lmp) - 1; if ((col1 < 0) || (col1 >= nvalues)) - error->all(FLERR, "Invalid compute {} replace first column index {}", style, col1); + error->all(FLERR, errptr + 1, "Invalid compute {} replace first column index {}", + style, col1); if ((col2 < 0) || (col2 >= nvalues)) - error->all(FLERR, "Invalid compute {} replace second column index {}", style, col2); - if (col1 == col2) error->all(FLERR, "Compute {} replace columns must be different"); + error->all(FLERR, errptr + 2, "Invalid compute {} replace second column index {}", + style, col2); + if (col1 == col2) error->all(FLERR, errptr, "Compute {} replace columns must be different"); if ((replace[col1] >= 0) || (replace[col2] >= 0)) - error->all(FLERR, "Compute {} replace column already used for another replacement"); + error->all(FLERR, errptr, + "Compute {} replace column already used for another replacement"); replace[col1] = col2; iarg += 2; } else if (strcmp(arg[iarg], "inputs") == 0) { - if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, mycmd + " inputs", error); + if (iarg + 2 > nargnew) utils::missing_cmd_args(FLERR, mycmd + " inputs", error); if (strcmp(arg[iarg + 1], "peratom") == 0) input_mode = PERATOM; else if (strcmp(arg[iarg + 1], "local") == 0) input_mode = LOCAL; + else + error->all(FLERR, errptr + 1, "Unknown compute {} inputs argument: {}", style, + arg[iarg + 1]); iarg += 1; } else - error->all(FLERR, "Unknown compute {} keyword: {}", style, arg[iarg]); + error->all(FLERR, errptr, "Unknown compute {} keyword: {}", style, arg[iarg]); } // delete replace list if not set @@ -244,72 +260,87 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : for (auto &val : values) { if (val.which == ArgInfo::X || val.which == ArgInfo::V || val.which == ArgInfo::F) { - if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local"); + if (input_mode == LOCAL) + error->all(FLERR, Error::NOPOINTER, "Compute {} inputs must be all local"); } else if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR, "Compute ID {} for compute {} does not exist", val.id, style); + error->all(FLERR, val.iarg, "Compute ID {} for compute {} does not exist", val.id, style); if (input_mode == PERATOM) { if (!val.val.c->peratom_flag) - error->all(FLERR, "Compute {} compute {} does not calculate per-atom values", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate per-atom values", + style, val.id); if (val.argindex == 0 && val.val.c->size_peratom_cols != 0) - error->all(FLERR, "Compute {} compute {} does not calculate a per-atom vector", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a per-atom vector", + style, val.id); if (val.argindex && val.val.c->size_peratom_cols == 0) - error->all(FLERR, "Compute {} compute {} does not calculate a per-atom array", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a per-atom array", + style, val.id); if (val.argindex && val.argindex > val.val.c->size_peratom_cols) - error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} array is accessed out-of-range{}", + style, val.id, utils::errorurl(20)); } else if (input_mode == LOCAL) { if (!val.val.c->local_flag) - error->all(FLERR, "Compute {} compute {} does not calculate local values", style, val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate local values", + style, val.id); if (val.argindex == 0 && val.val.c->size_local_cols != 0) - error->all(FLERR, "Compute {} compute {} does not calculate a local vector", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a local vector", + style, val.id); if (val.argindex && val.val.c->size_local_cols == 0) - error->all(FLERR, "Compute {} compute {} does not calculate a local array", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a local array", + style, val.id); if (val.argindex && val.argindex > val.val.c->size_local_cols) - error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id); + error->all(FLERR, val.iarg, "Compute {} compute {} array is accessed out-of-range{}", + style, val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR, "Fix ID {} for compute {} does not exist", val.id, style); + if (!val.val.f) + error->all(FLERR, val.iarg, "Fix ID {} for compute {} does not exist", val.id, style); if (input_mode == PERATOM) { if (!val.val.f->peratom_flag) - error->all(FLERR, "Compute {} fix {} does not calculate per-atom values", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate per-atom values", + style, val.id); if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0)) - error->all(FLERR, "Compute {} fix {} does not calculate a per-atom vector", style, - val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom vector", + style, val.id); if (val.argindex && (val.val.f->size_peratom_cols == 0)) - error->all(FLERR, "Compute {} fix {} does not calculate a per-atom array", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom array", + style, val.id); if (val.argindex && (val.argindex > val.val.f->size_peratom_cols)) - error->all(FLERR, "Compute {} fix {} array is accessed out-of-range", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", + style, val.id, utils::errorurl(20)); } else if (input_mode == LOCAL) { if (!val.val.f->local_flag) - error->all(FLERR, "Compute {} fix {} does not calculate local values", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate local values", + style, val.id); if (val.argindex == 0 && (val.val.f->size_local_cols != 0)) - error->all(FLERR, "Compute {} fix {} does not calculate a local vector", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local vector", + style, val.id); if (val.argindex && (val.val.f->size_local_cols == 0)) - error->all(FLERR, "Compute {} fix {} does not calculate a local array", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local array", + style, val.id); if (val.argindex && (val.argindex > val.val.f->size_local_cols)) - error->all(FLERR, "Compute {} fix {} array is accessed out-of-range", style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", + style, val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::VARIABLE) { - if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local"); + if (input_mode == LOCAL) + error->all(FLERR, Error::NOPOINTER, "Compute {} inputs must be all local"); val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute {} does not exist", val.id, style); + error->all(FLERR, val.iarg, "Variable name {} for compute {} does not exist", val.id, + style); if (input->variable->atomstyle(val.val.v) == 0) - error->all(FLERR, "Compute {} variable {} is not atom-style variable", style, val.id); + error->all(FLERR, val.iarg, "Compute {} variable {} is not atom-style variable", style, + val.id); } } @@ -365,16 +396,20 @@ void ComputeReduce::init() if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR, "Compute ID {} for compute {} does not exist", val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute {} does not exist", + val.id, style); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR, "Fix ID {} for compute {} does not exist", val.id, style); + if (!val.val.f) + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute {} does not exist", + val.id, style); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute {} does not exist", val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute {} does not exist", + val.id, style); } } @@ -382,7 +417,9 @@ void ComputeReduce::init() if (idregion) { region = domain->get_region_by_id(idregion); - if (!region) error->all(FLERR, "Region {} for compute reduce/region does not exist", idregion); + if (!region) + error->all(FLERR, Error::NOLASTLINE, "Region {} for compute reduce/region does not exist", + idregion); } } @@ -586,7 +623,8 @@ double ComputeReduce::compute_one(int m, int flag) } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR, "Fix {} used in compute {} not computed at compatible time", val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute {} not computed at " + "compatible time{}", val.id, style, utils::errorurl(7)); if (input_mode == PERATOM) { if (aidx == 0) { diff --git a/src/compute_reduce.h b/src/compute_reduce.h index f8b652e00c..ce575a4368 100644 --- a/src/compute_reduce.h +++ b/src/compute_reduce.h @@ -41,6 +41,7 @@ class ComputeReduce : public Compute { struct value_t { int which; int argindex; + int iarg; std::string id; union { class Compute *c; diff --git a/src/compute_reduce_chunk.cpp b/src/compute_reduce_chunk.cpp index 9ba0e30a8d..133932bb63 100644 --- a/src/compute_reduce_chunk.cpp +++ b/src/compute_reduce_chunk.cpp @@ -52,15 +52,17 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[4], "max") == 0) mode = MAXX; else - error->all(FLERR, "Unknown compute reduce/chunk mode: {}", arg[4]); + error->all(FLERR, 4, "Unknown compute reduce/chunk mode: {}", arg[4]); - int iarg = 5; + const int ioffset = 5; + int iarg = ioffset; // expand args if any have wildcard character "*" int expand = 0; char **earg; - int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp); + int *amap = nullptr; + int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp, &amap); if (earg != &arg[iarg]) expand = 1; arg = earg; @@ -74,11 +76,13 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : value_t val; val.which = argi.get_type(); val.argindex = argi.get_index1(); + if (expand) val.iarg = amap[iarg] + ioffset; + else val.iarg = iarg + ioffset; val.id = argi.get_name(); val.val.c = nullptr; if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR, "Illegal compute reduce/chunk argument: {}", arg[iarg]); + error->all(FLERR, val.iarg, "Illegal compute reduce/chunk argument: {}", arg[iarg]); values.push_back(val); } @@ -96,40 +100,46 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR, "Compute ID {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, val.iarg, "Compute ID {} for compute reduce/chunk does not exist", + val.id); if (!val.val.c->peratom_flag) - error->all(FLERR, "Compute reduce/chunk compute {} does not calculate per-atom values", - val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate per-atom " + "values", val.id); if ((val.argindex == 0) && (val.val.c->size_peratom_cols != 0)) - error->all(FLERR, "Compute reduce/chunk compute {} does not calculate a per-atom vector", - val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate a " + "per-atom vector", val.id); if (val.argindex && (val.val.c->size_peratom_cols == 0)) - error->all(FLERR, "Compute reduce/chunk compute {} does not calculate a per-atom array", - val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate a " + "per-atom array", val.id); if (val.argindex && (val.argindex > val.val.c->size_peratom_cols)) - error->all(FLERR, "Compute reduce/chunk compute array {} is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk compute array {} is accessed " + "out-of-range{}", val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) - error->all(FLERR, "Fix ID {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, val.iarg, "Fix ID {} for compute reduce/chunk does not exist", val.id); if (!val.val.f->peratom_flag) - error->all(FLERR, "Compute reduce/chunk fix {} does not calculate per-atom values", val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate per-atom " + "values", val.id); if ((val.argindex == 0) && (val.val.f->size_peratom_cols != 0)) - error->all(FLERR, "Compute reduce/chunk fix {} does not calculate a per-atom vector", - val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate a per-atom " + "vector", val.id); if (val.argindex && (val.val.f->size_peratom_cols == 0)) - error->all(FLERR, "Compute reduce/chunk fix {} does not calculate a per-atom array", - val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate a per-atom " + "array", val.id); if (val.argindex && (val.argindex > val.val.f->size_peratom_cols)) - error->all(FLERR, "Compute reduce/chunk fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, val.iarg, "Variable name {} for compute reduce/chunk does not exist", + val.id); if (input->variable->atomstyle(val.val.v) == 0) - error->all(FLERR, "Compute reduce/chunk variable is not atom-style variable"); + error->all(FLERR, val.iarg, "Compute reduce/chunk variable {} is not atom-style variable", + val.id); } } @@ -186,17 +196,20 @@ void ComputeReduceChunk::init() if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR, "Compute ID {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, + "Compute ID {} for compute reduce/chunk does not exist", val.id); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) - error->all(FLERR, "Fix ID {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute reduce/chunk does not exist", + val.id); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute reduce/chunk does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute reduce/chunk does not " + "exist", val.id); } } } @@ -317,7 +330,8 @@ void ComputeReduceChunk::compute_one(int m, double *vchunk, int nstride) } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR, "Fix used in compute reduce/chunk not computed at compatible time"); + error->all(FLERR, Error::NOLASTLINE, "Fix used in compute reduce/chunk not computed at " + "compatible time{}", utils::errorurl(7)); if (val.argindex == 0) { double *vfix = val.val.f->vector_atom; diff --git a/src/compute_reduce_chunk.h b/src/compute_reduce_chunk.h index 4055956d2d..18cbe40526 100644 --- a/src/compute_reduce_chunk.h +++ b/src/compute_reduce_chunk.h @@ -38,6 +38,7 @@ class ComputeReduceChunk : public ComputeChunk { struct value_t { int which; int argindex; + int iarg; std::string id; union { class Compute *c; diff --git a/src/compute_slice.cpp b/src/compute_slice.cpp index 9851c430c4..8a44d2bc8e 100644 --- a/src/compute_slice.cpp +++ b/src/compute_slice.cpp @@ -34,9 +34,10 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar nstop = utils::inumeric(FLERR, arg[4], false, lmp); nskip = utils::inumeric(FLERR, arg[5], false, lmp); - if (nstart < 1) error->all(FLERR, "Invalid compute slice nstart value {} < 1", nstart); - if (nstop < nstart) error->all(FLERR, "Invalid compute slice nstop value {} < {}", nstop, nstart); - if (nskip < 1) error->all(FLERR, "Invalid compute slice nskip value < 1: {}", nskip); + if (nstart < 1) error->all(FLERR, 3, "Invalid compute slice nstart value {} < 1", nstart); + if (nstop < nstart) + error->all(FLERR, 4, "Invalid compute slice nstop value {} < {}", nstop, nstart); + if (nskip < 1) error->all(FLERR, 5, "Invalid compute slice nskip value < 1: {}", nskip); // parse values @@ -47,11 +48,12 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar value_t val; val.which = argi.get_type(); val.argindex = argi.get_index1(); + val.iarg = iarg; val.id = argi.get_name(); val.val.c = nullptr; if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR, "Illegal compute slice argument: {}", arg[iarg]); + error->all(FLERR, iarg, "Illegal compute slice argument: {}", arg[iarg]); values.push_back(val); } @@ -61,49 +63,63 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar for (auto &val : values) { if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); - if (!val.val.c) error->all(FLERR, "Compute ID {} for compute slice does not exist", val.id); + if (!val.val.c) + error->all(FLERR, val.iarg, "Compute ID {} for compute slice does not exist", val.id); if (val.val.c->vector_flag) { if (val.argindex) - error->all(FLERR, "Compute slice compute {} does not calculate a global array", val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate a global array", + val.id); if (nstop > val.val.c->size_vector) - error->all(FLERR, "Compute slice compute {} vector is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.val.c->array_flag) { if (val.argindex == 0) - error->all(FLERR, "Compute slice compute {} does not calculate a global vector", val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate a global vector", + val.id); if (val.argindex > val.val.c->size_array_cols) - error->all(FLERR, "Compute slice compute {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nstop > val.val.c->size_array_rows) - error->all(FLERR, "Compute slice compute {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else { - error->all(FLERR, "Compute slice compute {} does not calculate global vector or array", - val.id); + error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate global vector or " + "array", val.id); } } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR, "Fix ID {} for compute slice does not exist", val.id); + if (!val.val.f) + error->all(FLERR, val.iarg, "Fix ID {} for compute slice does not exist", val.id); if (val.val.f->vector_flag) { if (val.argindex) - error->all(FLERR, "Compute slice fix {} does not calculate a global array", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate a global array", + val.id); if (nstop > val.val.f->size_vector) - error->all(FLERR, "Compute slice fix {} vector is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.val.f->array_flag) { if (val.argindex == 0) - error->all(FLERR, "Compute slice fix {} does not calculate a global vector", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate a global vector", + val.id); if (val.argindex > val.val.f->size_array_cols) - error->all(FLERR, "Compute slice fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nstop > val.val.f->size_array_rows) - error->all(FLERR, "Compute slice fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else { - error->all(FLERR, "Compute slice fix {} does not calculate global vector or array", val.id); + error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate global vector or " + "array", val.id); } } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute slice does not exist", val.id); + error->all(FLERR, val.iarg, "Variable name {} for compute slice does not exist", val.id); if (val.argindex == 0 && input->variable->vectorstyle(val.val.v) == 0) - error->all(FLERR, "Compute slice variable {} is not vector-style variable", val.id); + error->all(FLERR, val.iarg, "Compute slice variable {} is not vector-style variable", + val.id); if (val.argindex) - error->all(FLERR, "Compute slice vector variable {} cannot be indexed", val.id); + error->all(FLERR, val.iarg, "Compute slice vector variable {} cannot be indexed", val.id); } } @@ -195,14 +211,18 @@ void ComputeSlice::init() for (auto &val : values) { if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); - if (!val.val.c) error->all(FLERR, "Compute ID {} for compute slice does not exist", val.id); + if (!val.val.c) + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute slice does not exist", + val.id); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR, "Fix ID {} for compute slice does not exist", val.id); + if (!val.val.f) + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute slice does not exist", val.id); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, "Variable name {} for compute slice does not exist", val.id); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute slice does not exist", + val.id); } } } @@ -267,7 +287,8 @@ void ComputeSlice::extract_one(int m, double *vec, int stride) } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->global_freq) - error->all(FLERR, "Fix {} used in compute slice not computed at compatible time", val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute slice not computed at " + "compatible time{}", val.id, utils::errorurl(7)); if (val.argindex == 0) { int j = 0; @@ -289,7 +310,8 @@ void ComputeSlice::extract_one(int m, double *vec, int stride) } else if (val.which == ArgInfo::VARIABLE) { double *varvec; int nvec = input->variable->compute_vector(val.val.v, &varvec); - if (nvec < nstop) error->all(FLERR, "Compute slice variable {} is not long enough", val.id); + if (nvec < nstop) + error->all(FLERR, Error::NOLASTLINE, "Compute slice variable {} is not long enough", val.id); int j = 0; for (int i = nstart; i < nstop; i += nskip) { vec[j] = varvec[i - 1]; diff --git a/src/compute_slice.h b/src/compute_slice.h index c1575f4fc8..ddb8a7b45e 100644 --- a/src/compute_slice.h +++ b/src/compute_slice.h @@ -36,6 +36,7 @@ class ComputeSlice : public Compute { struct value_t { int which; int argindex; + int iarg; std::string id; union { class Compute *c; diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 5c86b390ac..56836b8446 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -68,13 +68,15 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) : clearstep = 1; nevery = utils::inumeric(FLERR,arg[3],false,lmp); - if (nevery <= 0) error->all(FLERR,"Illegal dump {} command: output frequency must be > 0", style); + if (nevery <= 0) + error->all(FLERR, 3, "Illegal dump {} command: output frequency must be > 0", style); // expand args if any have wildcard character "*" // ok to include trailing optional args, // so long as they do not have "*" between square brackets // nfield may be shrunk below if extra optional args exist + int ioffset = 5; expand = 0; nfield = nargnew = utils::expand_args(FLERR,narg-5,&arg[5],1,earg,lmp); if (earg != &arg[5]) expand = 1; @@ -446,7 +448,8 @@ void DumpCustom::init_style() fix[i] = modify->get_fix_by_id(id_fix[i]); if (!fix[i]) error->all(FLERR,"Could not find dump {} fix ID {}", style, id_fix[i]); if (nevery % fix[i]->peratom_freq) - error->all(FLERR,"Dump {} and fix not computed at compatible times", style); + error->all(FLERR,"Dump {} and fix not computed at compatible times{}", style, + utils::errorurl(7)); } for (i = 0; i < nvariable; i++) { @@ -460,7 +463,7 @@ void DumpCustom::init_style() for (int i = 0; i < ncustom; i++) { icustom = atom->find_custom(id_custom[i],flag,cols); if (icustom < 0) - error->all(FLERR,"Could not find dump {} atom property name", style); + error->all(FLERR, "Could not find dump {} atom property name", style); custom[i] = icustom; if (!flag && !cols) custom_flag[i] = IVEC; else if (flag && !cols) custom_flag[i] = DVEC; @@ -482,7 +485,8 @@ void DumpCustom::init_style() void DumpCustom::write_header(bigint ndump) { - if (!header_choice) error->all(FLERR, "Must not use 'run pre no' after creating a new dump"); + if (!header_choice) + error->all(FLERR, Error::NOLASTLINE, "Must not use 'run pre no' after creating a new dump"); if (multiproc) (this->*header_choice)(ndump); else if (me == 0) (this->*header_choice)(ndump); @@ -742,7 +746,8 @@ int DumpCustom::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", + error->all(FLERR, Error::NOLASTLINE, + "Dump compute ID {} cannot be invoked before initialization by a run", compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) { compute[i]->compute_peratom(); @@ -800,7 +805,7 @@ int DumpCustom::count() nstride = 1; } else if (thresh_array[ithresh] == MOL) { if (!atom->molecule_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); tagint *molecule = atom->molecule; for (i = 0; i < nlocal; i++) dchoose[i] = molecule[i]; @@ -1074,39 +1079,44 @@ int DumpCustom::count() } else if (thresh_array[ithresh] == Q) { if (!atom->q_flag) - error->all(FLERR,"Threshold for an atom property that isn't allocated"); + error->all(FLERR, Error::NOLASTLINE, + "Threshold for an atom property that isn't allocated"); ptr = atom->q; nstride = 1; } else if (thresh_array[ithresh] == MUX) { if (!atom->mu_flag) - error->all(FLERR,"Threshold for an atom property that isn't allocated"); + error->all(FLERR, Error::NOLASTLINE, + "Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][0]; nstride = 4; } else if (thresh_array[ithresh] == MUY) { if (!atom->mu_flag) - error->all(FLERR,"Threshold for an atom property that isn't allocated"); + error->all(FLERR, Error::NOLASTLINE, + "Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][1]; nstride = 4; } else if (thresh_array[ithresh] == MUZ) { if (!atom->mu_flag) - error->all(FLERR,"Threshold for an atom property that isn't allocated"); + error->all(FLERR, Error::NOLASTLINE, + "Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][2]; nstride = 4; } else if (thresh_array[ithresh] == MU) { if (!atom->mu_flag) - error->all(FLERR,"Threshold for an atom property that isn't allocated"); + error->all(FLERR, Error::NOLASTLINE, + "Threshold for an atom property that isn't allocated"); ptr = &atom->mu[0][3]; nstride = 4; } else if (thresh_array[ithresh] == RADIUS) { if (!atom->radius_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = atom->radius; nstride = 1; } else if (thresh_array[ithresh] == DIAMETER) { if (!atom->radius_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); double *radius = atom->radius; for (i = 0; i < nlocal; i++) dchoose[i] = 2.0*radius[i]; @@ -1114,55 +1124,55 @@ int DumpCustom::count() nstride = 1; } else if (thresh_array[ithresh] == OMEGAX) { if (!atom->omega_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->omega[0][0]; nstride = 3; } else if (thresh_array[ithresh] == OMEGAY) { if (!atom->omega_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->omega[0][1]; nstride = 3; } else if (thresh_array[ithresh] == OMEGAZ) { if (!atom->omega_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->omega[0][2]; nstride = 3; } else if (thresh_array[ithresh] == ANGMOMX) { if (!atom->angmom_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->angmom[0][0]; nstride = 3; } else if (thresh_array[ithresh] == ANGMOMY) { if (!atom->angmom_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->angmom[0][1]; nstride = 3; } else if (thresh_array[ithresh] == ANGMOMZ) { if (!atom->angmom_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->angmom[0][2]; nstride = 3; } else if (thresh_array[ithresh] == TQX) { if (!atom->torque_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->torque[0][0]; nstride = 3; } else if (thresh_array[ithresh] == TQY) { if (!atom->torque_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->torque[0][1]; nstride = 3; } else if (thresh_array[ithresh] == TQZ) { if (!atom->torque_flag) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Threshold for an atom property that isn't allocated"); ptr = &atom->torque[0][2]; nstride = 3; diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 7394ec4481..ac09768422 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -19,6 +19,7 @@ #include "domain.h" #include "error.h" #include "fix.h" +#include "input.h" #include "memory.h" #include "modify.h" #include "update.h" @@ -43,10 +44,10 @@ DumpLocal::DumpLocal(LAMMPS *lmp, int narg, char **arg) : clearstep = 1; nevery = utils::inumeric(FLERR,arg[3],false,lmp); - if (nevery <= 0) error->all(FLERR,"Illegal dump local command"); + if (nevery <= 0) error->all(FLERR, 3, "Dump local nevery value {} must be > 0", nevery); if (binary) - error->all(FLERR,"Binary files are not supported with dump local"); + error->all(FLERR, 2, "Binary files are not supported with dump local"); nfield = narg - 5; @@ -170,7 +171,7 @@ void DumpLocal::init_style() columns = utils::strdup(combined); if (sort_flag && sortcol == 0) - error->all(FLERR,"Dump local cannot sort by atom ID"); + error->all(FLERR, Error::NOLASTLINE, "Dump local cannot sort by atom ID"); // format = copy of default or user-specified line format @@ -185,7 +186,7 @@ void DumpLocal::init_style() auto words = utils::split_words(format); if ((int) words.size() < size_one) - error->all(FLERR,"Dump_modify format line is too short: {}", format); + error->all(FLERR, Error::NOLASTLINE, "Dump_modify format line is too short: {}", format); int i=0; for (const auto &word : words) { @@ -218,14 +219,17 @@ void DumpLocal::init_style() for (i = 0; i < ncompute; i++) { compute[i] = modify->get_compute_by_id(id_compute[i]); - if (!compute[i]) error->all(FLERR,"Could not find dump local compute ID {}",id_compute[i]); + if (!compute[i]) + error->all(FLERR, Error::NOLASTLINE, "Could not find dump local compute ID {}",id_compute[i]); } for (i = 0; i < nfix; i++) { fix[i] = modify->get_fix_by_id(id_fix[i]); - if (!fix[i]) error->all(FLERR,"Could not find dump local fix ID {}", id_fix[i]); + if (!fix[i]) + error->all(FLERR, Error::NOLASTLINE, "Could not find dump local fix ID {}", id_fix[i]); if (nevery % fix[i]->local_freq) - error->all(FLERR,"Dump local and fix {} not computed at compatible times", id_fix[i]); + error->all(FLERR, Error::NOLASTLINE, "Dump local and fix {} not computed at " + "compatible times{}", id_fix[i], utils::errorurl(7)); } // open single file, one time only @@ -237,13 +241,17 @@ void DumpLocal::init_style() int DumpLocal::modify_param(int narg, char **arg) { + // determine offset in list of arguments for error pointer. also handle the no match case. + int argoff = 0; + while (input && input->arg[argoff] && (strcmp(input->arg[argoff], arg[0]) != 0)) argoff++; + if (strcmp(arg[0],"label") == 0) { - if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); + if (narg < 2) utils::missing_cmd_args(FLERR,"dump_modify label", error); delete[] label; label = utils::strdup(arg[1]); return 2; } else if (strcmp(arg[0],"format") == 0) { - if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); + if (narg < 2) utils::missing_cmd_args(FLERR, "dump_modify format", error); if (strcmp(arg[1],"none") == 0) { // just clear format_column_user allocated by this dump child class @@ -262,7 +270,7 @@ int DumpLocal::modify_param(int narg, char **arg) // use of &str[1] removes leading '%' from BIGINT_FORMAT string char *ptr = strchr(format_int_user,'d'); if (ptr == nullptr) - error->all(FLERR, "Dump_modify int format does not contain d character"); + error->all(FLERR, argoff + 2, "Dump_modify int format does not contain d character"); char str[8]; snprintf(str,8,"%s",BIGINT_FORMAT); *ptr = '\0'; @@ -276,7 +284,7 @@ int DumpLocal::modify_param(int narg, char **arg) } else { int i = utils::inumeric(FLERR,arg[1],false,lmp) - 1; if (i < 0 || i >= nfield) - error->all(FLERR,"Illegal dump_modify command"); + error->all(FLERR, 1, "Illegal dump_modify format column number {}", i); delete[] format_column_user[i]; format_column_user[i] = utils::strdup(arg[2]); } @@ -330,8 +338,9 @@ int DumpLocal::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", - compute[i]->id); + error->all(FLERR, Error::NOLASTLINE, + "Dump compute ID {} cannot be invoked before initialization by a run", + compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_LOCAL)) { compute[i]->compute_local(); compute[i]->invoked_flag |= Compute::INVOKED_LOCAL; @@ -347,14 +356,14 @@ int DumpLocal::count() for (i = 0; i < ncompute; i++) { if (nmine < 0) nmine = compute[i]->size_local_rows; else if (nmine != compute[i]->size_local_rows) - error->one(FLERR, + error->one(FLERR, Error::NOLASTLINE, "Dump local count is not consistent across input fields"); } for (i = 0; i < nfix; i++) { if (nmine < 0) nmine = fix[i]->size_local_rows; else if (nmine != fix[i]->size_local_rows) - error->one(FLERR, + error->one(FLERR, Error::NOLASTLINE, "Dump local count is not consistent across input fields"); } @@ -442,11 +451,16 @@ void DumpLocal::write_lines(int n, double *mybuf) void DumpLocal::parse_fields(int narg, char **arg) { + // determine offset in list of arguments for error pointer. + int argoff = 0; + while (input && input->arg[argoff] && (strcmp(input->arg[argoff], arg[0]) != 0)) argoff++; + int computefixflag = 0; // customize by adding to if statement for (int iarg = 0; iarg < narg; iarg++) { + int errptr = iarg + argoff; if (strcmp(arg[iarg],"index") == 0) { pack_choice[iarg] = &DumpLocal::pack_index; @@ -470,15 +484,16 @@ void DumpLocal::parse_fields(int narg, char **arg) pack_choice[iarg] = &DumpLocal::pack_compute; icompute = modify->get_compute_by_id(name); - if (!icompute) error->all(FLERR,"Could not find dump local compute ID {}",name); + if (!icompute) error->all(FLERR, errptr, "Could not find dump local compute ID {}", name); if (icompute->local_flag == 0) - error->all(FLERR,"Dump local compute {} does not compute local info", name); + error->all(FLERR, errptr, "Dump local compute {} does not compute local info", name); if (argi.get_dim() == 0 && icompute->size_local_cols > 0) - error->all(FLERR,"Dump local compute {} does not calculate local vector", name); + error->all(FLERR, errptr, "Dump local compute {} does not calculate local vector", name); if (argi.get_index1() > 0 && icompute->size_local_cols == 0) - error->all(FLERR,"Dump local compute {} does not calculate local array", name); + error->all(FLERR, errptr, "Dump local compute {} does not calculate local array", name); if (argi.get_index1() > 0 && argi.get_index1() > icompute->size_local_cols) - error->all(FLERR,"Dump local compute {} vector is accessed out-of-range", name); + error->all(FLERR, errptr, "Dump local compute {} vector is accessed out-of-range{}", + name, utils::errorurl(20)); field2index[iarg] = add_compute(name); break; @@ -490,15 +505,16 @@ void DumpLocal::parse_fields(int narg, char **arg) pack_choice[iarg] = &DumpLocal::pack_fix; ifix = modify->get_fix_by_id(name); - if (!ifix) error->all(FLERR,"Could not find dump local fix ID {}", name); + if (!ifix) error->all(FLERR, errptr, "Could not find dump local fix ID {}", name); if (ifix->local_flag == 0) - error->all(FLERR,"Dump local fix {} does not compute local info", name); + error->all(FLERR, errptr, "Dump local fix {} does not compute local info", name); if (argi.get_dim() == 0 && ifix->size_local_cols > 0) - error->all(FLERR,"Dump local fix {} does not compute local vector", name); + error->all(FLERR, errptr, "Dump local fix {} does not compute local vector", name); if (argi.get_index1() > 0 && ifix->size_local_cols == 0) - error->all(FLERR,"Dump local fix {} does not compute local array", name); + error->all(FLERR, errptr, "Dump local fix {} does not compute local array", name); if (argi.get_index1() > 0 && argi.get_index1() > ifix->size_local_cols) - error->all(FLERR,"Dump local fix {} vector is accessed out-of-range", name); + error->all(FLERR, errptr, "Dump local fix {} vector is accessed out-of-range{}", name, + utils::errorurl(20)); field2index[iarg] = add_fix(name); break; @@ -506,14 +522,14 @@ void DumpLocal::parse_fields(int narg, char **arg) case ArgInfo::NONE: // fallthrough case ArgInfo::UNKNOWN: // fallthrough default: - error->all(FLERR,"Invalid attribute {} in dump local command",arg[iarg]); + error->all(FLERR, errptr, "Invalid attribute {} in dump local command",arg[iarg]); break; } } } if (computefixflag == 0) - error->all(FLERR,"Dump local attributes contain no compute or fix"); + error->all(FLERR, Error::NOPOINTER, "Dump local attributes contain no compute or fix"); } /* ---------------------------------------------------------------------- diff --git a/src/fix_ave_atom.cpp b/src/fix_ave_atom.cpp index 1a578f527e..bd30509e0f 100644 --- a/src/fix_ave_atom.cpp +++ b/src/fix_ave_atom.cpp @@ -127,29 +127,40 @@ FixAveAtom::FixAveAtom(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); - if (!val.val.c) error->all(FLERR, val.iarg, "Compute ID {} for fix ave/atom does not exist", val.id); + if (!val.val.c) + error->all(FLERR, val.iarg, "Compute ID {} for fix ave/atom does not exist", val.id); if (val.val.c->peratom_flag == 0) - error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate per-atom values", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate per-atom values", + val.id); if (val.argindex == 0 && val.val.c->size_peratom_cols != 0) - error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom vector", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom vector", + val.id); if (val.argindex && val.val.c->size_peratom_cols == 0) - error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom array", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom array", + val.id); if (val.argindex && val.argindex > val.val.c->size_peratom_cols) - error->all(FLERR, val.iarg, "Fix ave/atom compute {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom compute {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); - if (!val.val.f) error->all(FLERR, val.iarg, "Fix ID {} for fix ave/atom does not exist", val.id); + if (!val.val.f) + error->all(FLERR, val.iarg, "Fix ID {} for fix ave/atom does not exist", val.id); if (val.val.f->peratom_flag == 0) - error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate per-atom values", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate per-atom values", + val.id); if (val.argindex == 0 && val.val.f->size_peratom_cols != 0) - error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom vector", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom vector", + val.id); if (val.argindex && val.val.f->size_peratom_cols == 0) - error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom array", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom array", + val.id); if (val.argindex && val.argindex > val.val.f->size_peratom_cols) - error->all(FLERR, val.iarg, "Fix ave/atom fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/atom fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->peratom_freq) - error->all(FLERR, val.iarg, "Fix {} for fix ave/atom not computed at compatible time", val.id); + error->all(FLERR, val.iarg, "Fix {} for fix ave/atom not computed at compatible time{}", + val.id, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); diff --git a/src/fix_ave_chunk.cpp b/src/fix_ave_chunk.cpp index e713842872..f2d324a073 100644 --- a/src/fix_ave_chunk.cpp +++ b/src/fix_ave_chunk.cpp @@ -262,32 +262,40 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : if (!val.val.c) error->all(FLERR, val.iarg, "Compute ID {} for fix ave/chunk does not exist",val.id); if (val.val.c->peratom_flag == 0) - error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate per-atom values",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate per-atom values", + val.id); if (val.argindex == 0 && (val.val.c->size_peratom_cols != 0)) - error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom vector",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom vector", + val.id); if (val.argindex && (val.val.c->size_peratom_cols == 0)) - error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom array",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom array", + val.id); if (val.argindex && (val.argindex > val.val.c->size_peratom_cols)) - error->all(FLERR, val.iarg, "Fix ave/chunk compute {} vector is accessed out-of-range",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk compute {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) error->all(FLERR, val.iarg, "Fix ID {} for fix ave/chunk does not exist",val.id); if (val.val.f->peratom_flag == 0) - error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate per-atom values",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate per-atom values", + val.id); if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0)) - error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom vector",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom vector", + val.id); if (val.argindex && (val.val.f->size_peratom_cols == 0)) - error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom array",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom array", + val.id); if (val.argindex && val.argindex > val.val.f->size_peratom_cols) - error->all(FLERR, val.iarg, "Fix ave/chunk fix {} vector is accessed out-of-range",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) - error->all(FLERR, val.iarg, "Variable name {} for fix ave/chunk does not exist",val.id); + error->all(FLERR, val.iarg, "Variable name {} for fix ave/chunk does not exist", val.id); if (input->variable->atomstyle(val.val.v) == 0) - error->all(FLERR, val.iarg, "Fix ave/chunk variable {} is not atom-style variable",val.id); + error->all(FLERR, val.iarg, "Fix ave/chunk variable {} is not atom-style variable", val.id); } } @@ -297,8 +305,8 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : cchunk = dynamic_cast(modify->get_compute_by_id(idchunk)); if (!cchunk) - error->all(FLERR, 6, "Chunk/atom compute {} does not exist or is incorrect style for fix ave/chunk", - idchunk); + error->all(FLERR, 6, "Chunk/atom compute {} does not exist or is incorrect style for " + "fix ave/chunk", idchunk); if ((nrepeat > 1) || (ave == RUNNING) || (ave == WINDOW)) cchunk->lockcount++; lockforever = 0; @@ -445,7 +453,8 @@ void FixAveChunk::init() if (biasflag) { tbias = modify->get_compute_by_id(id_bias); if (!tbias) - error->all(FLERR,"Could not find compute ID {} for temperature bias", id_bias); + error->all(FLERR, Error::NOLASTLINE, "Could not find compute ID {} for temperature bias", + id_bias); } for (auto &val : values) { @@ -460,8 +469,8 @@ void FixAveChunk::init() error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for fix ave/chunk does not exist", val.id); if (nevery % val.val.f->peratom_freq) - error->all(FLERR, Error::NOLASTLINE, "Fix {} for fix ave/chunk not computed at compatible time", - val.id); + error->all(FLERR, Error::NOLASTLINE, "Fix {} for fix ave/chunk not computed at " + "compatible time{}", val.id, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index a48788b777..9b2291b3d9 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -55,9 +55,10 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : // expand args if any have wildcard character "*" - const int ioffset = 6; + int ioffset = 6; int expand = 0; char **earg; + char **oarg = arg; int *amap = nullptr; int nargnew = utils::expand_args(FLERR, narg - ioffset, &arg[ioffset], 0, earg, lmp, &amap); @@ -99,7 +100,12 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : char *title2 = nullptr; char *title3 = nullptr; + for (int i = 0; i < narg; ++i) { + if (strcmp(oarg[i],arg[iarg]) == 0) + ioffset = i - iarg; + } while (iarg < nargnew) { + int errptr = iarg + ioffset; if (strcmp(arg[iarg],"type") == 0) { if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate type", error); if (strcmp(arg[iarg+1],"auto") == 0) type = AUTO; @@ -109,13 +115,13 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg+1],"auto/lower") == 0) type = AUTOLOWER; else if (strcmp(arg[iarg+1],"full") == 0) type = FULL; else if (strcmp(arg[iarg+1], "first") == 0) type = FIRST; - else error->all(FLERR, iarg+1, "Unknown fix ave/correlate type: {}"); + else error->all(FLERR, errptr + 1, "Unknown fix ave/correlate type: {}", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"ave") == 0) { if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate ave", error); if (strcmp(arg[iarg+1],"one") == 0) ave = ONE; else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING; - else error->all(FLERR, iarg+1, "Unknown fix ave/correlate ave mode: {}", arg[iarg+1]); + else error->all(FLERR, errptr+1, "Unknown fix ave/correlate ave mode: {}", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"start") == 0) { if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate start", error); @@ -130,7 +136,7 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : if (comm->me == 0) { fp = fopen(arg[iarg+1],"w"); if (fp == nullptr) - error->one(FLERR, iarg+1, "Cannot open fix ave/correlate file {}:"" {}", arg[iarg+1], + error->one(FLERR, errptr+1, "Cannot open fix ave/correlate file {}:"" {}", arg[iarg+1], utils::getsyserror()); } iarg += 2; @@ -152,7 +158,7 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; - } else error->all(FLERR, iarg, "Unkown fix ave/correlate keyword: {}", arg[iarg]); + } else error->all(FLERR, errptr, "Unkown fix ave/correlate keyword: {}", arg[iarg]); } // setup and error check From 643afe6eff03abcc183a4abf58a7569af3396763 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Mar 2025 20:28:42 -0400 Subject: [PATCH 15/33] fix segfault issue for optional arguments --- src/compute_reduce.cpp | 62 +++++++++++++++++++++------------------ src/fix_ave_correlate.cpp | 10 +++++-- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 622e568200..385e6f300b 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -143,8 +143,10 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : val.id = ""; val.val.c = nullptr; - if (expand) val.iarg = amap[iarg] + ioffset; - else val.iarg = iarg + ioffset; + if (expand) + val.iarg = amap[iarg] + ioffset; + else + val.iarg = iarg + ioffset; if (strcmp(arg[iarg], "x") == 0) { val.which = ArgInfo::X; @@ -201,9 +203,11 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : std::string mycmd = "compute "; mycmd += style; - for (int i = 0; i < narg; ++i) { - if (strcmp(oarg[i],arg[nvalues]) == 0) - ioffset = i - nvalues; + // get argument offset if optional arguments are present + if (nvalues < nargnew) { + for (int i = 0; i < narg; ++i) { + if (strcmp(oarg[i], arg[nvalues]) == 0) ioffset = i - nvalues; + } } for (int iarg = nvalues; iarg < nargnew; iarg++) { int errptr = iarg + ioffset; @@ -214,15 +218,14 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : int col1 = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1; int col2 = utils::inumeric(FLERR, arg[iarg + 2], false, lmp) - 1; if ((col1 < 0) || (col1 >= nvalues)) - error->all(FLERR, errptr + 1, "Invalid compute {} replace first column index {}", - style, col1); + error->all(FLERR, errptr + 1, "Invalid compute {} replace first column index {}", style, + col1); if ((col2 < 0) || (col2 >= nvalues)) - error->all(FLERR, errptr + 2, "Invalid compute {} replace second column index {}", - style, col2); + error->all(FLERR, errptr + 2, "Invalid compute {} replace second column index {}", style, + col2); if (col1 == col2) error->all(FLERR, errptr, "Compute {} replace columns must be different"); if ((replace[col1] >= 0) || (replace[col2] >= 0)) - error->all(FLERR, errptr, - "Compute {} replace column already used for another replacement"); + error->all(FLERR, errptr, "Compute {} replace column already used for another replacement"); replace[col1] = col2; iarg += 2; } else if (strcmp(arg[iarg], "inputs") == 0) { @@ -304,8 +307,8 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : if (input_mode == PERATOM) { if (!val.val.f->peratom_flag) - error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate per-atom values", - style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate per-atom values", style, + val.id); if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0)) error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom vector", style, val.id); @@ -313,22 +316,22 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom array", style, val.id); if (val.argindex && (val.argindex > val.val.f->size_peratom_cols)) - error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", - style, val.id, utils::errorurl(20)); + error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", style, + val.id, utils::errorurl(20)); } else if (input_mode == LOCAL) { if (!val.val.f->local_flag) - error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate local values", - style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate local values", style, + val.id); if (val.argindex == 0 && (val.val.f->size_local_cols != 0)) - error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local vector", - style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local vector", style, + val.id); if (val.argindex && (val.val.f->size_local_cols == 0)) - error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local array", - style, val.id); + error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local array", style, + val.id); if (val.argindex && (val.argindex > val.val.f->size_local_cols)) - error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", - style, val.id, utils::errorurl(20)); + error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}", style, + val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::VARIABLE) { @@ -396,14 +399,14 @@ void ComputeReduce::init() if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); if (!val.val.c) - error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute {} does not exist", - val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute {} does not exist", val.id, + style); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); if (!val.val.f) - error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute {} does not exist", - val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute {} does not exist", val.id, + style); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); @@ -623,8 +626,9 @@ double ComputeReduce::compute_one(int m, int flag) } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute {} not computed at " - "compatible time{}", val.id, style, utils::errorurl(7)); + error->all(FLERR, Error::NOLASTLINE, + "Fix {} used in compute {} not computed at compatible time{}", val.id, style, + utils::errorurl(7)); if (input_mode == PERATOM) { if (aidx == 0) { diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index 9b2291b3d9..bc936ae515 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -100,10 +100,14 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : char *title2 = nullptr; char *title3 = nullptr; - for (int i = 0; i < narg; ++i) { - if (strcmp(oarg[i],arg[iarg]) == 0) - ioffset = i - iarg; + // get argument offset if optional arguments are present + if (iarg < nargnew) { + for (int i = 0; i < narg; ++i) { + if (strcmp(oarg[i],arg[iarg]) == 0) + ioffset = i - iarg; + } } + while (iarg < nargnew) { int errptr = iarg + ioffset; if (strcmp(arg[iarg],"type") == 0) { From e4c96459e53804653b2486dbedeee0f2eb6eb5bb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Mar 2025 06:16:59 -0400 Subject: [PATCH 16/33] flag some more compatible time and out-of-bounds errors with errorurl()s --- src/ADIOS/dump_custom_adios.cpp | 4 +-- src/EXTRA-FIX/fix_ave_correlate_long.cpp | 4 +-- src/VTK/dump_vtk.cpp | 3 ++- src/fix_ave_histo.cpp | 27 ++++++++++++++------- src/fix_ave_time.cpp | 22 +++++++++-------- src/fix_store_state.cpp | 9 ++++--- src/fix_vector.cpp | 11 ++++++--- src/library.cpp | 10 +++++--- src/thermo.cpp | 4 +-- src/utils.cpp | 10 +++++--- src/variable.cpp | 31 ++++++++++++++++-------- 11 files changed, 84 insertions(+), 51 deletions(-) diff --git a/src/ADIOS/dump_custom_adios.cpp b/src/ADIOS/dump_custom_adios.cpp index 4c38a0513b..060a5493f2 100644 --- a/src/ADIOS/dump_custom_adios.cpp +++ b/src/ADIOS/dump_custom_adios.cpp @@ -273,8 +273,8 @@ void DumpCustomADIOS::init_style() fix[i] = modify->get_fix_by_id(id_fix[i]); if (!fix[i]) error->all(FLERR, "Could not find dump custom/adios fix ID {}", id_fix[i]); if (nevery % fix[i]->peratom_freq) - error->all(FLERR, "dump custom/adios and fix {} with ID {} not computed at compatible times", - fix[i]->style, id_fix[i]); + error->all(FLERR, Error::NOLASTLINE, "dump custom/adios and fix {} with ID {} not " + "computed at compatible times{}", fix[i]->style, id_fix[i], utils::errorurl(7)); } int ivariable; diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 4b4ba462b1..8407f62aac 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -244,8 +244,8 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS *lmp, int narg, char **arg) : "Fix ave/correlate/long fix {} vector is accessed out-of-range", val.id); if (nevery % val.val.f->global_freq) error->all(FLERR, val.iarg, - "Fix {} for fix ave/correlate/long not computed at compatible time", - val.id); + "Fix {} for fix ave/correlate/long not computed at compatible time{}", + val.id, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); diff --git a/src/VTK/dump_vtk.cpp b/src/VTK/dump_vtk.cpp index b59ec5beba..8fe8c0f5fb 100644 --- a/src/VTK/dump_vtk.cpp +++ b/src/VTK/dump_vtk.cpp @@ -224,7 +224,8 @@ void DumpVTK::init_style() error->all(FLERR,"Could not find dump vtk fix ID {}", id_fix[i]); } else { if (nevery % fix[i]->peratom_freq) - error->all(FLERR,"Dump vtk and fix ID {} not called at compatible times", id_fix[i]); + error->all(FLERR,"Dump vtk and fix ID {} not called at compatible times{}", id_fix[i], + utils::errorurl(7)); } } diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp index 5059e998fe..f660567545 100644 --- a/src/fix_ave_histo.cpp +++ b/src/fix_ave_histo.cpp @@ -283,7 +283,8 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.c->size_local_cols == 0) error->all(FLERR, val.iarg, "{} compute {} does not calculate a local array", mycmd, val.id); if (val.argindex && val.argindex > val.val.c->size_local_cols) - error->all(FLERR, val.iarg, "{} compute {} array is accessed out-of-range", mycmd, val.id); + error->all(FLERR, val.iarg, "{} compute {} array is accessed out-of-range{}", mycmd, + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX && kind == GLOBAL && mode == SCALAR) { if (val.argindex == 0 && val.val.f->scalar_flag == 0) @@ -291,9 +292,11 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->vector_flag == 0) error->all(FLERR, val.iarg, "{} fix {} does not calculate a global vector", mycmd, val.id); if (val.argindex && val.argindex > val.val.f->size_vector) - error->all(FLERR, val.iarg, "{} fix {} vector is accessed out-of-range", mycmd, val.id); + error->all(FLERR, val.iarg, "{} fix {} vector is accessed out-of-range{}", mycmd, + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time", val.id, mycmd); + error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time{}", + val.id, mycmd, utils::errorurl(7)); } else if (val.which == ArgInfo::FIX && kind == GLOBAL && mode == VECTOR) { if (val.argindex == 0 && val.val.f->vector_flag == 0) @@ -301,9 +304,11 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->array_flag == 0) error->all(FLERR, val.iarg, "{} fix {} does not calculate a global array", mycmd, val.id); if (val.argindex && val.argindex > val.val.f->size_array_cols) - error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range", mycmd, val.id); + error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range{}", mycmd, val.id, + utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time", val.id, mycmd); + error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time{}", + val.id, mycmd, utils::errorurl(7)); } else if (val.which == ArgInfo::FIX && kind == PERATOM) { if (val.val.f->peratom_flag == 0) @@ -313,9 +318,11 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->size_peratom_cols == 0) error->all(FLERR, val.iarg, "{} fix {} does not ""calculate a per-atom array", mycmd, val.id); if (val.argindex && val.argindex > val.val.f->size_peratom_cols) - error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range", mycmd, val.id); + error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range{}", mycmd, val.id, + utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time", val.id, mycmd); + error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time{}", val.id, + mycmd, utils::errorurl(7)); } else if (val.which == ArgInfo::FIX && kind == LOCAL) { if (val.val.f->local_flag == 0) @@ -325,9 +332,11 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->size_local_cols == 0) error->all(FLERR, val.iarg, "{} fix does not calculate a local array", mycmd, val.id); if (val.argindex && val.argindex > val.val.f->size_local_cols) - error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range", mycmd, val.id); + error->all(FLERR, val.iarg, "{} fix {} array is accessed out-of-range{}", mycmd, + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time", val.id, mycmd); + error->all(FLERR, val.iarg, "Fix {} for {} not computed at compatible time{}", val.id, + mycmd, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE && kind == GLOBAL && mode == SCALAR) { if (val.argindex == 0 && input->variable->equalstyle(val.val.v) == 0) diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index 7b5d394cd4..e88ddb987b 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -148,8 +148,8 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, val.iarg, "Fix ave/time compute {} does not calculate a vector", val.id); if (val.argindex && (val.argindex > val.val.c->size_vector) && (val.val.c->size_vector_variable == 0)) - error->all(FLERR, val.iarg, "Fix ave/time compute {} vector is accessed out-of-range", - val.id); + error->all(FLERR, val.iarg, "Fix ave/time compute {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (val.argindex && val.val.c->size_vector_variable) val.varlen = 1; } else if ((val.which == ArgInfo::COMPUTE) && (mode == VECTOR)) { @@ -161,8 +161,8 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && (val.val.c->array_flag == 0)) error->all(FLERR, val.iarg, "Fix ave/time compute {} does not calculate an array", val.id); if (val.argindex && (val.argindex > val.val.c->size_array_cols)) - error->all(FLERR, val.iarg, "Fix ave/time compute {} array is accessed out-of-range", - val.id); + error->all(FLERR, val.iarg, "Fix ave/time compute {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if ((val.argindex == 0) && (val.val.c->size_vector_variable)) val.varlen = 1; if (val.argindex && (val.val.c->size_array_rows_variable)) val.varlen = 1; @@ -176,10 +176,11 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && (val.val.f->size_vector_variable)) error->all(FLERR, val.iarg, "Fix ave/time fix {} vector cannot be variable length", val.id); if (val.argindex && (val.argindex > val.val.f->size_vector)) - error->all(FLERR, val.iarg, "Fix ave/time fix {} vector is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/time fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for fix ave/time not computed at compatible time", - val.id); + error->all(FLERR, val.iarg, "Fix {} for fix ave/time not computed at compatible time{}", + val.id, utils::errorurl(7)); } else if ((val.which == ArgInfo::FIX) && (mode == VECTOR)) { val.val.f = modify->get_fix_by_id(val.id); @@ -193,10 +194,11 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, val.iarg, "Fix ave/time fix {} array cannot have variable row length", val.id); if (val.argindex && (val.argindex > val.val.f->size_array_cols)) - error->all(FLERR, val.iarg, "Fix ave/time fix {} array is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/time fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for fix ave/time not computed at compatible time", - val.id); + error->all(FLERR, val.iarg, "Fix {} for fix ave/time not computed at compatible time{}", + val.id, utils::errorurl(7)); } else if ((val.which == ArgInfo::VARIABLE) && (mode == SCALAR)) { int ivariable = input->variable->find(val.id.c_str()); diff --git a/src/fix_store_state.cpp b/src/fix_store_state.cpp index 92aee9c1c9..e0d650c4e3 100644 --- a/src/fix_store_state.cpp +++ b/src/fix_store_state.cpp @@ -263,7 +263,8 @@ FixStoreState::FixStoreState(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.c->size_peratom_cols == 0) error->all(FLERR, "Fix store/state compute {} does not calculate per-atom array", val.id); if (val.argindex && (val.argindex > val.val.c->size_peratom_cols)) - error->all(FLERR, "Fix store/state compute array {} is accessed out-of-range", val.id); + error->all(FLERR, "Fix store/state compute array {} is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); @@ -276,9 +277,11 @@ FixStoreState::FixStoreState(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->size_peratom_cols == 0) error->all(FLERR, "Fix store/state fix {} does not calculate per-atom array", val.id); if (val.argindex && (val.argindex > val.val.f->size_peratom_cols)) - error->all(FLERR, "Fix store/state fix {} array is accessed out-of-range", val.id); + error->all(FLERR, "Fix store/state fix {} array is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->peratom_freq) - error->all(FLERR, "Fix {} for fix store/state not computed at compatible time", val.id); + error->all(FLERR, "Fix {} for fix store/state not computed at compatible time{}", + val.id, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 3703e96130..275e40f9e2 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -35,7 +35,7 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : if (narg < 5) utils::missing_cmd_args(FLERR, "fix vector", error); nevery = utils::inumeric(FLERR, arg[3], false, lmp); - if (nevery <= 0) error->all(FLERR, "Invalid fix vector every argument: {}", nevery); + if (nevery <= 0) error->all(FLERR, 3, "Invalid fix vector every argument: {}", nevery); nmaxval = MAXSMALLINT; nindex = 0; @@ -91,7 +91,8 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && icompute->vector_flag == 0) error->all(FLERR, "Fix vector compute {} does not calculate a vector", val.id); if (val.argindex && (val.argindex > icompute->size_vector)) - error->all(FLERR, "Fix vector compute {} vector is accessed out-of-range", val.id); + error->all(FLERR, "Fix vector compute {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (val.argindex == 0) value = icompute->extscalar; @@ -109,9 +110,11 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && ifix->vector_flag == 0) error->all(FLERR, "Fix vector fix {} does not calculate a vector", val.id); if (val.argindex && val.argindex > ifix->size_vector) - error->all(FLERR, "Fix vector fix {} vector is accessed out-of-range", val.id); + error->all(FLERR, "Fix vector fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % ifix->global_freq) - error->all(FLERR, "Fix for fix {} vector not computed at compatible time", val.id); + error->all(FLERR, "Fix for fix {} vector not computed at compatible time{}", + val.id, utils::errorurl(7)); if (val.argindex == 0) value = ifix->extscalar; diff --git a/src/library.cpp b/src/library.cpp index 0127a0e198..f1b0030380 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4401,7 +4401,8 @@ void lammps_gather(void *handle, const char *name, int type, int count, void *da } if (lmp->update->ntimestep % fix->peratom_freq) { - lmp->error->all(FLERR,"lammps_gather: fix {} not computed at compatible time", fixid); + lmp->error->all(FLERR,"lammps_gather: fix {} not computed at compatible time{}", + fixid, utils::errorurl(7)); return; } @@ -4670,8 +4671,8 @@ void lammps_gather_concat(void *handle, const char *name, int type, int count, return; } if (lmp->update->ntimestep % fix->peratom_freq) { - lmp->error->all(FLERR,"lammps_gather_concat(): fix {} not computed at compatible time", - fixid); + lmp->error->all(FLERR,"lammps_gather_concat(): fix {} not computed at compatible time{}", + fixid, utils::errorurl(7)); return; } @@ -4957,7 +4958,8 @@ void lammps_gather_subset(void *handle, const char *name, int type, int count, return; } if (lmp->update->ntimestep % fix->peratom_freq) { - lmp->error->all(FLERR,"lammps_gather_subset(): fix {} not computed at compatible time", fixid); + lmp->error->all(FLERR,"lammps_gather_subset(): fix {} not computed at compatible time{}", + fixid, utils::errorurl(7)); return; } diff --git a/src/thermo.cpp b/src/thermo.cpp index 7e934ed985..caf5206b4a 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -311,8 +311,8 @@ void Thermo::init() error->all(FLERR, Error::NOLASTLINE, "Could not find thermo fix ID {}", id_fix[i]); if (output->thermo_every % fixes[i]->global_freq) - error->all(FLERR, Error::NOLASTLINE, "Thermo and fix {} not computed at compatible times", - id_fix[i]); + error->all(FLERR, Error::NOLASTLINE, "Thermo and fix {} not computed at compatible times{}", + id_fix[i], utils::errorurl(7)); } // find current ptr for each Variable ID diff --git a/src/utils.cpp b/src/utils.cpp index 8ab757ac44..94660f546a 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1244,8 +1244,8 @@ int utils::check_grid_reference(char *errstr, char *ref, int nevery, char *&id, lmp->error->all(FLERR, "{} compute {} data {} is not per-grid array", errstr, idcompute, dname); if (argi.get_dim() && argi.get_index1() > ncol) - lmp->error->all(FLERR, "{} compute {} array {} is accessed out-of-range", errstr, idcompute, - dname); + lmp->error->all(FLERR, "{} compute {} array {} is accessed out-of-range{}", errstr, + idcompute, dname, errorurl(20)); id = utils::strdup(idcompute); return ArgInfo::COMPUTE; @@ -1267,7 +1267,8 @@ int utils::check_grid_reference(char *errstr, char *ref, int nevery, char *&id, if (ifix->pergrid_flag == 0) lmp->error->all(FLERR, "{} fix {} does not compute per-grid info", errstr, idfix); if (nevery % ifix->pergrid_freq) - lmp->error->all(FLERR, "{} fix {} not computed at compatible time", errstr, idfix); + lmp->error->all(FLERR, "{} fix {} not computed at compatible time{}", errstr, idfix, + errorurl(7)); int dim; igrid = ifix->get_grid_by_name(gname, dim); @@ -1284,7 +1285,8 @@ int utils::check_grid_reference(char *errstr, char *ref, int nevery, char *&id, if (argi.get_dim() > 0 && ncol == 0) lmp->error->all(FLERR, "{} fix {} data {} is not per-grid array", errstr, idfix, dname); if (argi.get_dim() > 0 && argi.get_index1() > ncol) - lmp->error->all(FLERR, "{} fix {} array {} is accessed out-of-range", errstr, idfix, dname); + lmp->error->all(FLERR, "{} fix {} array {} is accessed out-of-range{}", errstr, idfix, + dname, errorurl(20)); id = utils::strdup(idfix); return ArgInfo::FIX; diff --git a/src/variable.cpp b/src/variable.cpp index 4e1306e893..226e886a91 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1880,7 +1880,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (!fix->scalar_flag) print_var_error(FLERR,"Mismatched fix in variable formula",ivar); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7), ivar); value1 = fix->compute_scalar(); argstack[nargstack++] = value1; @@ -1895,7 +1896,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula fix vector is accessed out-of-range" + utils::errorurl(20), ivar,0); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7) ,ivar); // if index exceeds variable vector length, use a zero value // this can be useful if vector length is not known a priori @@ -1917,7 +1919,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula fix array is accessed out-of-range" + utils::errorurl(20), ivar,0); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7), ivar); // if index exceeds variable array rows, use a zero value // this can be useful if array size is not known a priori @@ -1936,7 +1939,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Mismatched fix in variable formula",ivar); if (update->whichflag > 0 && update->ntimestep % fix->peratom_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7), ivar); peratom2global(1,nullptr,fix->vector_atom,1,index1,tree, treestack,ntreestack,argstack,nargstack); @@ -1953,7 +1957,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula fix array is accessed out-of-range" + utils::errorurl(20), ivar,0); if (update->whichflag > 0 && update->ntimestep % fix->peratom_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7), ivar); if (fix->array_atom) peratom2global(1,nullptr,&fix->array_atom[0][index2-1], @@ -1980,7 +1985,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (fix->size_vector == 0) print_var_error(FLERR,"Variable formula fix vector is zero length",ivar); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at compatible time" + + utils::errorurl(7), ivar); int nvec = fix->size_vector; double *vec; @@ -2008,7 +2014,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula fix array is accessed out-of-range" + utils::errorurl(20), ivar,0); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at a compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at a compatible time" + + utils::errorurl(7), ivar); int nvec = fix->size_array_rows; double *vec; @@ -2041,7 +2048,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (fix->size_peratom_cols) print_var_error(FLERR,"Mismatched fix in variable formula",ivar); if (update->whichflag > 0 && update->ntimestep % fix->peratom_freq) - print_var_error(FLERR,"Fix in variable not computed at compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at compatible time" + + utils::errorurl(7), ivar); auto newtree = new Tree(); newtree->type = ATOMARRAY; @@ -2061,7 +2069,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula fix array is accessed out-of-range" + utils::errorurl(20), ivar,0); if (update->whichflag > 0 && update->ntimestep % fix->peratom_freq) - print_var_error(FLERR,"Fix in variable not computed at compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at compatible time" + + utils::errorurl(7), ivar); auto newtree = new Tree(); newtree->type = ATOMARRAY; @@ -4531,6 +4540,7 @@ int Variable::special_function(const std::string &word, char *contents, Tree **t std::string mesg = "Fix with ID '"; mesg += (args[0]+2); mesg += "' in variable formula not computed at compatible time"; + mesg += utils::errorurl(7); print_var_error(FLERR,mesg,ivar); } nvec = fix->size_vector; @@ -4540,7 +4550,8 @@ int Variable::special_function(const std::string &word, char *contents, Tree **t print_var_error(FLERR,"Variable formula fix array is accessed out-of-range" + utils::errorurl(20), ivar); if (update->whichflag > 0 && update->ntimestep % fix->global_freq) - print_var_error(FLERR,"Fix in variable not computed at compatible time",ivar); + print_var_error(FLERR,"Fix in variable not computed at compatible time" + + utils::errorurl(7), ivar); nvec = fix->size_array_rows; nstride = fix->size_array_cols; } else print_var_error(FLERR,"Mismatched fix in variable formula",ivar); From 3b61bcf8907292f55f8b3976af4392c9675ca903 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Mar 2025 12:05:50 -0400 Subject: [PATCH 17/33] more error reporting updates --- src/compute_chunk_atom.cpp | 4 +- src/compute_global_atom.cpp | 4 +- src/compute_reduce_region.cpp | 5 +- src/dump.cpp | 45 +++++++----- src/dump_image.cpp | 129 ++++++++++++++++++---------------- src/fix_ave_correlate.cpp | 9 ++- 6 files changed, 110 insertions(+), 86 deletions(-) diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp index f8ea7d9efa..7e6d1d41a9 100644 --- a/src/compute_chunk_atom.cpp +++ b/src/compute_chunk_atom.cpp @@ -1010,8 +1010,8 @@ void ComputeChunkAtom::assign_chunk_ids() } else if (which == ArgInfo::FIX) { if (update->ntimestep % fchunk->peratom_freq) error->all(FLERR, Error::NOLASTLINE, - "Fix used in compute chunk/atom not computed at compatible time" + - utils::errorurl(7)); + "Fix {} used in compute chunk/atom not computed at compatible time{}", + fchunk->id, utils::errorurl(7)); if (argindex == 0) { double *vec = fchunk->vector_atom; diff --git a/src/compute_global_atom.cpp b/src/compute_global_atom.cpp index a68260067e..b7bfc4a15e 100644 --- a/src/compute_global_atom.cpp +++ b/src/compute_global_atom.cpp @@ -170,8 +170,8 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom compute does not " "calculate a global array", val.id); if (val.argindex > val.val.f->size_array_cols) - error->all(FLERR, val.iarg, "Compute global/atom fix {} array is accessed out-of-range{}", - val.id, utils::errorurl(20)); + error->all(FLERR, val.iarg, "Compute global/atom fix {} array is accessed " + "out-of-range{}", val.id, utils::errorurl(20)); } } else if (val.which == ArgInfo::VARIABLE) { diff --git a/src/compute_reduce_region.cpp b/src/compute_reduce_region.cpp index 6347bfe4c9..bd02fff9f7 100644 --- a/src/compute_reduce_region.cpp +++ b/src/compute_reduce_region.cpp @@ -34,7 +34,7 @@ ComputeReduceRegion::ComputeReduceRegion(LAMMPS *lmp, int narg, char **arg) : ComputeReduce(lmp, narg, arg) { if (input_mode == LOCAL) - error->all(FLERR, "Compute reduce/region cannot use local data as input"); + error->all(FLERR, Error::NOPOINTER, "Compute reduce/region cannot use local data as input"); } /* ---------------------------------------------------------------------- @@ -129,7 +129,8 @@ double ComputeReduceRegion::compute_one(int m, int flag) } else if (val.which == ArgInfo::FIX) { if (update->ntimestep % val.val.f->peratom_freq) - error->all(FLERR, "Fix {} used in compute {} not computed at compatible time", val.id, style); + error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute {} not computed at compatible" + " time{}", val.id, style, utils::errorurl(7)); if (aidx == 0) { double *fix_vector = val.val.f->vector_atom; diff --git a/src/dump.cpp b/src/dump.cpp index 3425b6d441..a75c8e441f 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -223,14 +223,15 @@ void Dump::init() if (sort_flag) { if (multiproc > 1) - error->all(FLERR, + error->all(FLERR, Error::NOLASTLINE, "Cannot sort dump when 'nfile' or 'fileper' keywords have non-default values"); if (sortcol == 0 && atom->tag_enable == 0) - error->all(FLERR,"Cannot sort dump on atom IDs with no atom IDs defined"); + error->all(FLERR, Error::NOLASTLINE, + "Cannot sort dump on atom IDs with no atom IDs defined"); if (sortcol && sortcol > size_one) - error->all(FLERR,"Dump sort column index {} is invalid", sortcol); + error->all(FLERR, Error::NOLASTLINE, "Dump sort column index {} is invalid", sortcol); if ((sortcol != 0) && (has_id == 0) && (me == 0)) - error->warning(FLERR,"Dump {} includes no atom IDs and is not sorted by ID. " + error->warning(FLERR, "Dump {} includes no atom IDs and is not sorted by ID. " "This may complicate post-processing tasks or visualization", id); if (nprocs > 1 && irregular == nullptr) irregular = new Irregular(lmp); @@ -290,16 +291,18 @@ void Dump::init() if (refreshflag) { irefresh = modify->get_compute_by_id(idrefresh); - if (!irefresh) error->all(FLERR,"Dump could not find refresh compute ID {}", idrefresh); + if (!irefresh) + error->all(FLERR, Error::NOLASTLINE, "Dump could not find refresh compute ID {}", idrefresh); } // if skipflag, check skip variable if (skipflag) { skipindex = input->variable->find(skipvar); - if (skipindex < 0) error->all(FLERR,"Dump skip variable not found"); + if (skipindex < 0) + error->all(FLERR, Error::NOLASTLINE, "Dump skip variable {} not found", skipvar); if (!input->variable->equalstyle(skipindex)) - error->all(FLERR,"Variable for dump skip is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable {} for dump skip is invalid style", skipvar); } // preallocation for PBC copies if requested @@ -389,7 +392,7 @@ void Dump::write() if (nmax*size_one > maxbuf) { if ((bigint) nmax * size_one > MAXSMALLINT) - error->all(FLERR,"Too much per-proc info for dump"); + error->all(FLERR, Error::NOLASTLINE, "Too much per-proc data for dump"); maxbuf = nmax * size_one; memory->destroy(buf); memory->create(buf,maxbuf,"dump:buf"); @@ -457,7 +460,8 @@ void Dump::write() nsme = convert_string(nme,buf); int nsmin,nsmax; MPI_Allreduce(&nsme,&nsmin,1,MPI_INT,MPI_MIN,world); - if (nsmin < 0) error->all(FLERR,"Too much buffered per-proc info for dump"); + if (nsmin < 0) + error->all(FLERR, Error::NOLASTLINE, "Too much buffered per-proc data for dump"); if (multiproc != nprocs) MPI_Allreduce(&nsme,&nsmax,1,MPI_INT,MPI_MAX,world); else nsmax = nsme; @@ -534,7 +538,8 @@ void Dump::write() if (filewriter && fp != nullptr) write_footer(); - if (fp && ferror(fp)) error->one(FLERR,"Error writing dump {}: {}", id, utils::getsyserror()); + if (fp && ferror(fp)) + error->one(FLERR, Error::NOLASTLINE, "Error writing dump {}: {}", id, utils::getsyserror()); // if file per timestep, close file if I am filewriter @@ -596,7 +601,9 @@ void Dump::openfile() fp = fopen(filecurrent,"w"); } - if (fp == nullptr) error->one(FLERR,"Cannot open dump file"); + if (fp == nullptr) + error->one(FLERR, Error::NOLASTLINE, "Cannot open dump file {}:{}", + filecurrent, utils::getsyserror()); } else fp = nullptr; // delete string with timestep replaced @@ -1068,7 +1075,7 @@ void Dump::modify_params(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "dump_modify buffer", error); buffer_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); if (buffer_flag && buffer_allow == 0) - error->all(FLERR,"Dump_modify buffer yes not allowed for this style"); + error->all(FLERR, iarg + 2, "Dump_modify buffer yes not allowed for this style"); iarg += 2; } else if (strcmp(arg[iarg],"colname") == 0) { @@ -1091,7 +1098,7 @@ void Dump::modify_params(int narg, char **arg) } } if ((icol < 0) || (icol >= (int)keyword_user.size())) - error->all(FLERR, "Incorrect dump_modify arguments: {} {} {}", + error->all(FLERR, Error::NOPOINTER, "Incorrect dump_modify arguments: {} {} {}", arg[iarg], arg[iarg+1], arg[iarg+2]); keyword_user[icol] = arg[iarg+2]; iarg += 3; @@ -1136,7 +1143,8 @@ void Dump::modify_params(int narg, char **arg) delta = 0.0; } else { delta = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (delta <= 0.0) error->all(FLERR, "Invalid dump_modify every/time argument: {}", delta); + if (delta <= 0.0) + error->all(FLERR, iarg + 1, "Invalid dump_modify every/time argument: {}", delta); } output->mode_dump[idump] = 1; output->every_time_dump[idump] = delta; @@ -1146,9 +1154,9 @@ void Dump::modify_params(int narg, char **arg) } else if (strcmp(arg[iarg],"fileper") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "dump_modify fileper", error); if (!multiproc) - error->all(FLERR,"Cannot use dump_modify fileper without % in dump file name"); + error->all(FLERR, iarg, "Cannot use dump_modify fileper without % in dump file name"); int nper = utils::inumeric(FLERR,arg[iarg+1],false,lmp); - if (nper <= 0) error->all(FLERR, "Invalid dump_modify fileper argument: {}", nper); + if (nper <= 0) error->all(FLERR, iarg + 1, "Invalid dump_modify fileper argument: {}", nper); multiproc = nprocs/nper; if (nprocs % nper) multiproc++; @@ -1206,7 +1214,8 @@ void Dump::modify_params(int narg, char **arg) iarg += 3; } else { // pass other format options to child classes int n = modify_param(narg-iarg,&arg[iarg]); - if (n == 0) error->all(FLERR,"Unknown dump_modify format keyword: {}", arg[iarg+1]); + if (n == 0) + error->all(FLERR, iarg + 1, "Unknown dump_modify format keyword: {}", arg[iarg+1]); iarg += n; } @@ -1218,7 +1227,7 @@ void Dump::modify_params(int narg, char **arg) } else if (strcmp(arg[iarg],"maxfiles") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "dump_modify maxfiles", error); if (!multifile) - error->all(FLERR,"Cannot use dump_modify maxfiles without * in dump file name"); + error->all(FLERR, "Cannot use dump_modify maxfiles without * in dump file name"); // wipe out existing storage if (maxfiles > 0) { for (int idx=0; idx < numfiles; ++idx) diff --git a/src/dump_image.cpp b/src/dump_image.cpp index ee44db0945..609223a9ec 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -67,7 +67,8 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : gbuf(nullptr), avec_line(nullptr), avec_tri(nullptr), avec_body(nullptr), fixptr(nullptr), image(nullptr), chooseghost(nullptr), bufcopy(nullptr) { - if (binary || multiproc) error->all(FLERR, "Invalid dump image filename"); + if (binary || multiproc) + error->all(FLERR, 4, "Invalid dump image filename {}", filename); // force binary flag on to avoid corrupted output on Windows @@ -89,16 +90,18 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : #ifndef LAMMPS_JPEG if (filetype == JPG) - error->all(FLERR,"Support for writing images in JPEG format not included"); + error->all(FLERR, Error::NOLASTLINE, "Support for writing images in JPEG format not included"); #endif #ifndef LAMMPS_PNG if (filetype == PNG) - error->all(FLERR,"Support for writing images in PNG format not included"); + error->all(FLERR, Error::NOLASTLINE, "Support for writing images in PNG format not included"); #endif // atom color,diameter settings - if (nfield != 2) error->all(FLERR,"Illegal dump image command"); + if (nfield != 2) + error->all(FLERR, Error::NOPOINTER, + "Dump image command is missing attributes for color and size"); acolor = ATTRIBUTE; if (strcmp(arg[5],"type") == 0) acolor = TYPE; @@ -147,45 +150,48 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : int iarg = ioptional; while (iarg < narg) { if (strcmp(arg[iarg],"atom") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image atom", error); atomflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"adiam") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image adiam", error); adiam = NUMERIC; adiamvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (adiamvalue <= 0.0) error->all(FLERR,"Illegal dump image command"); + if (adiamvalue <= 0.0) + error->all(FLERR, iarg+1, "Illegal dump image adiam value {}", adiamvalue); iarg += 2; } else if (strcmp(arg[iarg],"bond") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image bond", error); if (atom->nbondtypes == 0) - error->all(FLERR,"Dump image bond not allowed with no bond types"); + error->all(FLERR, iarg, "Dump image bond not allowed with no bond types defined"); bondflag = YES; if (strcmp(arg[iarg+1],"none") == 0) bondflag = NO; else if (strcmp(arg[iarg+1],"atom") == 0) bcolor = ATOM; else if (strcmp(arg[iarg+1],"type") == 0) bcolor = TYPE; - else error->all(FLERR,"Illegal dump image command"); + else error->all(FLERR, iarg + 1, "Unknown dump image bond color setting {}", arg[iarg + 1]); if (!islower(arg[iarg+2][0])) { bdiam = NUMERIC; bdiamvalue = utils::numeric(FLERR,arg[iarg+2],false,lmp); - if (bdiamvalue <= 0.0) error->all(FLERR,"Illegal dump image command"); + if (bdiamvalue <= 0.0) + error->all(FLERR, iarg + 2,"Illegal dump image bond diameter value {}", bdiamvalue); } else if (strcmp(arg[iarg+2],"atom") == 0) bdiam = ATOM; else if (strcmp(arg[iarg+2],"type") == 0) bdiam = TYPE; else if (strcmp(arg[iarg+2],"none") == 0) bondflag = NO; - else error->all(FLERR,"Illegal dump image command"); + else error->all(FLERR, iarg + 2, "Unknown dump image bond diameter setting {}", arg[iarg+2]); iarg += 3; } else if (strcmp(arg[iarg],"grid") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image grid", error); gridflag = YES; char *id; int igrid,idata,index; int iflag = utils::check_grid_reference((char *) "Dump image", arg[iarg+1], nevery, id, igrid,idata,index,lmp); - if (iflag < 0) error->all(FLERR,"Invalid grid reference in dump image command"); + if (iflag < 0) + error->all(FLERR, iarg+1, "Invalid grid reference {} in dump image command", arg[iarg+1]); if (iflag == ArgInfo::COMPUTE) { delete[] id_grid_compute; @@ -201,7 +207,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"line") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image line", error); lineflag = YES; if (strcmp(arg[iarg+1],"type") == 0) lcolor = TYPE; else error->all(FLERR,"Illegal dump image command"); @@ -210,7 +216,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 3; } else if (strcmp(arg[iarg],"tri") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+4 > narg) utils::missing_cmd_args(FLERR,"dump image tri", error); triflag = YES; if (strcmp(arg[iarg+1],"type") == 0) tcolor = TYPE; else error->all(FLERR,"Illegal dump image command"); @@ -219,7 +225,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"body") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+4 > narg) utils::missing_cmd_args(FLERR,"dump image body", error); bodyflag = YES; if (strcmp(arg[iarg+1],"type") == 0) bodycolor = TYPE; else error->all(FLERR,"Illegal dump image command"); @@ -228,7 +234,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"fix") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+5 > narg) utils::missing_cmd_args(FLERR,"dump image fix", error); fixflag = YES; fixID = arg[iarg+1]; if (strcmp(arg[iarg+2],"type") == 0) fixcolor = TYPE; @@ -238,7 +244,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 5; } else if (strcmp(arg[iarg],"size") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image size", error); int width = utils::inumeric(FLERR,arg[iarg+1],false,lmp); int height = utils::inumeric(FLERR,arg[iarg+2],false,lmp); if (width <= 0 || height <= 0) error->all(FLERR,"Illegal dump image command"); @@ -252,7 +258,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 3; } else if (strcmp(arg[iarg],"view") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image view", error); if (utils::strmatch(arg[iarg+1],"^v_")) { delete[] thetastr; thetastr = utils::strdup(arg[iarg+1]+2); @@ -271,7 +277,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 3; } else if (strcmp(arg[iarg],"center") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+5 > narg) utils::missing_cmd_args(FLERR,"dump image center", error); if (strcmp(arg[iarg+1],"s") == 0) cflag = STATIC; else if (strcmp(arg[iarg+1],"d") == 0) cflag = DYNAMIC; else error->all(FLERR,"Illegal dump image command"); @@ -293,7 +299,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 5; } else if (strcmp(arg[iarg],"up") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+4 > narg) utils::missing_cmd_args(FLERR,"dump image up", error); if (utils::strmatch(arg[iarg+1],"^v_")) { delete[] upxstr; upxstr = utils::strdup(arg[iarg+1]+2); @@ -309,7 +315,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"zoom") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image zoom", error); if (utils::strmatch(arg[iarg+1],"^v_")) { delete[] zoomstr; zoomstr = utils::strdup(arg[iarg+1]+2); @@ -321,14 +327,14 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"box") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image box", error); boxflag = utils::logical(FLERR,arg[iarg+1],false,lmp); boxdiam = utils::numeric(FLERR,arg[iarg+2],false,lmp); if (boxdiam < 0.0) error->all(FLERR,"Illegal dump image command"); iarg += 3; } else if (strcmp(arg[iarg],"axes") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image axes", error); axesflag = utils::logical(FLERR,arg[iarg+1],false,lmp); axeslen = utils::numeric(FLERR,arg[iarg+2],false,lmp); axesdiam = utils::numeric(FLERR,arg[iarg+3],false,lmp); @@ -337,14 +343,14 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"subbox") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR,"dump image subbox", error); subboxflag = utils::logical(FLERR,arg[iarg+1],false,lmp); subboxdiam = utils::numeric(FLERR,arg[iarg+2],false,lmp); if (subboxdiam < 0.0) error->all(FLERR,"Illegal dump image command"); iarg += 3; } else if (strcmp(arg[iarg],"shiny") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image shiny", error); double shiny = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (shiny < 0.0 || shiny > 1.0) error->all(FLERR,"Illegal dump image command"); @@ -352,7 +358,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"fsaa") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"dump image fsaa", error); int aa = utils::logical(FLERR, arg[iarg+1], false, lmp); if (aa) { if (!image->fsaa) { @@ -369,10 +375,10 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"ssao") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal dump image command"); + if (iarg+4 > narg) utils::missing_cmd_args(FLERR,"dump image ssao", error); image->ssao = utils::logical(FLERR,arg[iarg+1],false,lmp); int seed = utils::inumeric(FLERR,arg[iarg+2],false,lmp); - if (seed <= 0) error->all(FLERR,"Illegal dump image command"); + if (seed <= 0) error->all(FLERR, iarg + 2, "Illegal dump image ssao seed {}", seed); image->seed = seed; double ssaoint = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (ssaoint < 0.0 || ssaoint > 1.0) @@ -388,17 +394,17 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : if (lineflag) { avec_line = dynamic_cast(atom->style_match("line")); if (!avec_line) - error->all(FLERR,"Dump image line requires atom style line"); + error->all(FLERR, Error::NOLASTLINE, "Dump image line requires atom style line"); } if (triflag) { avec_tri = dynamic_cast(atom->style_match("tri")); if (!avec_tri) - error->all(FLERR,"Dump image tri requires atom style tri"); + error->all(FLERR, Error::NOLASTLINE, "Dump image tri requires atom style tri"); } if (bodyflag) { avec_body = dynamic_cast(atom->style_match("body")); if (!avec_body) - error->all(FLERR,"Dump image body yes requires atom style body"); + error->all(FLERR, Error::NOLASTLINE, "Dump image body yes requires atom style body"); } extraflag = 0; @@ -406,7 +412,8 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : if (fixflag) { fixptr = modify->get_fix_by_id(fixID); - if (!fixptr) error->all(FLERR,"Fix ID {} for dump image does not exist", fixID); + if (!fixptr) + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for dump image does not exist", fixID); } @@ -507,8 +514,9 @@ DumpImage::~DumpImage() void DumpImage::init_style() { if (multifile == 0 && !multifile_override) - error->all(FLERR,"Dump image requires one snapshot per file"); - if (sort_flag) error->all(FLERR,"Dump image cannot perform sorting"); + error->all(FLERR, Error::NOLASTLINE, + "Dump image requires file name with '*' requesting one snapshot per file"); + if (sort_flag) error->all(FLERR, Error::NOLASTLINE, "Dump image cannot perform sorting"); DumpCustom::init_style(); @@ -519,12 +527,15 @@ void DumpImage::init_style() if (id_grid_compute) { grid_compute = modify->get_compute_by_id(id_grid_compute); if (!grid_compute) - error->all(FLERR,"Could not find dump image grid compute ID {}",id_grid_compute); + error->all(FLERR, Error::NOLASTLINE, + "Could not find dump image grid compute ID {}", id_grid_compute); } else if (id_grid_fix) { grid_fix = modify->get_fix_by_id(id_grid_fix); - if (!grid_fix) error->all(FLERR,"Could not find dump image fix ID {}",id_grid_fix); + if (!grid_fix) + error->all(FLERR, Error::NOLASTLINE, "Could not find dump image fix ID {}",id_grid_fix); if (nevery % grid_fix->peratom_freq) - error->all(FLERR,"Dump image and grid fix not computed at compatible times"); + error->all(FLERR, Error::NOLASTLINE, "Dump image and grid fix {} not computed at " + "compatible times{}", id_grid_fix, utils::errorurl(7)); } } @@ -533,65 +544,65 @@ void DumpImage::init_style() if (thetastr) { thetavar = input->variable->find(thetastr); if (thetavar < 0) - error->all(FLERR,"Variable name for dump image theta does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image theta does not exist"); if (!input->variable->equalstyle(thetavar)) - error->all(FLERR,"Variable for dump image theta is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image theta is invalid style"); } if (phistr) { phivar = input->variable->find(phistr); if (phivar < 0) - error->all(FLERR,"Variable name for dump image phi does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image phi does not exist"); if (!input->variable->equalstyle(phivar)) - error->all(FLERR,"Variable for dump image phi is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image phi is invalid style"); } if (cxstr) { cxvar = input->variable->find(cxstr); if (cxvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(cxvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (cystr) { cyvar = input->variable->find(cystr); if (cyvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(cyvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (czstr) { czvar = input->variable->find(czstr); if (czvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(czvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (upxstr) { upxvar = input->variable->find(upxstr); if (upxvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(upxvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (upystr) { upyvar = input->variable->find(upystr); if (upyvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(upyvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (upzstr) { upzvar = input->variable->find(upzstr); if (upzvar < 0) - error->all(FLERR,"Variable name for dump image center does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image center does not exist"); if (!input->variable->equalstyle(upzvar)) - error->all(FLERR,"Variable for dump image center is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image center is invalid style"); } if (zoomstr) { zoomvar = input->variable->find(zoomstr); if (zoomvar < 0) - error->all(FLERR,"Variable name for dump image zoom does not exist"); + error->all(FLERR, Error::NOLASTLINE, "Variable name for dump image zoom does not exist"); if (!input->variable->equalstyle(zoomvar)) - error->all(FLERR,"Variable for dump image zoom is invalid style"); + error->all(FLERR, Error::NOLASTLINE, "Variable for dump image zoom is invalid style"); } // set up type -> element mapping @@ -600,7 +611,7 @@ void DumpImage::init_style() for (int i = 1; i <= ntypes; i++) { colorelement[i] = image->element2color(typenames[i]); if (colorelement[i] == nullptr) - error->all(FLERR,"Invalid dump image element name"); + error->all(FLERR, Error::NOLASTLINE, "Invalid dump image element name"); } } @@ -608,7 +619,7 @@ void DumpImage::init_style() for (int i = 1; i <= ntypes; i++) { diamelement[i] = image->element2diam(typenames[i]); if (diamelement[i] == 0.0) - error->all(FLERR,"Invalid dump image element name"); + error->all(FLERR, Error::NOLASTLINE, "Invalid dump image element name"); } } } diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index bc936ae515..b3632e559a 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -187,7 +187,8 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.c->vector_flag == 0) error->all(FLERR, val.iarg, "Fix ave/correlate compute {} does not calculate a vector", val.id); if (val.argindex && val.argindex > val.val.c->size_vector) - error->all(FLERR, val.iarg, "Fix ave/correlate compute {} vector is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/correlate compute {} vector is accessed " + "out-of-range{}", val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); @@ -197,9 +198,11 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) : if (val.argindex && val.val.f->vector_flag == 0) error->all(FLERR, val.iarg, "Fix ave/correlate fix {} does not calculate a vector", val.id); if (val.argindex && val.argindex > val.val.f->size_vector) - error->all(FLERR, val.iarg, "Fix ave/correlate fix {} vector is accessed out-of-range", val.id); + error->all(FLERR, val.iarg, "Fix ave/correlate fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) - error->all(FLERR, val.iarg, "Fix {} for fix ave/correlate not computed at compatible time", val.id); + error->all(FLERR, val.iarg, "Fix {} for fix ave/correlate not computed at compatible " + "time{}", val.id, utils::errorurl(7)); } else if (val.which == ArgInfo::VARIABLE) { val.val.v = input->variable->find(val.id.c_str()); From e9bc334a14423e620bc8a79b04fcc11f08489b98 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Mar 2025 21:03:52 -0400 Subject: [PATCH 18/33] add some more missing errorurl() calls and error pointers --- src/EXTRA-COMPUTE/compute_slcsa_atom.cpp | 40 +-- src/EXTRA-FIX/fix_ave_correlate_long.cpp | 10 +- src/EXTRA-FIX/fix_controller.cpp | 50 ++-- src/VTK/dump_vtk.cpp | 9 +- src/fix_ave_grid.cpp | 9 +- src/set.cpp | 307 ++++++++++++++--------- 6 files changed, 259 insertions(+), 166 deletions(-) diff --git a/src/EXTRA-COMPUTE/compute_slcsa_atom.cpp b/src/EXTRA-COMPUTE/compute_slcsa_atom.cpp index e0b34b8ff1..7ca13cc77a 100644 --- a/src/EXTRA-COMPUTE/compute_slcsa_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_slcsa_atom.cpp @@ -81,12 +81,12 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : int twojmax = utils::inumeric(FLERR, arg[3], false, lmp); if (twojmax < 0) - error->all(FLERR, "Illegal compute slcsa/atom command: twojmax must be a non-negative integer"); + error->all(FLERR, 3, "Illegal compute slcsa/atom command: twojmax must be >= 0"); ncomps = compute_ncomps(twojmax); nclasses = utils::inumeric(FLERR, arg[4], false, lmp); if (nclasses < 2) - error->all(FLERR, "Illegal compute slcsa/atom command: nclasses must be greater than 1"); + error->all(FLERR, 4, "Illegal compute slcsa/atom command: nclasses must be greater than 1"); database_mean_descriptor_file = arg[5]; lda_scalings_file = arg[6]; @@ -116,11 +116,12 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : val.which = argi.get_type(); val.argindex = argi.get_index1(); val.id = argi.get_name(); + if ((val.which == ArgInfo::FIX) || (val.which == ArgInfo::VARIABLE) || (val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1)) - error->all(FLERR, "Invalid compute slcsa/atom argument: {}", arg[0]); + error->all(FLERR, 10, "Invalid compute slcsa/atom argument: {}", arg[0]); - // if wildcard expansion occurred, free earg memory from exapnd_args() + // if wildcard expansion occurred, free earg memory from expand_args() if (expand) { for (int i = 0; i < nvalues; i++) delete[] earg[i]; @@ -128,15 +129,19 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : } val.val.c = modify->get_compute_by_id(val.id); - if (!val.val.c) error->all(FLERR, "Compute ID {} for fix slcsa/atom does not exist", val.id); + if (!val.val.c) error->all(FLERR, 10, "Compute ID {} for fix slcsa/atom does not exist", val.id); if (val.val.c->peratom_flag == 0) - error->all(FLERR, "Compute slcsa/atom compute {} does not calculate per-atom values", val.id); + error->all(FLERR, 10, "Compute slcsa/atom compute {} does not calculate per-atom values", + val.id); if (val.argindex == 0 && val.val.c->size_peratom_cols != 0) - error->all(FLERR, "Compute slcsa/atom compute {} does not calculate a per-atom vector", val.id); + error->all(FLERR, 10, "Compute slcsa/atom compute {} does not calculate a per-atom vector", + val.id); if (val.argindex && val.val.c->size_peratom_cols == 0) - error->all(FLERR, "Compute slcsa/atom compute {} does not calculate a per-atom array", val.id); + error->all(FLERR, 10, "Compute slcsa/atom compute {} does not calculate a per-atom array", + val.id); if (val.argindex && val.argindex > val.val.c->size_peratom_cols) - error->all(FLERR, "Compute slcsa/atom compute {} array is accessed out-of-range", val.id); + error->all(FLERR, 10, "Compute slcsa/atom compute {} array is accessed out-of-range{}", val.id, + utils::errorurl(20)); descriptorval = val; memory->create(database_mean_descriptor, ncomps, "slcsa/atom:database_mean_descriptor"); memory->create(lda_scalings, ncomps, nclasses - 1, "slcsa/atom:lda_scalings"); @@ -150,7 +155,7 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : if (comm->me == 0) { if (strcmp(database_mean_descriptor_file, "NULL") == 0) { - error->one(FLERR, + error->one(FLERR, Error::NOLASTLINE, "Cannot open database mean descriptor file {}: ", database_mean_descriptor_file, utils::getsyserror()); } else { @@ -165,8 +170,8 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : } if (strcmp(lda_scalings_file, "NULL") == 0) { - error->one(FLERR, "Cannot open database linear discriminant analysis scalings file {}: ", - lda_scalings_file, utils::getsyserror()); + error->one(FLERR, Error::NOLASTLINE, "Cannot open database linear discriminant analysis " + "scalings file {}: ", lda_scalings_file, utils::getsyserror()); } else { PotentialFileReader reader(lmp, lda_scalings_file, "lda scalings file"); int nread = 0; @@ -180,8 +185,8 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : } if (strcmp(lr_decision_file, "NULL") == 0) { - error->one(FLERR, "Cannot open logistic regression decision file {}: ", lr_decision_file, - utils::getsyserror()); + error->one(FLERR, Error::NOLASTLINE, "Cannot open logistic regression decision file {}: ", + lr_decision_file, utils::getsyserror()); } else { PotentialFileReader reader(lmp, lr_decision_file, "lr decision file"); int nread = 0; @@ -195,8 +200,8 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : } if (strcmp(lr_bias_file, "NULL") == 0) { - error->one(FLERR, "Cannot open logistic regression bias file {}: ", lr_bias_file, - utils::getsyserror()); + error->one(FLERR, Error::NOLASTLINE, "Cannot open logistic regression bias file {}: ", + lr_bias_file, utils::getsyserror()); } else { PotentialFileReader reader(lmp, lr_bias_file, "lr bias file"); auto values = reader.next_values(nclasses); @@ -207,7 +212,8 @@ ComputeSLCSAAtom::ComputeSLCSAAtom(LAMMPS *lmp, int narg, char **arg) : } if (strcmp(maha_file, "NULL") == 0) { - error->one(FLERR, "Cannot open mahalanobis stats file {}: ", maha_file, utils::getsyserror()); + error->one(FLERR, Error::NOLASTLINE, "Cannot open mahalanobis stats file {}: ", maha_file, + utils::getsyserror()); } else { PotentialFileReader reader(lmp, maha_file, "mahalanobis stats file"); int nvalues = nclasses * ((nclasses - 1) * (nclasses - 1) + nclasses); diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 8407f62aac..e3ee7b2c34 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -225,8 +225,8 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS *lmp, int narg, char **arg) : "Fix ave/correlate/long compute {} does not calculate a vector", val.id); if (val.argindex && val.argindex > val.val.c->size_vector) error->all(FLERR, val.iarg, - "Fix ave/correlate/long compute {} vector is accessed out-of-range", - val.id); + "Fix ave/correlate/long compute {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); } else if (val.which == ArgInfo::FIX) { val.val.f = modify->get_fix_by_id(val.id); @@ -241,7 +241,8 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS *lmp, int narg, char **arg) : "Fix ave/correlate/long fix {} does not calculate a vector", val.id); if (val.argindex && val.argindex > val.val.f->size_vector) error->all(FLERR, val.iarg, - "Fix ave/correlate/long fix {} vector is accessed out-of-range", val.id); + "Fix ave/correlate/long fix {} vector is accessed out-of-range{}", + val.id, utils::errorurl(20)); if (nevery % val.val.f->global_freq) error->all(FLERR, val.iarg, "Fix {} for fix ave/correlate/long not computed at compatible time{}", @@ -257,8 +258,7 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS *lmp, int narg, char **arg) : "Fix ave/correlate/long variable {} is not equal-style variable", val.id); if (val.argindex && input->variable->vectorstyle(val.val.v) == 0) error->all(FLERR, val.iarg, - "Fix ave/correlate/long variable {} is not vector-style variable", - val.id); + "Fix ave/correlate/long variable {} is not vector-style variable", val.id); } } diff --git a/src/EXTRA-FIX/fix_controller.cpp b/src/EXTRA-FIX/fix_controller.cpp index d7989c79d7..90ebed801d 100644 --- a/src/EXTRA-FIX/fix_controller.cpp +++ b/src/EXTRA-FIX/fix_controller.cpp @@ -39,7 +39,7 @@ FixController::FixController(LAMMPS *lmp, int narg, char **arg) : extvector = 0; nevery = utils::inumeric(FLERR,arg[3],false,lmp); - if (nevery <= 0) error->all(FLERR,"Illegal fix controller command"); + if (nevery <= 0) error->all(FLERR, 3, "Illegal fix controller nevery value {}", nevery); alpha = utils::numeric(FLERR,arg[4],false,lmp); kp = utils::numeric(FLERR,arg[5],false,lmp); @@ -52,7 +52,7 @@ FixController::FixController(LAMMPS *lmp, int narg, char **arg) : if ((argi.get_type() == ArgInfo::UNKNOWN) || (argi.get_type() == ArgInfo::NONE) || (argi.get_dim() != 0)) - error->all(FLERR,"Illegal fix controller command"); + error->all(FLERR,8,"Illegal fix controller argument {}", arg[8]); pvwhich = argi.get_type(); pvindex = argi.get_index1(); @@ -60,48 +60,51 @@ FixController::FixController(LAMMPS *lmp, int narg, char **arg) : // setpoint arg - int iarg=9; - setpoint = utils::numeric(FLERR,arg[iarg],false,lmp); - iarg++; + setpoint = utils::numeric(FLERR,arg[9],false,lmp); // control variable arg - cvID = utils::strdup(arg[iarg]); + cvID = utils::strdup(arg[10]); // error check if (pvwhich == ArgInfo::COMPUTE) { Compute *c = modify->get_compute_by_id(pvID); - if (!c) error->all(FLERR,"Compute ID {} for fix controller does not exist", pvID); + if (!c) error->all(FLERR, 8, "Compute ID {} for fix controller does not exist", pvID); int flag = 0; if (c->scalar_flag && pvindex == 0) flag = 1; else if (c->vector_flag && pvindex > 0) flag = 1; if (!flag) - error->all(FLERR,"Fix controller compute does not calculate a global scalar or vector"); + error->all(FLERR, 8, "Fix controller compute {} does not calculate a global scalar or " + "vector", pvID); if (pvindex && pvindex > c->size_vector) - error->all(FLERR,"Fix controller compute vector is accessed out-of-range"); + error->all(FLERR, 8, "Fix controller compute {} vector is accessed out-of-range{}", + pvID, utils::errorurl(20)); } else if (pvwhich == ArgInfo::FIX) { Fix *f = modify->get_fix_by_id(pvID); - if (!f) error->all(FLERR,"Fix ID {} for fix controller does not exist", pvID); + if (!f) error->all(FLERR, 8, "Fix ID {} for fix controller does not exist", pvID); int flag = 0; if (f->scalar_flag && pvindex == 0) flag = 1; else if (f->vector_flag && pvindex > 0) flag = 1; - if (!flag) error->all(FLERR,"Fix controller fix does not calculate a global scalar or vector"); + if (!flag) + error->all(FLERR, 8, "Fix controller fix {} does not calculate a global scalar or vector", + pvID); if (pvindex && pvindex > f->size_vector) - error->all(FLERR,"Fix controller fix vector is accessed out-of-range"); + error->all(FLERR, 8, "Fix controller fix {} vector is accessed out-of-range{}", pvID, + utils::errorurl(20)); } else if (pvwhich == ArgInfo::VARIABLE) { int ivariable = input->variable->find(pvID); if (ivariable < 0) - error->all(FLERR,"Variable name for fix controller does not exist"); + error->all(FLERR, 8, "Variable name {} for fix controller does not exist", pvID); if (input->variable->equalstyle(ivariable) == 0) - error->all(FLERR,"Fix controller variable is not equal-style variable"); + error->all(FLERR, 8, "Fix controller variable {} is not equal-style variable", pvID); } int ivariable = input->variable->find(cvID); if (ivariable < 0) - error->all(FLERR,"Variable name for fix controller does not exist"); + error->all(FLERR, 10, "Variable name {} for fix controller does not exist", cvID); if (input->variable->internalstyle(ivariable) == 0) - error->all(FLERR,"Fix controller variable is not internal-style variable"); + error->all(FLERR, 10, "Fix controller variable {} is not internal-style variable", cvID); control = input->variable->compute_equal(ivariable); firsttime = 1; @@ -130,19 +133,26 @@ void FixController::init() { if (pvwhich == ArgInfo::COMPUTE) { pcompute = modify->get_compute_by_id(pvID); - if (!pcompute) error->all(FLERR,"Compute ID {} for fix controller does not exist", pvID); + if (!pcompute) + error->all(FLERR, Error::NOLASTLINE, + "Compute ID {} for fix controller does not exist", pvID); } else if (pvwhich == ArgInfo::FIX) { pfix = modify->get_fix_by_id(pvID); - if (!pfix) error->all(FLERR,"Fix ID {} for fix controller does not exist", pvID); + if (!pfix) + error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for fix controller does not exist", pvID); } else if (pvwhich == ArgInfo::VARIABLE) { pvar = input->variable->find(pvID); - if (pvar < 0) error->all(FLERR,"Variable name for fix controller does not exist"); + if (pvar < 0) + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for fix controller does not exist", + pvID); } cvar = input->variable->find(cvID); - if (cvar < 0) error->all(FLERR,"Variable name for fix controller does not exist"); + if (cvar < 0) + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for fix controller does not exist", + cvID); // set sampling time diff --git a/src/VTK/dump_vtk.cpp b/src/VTK/dump_vtk.cpp index 8fe8c0f5fb..11cf79328c 100644 --- a/src/VTK/dump_vtk.cpp +++ b/src/VTK/dump_vtk.cpp @@ -1811,7 +1811,8 @@ int DumpVTK::parse_fields(int narg, char **arg) if (argi.get_dim() > 0 && ifix->size_peratom_cols == 0) error->all(FLERR,"Dump vtk fix {} does not compute per-atom array",aname); if (argi.get_dim() > 0 && argi.get_index1() > ifix->size_peratom_cols) - error->all(FLERR,"Dump vtk fix {} vector is accessed out-of-range",aname); + error->all(FLERR,"Dump vtk fix {} vector is accessed out-of-range{}", + aname, utils::errorurl(20)); field2index[ATTRIBUTES+iarg] = add_fix(aname); name[ATTRIBUTES+iarg] = arg[iarg]; @@ -1851,7 +1852,8 @@ int DumpVTK::parse_fields(int narg, char **arg) if (!flag || !cols) error->all(FLERR,"Property double array {} for dump vtk does not exist",aname); if (argindex[ATTRIBUTES+iarg] > atom->dcols[n]) - error->all(FLERR,"Dump vtk property array {} is accessed out-of-range",aname); + error->all(FLERR,"Dump vtk property array {} is accessed out-of-range{}",aname, + utils::errorurl(20)); } field2index[ATTRIBUTES+iarg] = add_custom(aname,1); name[ATTRIBUTES+iarg] = arg[iarg]; @@ -1874,7 +1876,8 @@ int DumpVTK::parse_fields(int narg, char **arg) if (flag || !cols) error->all(FLERR,"Property integer array {} for dump vtk does not exist",aname); if (argindex[ATTRIBUTES+iarg] > atom->icols[n]) - error->all(FLERR,"Dump vtk property array {} is accessed out-of-range",aname); + error->all(FLERR,"Dump vtk property array {} is accessed out-of-range{}",aname, + utils::errorurl(20)); } field2index[ATTRIBUTES+iarg] = add_custom(aname,0); name[ATTRIBUTES+iarg] = arg[iarg]; diff --git a/src/fix_ave_grid.cpp b/src/fix_ave_grid.cpp index 9ed91294c0..f2a3a5bc92 100644 --- a/src/fix_ave_grid.cpp +++ b/src/fix_ave_grid.cpp @@ -310,7 +310,8 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : "Fix ave/atom compute {} does not calculate a per-atom array", ids[i]); if (argindex[i] && (argindex[i] > icompute->size_peratom_cols)) error->all(FLERR, iarg_orig[i], - "Fix ave/atom compute {} array is accessed out-of-range", ids[i]); + "Fix ave/atom compute {} array is accessed out-of-range{}", ids[i], + utils::errorurl(20)); } else if (which[i] == ArgInfo::FIX) { auto ifix = modify->get_fix_by_id(ids[i]); @@ -327,10 +328,12 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : "Fix ave/atom fix {} does not calculate a per-atom array", ids[i]); if (argindex[i] && (argindex[i] > ifix->size_peratom_cols)) error->all(FLERR, iarg_orig[i], - "Fix ave/atom fix {} array is accessed out-of-range", ids[i]); + "Fix ave/atom fix {} array is accessed out-of-range{}", ids[i], + utils::errorurl(20)); if (nevery % ifix->peratom_freq) error->all(FLERR, iarg_orig[i], - "Fix {} for fix ave/atom not computed at compatible time", ids[i]); + "Fix {} for fix ave/atom not computed at compatible time{}", ids[i], + utils::errorurl(7)); } else if (which[i] == ArgInfo::VARIABLE) { int ivariable = input->variable->find(ids[i]); diff --git a/src/set.cpp b/src/set.cpp index 93d5068ef3..37aeb212be 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -57,10 +57,11 @@ enum{TYPE,TYPE_FRACTION,TYPE_RATIO,TYPE_SUBSET, void Set::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Set command before simulation box is defined"); + error->all(FLERR, Error::NOLASTLINE, "Set command before simulation box is defined" + + utils::errorurl(0)); if (atom->natoms == 0) - error->all(FLERR,"Set command on system without atoms"); - if (narg < 4) error->all(FLERR,"Illegal set command: need at least four arguments"); + error->all(FLERR, Error::NOLASTLINE, "Set command on system without atoms"); + if (narg < 4) error->all(FLERR, 1, "Illegal set command: need at least four arguments"); // style and ID info @@ -69,7 +70,7 @@ void Set::command(int narg, char **arg) else if (strcmp(arg[0],"type") == 0) style = TYPE_SELECT; else if (strcmp(arg[0],"group") == 0) style = GROUP_SELECT; else if (strcmp(arg[0],"region") == 0) style = REGION_SELECT; - else error->all(FLERR,"Unknown set command style: {}", arg[0]); + else error->all(FLERR, Error::ARGZERO, "Unknown set command style: {}", arg[0]); id = utils::strdup(arg[1]); select = nullptr; @@ -101,11 +102,13 @@ void Set::command(int narg, char **arg) fraction = utils::numeric(FLERR, arg[iarg+2], false, lmp); ivalue = utils::inumeric(FLERR, arg[iarg+3], false, lmp); if (newtype <= 0 || newtype > atom->ntypes) - error->all(FLERR,"Invalid type value {} in set type/fraction command", newtype); + error->all(FLERR, iarg + 1, "Invalid type value {} in set type/fraction command", newtype); if (fraction < 0.0 || fraction > 1.0) - error->all(FLERR,"Invalid fraction value {} in set type/fraction command", fraction); + error->all(FLERR, iarg + 2, "Invalid fraction value {} in set type/fraction command", + fraction); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed {} in set type/fraction command", ivalue); + error->all(FLERR, iarg + 3, "Invalid random number seed {} in set type/fraction command", + ivalue); setrandom(TYPE_FRACTION); iarg += 4; @@ -115,11 +118,13 @@ void Set::command(int narg, char **arg) fraction = utils::numeric(FLERR, arg[iarg+2], false, lmp); ivalue = utils::inumeric(FLERR, arg[iarg+3], false, lmp); if (newtype <= 0 || newtype > atom->ntypes) - error->all(FLERR,"Invalid type value {} in set type/ratio command", newtype); + error->all(FLERR, iarg + 1, "Invalid type value {} in set type/ratio command", newtype); if (fraction < 0.0 || fraction > 1.0) - error->all(FLERR,"Invalid fraction value {} in set type/ratio command", fraction); + error->all(FLERR, iarg + 2, "Invalid fraction value {} in set type/ratio command", + fraction); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed {} in set type/ratio command", ivalue); + error->all(FLERR, iarg + 3, "Invalid random number seed {} in set type/ratio command", + ivalue); setrandom(TYPE_RATIO); iarg += 4; @@ -129,11 +134,12 @@ void Set::command(int narg, char **arg) nsubset = utils::bnumeric(FLERR, arg[iarg+2], false, lmp); ivalue = utils::inumeric(FLERR, arg[iarg+3], false, lmp); if (newtype <= 0 || newtype > atom->ntypes) - error->all(FLERR,"Invalid type value {} in set type/subset command", newtype); + error->all(FLERR, iarg + 1, "Invalid type value {} in set type/subset command", newtype); if (nsubset < 0) - error->all(FLERR,"Invalid subset size {} in set type/subset command", nsubset); + error->all(FLERR, iarg + 2, "Invalid subset size {} in set type/subset command", nsubset); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed {} in set type/subset command", ivalue); + error->all(FLERR, iarg + 3, "Invalid random number seed {} in set type/subset command", + ivalue); setrandom(TYPE_SUBSET); iarg += 4; @@ -142,7 +148,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); if (!atom->molecule_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(MOLECULE); iarg += 2; @@ -193,7 +200,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->q_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(CHARGE); iarg += 2; @@ -202,7 +210,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->rmass_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(MASS); iarg += 2; @@ -215,7 +224,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+3],"^v_")) varparse(arg[iarg+3],3); else zvalue = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (!atom->ellipsoid_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SHAPE); iarg += 4; @@ -224,7 +234,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->line_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(LENGTH); iarg += 2; @@ -233,7 +244,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->tri_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(TRI); iarg += 2; @@ -246,7 +258,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+3],"^v_")) varparse(arg[iarg+3],3); else zvalue = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (!atom->mu_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(DIPOLE); iarg += 4; @@ -255,11 +268,12 @@ void Set::command(int narg, char **arg) ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); dvalue = utils::numeric(FLERR,arg[iarg+2],false,lmp); if (!atom->mu_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed in set command"); + error->all(FLERR, iarg + 1, "Invalid random number seed in set command"); if (dvalue <= 0.0) - error->all(FLERR,"Invalid dipole length in set command"); + error->all(FLERR, iarg + 2, "Invalid dipole length in set command"); setrandom(DIPOLE_RANDOM); iarg += 3; @@ -276,11 +290,13 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+4],"^v_")) varparse(arg[iarg+4],4); else zvalue = utils::numeric(FLERR,arg[iarg+4],false,lmp); if ((xvalue == 0.0) && (yvalue == 0.0) && (zvalue == 0.0)) - error->all(FLERR,"At least one spin vector component must be non-zero"); + error->all(FLERR, Error::NOPOINTER, "At least one spin vector component must be non-zero"); if (!atom->sp_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (dvalue <= 0.0) - error->all(FLERR,"Invalid spin magnitude {} in set {} command", dvalue, arg[iarg]); + error->all(FLERR, iarg + 1, "Invalid spin magnitude {} in set {} command", dvalue, + arg[iarg]); set(SPIN_ATOM); iarg += 5; @@ -293,11 +309,14 @@ void Set::command(int narg, char **arg) error->warning(FLERR, "Set attribute spin/random is deprecated. " "Please use spin/atom/random instead."); if (!atom->sp_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed {} in set {} command", ivalue, arg[iarg]); + error->all(FLERR, iarg + 1, "Invalid random number seed {} in set {} command", ivalue, + arg[iarg]); if (dvalue <= 0.0) - error->all(FLERR,"Invalid spin magnitude {} in set {} command", dvalue, arg[iarg]); + error->all(FLERR, iarg + 2, "Invalid spin magnitude {} in set {} command", dvalue, + arg[iarg]); setrandom(SPIN_RANDOM); iarg += 3; @@ -306,7 +325,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->eradius_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(RADIUS_ELECTRON); iarg += 2; @@ -315,7 +335,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->spin_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SPIN_ELECTRON); iarg += 2; @@ -330,7 +351,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+4],"^v_")) varparse(arg[iarg+4],4); else wvalue = utils::numeric(FLERR,arg[iarg+4],false,lmp); if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag && !atom->quat_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(QUAT); iarg += 5; @@ -338,9 +360,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set quat/random", error); ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag && !atom->quat_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed in set command"); + error->all(FLERR, iarg + 1, "Invalid random number seed in set command"); setrandom(QUAT_RANDOM); iarg += 2; @@ -349,7 +372,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = DEG2RAD * utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->line_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(THETA); iarg += 2; @@ -357,9 +381,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set theta/random", error); ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); if (!atom->line_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0) - error->all(FLERR,"Invalid random number seed in set command"); + error->all(FLERR, iarg + 1, "Invalid random number seed in set command"); set(THETA_RANDOM); iarg += 2; @@ -372,7 +397,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+3],"^v_")) varparse(arg[iarg+3],3); else zvalue = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (!atom->angmom_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(ANGMOM); iarg += 4; @@ -385,7 +411,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+3],"^v_")) varparse(arg[iarg+3],3); else zvalue = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (!atom->omega_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(OMEGA); iarg += 4; @@ -394,7 +421,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->radius_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(RADIUS_ATOM); iarg += 2; @@ -403,7 +431,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->radius_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(DIAMETER); iarg += 2; @@ -413,13 +442,14 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->rmass_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); - if (dvalue <= 0.0) error->all(FLERR,"Invalid density in set command"); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); + if (dvalue <= 0.0) error->all(FLERR, iarg + 1, "Invalid density in set command"); discflag = 0; if (strcmp(arg[iarg],"density/disc") == 0) { discflag = 1; if (domain->dimension != 2) - error->all(FLERR,"Density/disc option requires 2d simulation"); + error->all(FLERR, Error::NOLASTLINE, "Density/disc option requires 2d simulation"); } set(DENSITY); iarg += 2; @@ -429,7 +459,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->temperature_flag) - error->all(FLERR,"Cannot set this attribute for this atom style"); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(TEMPERATURE); iarg += 2; @@ -438,8 +469,9 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->vfrac_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); - if (dvalue <= 0.0) error->all(FLERR,"Invalid volume in set command"); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); + if (dvalue <= 0.0) error->all(FLERR, iarg + 1, "Invalid volume in set command"); set(VOLUME); iarg += 2; @@ -462,14 +494,11 @@ void Set::command(int narg, char **arg) else zimage = utils::inumeric(FLERR,arg[iarg+3],false,lmp); } if (ximageflag && ximage && !domain->xperiodic) - error->all(FLERR, - "Cannot set non-zero image flag for non-periodic dimension"); + error->all(FLERR, iarg + 1,"Cannot set non-zero image flag for non-periodic dimension"); if (yimageflag && yimage && !domain->yperiodic) - error->all(FLERR, - "Cannot set non-zero image flag for non-periodic dimension"); + error->all(FLERR, iarg + 2, "Cannot set non-zero image flag for non-periodic dimension"); if (zimageflag && zimage && !domain->zperiodic) - error->all(FLERR, - "Cannot set non-zero image flag for non-periodic dimension"); + error->all(FLERR, iarg + 3, "Cannot set non-zero image flag for non-periodic dimension"); set(IMAGE); iarg += 4; @@ -477,9 +506,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set bond", error); ivalue = utils::expand_type_int(FLERR, arg[iarg+1], Atom::BOND, lmp); if (atom->avec->bonds_allow == 0) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0 || ivalue > atom->nbondtypes) - error->all(FLERR,"Invalid value in set command"); + error->all(FLERR, iarg + 1, "Invalid value {} in set bond command", ivalue); topology(BOND); iarg += 2; @@ -487,9 +517,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set angle", error); ivalue = utils::expand_type_int(FLERR, arg[iarg+1], Atom::ANGLE, lmp); if (atom->avec->angles_allow == 0) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0 || ivalue > atom->nangletypes) - error->all(FLERR,"Invalid value in set command"); + error->all(FLERR, iarg + 1, "Invalid value {} in set angle command", ivalue); topology(ANGLE); iarg += 2; @@ -497,8 +528,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set dihedral", error); ivalue = utils::expand_type_int(FLERR, arg[iarg+1], Atom::DIHEDRAL, lmp); if (atom->avec->dihedrals_allow == 0) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0 || ivalue > atom->ndihedraltypes) + error->all(FLERR, iarg + 1, "Invalid value {} in set dihedral command", ivalue); error->all(FLERR,"Invalid value in set command"); topology(DIHEDRAL); iarg += 2; @@ -507,9 +540,10 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set improper", error); ivalue = utils::expand_type_int(FLERR, arg[iarg+1], Atom::IMPROPER, lmp); if (atom->avec->impropers_allow == 0) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); if (ivalue <= 0 || ivalue > atom->nimpropertypes) - error->all(FLERR,"Invalid value in set command"); + error->all(FLERR, iarg + 1, "Invalid value {} in set improper command", ivalue); topology(IMPROPER); iarg += 2; @@ -518,7 +552,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->rho_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SPH_RHO); iarg += 2; @@ -527,7 +562,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); if (!atom->rheo_status_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(RHEO_STATUS); iarg += 2; @@ -536,7 +572,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->esph_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SPH_E); iarg += 2; @@ -545,7 +582,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->cv_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SPH_CV); iarg += 2; @@ -554,7 +592,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->rho_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SPH_RHO); iarg += 2; @@ -564,10 +603,12 @@ void Set::command(int narg, char **arg) else if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else { dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (dvalue < 0.0) error->all(FLERR,"Illegal set command"); + if (dvalue < 0.0) + error->all(FLERR, iarg + 1, "Invalid value {} in set edpd/temp command", dvalue); } if (!atom->edpd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(EDPD_TEMP); iarg += 2; @@ -577,10 +618,12 @@ void Set::command(int narg, char **arg) else if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else { dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (dvalue < 0.0) error->all(FLERR,"Illegal set command"); + if (dvalue < 0.0) + error->all(FLERR, iarg + 1, "Invalid value {} in set edpd/cv command", dvalue); } if (!atom->edpd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(EDPD_CV); iarg += 2; @@ -592,9 +635,11 @@ void Set::command(int narg, char **arg) cc_index = utils::inumeric(FLERR,arg[iarg+1],false,lmp); dvalue = utils::numeric(FLERR,arg[iarg+2],false,lmp); if (cc_index < 1) error->all(FLERR,"Illegal set command"); + error->all(FLERR, iarg + 1, "Invalid index value {} in set cc command", cc_index); } if (!atom->tdpd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(CC); iarg += 3; @@ -603,7 +648,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->smd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SMD_MASS_DENSITY); iarg += 2; @@ -612,7 +658,8 @@ void Set::command(int narg, char **arg) if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); if (!atom->smd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(SMD_CONTACT_RADIUS); iarg += 2; @@ -622,10 +669,12 @@ void Set::command(int narg, char **arg) else if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else { dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (dvalue < 0.0) error->all(FLERR,"Illegal set command"); + if (dvalue < 0.0) + error->all(FLERR, iarg + 1, "Invalid value {} in set dpd/theta command", dvalue); } if (!atom->dpd_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(DPDTHETA); iarg += 2; @@ -635,10 +684,12 @@ void Set::command(int narg, char **arg) else if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else { dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (dvalue < 0.0) error->all(FLERR,"Illegal set command"); + if (dvalue < 0.0) + error->all(FLERR, iarg + 1, "Invalid value {} in set epsilon command", dvalue); } if (!atom->dielectric_flag) - error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style()); + error->all(FLERR, iarg, "Cannot set attribute {} for atom style {}", arg[iarg], + atom->get_style()); set(EPSILON); iarg += 2; @@ -652,26 +703,29 @@ void Set::command(int narg, char **arg) if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set", error); index_custom = atom->find_custom(argi.get_name(),flag,cols); if (index_custom < 0) - error->all(FLERR,"Set keyword or custom property {} does not exist",pname); + error->all(FLERR, iarg, "Set keyword or custom property {} does not exist", pname); switch (argi.get_type()) { case ArgInfo::INAME: if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1); else ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); - if (flag != 0) error->all(FLERR,"Set command custom property {} is not integer",pname); + if (flag != 0) + error->all(FLERR, iarg + 1, "Set command custom property {} is not integer", pname); if (argi.get_dim() == 0) { if (cols > 0) - error->all(FLERR,"Set command custom integer property {} is not a vector",pname); + error->all(FLERR, iarg, "Set command custom integer property {} is not a vector", + pname); set(IVEC); } else if (argi.get_dim() == 1) { if (cols == 0) - error->all(FLERR,"Set command custom integer property {} is not an array",pname); + error->all(FLERR, iarg, "Set command custom integer property {} is not an array", + pname); icol_custom = argi.get_index1(); if (icol_custom <= 0 || icol_custom > cols) - error->all(FLERR,"Set command per-atom custom integer array {} is accessed " - "out-of-range",pname); + error->all(FLERR, iarg, "Set command per-atom custom integer array {} is accessed " + "out-of-range{}", pname, utils::errorurl(20)); set(IARRAY); } else error->all(FLERR,"Illegal set command"); break; @@ -683,15 +737,15 @@ void Set::command(int narg, char **arg) if (argi.get_dim() == 0) { if (cols > 0) - error->all(FLERR,"Set command custom double property {} is not a vector",pname); + error->all(FLERR, iarg, "Set command custom double property {} is not a vector", pname); set(DVEC); } else if (argi.get_dim() == 1) { if (cols == 0) - error->all(FLERR,"Set command custom double property {} is not an array",pname); + error->all(FLERR, iarg, "Set command custom double property {} is not an array", pname); icol_custom = argi.get_index1(); if (icol_custom <= 0 || icol_custom > cols) - error->all(FLERR,"Set command per-atom custom double array {} is " - "accessed out-of-range",pname); + error->all(FLERR, iarg, "Set command per-atom custom double array {} is accessed " + "out-of-range{}", pname, utils::errorurl(20)); set(DARRAY); } else error->all(FLERR,"Illegal set command"); break; @@ -737,7 +791,7 @@ void Set::selection(int n) if (style == ATOM_SELECT) { if (atom->tag_enable == 0) - error->all(FLERR,"Cannot use set atom with no atom IDs defined"); + error->all(FLERR, Error::NOLASTLINE, "Cannot use set atom with no atom IDs defined"); bigint nlobig,nhibig; utils::bounds(FLERR,id,1,MAXTAGINT,nlobig,nhibig,error); @@ -748,7 +802,7 @@ void Set::selection(int n) } else if (style == MOL_SELECT) { if (atom->molecule_flag == 0) - error->all(FLERR,"Cannot use set mol with no molecule IDs defined"); + error->all(FLERR, Error::NOLASTLINE, "Cannot use set mol with no molecule IDs defined"); bigint nlobig,nhibig; utils::bounds(FLERR,id,1,MAXTAGINT,nlobig,nhibig,error); @@ -767,7 +821,7 @@ void Set::selection(int n) } else if (style == GROUP_SELECT) { int igroup = group->find(id); - if (igroup == -1) error->all(FLERR,"Could not find set group ID {}", id); + if (igroup == -1) error->all(FLERR, Error::NOLASTLINE, "Could not find set group ID {}", id); int groupbit = group->bitmask[igroup]; int *mask = atom->mask; @@ -777,7 +831,7 @@ void Set::selection(int n) } else if (style == REGION_SELECT) { auto region = domain->get_region_by_id(id); - if (!region) error->all(FLERR,"Set region {} does not exist", id); + if (!region) error->all(FLERR, Error::NOLASTLINE, "Set region {} does not exist", id); region->prematch(); double **x = atom->x; @@ -871,7 +925,7 @@ void Set::set(int keyword) if (keyword == TYPE) { if (ivalue <= 0 || ivalue > atom->ntypes) - error->one(FLERR,"Invalid value in set command"); + error->one(FLERR, Error::NOLASTLINE, "Invalid value {} in set type command", ivalue); atom->type[i] = ivalue; } else if (keyword == MOLECULE) atom->molecule[i] = ivalue; @@ -886,21 +940,25 @@ void Set::set(int keyword) // ensure that scaled charges are consistent the new charge value if (atom->epsilon) atom->q_scaled[i] = dvalue / atom->epsilon[i]; } else if (keyword == MASS) { - if (dvalue <= 0.0) error->one(FLERR,"Invalid mass in set command"); + if (dvalue <= 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid mass {} in set command", dvalue); atom->rmass[i] = dvalue; } else if (keyword == DIAMETER) { - if (dvalue < 0.0) error->one(FLERR,"Invalid diameter in set command"); + if (dvalue < 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid diameter {} in set command", dvalue); atom->radius[i] = 0.5 * dvalue; } else if (keyword == VOLUME) { - if (dvalue <= 0.0) error->one(FLERR,"Invalid volume in set command"); + if (dvalue <= 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid volume {} in set command", dvalue); atom->vfrac[i] = dvalue; } else if (keyword == RHEO_STATUS) { if (ivalue != 0 && ivalue != 1) - error->one(FLERR,"Invalid value {} in set command for rheo/status", ivalue); + error->one(FLERR, Error::NOLASTLINE, "Invalid value {} in set command for rheo/status", + ivalue); atom->rheo_status[i] = ivalue; } @@ -936,10 +994,12 @@ void Set::set(int keyword) else if (keyword == SHAPE) { if (xvalue < 0.0 || yvalue < 0.0 || zvalue < 0.0) - error->one(FLERR,"Invalid shape in set command"); + error->one(FLERR, Error::NOLASTLINE, "Invalid ellipsoid shape {} {} {} in set command", + xvalue, yvalue, zvalue); if (xvalue > 0.0 || yvalue > 0.0 || zvalue > 0.0) { if (xvalue == 0.0 || yvalue == 0.0 || zvalue == 0.0) - error->one(FLERR,"Invalid shape in set command"); + error->one(FLERR, Error::NOLASTLINE, "Invalid ellipsoid shape {} {} {} in set command", + xvalue, yvalue, zvalue); } avec_ellipsoid->set_shape(i,0.5*xvalue,0.5*yvalue,0.5*zvalue); } @@ -947,14 +1007,16 @@ void Set::set(int keyword) // set length of line particle else if (keyword == LENGTH) { - if (dvalue < 0.0) error->one(FLERR,"Invalid length in set command"); + if (dvalue < 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid length {} in set command", dvalue); avec_line->set_length(i,dvalue); } // set corners of tri particle else if (keyword == TRI) { - if (dvalue < 0.0) error->one(FLERR,"Invalid length in set command"); + if (dvalue < 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid length {} in set command", dvalue); avec_tri->set_equilateral(i,dvalue); } @@ -966,7 +1028,8 @@ void Set::set(int keyword) // else set rmass to density directly else if (keyword == DENSITY) { - if (dvalue <= 0.0) error->one(FLERR,"Invalid density in set command"); + if (dvalue <= 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid density {} in set command", dvalue); if (atom->radius_flag && atom->radius[i] > 0.0) if (discflag) atom->rmass[i] = MY_PI*atom->radius[i]*atom->radius[i] * dvalue; @@ -1013,7 +1076,8 @@ void Set::set(int keyword) else if (keyword == SPIN_ATOM) { if (dvalue < 0.0) - error->one(FLERR,"Incorrect value for atomic spin magnitude: {}", dvalue); + error->one(FLERR, Error::NOLASTLINE, "Incorrect value for atomic spin magnitude: {}", + dvalue); double **sp = atom->sp; double inorm = 1.0/sqrt(xvalue*xvalue+yvalue*yvalue+zvalue*zvalue); sp[i][0] = inorm*xvalue; @@ -1027,7 +1091,7 @@ void Set::set(int keyword) else if (keyword == RADIUS_ELECTRON) { atom->eradius[i] = dvalue; if (dvalue < 0.0) - error->one(FLERR,"Incorrect value for electron radius: {}", dvalue); + error->one(FLERR, Error::NOLASTLINE, "Incorrect value for electron radius: {}", dvalue); } // set electron spin @@ -1036,7 +1100,7 @@ void Set::set(int keyword) if ((dvalue == -1) || (dvalue == 1) || (dvalue == 0) || (dvalue == 2) || (dvalue == 3)) atom->spin[i] = (int)dvalue; else - error->one(FLERR,"Incorrect value for electron spin: {}", dvalue); + error->one(FLERR, Error::NOLASTLINE, "Incorrect value for electron spin: {}", dvalue); } // set quaternion orientation of ellipsoid or tri or body particle or sphere/bpm @@ -1054,9 +1118,10 @@ void Set::set(int keyword) else if (atom->quat_flag) quat2 = atom->quat; else - error->one(FLERR,"Cannot set quaternion for atom that has none"); + error->one(FLERR, Error::NOLASTLINE, "Cannot set quaternion for atom that has none"); if (domain->dimension == 2 && (xvalue != 0.0 || yvalue != 0.0)) - error->one(FLERR,"Cannot set quaternion with xy components for 2d system"); + error->one(FLERR, Error::NOLASTLINE, + "Cannot set quaternion with xy components for 2d system"); const double theta2 = MY_PI2 * wvalue/180.0; const double sintheta2 = sin(theta2); @@ -1083,7 +1148,7 @@ void Set::set(int keyword) else if (keyword == THETA) { if (atom->line[i] < 0) - error->one(FLERR,"Cannot set theta for atom that is not a line"); + error->one(FLERR, Error::NOLASTLINE, "Cannot set theta for atom that is not a line"); avec_line->bonus[atom->line[i]].theta = dvalue; } @@ -1104,7 +1169,8 @@ void Set::set(int keyword) // set temperature of particle else if (keyword == TEMPERATURE) { - if (dvalue < 0.0) error->one(FLERR,"Invalid temperature in set command"); + if (dvalue < 0.0) + error->one(FLERR, Error::NOLASTLINE, "Invalid temperature {} in set command", dvalue); atom->temperature[i] = dvalue; } @@ -1240,7 +1306,7 @@ void Set::setrandom(int keyword) nsubset = static_cast (fraction * allcount); } else if (keyword == TYPE_SUBSET) { if (nsubset > allcount) - error->all(FLERR,"Set type/subset value exceeds eligible atoms"); + error->all(FLERR, Error::NOLASTLINE, "Set type/subset value exceeds eligible atoms"); } // make selection @@ -1372,7 +1438,7 @@ void Set::setrandom(int keyword) else if (atom->quat_flag) quat2 = atom->quat; else - error->one(FLERR,"Cannot set quaternion for atom that has none"); + error->one(FLERR, Error::NOLASTLINE, "Cannot set quaternion for atom that has none"); ranpark->reset(seed,x[i]); s = ranpark->uniform(); @@ -1405,7 +1471,7 @@ void Set::setrandom(int keyword) else if (atom->quat_flag) quat2 = atom->quat; else - error->one(FLERR,"Cannot set quaternion for atom that has none"); + error->one(FLERR, Error::NOLASTLINE, "Cannot set quaternion for atom that has none"); ranpark->reset(seed,x[i]); theta2 = MY_PI*ranpark->uniform(); @@ -1431,7 +1497,7 @@ void Set::setrandom(int keyword) for (i = 0; i < nlocal; i++) { if (select[i]) { if (atom->line[i] < 0) - error->one(FLERR,"Cannot set theta for atom that is not a line"); + error->one(FLERR, Error::NOLASTLINE, "Cannot set theta for atom that is not a line"); ranpark->reset(seed,x[i]); avec_line->bonus[atom->line[i]].theta = MY_2PI*ranpark->uniform(); count++; @@ -1452,7 +1518,7 @@ void Set::topology(int keyword) // error check if (atom->molecular == Atom::TEMPLATE) - error->all(FLERR,"Cannot set bond topology types for atom style template"); + error->all(FLERR, Error::NOLASTLINE, "Cannot set bond topology types for atom style template"); // border swap to acquire ghost atom info // enforce PBC before in case atoms are outside box @@ -1481,7 +1547,9 @@ void Set::topology(int keyword) for (int i = 0; i < nlocal; i++) for (m = 0; m < atom->num_bond[i]; m++) { atom1 = atom->map(atom->bond_atom[i][m]); - if (atom1 == -1) error->one(FLERR,"Bond atom missing in set command"); + if (atom1 == -1) + error->one(FLERR, Error::NOLASTLINE, "Bond atom missing in set command" + + utils::errorurl(5)); if (select[i] && select[atom1]) { atom->bond_type[i][m] = ivalue; count++; @@ -1499,7 +1567,8 @@ void Set::topology(int keyword) atom2 = atom->map(atom->angle_atom2[i][m]); atom3 = atom->map(atom->angle_atom3[i][m]); if (atom1 == -1 || atom2 == -1 || atom3 == -1) - error->one(FLERR,"Angle atom missing in set command"); + error->one(FLERR, Error::NOLASTLINE, "Angle atom missing in set command" + + utils::errorurl(5)); if (select[atom1] && select[atom2] && select[atom3]) { atom->angle_type[i][m] = ivalue; count++; @@ -1518,7 +1587,8 @@ void Set::topology(int keyword) atom3 = atom->map(atom->dihedral_atom3[i][m]); atom4 = atom->map(atom->dihedral_atom4[i][m]); if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1) - error->one(FLERR,"Dihedral atom missing in set command"); + error->one(FLERR, Error::NOLASTLINE, "Dihedral atom missing in set command" + + utils::errorurl(5)); if (select[atom1] && select[atom2] && select[atom3] && select[atom4]) { atom->dihedral_type[i][m] = ivalue; count++; @@ -1537,7 +1607,8 @@ void Set::topology(int keyword) atom3 = atom->map(atom->improper_atom3[i][m]); atom4 = atom->map(atom->improper_atom4[i][m]); if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1) - error->one(FLERR,"Improper atom missing in set command"); + error->one(FLERR, Error::NOLASTLINE, "Improper atom missing in set command" + + utils::errorurl(5)); if (select[atom1] && select[atom2] && select[atom3] && select[atom4]) { atom->improper_type[i][m] = ivalue; count++; @@ -1554,9 +1625,9 @@ void Set::varparse(const char *name, int m) int ivar = input->variable->find(name+2); if (ivar < 0) - error->all(FLERR,"Variable name {} for set command does not exist", name); + error->all(FLERR, Error::NOLASTLINE, "Variable name {} for set command does not exist", name); if (!input->variable->atomstyle(ivar)) - error->all(FLERR,"Variable {} for set command is invalid style", name); + error->all(FLERR, Error::NOLASTLINE, "Variable {} for set command is invalid style", name); if (m == 1) { varflag1 = 1; ivar1 = ivar; From c037ec07a242fbd15b47241de566bd329afcc7dc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Mar 2025 22:45:41 -0400 Subject: [PATCH 19/33] make utils::errorurl() point to generic page with error code 0 --- src/utils.cpp | 6 +++++- src/utils.h | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 94660f546a..4c48069afb 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -281,7 +281,11 @@ void utils::fmtargs_print(FILE *fp, fmt::string_view format, fmt::format_args ar std::string utils::errorurl(int errorcode) { - return fmt::format("\nFor more information see https://docs.lammps.org/err{:04d}", errorcode); + if (errorcode == 0) + return "\nFor more information see https://docs.lammps.org/Errors_details.html"; + else if (errorcode > 0) + return fmt::format("\nFor more information see https://docs.lammps.org/err{:04d}", errorcode); + else return ""; // negative numbers are reserved for future use pointing to a different URL } void utils::flush_buffers(LAMMPS *lmp) diff --git a/src/utils.h b/src/utils.h index 39dd58a79e..b403d78061 100644 --- a/src/utils.h +++ b/src/utils.h @@ -173,11 +173,12 @@ output are compressed to a single blank by calling :cpp:func:`strcompress()` * * The LAMMPS manual contains detailed explanations for errors and * warnings where a simple error message may not be sufficient. These can - * be reached through URLs with a numeric code. This function creates the + * be reached through URLs with a numeric code > 0. This function creates the * corresponding text to be included into the error message that redirects - * the user to that URL. + * the user to that URL. Using an error code of 0 returns a message + * pointing to a URL discussing error messages in general. * - * \param errorcode number pointing to a paragraph in the manual */ + * \param errorcode non-negative number pointing to a paragraph in the manual */ std::string errorurl(int errorcode); From 3ab91e4e1a159572147ed6ce4ac44a40622aae79 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Mar 2025 23:12:21 -0400 Subject: [PATCH 20/33] fix up uses of errorurl(21) --- src/BPM/bond_bpm_spring_plastic.cpp | 4 +- src/DPD-MESO/pair_mdpd.cpp | 4 +- src/DPD-MESO/pair_mdpd_rhosum.cpp | 2 +- src/EXTRA-MOLECULE/improper_cossq.cpp | 41 ++-- src/EXTRA-MOLECULE/improper_ring.cpp | 320 +++++++++++++------------- src/MISC/pair_srp.cpp | 6 +- src/RHEO/pair_rheo.cpp | 4 +- src/SPH/pair_sph_idealgas.cpp | 10 +- 8 files changed, 191 insertions(+), 200 deletions(-) diff --git a/src/BPM/bond_bpm_spring_plastic.cpp b/src/BPM/bond_bpm_spring_plastic.cpp index 35df659992..b011df2f9b 100644 --- a/src/BPM/bond_bpm_spring_plastic.cpp +++ b/src/BPM/bond_bpm_spring_plastic.cpp @@ -296,7 +296,7 @@ void BondBPMSpringPlastic::allocate() void BondBPMSpringPlastic::coeff(int narg, char **arg) { if (narg != 5) - error->all(FLERR, "Incorrect args for bond coefficients"); + error->all(FLERR, "Incorrect args for bond coefficients" + utils::errorurl(21)); if (!allocated) allocate(); int ilo, ihi; @@ -319,7 +319,7 @@ void BondBPMSpringPlastic::coeff(int narg, char **arg) if (1.0 + ecrit[i] > max_stretch) max_stretch = 1.0 + ecrit[i]; } - if (count == 0) error->all(FLERR, "Incorrect args for bond coefficients"); + if (count == 0) error->all(FLERR, "Incorrect args for bond coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- diff --git a/src/DPD-MESO/pair_mdpd.cpp b/src/DPD-MESO/pair_mdpd.cpp index 8fcfa3d786..3e78804093 100644 --- a/src/DPD-MESO/pair_mdpd.cpp +++ b/src/DPD-MESO/pair_mdpd.cpp @@ -244,7 +244,7 @@ void PairMDPD::settings(int narg, char **arg) void PairMDPD::coeff(int narg, char **arg) { - if (narg != 7 ) error->all(FLERR,"Incorrect args for pair coefficients\n itype jtype A B gamma cutA cutB"); + if (narg != 7 ) error->all(FLERR,"Incorrect args for pair coefficients" + utils::errorurl(21)); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -257,7 +257,7 @@ void PairMDPD::coeff(int narg, char **arg) double cut_one = utils::numeric(FLERR,arg[5],false,lmp); double cut_two = utils::numeric(FLERR,arg[6],false,lmp); - if (cut_one < cut_two) error->all(FLERR,"Incorrect args for pair coefficients\n cutA should be larger than cutB."); + if (cut_one < cut_two) error->all(FLERR, "Value for cutA should be larger than cutB."); int count = 0; for (int i = ilo; i <= ihi; i++) { diff --git a/src/DPD-MESO/pair_mdpd_rhosum.cpp b/src/DPD-MESO/pair_mdpd_rhosum.cpp index 7526ea75d7..ae96867c4a 100644 --- a/src/DPD-MESO/pair_mdpd_rhosum.cpp +++ b/src/DPD-MESO/pair_mdpd_rhosum.cpp @@ -64,7 +64,7 @@ PairMDPDRhoSum::~PairMDPDRhoSum() { void PairMDPDRhoSum::init_style() { if (!atom->rho_flag) - error->all(FLERR,"Pair style mdpd/rhosum requires atom attribute rho"); + error->all(FLERR, Error::NOLASTLINE, "Pair style mdpd/rhosum requires atom attribute rho"); // need a full neighbor list neighbor->add_request(this, NeighConst::REQ_FULL); diff --git a/src/EXTRA-MOLECULE/improper_cossq.cpp b/src/EXTRA-MOLECULE/improper_cossq.cpp index bcf9715990..5d7a425217 100644 --- a/src/EXTRA-MOLECULE/improper_cossq.cpp +++ b/src/EXTRA-MOLECULE/improper_cossq.cpp @@ -249,28 +249,29 @@ void ImproperCossq::allocate() void ImproperCossq::coeff(int narg, char **arg) { - /* Check whether there exist sufficient number of arguments. - 0: type of improper to be applied to - 1: energetic constant - 2: equilibrium angle in degrees */ - if (narg != 3) error->all(FLERR,"Incorrect args for cossq improper coefficients"); - if (!allocated) allocate(); + /* Check whether there exist sufficient number of arguments. + 0: type of improper to be applied to + 1: energetic constant + 2: equilibrium angle in degrees */ + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients" + utils::errorurl(21)); + if (!allocated) allocate(); - int ilo,ihi; - utils::bounds(FLERR,arg[0],1,atom->nimpropertypes,ilo,ihi,error); + int ilo,ihi; + utils::bounds(FLERR,arg[0],1,atom->nimpropertypes,ilo,ihi,error); - double k_one = utils::numeric(FLERR,arg[1],false,lmp); - double chi_one = utils::numeric(FLERR,arg[2],false,lmp); + double k_one = utils::numeric(FLERR,arg[1],false,lmp); + double chi_one = utils::numeric(FLERR,arg[2],false,lmp); - int count = 0; - for (int i = ilo; i <= ihi; i++) { - k[i] = k_one; - chi[i] = ((chi_one * MY_PI)/180.0); - setflag[i] = 1; - count++; - } + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + chi[i] = ((chi_one * MY_PI)/180.0); + setflag[i] = 1; + count++; + } - if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients" + utils::errorurl(21)); + if (count == 0) + error->all(FLERR, "Incorrect args for improper coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- @@ -278,8 +279,8 @@ void ImproperCossq::coeff(int narg, char **arg) ------------------------------------------------------------------------- */ void ImproperCossq::write_restart(FILE *fp) { - fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); - fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); } /* ---------------------------------------------------------------------- diff --git a/src/EXTRA-MOLECULE/improper_ring.cpp b/src/EXTRA-MOLECULE/improper_ring.cpp index 8fee93055e..57adb50260 100644 --- a/src/EXTRA-MOLECULE/improper_ring.cpp +++ b/src/EXTRA-MOLECULE/improper_ring.cpp @@ -80,187 +80,176 @@ ImproperRing::~ImproperRing() void ImproperRing::compute(int eflag, int vflag) { - /* Be careful!: "chi" is the equilibrium angle in radians. */ - int i1,i2,i3,i4,n,type; + /* Be careful!: "chi" is the equilibrium angle in radians. */ + int i1,i2,i3,i4,n,type; - double eimproper ; + double eimproper ; - /* Compatibility variables. */ - double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z; - double f1[3], f3[3], f4[3]; + /* Compatibility variables. */ + double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z; + double f1[3], f3[3], f4[3]; - /* Actual computation variables. */ - int at1[3], at2[3], at3[3], icomb; - double bvec1x[3], bvec1y[3], bvec1z[3], - bvec2x[3], bvec2y[3], bvec2z[3], - bvec1n[3], bvec2n[3], bend_angle[3]; - double angle_summer, angfac, cfact1, cfact2, cfact3; - double cjiji, ckjji, ckjkj, fix, fiy, fiz, fjx, fjy, fjz, fkx, fky, fkz; + /* Actual computation variables. */ + int at1[3], at2[3], at3[3], icomb; + double bvec1x[3], bvec1y[3], bvec1z[3], + bvec2x[3], bvec2y[3], bvec2z[3], + bvec1n[3], bvec2n[3], bend_angle[3]; + double angle_summer, angfac, cfact1, cfact2, cfact3; + double cjiji, ckjji, ckjkj, fix, fiy, fiz, fjx, fjy, fjz, fkx, fky, fkz; - eimproper = 0.0; - ev_init(eflag,vflag); + eimproper = 0.0; + ev_init(eflag,vflag); - /* References to simulation data. */ - double **x = atom->x; - double **f = atom->f; - int **improperlist = neighbor->improperlist; - int nimproperlist = neighbor->nimproperlist; - int nlocal = atom->nlocal; - int newton_bond = force->newton_bond; + /* References to simulation data. */ + double **x = atom->x; + double **f = atom->f; + int **improperlist = neighbor->improperlist; + int nimproperlist = neighbor->nimproperlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; - /* A description of the potential can be found in - Macromolecules 35, pp. 1463-1472 (2002). */ - for (n = 0; n < nimproperlist; n++) - { - /* Take the ids of the atoms contributing to the improper potential. */ - i1 = improperlist[n][0]; /* Atom "1" of Figure 1 from the above reference.*/ - i2 = improperlist[n][1]; /* Atom "2" ... */ - i3 = improperlist[n][2]; /* Atom "3" ... */ - i4 = improperlist[n][3]; /* Atom "9" ... */ - type = improperlist[n][4]; + /* A description of the potential can be found in + Macromolecules 35, pp. 1463-1472 (2002). */ + for (n = 0; n < nimproperlist; n++) { + /* Take the ids of the atoms contributing to the improper potential. */ + i1 = improperlist[n][0]; /* Atom "1" of Figure 1 from the above reference.*/ + i2 = improperlist[n][1]; /* Atom "2" ... */ + i3 = improperlist[n][2]; /* Atom "3" ... */ + i4 = improperlist[n][3]; /* Atom "9" ... */ + type = improperlist[n][4]; - /* Calculate the necessary variables for LAMMPS implementation. - if (evflag) ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, - vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); - Although, they are irrelevant to the calculation of the potential, we keep - them for maximal compatibility. */ - vb1x = x[i1][0] - x[i2][0]; vb1y = x[i1][1] - x[i2][1]; vb1z = x[i1][2] - x[i2][2]; + /* Calculate the necessary variables for LAMMPS implementation. + if (evflag) ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, + vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); + Although, they are irrelevant to the calculation of the potential, we keep + them for maximal compatibility. */ + vb1x = x[i1][0] - x[i2][0]; vb1y = x[i1][1] - x[i2][1]; vb1z = x[i1][2] - x[i2][2]; - vb2x = x[i3][0] - x[i2][0]; vb2y = x[i3][1] - x[i2][1]; vb2z = x[i3][2] - x[i2][2]; + vb2x = x[i3][0] - x[i2][0]; vb2y = x[i3][1] - x[i2][1]; vb2z = x[i3][2] - x[i2][2]; - vb3x = x[i4][0] - x[i3][0]; vb3y = x[i4][1] - x[i3][1]; vb3z = x[i4][2] - x[i3][2]; + vb3x = x[i4][0] - x[i3][0]; vb3y = x[i4][1] - x[i3][1]; vb3z = x[i4][2] - x[i3][2]; - /* Pass the atom tags to form the necessary combinations. */ - at1[0] = i1; at2[0] = i2; at3[0] = i4; /* ids: 1-2-9 */ - at1[1] = i1; at2[1] = i2; at3[1] = i3; /* ids: 1-2-3 */ - at1[2] = i4; at2[2] = i2; at3[2] = i3; /* ids: 9-2-3 */ + /* Pass the atom tags to form the necessary combinations. */ + at1[0] = i1; at2[0] = i2; at3[0] = i4; /* ids: 1-2-9 */ + at1[1] = i1; at2[1] = i2; at3[1] = i3; /* ids: 1-2-3 */ + at1[2] = i4; at2[2] = i2; at3[2] = i3; /* ids: 9-2-3 */ - /* Initialize the sum of the angles differences. */ - angle_summer = 0.0; - /* Take a loop over the three angles, defined by each triad: */ - for (icomb = 0; icomb < 3; icomb ++) + /* Initialize the sum of the angles differences. */ + angle_summer = 0.0; + /* Take a loop over the three angles, defined by each triad: */ + for (icomb = 0; icomb < 3; icomb ++) { - /* Bond vector connecting the first and the second atom. */ - bvec1x[icomb] = x[at2[icomb]][0] - x[at1[icomb]][0]; - bvec1y[icomb] = x[at2[icomb]][1] - x[at1[icomb]][1]; - bvec1z[icomb] = x[at2[icomb]][2] - x[at1[icomb]][2]; - /* also calculate the norm of the vector: */ - bvec1n[icomb] = sqrt( bvec1x[icomb]*bvec1x[icomb] - + bvec1y[icomb]*bvec1y[icomb] - + bvec1z[icomb]*bvec1z[icomb]); - /* Bond vector connecting the second and the third atom. */ - bvec2x[icomb] = x[at3[icomb]][0] - x[at2[icomb]][0]; - bvec2y[icomb] = x[at3[icomb]][1] - x[at2[icomb]][1]; - bvec2z[icomb] = x[at3[icomb]][2] - x[at2[icomb]][2]; - /* also calculate the norm of the vector: */ - bvec2n[icomb] = sqrt( bvec2x[icomb]*bvec2x[icomb] - + bvec2y[icomb]*bvec2y[icomb] - + bvec2z[icomb]*bvec2z[icomb]); + /* Bond vector connecting the first and the second atom. */ + bvec1x[icomb] = x[at2[icomb]][0] - x[at1[icomb]][0]; + bvec1y[icomb] = x[at2[icomb]][1] - x[at1[icomb]][1]; + bvec1z[icomb] = x[at2[icomb]][2] - x[at1[icomb]][2]; + /* also calculate the norm of the vector: */ + bvec1n[icomb] = sqrt( bvec1x[icomb]*bvec1x[icomb] + + bvec1y[icomb]*bvec1y[icomb] + + bvec1z[icomb]*bvec1z[icomb]); + /* Bond vector connecting the second and the third atom. */ + bvec2x[icomb] = x[at3[icomb]][0] - x[at2[icomb]][0]; + bvec2y[icomb] = x[at3[icomb]][1] - x[at2[icomb]][1]; + bvec2z[icomb] = x[at3[icomb]][2] - x[at2[icomb]][2]; + /* also calculate the norm of the vector: */ + bvec2n[icomb] = sqrt( bvec2x[icomb]*bvec2x[icomb] + + bvec2y[icomb]*bvec2y[icomb] + + bvec2z[icomb]*bvec2z[icomb]); - /* Calculate the bending angle of the atom triad: */ - bend_angle[icomb] = ( bvec2x[icomb]*bvec1x[icomb] - + bvec2y[icomb]*bvec1y[icomb] - + bvec2z[icomb]*bvec1z[icomb]); - bend_angle[icomb] /= (bvec1n[icomb] * bvec2n[icomb]); - if (bend_angle[icomb] > 1.0) bend_angle[icomb] -= SMALL; - if (bend_angle[icomb] < -1.0) bend_angle[icomb] += SMALL; + /* Calculate the bending angle of the atom triad: */ + bend_angle[icomb] = ( bvec2x[icomb]*bvec1x[icomb] + + bvec2y[icomb]*bvec1y[icomb] + + bvec2z[icomb]*bvec1z[icomb]); + bend_angle[icomb] /= (bvec1n[icomb] * bvec2n[icomb]); + if (bend_angle[icomb] > 1.0) bend_angle[icomb] -= SMALL; + if (bend_angle[icomb] < -1.0) bend_angle[icomb] += SMALL; - /* Append the current angle to the sum of angle differences. */ - angle_summer += (bend_angle[icomb] - chi[type]); + /* Append the current angle to the sum of angle differences. */ + angle_summer += (bend_angle[icomb] - chi[type]); } - if (eflag) eimproper = (1.0/6.0) *k[type] * powint(angle_summer,6); - /* - printf("The tags: %d-%d-%d-%d, of type %d .\n",atom->tag[i1],atom->tag[i2],atom->tag[i3],atom->tag[i4],type); - // printf("The coordinates of the first: %f, %f, %f.\n", x[i1][0], x[i1][1], x[i1][2]); - // printf("The coordinates of the second: %f, %f, %f.\n", x[i2][0], x[i2][1], x[i2][2]); - // printf("The coordinates of the third: %f, %f, %f.\n", x[i3][0], x[i3][1], x[i3][2]); - // printf("The coordinates of the fourth: %f, %f, %f.\n", x[i4][0], x[i4][1], x[i4][2]); - printf("The angles are: %f / %f / %f equilibrium: %f.\n", bend_angle[0], bend_angle[1], bend_angle[2],chi[type]); - printf("The energy of the improper: %f with prefactor %f.\n", eimproper,(1.0/6.0)*k[type]); - printf("The sum of the angles: %f.\n", angle_summer); - */ + if (eflag) eimproper = (1.0/6.0) *k[type] * powint(angle_summer,6); - /* Force calculation acting on all atoms. - Calculate the derivatives of the potential. */ - angfac = k[type] * powint(angle_summer,5); + /* Force calculation acting on all atoms. + Calculate the derivatives of the potential. */ + angfac = k[type] * powint(angle_summer,5); - f1[0] = 0.0; f1[1] = 0.0; f1[2] = 0.0; - f3[0] = 0.0; f3[1] = 0.0; f3[2] = 0.0; - f4[0] = 0.0; f4[1] = 0.0; f4[2] = 0.0; + f1[0] = 0.0; f1[1] = 0.0; f1[2] = 0.0; + f3[0] = 0.0; f3[1] = 0.0; f3[2] = 0.0; + f4[0] = 0.0; f4[1] = 0.0; f4[2] = 0.0; - /* Take a loop over the three angles, defined by each triad: */ - for (icomb = 0; icomb < 3; icomb ++) + /* Take a loop over the three angles, defined by each triad: */ + for (icomb = 0; icomb < 3; icomb ++) { - /* Calculate the squares of the distances. */ - cjiji = bvec1n[icomb] * bvec1n[icomb]; ckjkj = bvec2n[icomb] * bvec2n[icomb]; + /* Calculate the squares of the distances. */ + cjiji = bvec1n[icomb] * bvec1n[icomb]; ckjkj = bvec2n[icomb] * bvec2n[icomb]; - ckjji = bvec2x[icomb] * bvec1x[icomb] - + bvec2y[icomb] * bvec1y[icomb] - + bvec2z[icomb] * bvec1z[icomb] ; + ckjji = bvec2x[icomb] * bvec1x[icomb] + + bvec2y[icomb] * bvec1y[icomb] + + bvec2z[icomb] * bvec1z[icomb] ; - cfact1 = angfac / (sqrt(ckjkj * cjiji)); - cfact2 = ckjji / ckjkj; - cfact3 = ckjji / cjiji; + cfact1 = angfac / (sqrt(ckjkj * cjiji)); + cfact2 = ckjji / ckjkj; + cfact3 = ckjji / cjiji; - /* Calculate the force acted on the third atom of the angle. */ - fkx = cfact2 * bvec2x[icomb] - bvec1x[icomb]; - fky = cfact2 * bvec2y[icomb] - bvec1y[icomb]; - fkz = cfact2 * bvec2z[icomb] - bvec1z[icomb]; + /* Calculate the force acted on the third atom of the angle. */ + fkx = cfact2 * bvec2x[icomb] - bvec1x[icomb]; + fky = cfact2 * bvec2y[icomb] - bvec1y[icomb]; + fkz = cfact2 * bvec2z[icomb] - bvec1z[icomb]; - /* Calculate the force acted on the first atom of the angle. */ - fix = bvec2x[icomb] - cfact3 * bvec1x[icomb]; - fiy = bvec2y[icomb] - cfact3 * bvec1y[icomb]; - fiz = bvec2z[icomb] - cfact3 * bvec1z[icomb]; + /* Calculate the force acted on the first atom of the angle. */ + fix = bvec2x[icomb] - cfact3 * bvec1x[icomb]; + fiy = bvec2y[icomb] - cfact3 * bvec1y[icomb]; + fiz = bvec2z[icomb] - cfact3 * bvec1z[icomb]; - /* Finally, calculate the force acted on the middle atom of the angle.*/ - fjx = - fix - fkx; fjy = - fiy - fky; fjz = - fiz - fkz; + /* Finally, calculate the force acted on the middle atom of the angle.*/ + fjx = - fix - fkx; fjy = - fiy - fky; fjz = - fiz - fkz; - /* Consider the appropriate scaling of the forces: */ - fix *= cfact1; fiy *= cfact1; fiz *= cfact1; - fjx *= cfact1; fjy *= cfact1; fjz *= cfact1; - fkx *= cfact1; fky *= cfact1; fkz *= cfact1; + /* Consider the appropriate scaling of the forces: */ + fix *= cfact1; fiy *= cfact1; fiz *= cfact1; + fjx *= cfact1; fjy *= cfact1; fjz *= cfact1; + fkx *= cfact1; fky *= cfact1; fkz *= cfact1; - if (at1[icomb] == i1) {f1[0] += fix; f1[1] += fiy; f1[2] += fiz;} - else if (at2[icomb] == i1) {f1[0] += fjx; f1[1] += fjy; f1[2] += fjz;} - else if (at3[icomb] == i1) {f1[0] += fkx; f1[1] += fky; f1[2] += fkz;} + if (at1[icomb] == i1) {f1[0] += fix; f1[1] += fiy; f1[2] += fiz;} + else if (at2[icomb] == i1) {f1[0] += fjx; f1[1] += fjy; f1[2] += fjz;} + else if (at3[icomb] == i1) {f1[0] += fkx; f1[1] += fky; f1[2] += fkz;} - if (at1[icomb] == i3) {f3[0] += fix; f3[1] += fiy; f3[2] += fiz;} - else if (at2[icomb] == i3) {f3[0] += fjx; f3[1] += fjy; f3[2] += fjz;} - else if (at3[icomb] == i3) {f3[0] += fkx; f3[1] += fky; f3[2] += fkz;} + if (at1[icomb] == i3) {f3[0] += fix; f3[1] += fiy; f3[2] += fiz;} + else if (at2[icomb] == i3) {f3[0] += fjx; f3[1] += fjy; f3[2] += fjz;} + else if (at3[icomb] == i3) {f3[0] += fkx; f3[1] += fky; f3[2] += fkz;} - if (at1[icomb] == i4) {f4[0] += fix; f4[1] += fiy; f4[2] += fiz;} - else if (at2[icomb] == i4) {f4[0] += fjx; f4[1] += fjy; f4[2] += fjz;} - else if (at3[icomb] == i4) {f4[0] += fkx; f4[1] += fky; f4[2] += fkz;} + if (at1[icomb] == i4) {f4[0] += fix; f4[1] += fiy; f4[2] += fiz;} + else if (at2[icomb] == i4) {f4[0] += fjx; f4[1] += fjy; f4[2] += fjz;} + else if (at3[icomb] == i4) {f4[0] += fkx; f4[1] += fky; f4[2] += fkz;} - /* Store the contribution to the global arrays: */ - /* Take the id of the atom from the at1[icomb] element, i1 = at1[icomb]. */ - if (newton_bond || at1[icomb] < nlocal) { - f[at1[icomb]][0] += fix; - f[at1[icomb]][1] += fiy; - f[at1[icomb]][2] += fiz; - } - /* Take the id of the atom from the at2[icomb] element, i2 = at2[icomb]. */ - if (newton_bond || at2[icomb] < nlocal) { - f[at2[icomb]][0] += fjx; - f[at2[icomb]][1] += fjy; - f[at2[icomb]][2] += fjz; - } - /* Take the id of the atom from the at3[icomb] element, i3 = at3[icomb]. */ - if (newton_bond || at3[icomb] < nlocal) { - f[at3[icomb]][0] += fkx; - f[at3[icomb]][1] += fky; - f[at3[icomb]][2] += fkz; - } + /* Store the contribution to the global arrays: */ + /* Take the id of the atom from the at1[icomb] element, i1 = at1[icomb]. */ + if (newton_bond || at1[icomb] < nlocal) { + f[at1[icomb]][0] += fix; + f[at1[icomb]][1] += fiy; + f[at1[icomb]][2] += fiz; + } + /* Take the id of the atom from the at2[icomb] element, i2 = at2[icomb]. */ + if (newton_bond || at2[icomb] < nlocal) { + f[at2[icomb]][0] += fjx; + f[at2[icomb]][1] += fjy; + f[at2[icomb]][2] += fjz; + } + /* Take the id of the atom from the at3[icomb] element, i3 = at3[icomb]. */ + if (newton_bond || at3[icomb] < nlocal) { + f[at3[icomb]][0] += fkx; + f[at3[icomb]][1] += fky; + f[at3[icomb]][2] += fkz; + } } - if (evflag) ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, - vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); + if (evflag) ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, + vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); } } @@ -285,31 +274,32 @@ void ImproperRing::allocate() void ImproperRing ::coeff(int narg, char **arg) { - /* Check whether there exist sufficient number of arguments. - 0: type of improper to be applied to - 1: energetic constant - 2: equilibrium angle in degrees */ - if (narg != 3) error->all(FLERR,"Incorrect args for RING improper coefficients"); - if (!allocated) allocate(); + /* Check whether there exist sufficient number of arguments. + 0: type of improper to be applied to + 1: energetic constant + 2: equilibrium angle in degrees */ + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients" + utils::errorurl(21)); + if (!allocated) allocate(); - int ilo,ihi; - utils::bounds(FLERR,arg[0],1,atom->nimpropertypes,ilo,ihi,error); + int ilo,ihi; + utils::bounds(FLERR,arg[0],1,atom->nimpropertypes,ilo,ihi,error); - double k_one = utils::numeric(FLERR,arg[1],false,lmp); - double chi_one = utils::numeric(FLERR,arg[2],false,lmp); + double k_one = utils::numeric(FLERR,arg[1],false,lmp); + double chi_one = utils::numeric(FLERR,arg[2],false,lmp); - int count = 0; - for (int i = ilo; i <= ihi; i++) { - /* Read the k parameter in kcal/mol. */ - k[i] = k_one; - /* "chi_one" stores the equilibrium angle in degrees. - Convert it to radians and store its cosine. */ - chi[i] = cos((chi_one/180.0)*MY_PI); - setflag[i] = 1; - count++; - } + int count = 0; + for (int i = ilo; i <= ihi; i++) { + /* Read the k parameter in kcal/mol. */ + k[i] = k_one; + /* "chi_one" stores the equilibrium angle in degrees. + Convert it to radians and store its cosine. */ + chi[i] = cos((chi_one/180.0)*MY_PI); + setflag[i] = 1; + count++; + } - if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients" + utils::errorurl(21)); + if (count == 0) + error->all(FLERR,"Incorrect args for improper coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- diff --git a/src/MISC/pair_srp.cpp b/src/MISC/pair_srp.cpp index c81fd3c969..65397aa22a 100644 --- a/src/MISC/pair_srp.cpp +++ b/src/MISC/pair_srp.cpp @@ -395,19 +395,19 @@ void PairSRP::settings(int narg, char **arg) void PairSRP::coeff(int narg, char **arg) { if (narg < 3 || narg > 4) - error->all(FLERR,"PairSRP: Incorrect args for pair coeff"); + error->all(FLERR,"Incorrect args for pair coefficients" + utils::errorurl(21)); if (!allocated) allocate(); if (btype_str.size() > 0) { btype = utils::expand_type_int(FLERR, btype_str, Atom::BOND, lmp); if ((btype > atom->nbondtypes) || (btype <= 0)) - error->all(FLERR,"Invalid bond type {} for pair style srp", btype); + error->all(FLERR, Error::NOLASTLINE, "Invalid bond type {} for pair style srp", btype); } if (bptype_str.size() > 0) bptype = utils::expand_type_int(FLERR, bptype_str, Atom::ATOM, lmp); if ((bptype < 1) || (bptype > atom->ntypes)) - error->all(FLERR,"Invalid bond particle type {} for pair style srp", bptype); + error->all(FLERR, Error::NOLASTLINE, "Invalid bond particle type {} for pair style srp", bptype); // reset cutoffs if explicitly set if (allocated) { diff --git a/src/RHEO/pair_rheo.cpp b/src/RHEO/pair_rheo.cpp index be2dfc6ecf..0fdd711ba5 100644 --- a/src/RHEO/pair_rheo.cpp +++ b/src/RHEO/pair_rheo.cpp @@ -452,7 +452,7 @@ void PairRHEO::settings(int narg, char **arg) void PairRHEO::coeff(int narg, char **arg) { - if (narg != 2) error->all(FLERR, "Incorrect number of args for pair_style rheo coefficients"); + if (narg != 2) error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); if (!allocated) allocate(); int ilo, ihi, jlo, jhi; @@ -467,7 +467,7 @@ void PairRHEO::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR, "Incorrect args for pair rheo coefficients"); + if (count == 0) error->all(FLERR, "Incorrect args for pair coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- diff --git a/src/SPH/pair_sph_idealgas.cpp b/src/SPH/pair_sph_idealgas.cpp index 963579aee3..fc4bd6a9da 100644 --- a/src/SPH/pair_sph_idealgas.cpp +++ b/src/SPH/pair_sph_idealgas.cpp @@ -31,7 +31,9 @@ using namespace LAMMPS_NS; PairSPHIdealGas::PairSPHIdealGas(LAMMPS *lmp) : Pair(lmp) { if ((atom->esph_flag != 1) || (atom->rho_flag != 1) || (atom->vest_flag != 1)) - error->all(FLERR, "Pair sph/idealgas requires atom attributes energy, density, and velocity estimates, e.g. in atom_style sph"); + error->all(FLERR, Error::NOLASTLINE, + "Pair sph/idealgas requires atom attributes energy, density, and velocity estimates," + " e.g. in atom_style sph"); restartinfo = 0; single_enable = 0; @@ -212,8 +214,7 @@ void PairSPHIdealGas::settings(int narg, char **/*arg*/) void PairSPHIdealGas::coeff(int narg, char **arg) { - if (narg != 4) - error->all(FLERR,"Incorrect number of args for pair_style sph/idealgas coefficients"); + if (narg != 4) error->all(FLERR,"Incorrect args for pair coefficients" + utils::errorurl(21)); if (!allocated) allocate(); @@ -234,8 +235,7 @@ void PairSPHIdealGas::coeff(int narg, char **arg) } } - if (count == 0) - error->all(FLERR,"Incorrect args for pair sph/idealgas coefficients"); + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients" + utils::errorurl(21)); } /* ---------------------------------------------------------------------- From 649fd86e1131b5fcb2d7d0bd606763568bc3810b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Mar 2025 19:57:57 -0400 Subject: [PATCH 21/33] add errorurl(11) with explanation to "Energy/Stess was not tallied by pair style" --- doc/src/Errors_details.rst | 15 ++++++++++++++- src/TALLY/compute_force_tally.cpp | 4 ++-- src/TALLY/compute_heat_flux_tally.cpp | 8 +++++--- src/TALLY/compute_heat_flux_virial_tally.cpp | 10 ++++++---- src/TALLY/compute_pe_mol_tally.cpp | 5 +++-- src/TALLY/compute_pe_tally.cpp | 10 ++++++---- src/TALLY/compute_stress_tally.cpp | 10 ++++++---- 7 files changed, 42 insertions(+), 20 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index 9af9b984fb..a5b0d1b100 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -458,7 +458,20 @@ with the relevant person or people who can update the executable. .. _err011: -.. currently unused +Energy or stress was not tallied by pair style +---------------------------------------------- + +This warning will be printed by computes from the :ref:`TALLY package +`. Those use a callback mechanism that will only work for +regular pair-wise additive pair styles like :doc:`Lennard-Jones +`, :doc:`Morse `, :doc:`Born-Meyer-Huggins +`, and similar. Making these computes work for many-body +potentials will require to implement similar callbacks suitable for such +potentials, which has not been done (and may be difficult to do in a +generic fashion). Whether this warning indicates that contributions to +the computed properties are missing depends on the groups used. At any +rate, careful testing of the results is advised when this warning +appears. .. _err0012: diff --git a/src/TALLY/compute_force_tally.cpp b/src/TALLY/compute_force_tally.cpp index 6b09cac785..5dd3d1958d 100644 --- a/src/TALLY/compute_force_tally.cpp +++ b/src/TALLY/compute_force_tally.cpp @@ -182,7 +182,7 @@ double ComputeForceTally::compute_scalar() error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // sum accumulated forces across procs @@ -201,7 +201,7 @@ void ComputeForceTally::compute_peratom() error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // collect contributions from ghost atoms diff --git a/src/TALLY/compute_heat_flux_tally.cpp b/src/TALLY/compute_heat_flux_tally.cpp index 65b66db7d0..5c53328b32 100644 --- a/src/TALLY/compute_heat_flux_tally.cpp +++ b/src/TALLY/compute_heat_flux_tally.cpp @@ -69,7 +69,8 @@ ComputeHeatFluxTally::~ComputeHeatFluxTally() void ComputeHeatFluxTally::init() { if (force->pair == nullptr) - error->all(FLERR, "Trying to use compute heat/flux/tally without pair style"); + error->all(FLERR, Error::NOLASTLINE, + "Trying to use compute heat/flux/tally without pair style"); else force->pair->add_tally_callback(this); @@ -205,10 +206,11 @@ void ComputeHeatFluxTally::compute_vector() { invoked_vector = update->ntimestep; if ((did_setup != invoked_vector) || (update->eflag_global != invoked_vector)) - error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Stress was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // collect contributions from ghost atoms diff --git a/src/TALLY/compute_heat_flux_virial_tally.cpp b/src/TALLY/compute_heat_flux_virial_tally.cpp index a87732c15e..20b287dde4 100644 --- a/src/TALLY/compute_heat_flux_virial_tally.cpp +++ b/src/TALLY/compute_heat_flux_virial_tally.cpp @@ -191,10 +191,11 @@ double ComputeHeatFluxVirialTally::compute_scalar() invoked_scalar = update->ntimestep; if ((did_setup != invoked_scalar) || (update->eflag_global != invoked_scalar)) - error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Stress was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // sum heat flux across procs double hflux = 0.0; @@ -213,10 +214,11 @@ void ComputeHeatFluxVirialTally::compute_peratom() { invoked_peratom = update->ntimestep; if ((did_setup != invoked_peratom) || (update->eflag_global != invoked_peratom)) - error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Stress was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // collect contributions from ghost atoms diff --git a/src/TALLY/compute_pe_mol_tally.cpp b/src/TALLY/compute_pe_mol_tally.cpp index e5ddb57568..1aecc1165f 100644 --- a/src/TALLY/compute_pe_mol_tally.cpp +++ b/src/TALLY/compute_pe_mol_tally.cpp @@ -126,10 +126,11 @@ void ComputePEMolTally::compute_vector() { invoked_vector = update->ntimestep; if ((did_setup != invoked_vector) || (update->eflag_global != invoked_vector)) - error->all(FLERR, Error::NOLASTLINE, "Energy was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Energy was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Energy was not tallied by pair style"); + error->warning(FLERR, "Energy was not tallied by pair style" + utils::errorurl(11)); // sum accumulated energies across procs diff --git a/src/TALLY/compute_pe_tally.cpp b/src/TALLY/compute_pe_tally.cpp index d77cfe2646..6fde2126f7 100644 --- a/src/TALLY/compute_pe_tally.cpp +++ b/src/TALLY/compute_pe_tally.cpp @@ -167,10 +167,11 @@ double ComputePETally::compute_scalar() { invoked_scalar = update->ntimestep; if ((did_setup != invoked_scalar) || (update->eflag_global != invoked_scalar)) - error->all(FLERR, Error::NOLASTLINE, "Energy was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Energy was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Energy was not tallied by pair style"); + error->warning(FLERR, "Energy was not tallied by pair style" + utils::errorurl(11)); // sum accumulated energies across procs @@ -186,10 +187,11 @@ void ComputePETally::compute_peratom() { invoked_peratom = update->ntimestep; if ((did_setup != invoked_peratom) || (update->eflag_global != invoked_peratom)) - error->all(FLERR, Error::NOLASTLINE, "Energy was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Energy was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Energy was not tallied by pair style"); + error->warning(FLERR, "Energy was not tallied by pair style" + utils::errorurl(11)); // collect contributions from ghost atoms diff --git a/src/TALLY/compute_stress_tally.cpp b/src/TALLY/compute_stress_tally.cpp index c16e046dcf..3f264a92ce 100644 --- a/src/TALLY/compute_stress_tally.cpp +++ b/src/TALLY/compute_stress_tally.cpp @@ -202,10 +202,11 @@ double ComputeStressTally::compute_scalar() { invoked_scalar = update->ntimestep; if ((did_setup != invoked_scalar) || (update->eflag_global != invoked_scalar)) - error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Stress was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // sum accumulated forces across procs @@ -225,10 +226,11 @@ void ComputeStressTally::compute_peratom() { invoked_peratom = update->ntimestep; if ((did_setup != invoked_peratom) || (update->eflag_global != invoked_peratom)) - error->all(FLERR, Error::NOLASTLINE, "Stress was not tallied on needed timestep{}", utils::errorurl(22)); + error->all(FLERR, Error::NOLASTLINE, + "Stress was not tallied on needed timestep" + utils::errorurl(22)); if ((comm->me == 0) && !force->pair->did_tally_callback()) - error->warning(FLERR, "Stress was not tallied by pair style"); + error->warning(FLERR, "Stress was not tallied by pair style" + utils::errorurl(11)); // collect contributions from ghost atoms From 1b58a4695b33db76f08ade75a53a37109da2592f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Mar 2025 20:17:17 -0400 Subject: [PATCH 22/33] add explanations for "before/after simulation box is defined" errors --- doc/src/Errors_details.rst | 26 ++++++++++++++++++ src/DIELECTRIC/pppm_dielectric.cpp | 8 +++--- src/DIELECTRIC/pppm_disp_dielectric.cpp | 8 +++--- src/KIM/kim_init.cpp | 2 +- src/PHONON/dynamical_matrix.cpp | 2 +- src/PHONON/third_order.cpp | 2 +- src/QEQ/fix_qeq.cpp | 3 ++- src/REPLICA/hyper.cpp | 2 +- src/REPLICA/neb.cpp | 2 +- src/REPLICA/prd.cpp | 2 +- src/REPLICA/tad.cpp | 2 +- src/REPLICA/temper.cpp | 2 +- src/REPLICA/temper_grem.cpp | 2 +- src/REPLICA/temper_npt.cpp | 2 +- src/SPIN/neb_spin.cpp | 2 +- src/angle_write.cpp | 4 +-- src/atom.cpp | 6 +++-- src/balance.cpp | 2 +- src/change_box.cpp | 2 +- src/create_atoms.cpp | 2 +- src/create_bonds.cpp | 2 +- src/create_box.cpp | 3 ++- src/delete_atoms.cpp | 2 +- src/delete_bonds.cpp | 2 +- src/dihedral_write.cpp | 4 +-- src/displace_atoms.cpp | 2 +- src/group.cpp | 2 +- src/input.cpp | 36 +++++++++++++------------ src/kspace.cpp | 8 +++--- src/label_map.cpp | 2 +- src/minimize.cpp | 2 +- src/output.cpp | 2 +- src/read_data.cpp | 6 +++-- src/read_dump.cpp | 2 +- src/read_restart.cpp | 2 +- src/replicate.cpp | 2 +- src/rerun.cpp | 2 +- src/reset_atoms_id.cpp | 2 +- src/reset_atoms_image.cpp | 2 +- src/reset_atoms_mol.cpp | 2 +- src/run.cpp | 2 +- src/velocity.cpp | 2 +- src/write_coeff.cpp | 2 +- src/write_data.cpp | 2 +- src/write_restart.cpp | 2 +- 45 files changed, 107 insertions(+), 73 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index a5b0d1b100..ae731a316b 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -912,3 +912,29 @@ typically happens when there are multiple fix commands that advance atom positions with overlapping groups. Also, for some fix styles it is not immediately obvious that they include time integration. Please check the documentation carefully. + +.. _err0033: + +XXX command before simulation box is defined +-------------------------------------------- + +This error happens, when trying to excute a LAMMPS command that requires +information about the system dimensions, or the number atom, bond, +angle, dihedral, or improper types, or the number of atoms or similar +data that is only available *after* the simulation box has been created. +See the paragraph on :ref:`errors before or after the simulation box is +created ` for additional information. + +.. _err0034: + +XXX command after simulation box is defined +-------------------------------------------- + +This error happens, when trying to excute a LAMMPS command that that +changes a global setting that will be locked in when the simulation box +is created (for instance defining the :doc:`atom style `, +:doc:`dimension `, :doc:`newton `, or :doc:`units +` setting). These settings may only be changed *before* the +simulation box has been created. See the paragraph on :ref:`errors +before or after the simulation box is created ` for additional +information. diff --git a/src/DIELECTRIC/pppm_dielectric.cpp b/src/DIELECTRIC/pppm_dielectric.cpp index 0a24c44bd6..e5b0c5abb1 100644 --- a/src/DIELECTRIC/pppm_dielectric.cpp +++ b/src/DIELECTRIC/pppm_dielectric.cpp @@ -306,10 +306,10 @@ void PPPMDielectric::qsum_qsq(int warning_flag) // so issue warning or error if (fabs(qsum) > SMALL) { - std::string message = fmt::format("System is not charge neutral, net " - "charge = {:.8}",qsum); - if (!warn_nonneutral) error->all(FLERR,message + utils::errorurl(29)); - if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message + utils::errorurl(29)); + std::string message = fmt::format("System is not charge neutral, net charge = {:.8}{}", + qsum, utils::errorurl(29)); + if (!warn_nonneutral) error->all(FLERR,message); + if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message); warn_nonneutral = 2; } } diff --git a/src/DIELECTRIC/pppm_disp_dielectric.cpp b/src/DIELECTRIC/pppm_disp_dielectric.cpp index 252a9386e3..052b617351 100644 --- a/src/DIELECTRIC/pppm_disp_dielectric.cpp +++ b/src/DIELECTRIC/pppm_disp_dielectric.cpp @@ -580,10 +580,10 @@ void PPPMDispDielectric::qsum_qsq(int warning_flag) // so issue warning or error if (fabs(qsum) > SMALL) { - std::string message = fmt::format("System is not charge neutral, net " - "charge = {:.8}",qsum); - if (!warn_nonneutral) error->all(FLERR,message + utils::errorurl(29)); - if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message + utils::errorurl(29)); + std::string message = fmt::format("System is not charge neutral, net charge = {:.8}{}", + qsum, utils::errorurl(29)); + if (!warn_nonneutral) error->all(FLERR,message); + if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message); warn_nonneutral = 2; } } diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index f7dd01be49..48b4d2eec2 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -86,7 +86,7 @@ void KimInit::command(int narg, char **arg) if ((narg < 2) || (narg > 3)) error->all(FLERR, "Illegal 'kim init' command"); if (domain->box_exist) - error->all(FLERR, "Must use 'kim init' command before simulation box is defined"); + error->all(FLERR, "Must use 'kim init' command before simulation box is defined" + utils::errorurl(33)); char *model_name = utils::strdup(arg[0]); char *user_units = utils::strdup(arg[1]); diff --git a/src/PHONON/dynamical_matrix.cpp b/src/PHONON/dynamical_matrix.cpp index a0199747c4..bdcf9c36f3 100644 --- a/src/PHONON/dynamical_matrix.cpp +++ b/src/PHONON/dynamical_matrix.cpp @@ -112,7 +112,7 @@ void DynamicalMatrix::command(int narg, char **arg) MPI_Comm_rank(world,&me); if (domain->box_exist == 0) - error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); + error->all(FLERR,"Dynamical_matrix command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); lmp->init(); diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 378905bd29..e1d9161ef1 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -118,7 +118,7 @@ void ThirdOrder::command(int narg, char **arg) MPI_Comm_rank(world,&me); if (domain->box_exist == 0) - error->all(FLERR,"third_order command before simulation box is defined"); + error->all(FLERR,"third_order command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) error->all(FLERR,"Illegal third_order command"); // request a full neighbor list for use by this command diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index bbfb4d8a0b..8c54dc96cb 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -336,7 +336,8 @@ void FixQEq::init() MPI_Allreduce(&qsum_local,&qsum,1,MPI_DOUBLE,MPI_SUM,world); if ((comm->me == 0) && (fabs(qsum) > QSUMSMALL)) - error->warning(FLERR,"Fix {} group is not charge neutral, net charge = {:.8}", style, qsum); + error->warning(FLERR,"Fix {} group is not charge neutral, net charge = {:.8}{}", + style, qsum, utils::errorurl(29)); } /* ---------------------------------------------------------------------- */ diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 2c7d13766f..df853642b4 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -52,7 +52,7 @@ void Hyper::command(int narg, char **arg) // error checks if (domain->box_exist == 0) - error->all(FLERR,"Hyper command before simulation box is defined"); + error->all(FLERR,"Hyper command before simulation box is defined" + utils::errorurl(33)); if (narg < 4) error->all(FLERR,"Illegal hyper command"); diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 4b242965c8..a65fc9a58f 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -113,7 +113,7 @@ NEB::~NEB() void NEB::command(int narg, char **arg) { if (domain->box_exist == 0) - error->universe_all(FLERR, "NEB command before simulation box is defined"); + error->universe_all(FLERR, "NEB command before simulation box is defined" + utils::errorurl(33)); if (narg < 6) error->universe_all(FLERR, "Illegal NEB command: missing argument(s)"); diff --git a/src/REPLICA/prd.cpp b/src/REPLICA/prd.cpp index 91150d8a38..493fb4da54 100644 --- a/src/REPLICA/prd.cpp +++ b/src/REPLICA/prd.cpp @@ -60,7 +60,7 @@ void PRD::command(int narg, char **arg) // error checks if (domain->box_exist == 0) - error->all(FLERR,"PRD command before simulation box is defined"); + error->all(FLERR,"PRD command before simulation box is defined" + utils::errorurl(33)); if (universe->nworlds != universe->nprocs && atom->map_style == Atom::MAP_NONE) error->all(FLERR,"Cannot use PRD with multi-processor replicas " diff --git a/src/REPLICA/tad.cpp b/src/REPLICA/tad.cpp index 38ddfceb84..14f816b15e 100644 --- a/src/REPLICA/tad.cpp +++ b/src/REPLICA/tad.cpp @@ -74,7 +74,7 @@ void TAD::command(int narg, char **arg) // error checks if (domain->box_exist == 0) - error->all(FLERR,"Tad command before simulation box is defined"); + error->all(FLERR,"Tad command before simulation box is defined" + utils::errorurl(33)); if (universe->nworlds == 1) error->all(FLERR,"Cannot use TAD with a single replica for NEB"); if (universe->nworlds != universe->nprocs) diff --git a/src/REPLICA/temper.cpp b/src/REPLICA/temper.cpp index 77bc45e6e3..a7416418be 100644 --- a/src/REPLICA/temper.cpp +++ b/src/REPLICA/temper.cpp @@ -64,7 +64,7 @@ void Temper::command(int narg, char **arg) if (universe->nworlds == 1) error->universe_all(FLERR,"More than one processor partition required for temper command"); if (domain->box_exist == 0) - error->universe_all(FLERR,"Temper command before simulation box is defined"); + error->universe_all(FLERR,"Temper command before simulation box is defined" + utils::errorurl(33)); if (narg != 6 && narg != 7) error->universe_all(FLERR,"Illegal temper command"); int nsteps = utils::inumeric(FLERR,arg[0],false,lmp); diff --git a/src/REPLICA/temper_grem.cpp b/src/REPLICA/temper_grem.cpp index c4509791c3..9ef0fe8a4a 100644 --- a/src/REPLICA/temper_grem.cpp +++ b/src/REPLICA/temper_grem.cpp @@ -66,7 +66,7 @@ void TemperGrem::command(int narg, char **arg) if (universe->nworlds == 1) error->universe_all(FLERR,"More than one processor partition required for temper/grem command"); if (domain->box_exist == 0) - error->universe_all(FLERR,"Temper/grem command before simulation box is defined"); + error->universe_all(FLERR,"Temper/grem command before simulation box is defined" + utils::errorurl(33)); if (narg != 7 && narg != 8) error->universe_all(FLERR,"Illegal temper/grem command"); int nsteps = utils::inumeric(FLERR,arg[0],false,lmp); diff --git a/src/REPLICA/temper_npt.cpp b/src/REPLICA/temper_npt.cpp index aa72047fe7..4c04ecfe7b 100644 --- a/src/REPLICA/temper_npt.cpp +++ b/src/REPLICA/temper_npt.cpp @@ -66,7 +66,7 @@ void TemperNPT::command(int narg, char **arg) if (universe->nworlds == 1) error->universe_all(FLERR,"More than one processor partition required for temper/npt command"); if (domain->box_exist == 0) - error->universe_all(FLERR,"Temper/npt command before simulation box is defined"); + error->universe_all(FLERR,"Temper/npt command before simulation box is defined" + utils::errorurl(33)); if (narg != 7 && narg != 8) error->universe_all(FLERR,"Illegal temper/npt command"); int nsteps = utils::inumeric(FLERR,arg[0],false,lmp); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 00b92b906a..34d5a37b17 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -95,7 +95,7 @@ NEBSpin::~NEBSpin() void NEBSpin::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"NEBSpin command before simulation box is defined"); + error->all(FLERR,"NEBSpin command before simulation box is defined" + utils::errorurl(33)); if (narg < 6) error->universe_all(FLERR,"Illegal NEBSpin command"); diff --git a/src/angle_write.cpp b/src/angle_write.cpp index 1c1601d002..4a328a9c98 100644 --- a/src/angle_write.cpp +++ b/src/angle_write.cpp @@ -43,11 +43,11 @@ void AngleWrite::command(int narg, char **arg) // sanity checks if (domain->box_exist == 0) - error->all(FLERR, "Angle_write command before simulation box is defined"); + error->all(FLERR, "Angle_write command before simulation box is defined" + utils::errorurl(33)); if (atom->avec->angles_allow == 0) error->all(FLERR, "Angle_write command when no angles allowed"); auto angle = force->angle; - if (angle == nullptr) error->all(FLERR, "Angle_write command before an angle_style is defined"); + if (angle == nullptr) error->all(FLERR, "Angle_write command before an angle_style is defined" + utils::errorurl(33)); if (angle && (force->angle->writedata == 0)) error->all(FLERR, "Angle style must support writing coeffs to data file for angle_write"); diff --git a/src/atom.cpp b/src/atom.cpp index bbc00dec75..3a95d65371 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -836,13 +836,15 @@ void Atom::modify_params(int narg, char **arg) if (strcmp(arg[iarg],"id") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "atom_modify id", error); if (domain->box_exist) - error->all(FLERR, idx, "Atom_modify id command after simulation box is defined"); + error->all(FLERR, idx, "Atom_modify id command after simulation box is defined" + + utils::errorurl(34)); tag_enable = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"map") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "atom_modify map", error); if (domain->box_exist) - error->all(FLERR, idx, "Atom_modify map command after simulation box is defined"); + error->all(FLERR, idx, "Atom_modify map command after simulation box is defined" + + utils::errorurl(34)); if (strcmp(arg[iarg+1],"array") == 0) map_user = MAP_ARRAY; else if (strcmp(arg[iarg+1],"hash") == 0) map_user = MAP_HASH; else if (strcmp(arg[iarg+1],"yes") == 0) map_user = MAP_YES; diff --git a/src/balance.cpp b/src/balance.cpp index 5ebe242bfb..22a0938b3c 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -113,7 +113,7 @@ Balance::~Balance() void Balance::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, -1, "Balance command before simulation box is defined"); + error->all(FLERR, -1, "Balance command before simulation box is defined" + utils::errorurl(33)); if (comm->me == 0) utils::logmesg(lmp,"Balancing ...\n"); diff --git a/src/change_box.cpp b/src/change_box.cpp index 5223218f3d..e6b7b5cdc4 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -45,7 +45,7 @@ void ChangeBox::command(int narg, char **arg) int i; if (domain->box_exist == 0) - error->all(FLERR,"Change_box command before simulation box is defined"); + error->all(FLERR,"Change_box command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) utils::missing_cmd_args(FLERR, "change_box", error); if (comm->me == 0) utils::logmesg(lmp,"Changing box ...\n"); diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index dc00e2e1d1..7be67f4c49 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -73,7 +73,7 @@ CreateAtoms::CreateAtoms(LAMMPS *lmp) : Command(lmp), basistype(nullptr) {} void CreateAtoms::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Create_atoms command before simulation box is defined"); + error->all(FLERR, "Create_atoms command before simulation box is defined" + utils::errorurl(33)); if (modify->nfix_restart_peratom) error->all(FLERR, "Cannot create_atoms after reading restart file with per-atom info"); diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 416884138b..28d6f4c136 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -44,7 +44,7 @@ CreateBonds::CreateBonds(LAMMPS *lmp) : Command(lmp) {} void CreateBonds::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Create_bonds command before simulation box is defined"); + error->all(FLERR, "Create_bonds command before simulation box is defined" + utils::errorurl(33)); if (atom->tag_enable == 0) error->all(FLERR, "Cannot use create_bonds unless atoms have IDs"); if (atom->molecular != Atom::MOLECULAR) error->all(FLERR, "Cannot use create_bonds with non-molecular system"); diff --git a/src/create_box.cpp b/src/create_box.cpp index 93e699e06b..52d56a4ea1 100644 --- a/src/create_box.cpp +++ b/src/create_box.cpp @@ -38,7 +38,8 @@ void CreateBox::command(int narg, char **arg) { if (narg < 2) utils::missing_cmd_args(FLERR, "create_box", error); - if (domain->box_exist) error->all(FLERR, "Cannot create_box after simulation box is defined"); + if (domain->box_exist) + error->all(FLERR, "Cannot create_box after simulation box is defined" + utils::errorurl(34)); if (domain->dimension == 2 && domain->zperiodic == 0) error->all(FLERR, "Cannot run 2d simulation with nonperiodic Z dimension"); diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 35f608461b..96639ae85e 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -52,7 +52,7 @@ DeleteAtoms::DeleteAtoms(LAMMPS *lmp) : Command(lmp) {} void DeleteAtoms::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Delete_atoms command before simulation box is defined"); + error->all(FLERR, "Delete_atoms command before simulation box is defined" + utils::errorurl(33)); if (narg < 1) utils::missing_cmd_args(FLERR, "delete_atoms", error); if (atom->tag_enable == 0) error->all(FLERR, "Cannot use delete_atoms unless atoms have IDs"); diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index 056851bec1..95928138eb 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -40,7 +40,7 @@ DeleteBonds::DeleteBonds(LAMMPS *lmp) : Command(lmp) {} void DeleteBonds::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Delete_bonds command before simulation box is defined"); + error->all(FLERR,"Delete_bonds command before simulation box is defined" + utils::errorurl(33)); if (atom->natoms == 0) error->all(FLERR,"Delete_bonds command with no atoms existing"); if (atom->molecular != Atom::MOLECULAR) diff --git a/src/dihedral_write.cpp b/src/dihedral_write.cpp index 11d283dc27..24cae8db3b 100644 --- a/src/dihedral_write.cpp +++ b/src/dihedral_write.cpp @@ -42,12 +42,12 @@ void DihedralWrite::command(int narg, char **arg) // sanity checks if (domain->box_exist == 0) - error->all(FLERR, "Dihedral_write command before simulation box is defined"); + error->all(FLERR, "Dihedral_write command before simulation box is defined" + utils::errorurl(33)); if (atom->avec->dihedrals_allow == 0) error->all(FLERR, "Dihedral_write command when no dihedrals allowed"); auto dihedral = force->dihedral; if (dihedral == nullptr) - error->all(FLERR, "Dihedral_write command before an dihedral_style is defined"); + error->all(FLERR, "Dihedral_write command before an dihedral_style is defined" + utils::errorurl(33)); if (dihedral && (force->dihedral->writedata == 0)) error->all(FLERR, "Dihedral style must support writing coeffs to data file for dihedral_write"); diff --git a/src/displace_atoms.cpp b/src/displace_atoms.cpp index f930fa0980..b50090143b 100644 --- a/src/displace_atoms.cpp +++ b/src/displace_atoms.cpp @@ -63,7 +63,7 @@ void DisplaceAtoms::command(int narg, char **arg) int i; if (domain->box_exist == 0) - error->all(FLERR,"Displace_atoms command before simulation box is defined"); + error->all(FLERR,"Displace_atoms command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) error->all(FLERR,"Illegal displace_atoms command"); if (modify->nfix_restart_peratom) error->all(FLERR,"Cannot displace_atoms after " diff --git a/src/group.cpp b/src/group.cpp index 136faa4059..0b4ea743cf 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -92,7 +92,7 @@ void Group::assign(int narg, char **arg) { int i; - if (domain->box_exist == 0) error->all(FLERR, "Group command before simulation box is defined"); + if (domain->box_exist == 0) error->all(FLERR, "Group command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) utils::missing_cmd_args(FLERR, "group", error); // delete the group if not being used elsewhere diff --git a/src/input.cpp b/src/input.cpp index 6ea710f567..bc9a55052c 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1347,7 +1347,7 @@ void Input::variable_command() void Input::angle_coeff() { if (domain->box_exist == 0) - error->all(FLERR,"Angle_coeff command before simulation box is defined"); + error->all(FLERR,"Angle_coeff command before simulation box is defined" + utils::errorurl(33)); if (force->angle == nullptr) error->all(FLERR,"Angle_coeff command before angle_style is defined"); if (atom->avec->angles_allow == 0) @@ -1382,7 +1382,7 @@ void Input::atom_style() { if (narg < 1) utils::missing_cmd_args(FLERR, "atom_style", error); if (domain->box_exist) - error->all(FLERR,"Atom_style command after simulation box is defined"); + error->all(FLERR,"Atom_style command after simulation box is defined" + utils::errorurl(34)); atom->create_avec(arg[0],narg-1,&arg[1],1); } @@ -1391,7 +1391,7 @@ void Input::atom_style() void Input::bond_coeff() { if (domain->box_exist == 0) - error->all(FLERR,"Bond_coeff command before simulation box is defined"); + error->all(FLERR,"Bond_coeff command before simulation box is defined" + utils::errorurl(33)); if (force->bond == nullptr) error->all(FLERR,"Bond_coeff command before bond_style is defined"); if (atom->avec->bonds_allow == 0) @@ -1429,7 +1429,7 @@ void Input::bond_write() void Input::boundary() { if (domain->box_exist) - error->all(FLERR,"Boundary command after simulation box is defined"); + error->all(FLERR,"Boundary command after simulation box is defined" + utils::errorurl(34)); domain->set_boundary(narg,arg,0); } @@ -1486,7 +1486,8 @@ void Input::dielectric() void Input::dihedral_coeff() { if (domain->box_exist == 0) - error->all(FLERR,"Dihedral_coeff command before simulation box is defined"); + error->all(FLERR,"Dihedral_coeff command before simulation box is defined" + + utils::errorurl(33)); if (force->dihedral == nullptr) error->all(FLERR,"Dihedral_coeff command before dihedral_style is defined"); if (atom->avec->dihedrals_allow == 0) @@ -1514,7 +1515,7 @@ void Input::dimension() { if (narg != 1) error->all(FLERR, "Dimension command expects exactly 1 argument"); if (domain->box_exist) - error->all(FLERR,"Dimension command after simulation box is defined"); + error->all(FLERR,"Dimension command after simulation box is defined" + utils::errorurl(34)); domain->dimension = utils::inumeric(FLERR,arg[0],false,lmp); if (domain->dimension != 2 && domain->dimension != 3) error->all(FLERR, "Invalid dimension argument: {}", arg[0]); @@ -1565,7 +1566,7 @@ void Input::group_command() void Input::improper_coeff() { if (domain->box_exist == 0) - error->all(FLERR,"Improper_coeff command before simulation box is defined"); + error->all(FLERR,"Improper_coeff command before simulation box is defined" + utils::errorurl(33)); if (force->improper == nullptr) error->all(FLERR,"Improper_coeff command before improper_style is defined"); if (atom->avec->impropers_allow == 0) @@ -1607,7 +1608,8 @@ void Input::kspace_style() void Input::labelmap() { - if (domain->box_exist == 0) error->all(FLERR,"Labelmap command before simulation box is defined"); + if (domain->box_exist == 0) + error->all(FLERR,"Labelmap command before simulation box is defined" + utils::errorurl(33)); if (!atom->labelmapflag) atom->add_label_map(); atom->lmap->modify_lmap(narg,arg); } @@ -1625,7 +1627,7 @@ void Input::mass() { if (narg != 2) error->all(FLERR,"Illegal mass command: expected 2 arguments but found {}", narg); if (domain->box_exist == 0) - error->all(FLERR,"Mass command before simulation box is defined"); + error->all(FLERR,"Mass command before simulation box is defined" + utils::errorurl(33)); atom->set_mass(FLERR,narg,arg); } @@ -1641,7 +1643,7 @@ void Input::min_modify() void Input::min_style() { if (domain->box_exist == 0) - error->all(FLERR,"Min_style command before simulation box is defined"); + error->all(FLERR,"Min_style command before simulation box is defined" + utils::errorurl(33)); update->create_minimize(narg,arg,1); } @@ -1682,7 +1684,7 @@ void Input::newton() force->newton_pair = newton_pair; if (domain->box_exist && (newton_bond != force->newton_bond)) - error->all(FLERR,"Newton bond change after simulation box is defined"); + error->all(FLERR,"Newton bond change after simulation box is defined" + utils::errorurl(34)); force->newton_bond = newton_bond; if (newton_pair || newton_bond) force->newton = 1; @@ -1696,8 +1698,8 @@ void Input::newton() void Input::package() { if (domain->box_exist) - error->all(FLERR,"Package command after simulation box is defined"); - if (narg < 1) error->all(FLERR,"Illegal package command"); + error->all(FLERR,"Package command after simulation box is defined" + utils::errorurl(34)); + if (narg < 1) utils::missing_cmd_args(FLERR, "package", error); // same checks for packages existing as in LAMMPS::post_create() // since can be invoked here by package command in input script @@ -1739,7 +1741,7 @@ void Input::package() void Input::pair_coeff() { if (domain->box_exist == 0) - error->all(FLERR,"Pair_coeff command before simulation box is defined"); + error->all(FLERR,"Pair_coeff command before simulation box is defined" + utils::errorurl(33)); if (force->pair == nullptr) error->all(FLERR,"Pair_coeff command without a pair style"); if (narg < 2) utils::missing_cmd_args(FLERR,"pair_coeff", error); if (force->pair->one_coeff && ((strcmp(arg[0],"*") != 0) || (strcmp(arg[1],"*") != 0))) @@ -1820,7 +1822,7 @@ void Input::pair_write() void Input::processors() { if (domain->box_exist) - error->all(FLERR,"Processors command after simulation box is defined"); + error->all(FLERR,"Processors command after simulation box is defined" + utils::errorurl(34)); comm->set_processors(narg,arg); } @@ -1850,7 +1852,7 @@ void Input::restart() void Input::run_style() { if (domain->box_exist == 0) - error->all(FLERR,"Run_style command before simulation box is defined"); + error->all(FLERR,"Run_style command before simulation box is defined" + utils::errorurl(33)); update->create_integrate(narg,arg,1); } @@ -2002,7 +2004,7 @@ void Input::units() { if (narg != 1) error->all(FLERR,"Illegal units command: expected 1 argument but found {}", narg); if (domain->box_exist) - error->all(FLERR,"Units command after simulation box is defined"); + error->all(FLERR,"Units command after simulation box is defined" + utils::errorurl(34)); update->set_units(arg[0]); } diff --git a/src/kspace.cpp b/src/kspace.cpp index bf5fdf8378..2de25d6e86 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -321,10 +321,10 @@ void KSpace::qsum_qsq(int warning_flag) // so issue warning or error if (fabs(qsum) > SMALL) { - std::string message = fmt::format("System is not charge neutral, net " - "charge = {:.8}",qsum); - if (!warn_nonneutral) error->all(FLERR,message + utils::errorurl(29)); - if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message + utils::errorurl(29)); + std::string message = fmt::format("System is not charge neutral, net charge = {:.8}{}", + qsum, utils::errorurl(29)); + if (!warn_nonneutral) error->all(FLERR,message); + if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message); warn_nonneutral = 2; } } diff --git a/src/label_map.cpp b/src/label_map.cpp index 24cef51062..82d1eaac02 100644 --- a/src/label_map.cpp +++ b/src/label_map.cpp @@ -254,7 +254,7 @@ int LabelMap::find_or_create(const std::string &mylabel, std::vectorall(FLERR, "Topology type exceeds system topology type"); + error->all(FLERR, "Topology type exceeds system topology type" + utils::errorurl(25)); // never reaches here, just to prevent compiler warning diff --git a/src/minimize.cpp b/src/minimize.cpp index d13429804c..8fd90ade5f 100644 --- a/src/minimize.cpp +++ b/src/minimize.cpp @@ -35,7 +35,7 @@ void Minimize::command(int narg, char **arg) error->all(FLERR, "Illegal minimize command: expected 4 arguments but found {}", narg); if (domain->box_exist == 0) - error->all(FLERR, "Minimize command before simulation box is defined"); + error->all(FLERR, "Minimize command before simulation box is defined" + utils::errorurl(33)); // ignore minimize command, if walltime limit was already reached if (timer->is_timeout()) return; diff --git a/src/output.cpp b/src/output.cpp index 60d84e715d..0602c4f52d 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -896,7 +896,7 @@ void Output::create_thermo(int narg, char **arg) // don't allow this so that dipole style can safely allocate inertia vector if (domain->box_exist == 0) - error->all(FLERR,"Thermo_style command before simulation box is defined"); + error->all(FLERR,"Thermo_style command before simulation box is defined" + utils::errorurl(33)); // warn if previous thermo had been modified via thermo_modify command diff --git a/src/read_data.cpp b/src/read_data.cpp index 8d97b11243..79d88148c5 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -339,9 +339,11 @@ void ReadData::command(int narg, char **arg) "Reading a data file with shrinkwrap boundaries is not " "compatible with a MSM KSpace style"); if (domain->box_exist && !addflag) - error->all(FLERR, "Cannot use read_data without add keyword after simulation box is defined"); + error->all(FLERR, "Cannot use read_data without add keyword after simulation box is defined" + + utils::errorurl(34)); if (!domain->box_exist && addflag) - error->all(FLERR, "Cannot use read_data add before simulation box is defined"); + error->all(FLERR, "Cannot use read_data add before simulation box is defined" + + utils::errorurl(33)); if (offsetflag) { if (addflag == NONE) { error->all(FLERR, "Cannot use read_data offset without add keyword"); diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 59fe6c6767..0f5356ecd9 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -80,7 +80,7 @@ ReadDump::~ReadDump() void ReadDump::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Read_dump command before simulation box is defined"); + error->all(FLERR,"Read_dump command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) utils::missing_cmd_args(FLERR, "read_dump", error); diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 96f1c3d072..594ae377d3 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -52,7 +52,7 @@ void ReadRestart::command(int narg, char **arg) if (narg != 1 && narg != 2) error->all(FLERR,"Illegal read_restart command"); if (domain->box_exist) - error->all(FLERR,"Cannot read_restart after simulation box is defined"); + error->all(FLERR,"Cannot read_restart after simulation box is defined" + utils::errorurl(34)); MPI_Barrier(world); double time1 = platform::walltime(); diff --git a/src/replicate.cpp b/src/replicate.cpp index 97a7569f64..5b221fde1d 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -52,7 +52,7 @@ void Replicate::command(int narg, char **arg) int i,n; if (domain->box_exist == 0) - error->all(FLERR,"Replicate command before simulation box is defined"); + error->all(FLERR,"Replicate command before simulation box is defined" + utils::errorurl(33)); if (narg < 3 || narg > 4) error->all(FLERR,"Illegal replicate command"); diff --git a/src/rerun.cpp b/src/rerun.cpp index 96491bab36..8115b3d5d4 100644 --- a/src/rerun.cpp +++ b/src/rerun.cpp @@ -41,7 +41,7 @@ Rerun::Rerun(LAMMPS *lmp) : Command(lmp) {} void Rerun::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Rerun command before simulation box is defined"); + error->all(FLERR,"Rerun command before simulation box is defined" + utils::errorurl(33)); if (narg < 2) error->all(FLERR,"Illegal rerun command"); diff --git a/src/reset_atoms_id.cpp b/src/reset_atoms_id.cpp index 9992a49b28..b38b28b6a1 100644 --- a/src/reset_atoms_id.cpp +++ b/src/reset_atoms_id.cpp @@ -53,7 +53,7 @@ ResetAtomsID::ResetAtomsID(LAMMPS *lmp) : Command(lmp) void ResetAtomsID::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Reset_atoms id command before simulation box is defined"); + error->all(FLERR, "Reset_atoms id command before simulation box is defined" + utils::errorurl(33)); if (atom->tag_enable == 0) error->all(FLERR, "Cannot use reset_atoms id unless atoms have IDs"); for (const auto &ifix : modify->get_fix_list()) diff --git a/src/reset_atoms_image.cpp b/src/reset_atoms_image.cpp index 63030c632b..b57c98905f 100644 --- a/src/reset_atoms_image.cpp +++ b/src/reset_atoms_image.cpp @@ -39,7 +39,7 @@ ResetAtomsImage::ResetAtomsImage(LAMMPS *lmp) : Command(lmp) {} void ResetAtomsImage::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Reset_atoms image command before simulation box is defined"); + error->all(FLERR, "Reset_atoms image command before simulation box is defined" + utils::errorurl(33)); if (atom->tag_enable == 0) error->all(FLERR, "Cannot use reset_atoms image unless atoms have IDs"); if (atom->avec->bonds_allow == 0) diff --git a/src/reset_atoms_mol.cpp b/src/reset_atoms_mol.cpp index 66dd886059..54d3bbcc76 100644 --- a/src/reset_atoms_mol.cpp +++ b/src/reset_atoms_mol.cpp @@ -61,7 +61,7 @@ ResetAtomsMol::~ResetAtomsMol() void ResetAtomsMol::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Reset_atoms mol command before simulation box is defined"); + error->all(FLERR, "Reset_atoms mol command before simulation box is defined" + utils::errorurl(33)); if (atom->tag_enable == 0) error->all(FLERR, "Cannot use reset_atoms mol unless atoms have IDs"); if (atom->molecular != Atom::MOLECULAR) error->all(FLERR, "Can only use reset_atoms mol on molecular systems"); diff --git a/src/run.cpp b/src/run.cpp index 516bce5d0b..5444297e5d 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -39,7 +39,7 @@ void Run::command(int narg, char **arg) if (narg < 1) utils::missing_cmd_args(FLERR, "run", error); if (domain->box_exist == 0) - error->all(FLERR,"Run command before simulation box is defined"); + error->all(FLERR,"Run command before simulation box is defined" + utils::errorurl(33)); // ignore run command, if walltime limit was already reached diff --git a/src/velocity.cpp b/src/velocity.cpp index 1f0a757d7c..ba95fdc631 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -51,7 +51,7 @@ void Velocity::command(int narg, char **arg) if (narg < 2) utils::missing_cmd_args(FLERR, "velocity", error); if (domain->box_exist == 0) - error->all(FLERR,"Velocity command before simulation box is defined"); + error->all(FLERR,"Velocity command before simulation box is defined" + utils::errorurl(33)); if (atom->natoms == 0) error->all(FLERR,"Velocity command with no atoms existing"); diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index 5a7177f62f..19f512fab1 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -39,7 +39,7 @@ static constexpr int BUF_SIZE = 256; void WriteCoeff::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR, "Write_coeff command before simulation box is defined"); + error->all(FLERR, "Write_coeff command before simulation box is defined" + utils::errorurl(33)); if (narg != 1) utils::missing_cmd_args(FLERR, "write_coeff", error); diff --git a/src/write_data.cpp b/src/write_data.cpp index 85950f3b47..6f05ae1ac2 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -51,7 +51,7 @@ WriteData::WriteData(LAMMPS *lmp) : Command(lmp) {} void WriteData::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Write_data command before simulation box is defined"); + error->all(FLERR,"Write_data command before simulation box is defined" + utils::errorurl(33)); if (narg < 1) utils::missing_cmd_args(FLERR, "write_data", error); diff --git a/src/write_restart.cpp b/src/write_restart.cpp index a2022deeb9..ecf6b7bc08 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -59,7 +59,7 @@ WriteRestart::WriteRestart(LAMMPS *lmp) : Command(lmp) void WriteRestart::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Write_restart command before simulation box is defined"); + error->all(FLERR,"Write_restart command before simulation box is defined" + utils::errorurl(33)); if (narg < 1) utils::missing_cmd_args(FLERR, "write_restart", error); // if filename contains a "*", replace with current timestep From 410d3e84b040b94457583e05223bc21445f9806c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 04:41:34 -0400 Subject: [PATCH 23/33] add a Howto demonstrating how to convert a bulk molecular system to a slab --- doc/src/Howto.rst | 1 + doc/src/Howto_bulk2slab.rst | 119 ++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 doc/src/Howto_bulk2slab.rst diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index df42f6bd9d..ec90472c27 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -40,6 +40,7 @@ Settings howto Howto_walls Howto_nemd Howto_dispersion + Howto_bulk2slab Analysis howto ============== diff --git a/doc/src/Howto_bulk2slab.rst b/doc/src/Howto_bulk2slab.rst new file mode 100644 index 0000000000..c3322b9c77 --- /dev/null +++ b/doc/src/Howto_bulk2slab.rst @@ -0,0 +1,119 @@ +====================================== +Convert a bulk system to a slab system +====================================== + +A regularly encountered simulation problem is how to convert a bulk +system that has been run for a while into a slab system with some vacuum +space. The challenge here is that one cannot just change the box +dimensions with the :doc:`change_box command ` because some +atoms will have non-zero image flags. Changing the box dimensions +results in an undesired displacement of those atoms, since the image +flags indicate how many times the box length in x-, y-, or z-direction +needs to be added or subtracted to get the "unwrapped" coordinates. + +Below is a suggested workflow that can be applied to the :doc:`Rhodo +benchmark input `. The modifications to the ``in.rhodo`` +input file are discussed below. The first lines up to and including the +:doc:`read_data command ` remain unchanged. Then we insert +the following lines to add vacuum to the z direction above and below +the system: + +.. code-block:: LAMMPS + + variable delta index 10.0 + reset_atoms image all + write_dump all custom rhodo-unwrap.lammpstrj id xu yu zu + change_box all z final $(zlo-2.0*v_delta) $(zhi+2.0*v_delta) + set atom * image NULL NULL 0 + read_dump rhodo-unwrap.lammpstrj 0 x y z box no replace yes + change_box all boundary p p f + kspace_modify slab 3.0 + +The :doc:`variable delta ` (set to :math:`10 \AA`) represents +a distance that determines the amount of vacuum added: we add twice its +value in each direction to the z-dimension so in total :math:`40 \AA` +get added. The :doc:`reset_atoms image all ` command shall +reset any image flags to become either 0 or :math:`\pm 1`. + +The :doc:`write_dump command ` then writes out the resulting +"unwrapped" coordinates of the system. After expanding the box, coordinates +that were outside the box should now be inside. + +The first :doc:`change_box command ` adds the desired +distance to the low and high box boundary in z-direction as thus will +create an undesired displacement for the atoms with non-zero image +flags. With the :doc:`set command ` the image flags in z-direction +will be set to zero while preserving the values in x- and y-direction. + +With the :doc:`read_dump command ` we read back and replace +partially incorrect coordinates with the previously saved, unwrapped +coordinates. It is important to ignore the box dimensions stored in the +dump file. We want to preserve the expanded box. At this point it is +also possible to change the periodicity in z-direction with the second +:doc:`change_box command ` and turn on the slab correction +to the PPPM long-range solver with the :doc:`kspace_modify command +`. + +Next we replace the :doc:`fix npt command ` with: + +.. code-block:: LAMMPS + + fix 2 nvt temp 300.0 300.0 10.0 + +We now have an open system and thus the adjustment of the cell in +z-direction is no longer required. Since the splitting of the bulk +system where the vacuum is inserted, we reduce the thermostat time +constant from 100.0 to 10.0 to remove excess kinetic energy resulting +from that change faster. + +Since atoms and molecules at the interface will experience a large +change in potential energy due to the box expansion, and thus it is +possible that some of them will be ejected from the slab. In order to +suppress that, we add soft harmonic walls to push back any atoms that +want to leave the slab. To determine the position of the wall, we +first need to to determine the extent of the atoms in z-direction +and then place the harmonic walls based on that information: + +.. code-block:: LAMMPS + + compute zmin all reduce min z + compute zmax all reduce max z + thermo_style custom zlo c_zmin zhi c_zmax + run 0 post no + fix 3 all wall/harmonic zhi $(c_zmax+v_delta) 10.0 0.0 ${delta} & + zlo $(c_zmin-v_delta) 10.0 0.0 ${delta} + +The two :doc:`compute reduce ` command determine the +minimum and maximum z-coordinate across all atoms. In order to trigger +the compute commands we need to "consume" them. This is done with the +:doc:`thermo_style custom ` command followed by the +:doc:`run 0 ` command. This enables using the min/max values +determined by the compute commands to compute the location of the wall +in lower and upper direction. This uses the previously defined *delta* +variable to determine the distance of the wall from the extent of the +system and the cutoff for the wall interaction. This way only atoms +that move beyond the min/max values in z-direction will experience a +restoring force. The force constant of :math:`10.0 +\frac{\mathrm{kcal/mol}}{\AA}` was determined empirically. + +Finally, we replace the :doc:`run 100 ` of the original input with: + +.. code-block:: LAMMPS + + run 1000 post no + + unfix 3 + fix 2 all nvt temp 300.0 300.0 100.0 + run 1000 post no + + write_data data.rhodo-slab + +This runs the system converted to a slab first for 1000 MD steps using +the walls and stronger Nose-Hoover thermostat. Then the walls are +removed and the thermostat time constant reset to 100.0 and the system +run for another 1000 steps. Finally the resulting slab geometry is +written to a new data file ``data.rhodo-slab`` with a :doc:`write_data +command `. The number of MD steps required to reach a +proper equilibrium state is very likely larger. The number of 1000 +steps (corresponding to 2 picoseconds) was chosen for demonstration +purposes, so that the procedure can be easily and quickly tested. From 725b34a70a2da3369d79bee6db4aea5b68cb9ae8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 06:08:16 -0400 Subject: [PATCH 24/33] add snapshot images to show the initial and final geometry and box --- doc/src/Howto_bulk2slab.rst | 8 +++++++- doc/src/JPG/rhodo-both.jpg | Bin 0 -> 581942 bytes 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 doc/src/JPG/rhodo-both.jpg diff --git a/doc/src/Howto_bulk2slab.rst b/doc/src/Howto_bulk2slab.rst index c3322b9c77..58d22f8037 100644 --- a/doc/src/Howto_bulk2slab.rst +++ b/doc/src/Howto_bulk2slab.rst @@ -11,7 +11,13 @@ results in an undesired displacement of those atoms, since the image flags indicate how many times the box length in x-, y-, or z-direction needs to be added or subtracted to get the "unwrapped" coordinates. -Below is a suggested workflow that can be applied to the :doc:`Rhodo +.. figure:: JPG/rhodo-both.jpg + :figwidth: 80% + :figclass: align-center + + Snapshots of the bulk Rhodopsin system (right) and the slab geometry (left) + +Below is a suggested workflow that can be applied to the :doc:`Rhodopsin benchmark input `. The modifications to the ``in.rhodo`` input file are discussed below. The first lines up to and including the :doc:`read_data command ` remain unchanged. Then we insert diff --git a/doc/src/JPG/rhodo-both.jpg b/doc/src/JPG/rhodo-both.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47cc863d8f785759485948d15c81d879a782dfeb GIT binary patch literal 581942 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

dD@)=WE{m2_N|!RX^fO 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 z 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%0AsSy^7JwNm|))=5zAnwpiJ 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%0Ai-m zgc-4+_veMQ_raHw0{YrNWtxPQ#Le@9D|^ZBc|}oPZobvfu!h7|N=rn|K`osg05(Lx zLxBLMvH-WGbV&bcswKB?hQZ*gjojR>_f93jKBpzE zaW`*3#!6OucmYr1s7E(8{y2`D+$O_RDKC1_g2|AV!v?>B9C+3I$@63+_jJ$i4*-lu zhFycJftJLkd&Kin3tB9R*uW1O#5C0j5(>#i#n^?ct3cLs6nNVsWE`HO8!c#l)mO8* z8)_qOqE3-u$!FB&IW8T6^RiEog}G04`3#_A8m!)LtRJt-Dnw~Uaf8KIPuAc%6VXn& zhg*Lw8$+HpGnIS&Vu!IP~|5e*ghw&^brv|D+a?O zAR|tf+Iwy@m`dRr=W0j8N&5{^S$Yz;Zxb1q@;ck;`?rAcT;#t9uu z-hdmMjy2lIUxX`PI8QLOR$qtnr}fFm4T?lk)gV~4Z}2@;YjJL2<31CWg$}Iitca5$ zUvx7rKSmbQX0S(vpP%883l0vipPNGGp%jOQ1%$UzlIr=WtBdk;G+881_Xygv;WKsW z<3pt#y8xZ9#GW7Z)g>JiA{9c3=Q3p@^0~Ql0q8vdTrHGTb+){cjvV~@&qzPJ78(|? zNXS=S6sjo^&;@}K&%Jkg2xRI ztTc8u{DrgI!ZqPkn%61wQm2Jx%~rDf<>rxEsXXh-zuc_&;|re-V=$pB4%p{JJwf7K z%ZQsGHt5~BdX5n52(Q?3T0$tCQ-wSLiW>V?8e#6@-)*vRAm>tC4}hO)1vVKZzjpq1 zl3Rc#W|l-T#S2`%|GDkMLUIiR!Yn@t^ri;^(8xe4GhJtbb$fWs)PZwA0YRU zYJX)3=-q7e{yUbye?Eu%`%3BMB;|0eFZ8io6E)OUieWp$a$vmbxcDcYpPb4$ZEqDl zN}{@rqbrd-@w`cxno7vSpA|m~)(Sm~=f^xTwDAr)Ac_&n@k3Wx@?-+ z^h-WwN3pb+LuWW_jbIyxH44@pEDx(n0}1iDaMl=0fi}z>Kr#I7t(_qTk*dL*EoSE` z9vNaQ%FKv_=);syy~Q?L{ud@{Gbi*=yqK(P-??y?_dN{kpdYD-GPxa9X!uWIZ z0f5I9e0Z?X7y+8bn;7W(Vs7m~-ZDzD3Q=8L+NV1=MJiSVSyd8Y30V@P)=bp8GLHcY z-k)e}%#deLi{u^ZCuDhy2&D}71#2{Oh{>%lv(MqQ0rn83S^D#Jg=pS$`Gk{s7f7(B z0JD@KB3=1MbPyjmoXh6-dU4NKhLh8hsdRb8udeBOp4UbXr-?DAoOpB%p(#}>)={C? zKcaBLGaw-RQG5U<-@WzC}PU#v;}C>+U+`^<`U@Hh`m$ivkC_GiiQ zCmdz#O~WLeNB+!MC#%~9e380y>}_1cvY6v1p_DL!l3j^rG`WEbOOYK< zi}19lmtWf&6+lOd>2hOL)o!tBe5IcS@X5wY>LmJ9_lYUBXbJ3B)QSbl$-3GI zl^)8HNX}zwC4}#;W(q;2Zo%Bln?9TLMZXOSbN?~p*e)hEH_1bXpDVMDQ*XGtQH925 zbN{tLn*R{=SxBxvr`8sj3!JW)(127HVW(FQ0N*-mst3UD5m%Pw?su#Jud&fx{<}>H zf-y}`QwzUV%7psgmm>I01rLBz;tF|q8A5moj4j3f`OkHkSZx>0#sVZCw2d!P6?qnT z{vT%1*cxm7NwBLCT&X7r6OBdSIL9!>%ETWq0Z;nQ9wL&{j!XQvL~;${?u>MNl10#6 zD_V{dyv)3_L57^Of){e*ze@h)+kGz0mkGUw|1j&MuCW3+3#)C2OTqMcEYjli(jPGx zmxd@2LHGC?c9;HlBLyCiS?i-~V%yym;9u^?Ka3jx+ke#e^c#kjrL$e!Qw#rk*>0sx zXF+*HgwDT~VotW%T(g-Qn0-6xSG#qr&@T!fptHFb;V~-q8Lzc5Bc@)=;lkiBDajzn zU9AO2sF%Sv4KwpYQgolqn3R+kmb>07_C*>+jkwe#S^jC>>OX9gzxR15K40Q9Mu~u2Ae){k zkg*`l?XG1xFtf~y!-|)-v|m(ir8q=BJed;X=DEP*pbR8=G z+fDN9TU1roO*8MOR(Ebs-W!zL!rVh|tkz94pssD{CMrg}@jR9q%;3{*Ys7H865fo; zos_9mbf>!5Ah*p|Q~a!u!MiS_taVStuv*e0oRHh_ZllPTqt_ojfEPLO4*%N+`pUrx7?R`x> zhV>|A@dYl1PUzjQJ^=bPe=*-Q3Zu2jx!^$m+!K)oEQ-a}5`K(ByLqjTa%a>cOLKg& zU!2gocsyPDXY|euy0_5^y+vrB;T4sED|itlDd|;b<_2O5$u6I3Ueq^y{pYXoe=!RDU;jE0q32j?O<@Wm4B_Fn+$ieS z?$JR(X!k~Ij*-7W69((YSQXHv@MdUR*8_ljl^Pd*tCR%|TYOsdHwM9wEFvcWi|%(;TVN_g^lR{!u2c?k0*GGuuaBt)5|3L%T8K)edWEc}%fy($f{pUxf6sJ3c=0I6| zzvK$ zev8MD=w1*4RYAylc5pPqii_<^t0vO#wMbpBYy?AQxvUNUK06>n^S86?925FKyO)TU zPx{fqI#9?)wUzN{7V2AblpQ_L5qa$%DH;u8c=|6_ADjm~$Fie=2L~hk;9?8H5xdCh zZf5+P0`v=JBRBb{mDl!7X4Wr=ve}~uuOh$l-<`)+ zBwWmkhHjjClt117D0iq9{IdZx#eD44<#R`~=5jd03Yu?B3-H<}>*pl58fP-es{x#w zlg32Yb9>(h{z%5GC{aRmC2u%WOCbFsTEVY0zBireJJ*c${BaNnNGwkCXsSL#W+oN!C@%Q(?OwKP0P8zm)tM&7nfC2 zteA)%AhW7He230=zu-FMyPX&klpq7b4;;X^%X+mbf;@=It8)~ zl1>>QooJtcpbpp)Zth)<>`=@yJ>RwlH`L=|0Rl-N)N*7LhnEyRCq+;uxy)#8I-4hce{c z(P)uhybxBMtl>#|0JI)vU0G((bRrf~b$mzm13}Ly(-CHfRgs$$<&c>@!>J1$5Mt5w zzB59QQ$*sZ+zEP&hWUeKv&G_rNQ6j4C3aFLRqjhfcTg+cCLeJjt#!TpT6z9g@hrz_ zj3{vGyNjvJ%B!BCne?r+`8RjV?gsPoP*Z8P#-$hnjV)Fql>1?iTenFW>jb`Ihu4Sp z2;S|~815=2MI%MLiB^e+dXaSJcv56{=sNf8)17UPnv@&QM}8icq=%iQLNrzGrH{FY zrC+0#d~oT3YFQx9>_S{WvQtV_Vpz;|3a-Ice!v*qTn{46hPPeVlCXQjm5uXN7@Eog zn5z9!KI3=U!so0M$!93dst5|w&@rsiR19y{zBNX?hG^z#88XWIiJM*8dxSs2EaIm>-D>vX zd^0uTK7UMC8(u1}=%R(J@Cj^^joI~%yJ8W>f4ge*3@Tp&Q>HsP*+EMo3^TZC;ao8Cc2lX#pywR%`mdY|-8_Ecf$ zegV>cIpV=TE==ydsB!JqG0?2?lw`745P&MJU_&VzB z_bMh2_^EEv)VK=+;nDf|g7GHMyQ_A z@IG>ZGcH1YIeS00JbfC|^#R~v*tP~b#JH*&jHYQ}S{FKWBmhs2XeN~9e2&QXz$Bx& z5E=S@ITg9bjyEtJ=5s)fI7Lw}kLCF#eC`s%DKlCzcSVZMf1S$yer3Y# z`fNz%0dT^Z9^CKz`4%2}@d}Zi>7v`27Bgw{GYm28IjmXrOgGWx3xkCqV-JAtW;l}y z*oQH!rqWb?6Gdzl0-Kg?5Smv*Mp-fFntAcekg&dSE*JGx zjW^K#Bl1@_+O&DYOxU9DjTP-oX(GyxAT!>9=Di=hr-t6p#?MB?h^(7mXe(U-`om8Q zqZ_je{AnAsEA-^_cskm@1oFu`vtKLS)!%4&Dp5r2mEn)F#`~$oqI-yqu-NC)cIfy) zTt4Z}W-(RkX{GEmM8xZk!sLKrzx)g_vnP7ZT)jeb@MSR>F5r3*XO$k%)jLUkPw)S{{V0my_;Is!VQ+j52X)Fp)su)f+UgOytoe{pOD`= zg!Ak>fYzuFi|!h=k2zKvMl44uDAPWdrnpi%UJH9Vou+Y>mu649hLV3tgSz#kdp&J` z_6+jLv$^=f+&#gW6Oky6=xj4k=lw9^zh6E?h|6q#pALjw#?Tx?W<~lAE}lU?BNlhW zyC*p_F%cyw9AU<h!%KmOdkLm;Z-gHzf3$t~-pBahhI2K}j$q9tZ!ZTW?2PHj<&drRz31+(6(8k$ zi^ZM8+o^VH=DXGTGox{s52Ifs{E){7KnApa06YLhn<*9F*}w~#3m*V$MxK<4_e-}Y zlIB+-4rt}}+dvUXh!qe@#C-LgkqNnDHe?ae(oi<#~Ju#Y?ZoK*KRBvDZ z$RWDRc&0pZ_jJ*SA_9SdX1XojLwweF>JUZk0F960$-=x{kS>+sRy9%B6Vy7juqSIo zZ*MPYR$R7W(v?tlqQ_nB<@!y{ic8sLQ#D4D&_0iO9l}=zZx~PoER+gXNe4xQ;SE>& zc{2&P^UIeaZV-(#Rn7E)SHFB7kJ-*dRI|C|23*SFwDj~Glr=@#rGA7@>|Iy9sDm+SIgYj4kB zVN>4IgAHpNtkGvjiGQ4Udq?F#;q-;?w$23Y8{}$gvHh7~|8Ez+egM4CSiSvq@at_; zybGO=URvxayis6TcoTN*4PO}j@Zv%*zUw|sn7=$dKpuXzcvu8a$8}8DjS#Bm4Tz2K zQ*i`wYYnw@c_TJe2Wh*Q4Ivun$J~$YD|u!C+{I)XoXiiX18pV1g~}S1d_TFvh_d_Z z!RE+WGK+(e%E{UVT@U8vr;`#bMMp4M57VB+0OR%8m~t8K<2jmCFPiF*1T5J%q|}hC z+bbcQayG=z&1Ne3D49rQERQk{a_RlfEt?&&2(fiRG+YVUe(hr+-WRP2uR9XX4bk;A zt9JI}#o~*7>*wZ}3NuOq4}c{I&G~*g^ToH|MV9O{w|j&kCIZXny7YdU;%-|d&Ny|z z;ls!cx=m<;teCOG4?wbzg=RPw+DpXt=JpcOp&P8xuv?2_H*tUl6n zNnZwCa<=%Zor<<(-7~lUh#&wLg}ZnRc?4e${RDBYiQZg6EJ)jyhK|y26BpaIZ*JhB z-Cm;F2&3YOdc^O7DO1waF5ciaJ3v;R@eZ^s-}@Xi!|~rtO}OV@Il;E0@1PoLVOyP4 zughxeUpNw>Z?@Pz0Bm`8Xl6NHQe37tEO$c}kuinP^XY%C4meEIP?TE=OuVxdObeU! z=Gp{mlgd%iF|woi`nGnFM^R{0T@^stq|IqoOzU^;bq~WQX^e~gZ-cqle7cRsZCwv% z#n~5NuJ!#HL`ARZdKl8OR3{@Arj=XP%Ohq|Q-4*pv%R8(1T11vjU8WSl$QA4UL6QT zjxM{EJ^=89Jao}5t*5pLh$Ot~!>Lmq0L>{mxD6qmo|bHQ)0FQb4uZ2}PA!Iprx!CC zrbCJIW0|SOCbWreO1Vo~;}r^}lY1KlsMhLYZ*roG0;HdxMa&f#TdawrE##11baS-3 z>{}t9{n4x|qDaCJrQ6RacL!>myZM*$%p^n}e`ZD}y+9@X98<+JzYVj1yUT8Yr!)SYL8+TlYE`)PvSPxnP~ zW}#R(Hm{buVUY&HFF(gV0$tmltJHfcf7D&KDxa>j96|YkAextyeDaL=lob~xRM-MZ z)mfSCe?{~?rx?F^R;1oz(V0L1t&~~i4ccY&oHJ-@sX?9B-77)Ytn62pq6ec#y2`RH zH<~pR^Sg43oPcP%u0{(C-FC-Zns&M2xtH~-oyRHLbE7Yf%!epbXPP#I7Eqa$@Qq=A zr%^x5@n3HySlpJyILFevsd;5fXXgvs(;GDvIdi9ng~O|AgTW5ND*c?)KBmr{ZTs%P z0qoOJfB<4^7KEL68w|l#b(!rPRw0YHN3~m(KE#T5%_mL4)8QomR6RwlxuMvh6DLEQ z`PIz_0O$c=0@^o%VCBM%JZ{Q|r%Q`z5RIzX>%mw=O3Hh*KZ!`>BkxNP3`Ordj@WCF z&7Bq#lZzS_Fltd4i=Pww2?XK2RL*R3ykfVHcK7`Eb$p4xt!wI@DXp{-0am|@9$Inu zMeT5)fk41Yb_tJjTjgLX;keY%DQfmr~4ExZ|UfOl^>)4Xgn9es|RZ3 zXdfKhD3S|7orguYdvU8*Xcmx$Z-?b0ewOG?LN9L%<5BIE1R?~3^m3p;K#pNfI>YAS7H zX<=h`-|zl&E(3-f;0Z!fdo2dxUU_NszW~qvlysRHDb> zt`ZSQve5Fm8$o-}g~i-3zv1feoM!@th4Hu3YGOcYveV8q%W z1Z;*lLDqx+Xz&03yiN7{u_WDFuA4AFI23KKO0R^(1XL?Uu0|FYVY`#x6T&aOp#;}H zaXn`&GxzPj3djAbo$DtMkn@4HrS!_Fl9@#=qeU>739S&*cx44?HRXA{r$YeFO|7cW z@Uh(Eb#3cX!8z@lupi>8C(C$3{0F1;py|@vs@_!SAz$$xPF&E*TyL+eHJT&g@z1W> zE&`gcy);g<$uUxcf$ZluwJ$eDD?E9L#>}f3*9s{sgo|{*U&q zG#=`;{ZE|Iag>hAehg76C*+7Q8cUWav`8pxl6@!JjIt&n29;qFqQoc}Wtp*sI%-VF zZZM-k%wjN@#dCK)pXbH%ynFut=f!#PyuW_S{ri2c>%Ok<_j_L#Alin;iX#PM6zJv) zkgiGqj^rL6`%mFSan@g5amt)h{*@*9ztRE{kPon%_d31IZDPu_HDhcp8&FR2Sj1VZ zhiZ{*JPfa=QP}Y~{*qmB>A@N_#n4k`X!4`=Sor24=C@|#oB0aqN^@$2_+$kxqQB*RB?|OO8CwnY^L$o^Qo6lUOmlVVxF?c%;9M6&NIE~(p}hR1OE z&eurN*&(PBUudtYZ0|%?w}SeSB05w8FK_bD3oms)mVlc(BHDNb0Q)}uf}bh4miza* zua)bq1`S5@tWZek`&)S}2G{Qh)g*<2_oxHO$fTd*usSTE9GbF)Y> z{kj-mvin(rbKr&jZ8tlElacf@!j99!@g<%ek0j@5cyew{bJO0k1Mi2H;btOOYvx3- z>Tb<6n`KnX4t)xWno*psFOHa1ebqflGPc02h%`oZtG=t@2 zRY%G{0OuesT^EuZSAFPo0r63BMM5)rt~$`CQvuynM%}woj@(zVP=9CofjJ zhV60YD=tU)uJtK2Gea_tR8e z{Pw5)mzHTxaIn7b6~oX|YU2?muN!r5`&YA^Hnwl{r^es{OvDyeP5!kQsN_O zm9kS=G3$Q(PjAM3A6FKE{xJ*9F|^U_oaWVtt{wV!x%nT%Hffhd4Xe6tYNeNarP4v$ zoQc@zV`mN@ndS8=IL7T$Vu;(4EU^_z(yRC!p0(V{t;lW>d6Tvy+<)N<_V*CLZIHBRigdI$9V zzEnfYgW|aQ?GZmcmlrZ>;|XpA@5+djNjFWq@Oi{TZb=} zetOp^5s=5AJ6~GQ)3&Rx(MveFzaP{BO<@Blet7Z4oH$H-*f5(+&baS`oTlqyA_z0T zXv_?Z6QA;`I(JNn$eY}-wlmkP?b(LRx3O3d35bW*_4+4RJAn;AvKU_8H?sn4naKIQ z4J~&oGcC6u7c$B4EFifv@Y4{;d%{Kp%3!J?d;LA!)ojBx?NhVSd7-kW53+@Ku0~FI zAt{-ooA4X!ZS{YO@GUg>l_BW}Jmv)pD&dUy8EWm&%2{>-wM&YhszBC*%urs9;@>0w z0M(lon!P)#(+rHOpn@a-sUfkRYu@Q0`EUp1C?0V_WEm4RD00`}n9ZJaFS~|T(PdH& z;`kst3mFgcwhq{7v2U3I^({yP6_e4ytC(1IeK4axrXoJP-!wN<;#4s5T0FeYw`~hD zZo$~pAY^p&k`W3lnKNEiL0q+qY>5~v`*|fJbXG_4gouE(zTMT4d-737?C7IF4_d)z zL1IyAZicqk+lzooJh)G(&CR~HJe+p4J1#g59}D=yQ1B1L9Yc5dodSp^YsL0`7Ppi` zB_L^&)dNp-@VJ<0m|k|yNmY)^hAmrwK-Pxmi?DVA5}=zhhZh`C<>qpz&E5#Lq?Lwx z`#iOb%nE}o$VySHpsjBqL^4KPV8&*hK>|fGDSB_qkVm`ZfV7I;qJR6# zyc1K4=8|KHce_JK1l~QyOc;ij2v+*BAyeRFMOg%+CqjiD#fc-rX2X`cPDKxq7XwAd zi|)P#a8;rJG=M@VUkFbCAbe|7R0R6tgF8-Z?L{Jr+u10GZ zEK&li1mIGHZgh8cQoz3KoNY>$x1xxwJrGdhILa;TiE8*e~=TiKDj9+MiZbC76&N zbcOX|SVL_o{&w*1p)pXwK{l?FFp)*rEXWw*S?i-vjwqB{Sn}(iDP*k^i+28|XIiX@ zx%l%Hes?ib08;0_b6_1^)+%&LZ~JJURQ)tq{K)K#9!HSm*Wsh1l&XJMJhvs(jXM~x z<>9>!S=q!+=gl}GUY#q|9S+}qf=yRxqJdT&ah+hs-hw(}}?A z`mYXs>b2cSZJHxw+QnJoMFjMHmqVDS>&r+^+d8y2p2cQ?&KW4|Deo;vE`3re^5g@- zaSk=Do@bsXB9EU-y1i}*i3{t8y2AGlKcgO|0-4^%J%;;TD6b88MCQn(;^YMfKE6!* zNoZU>R$5u)&S&sXW54%x;k17dRpkTXgV>_&YFPLyd?S(ZLB5vr&Gec^p#SMS^zXU@ zXq8CCls4jQ7SY8ya}gETbn{w%K|`|?6mw_O$FJw}c@FjdupDLOPZQ3eqw*?84AmkW z^`M;>vklf1Cf@0<@JmK6uzZDsl!z&7$hd;GGuMI`2)6VXJP~)B z*kuGm4&m`lzL5b>QruhDQv^6J)7bP%MBz+JUcilo=W+CvnjAev*iIUy7o7DUWlp?o zmDTES1~Eu5xYB12fW5&dbdF2}L$~W#fr>Aeq@0kiSb>?x81$ zySClI71M*Njzq!&f$$B`ZHf^==bVq8Dxo%704|eO6ek#USDa1m2KNR{9O1h#{0#uF zvw0sU<1@kVHOn^WSptwDVO_`2AZ{!@*!;^(tdP&*@XuG@t10i}j+I}!n6#(-0NfZB zLVOr<=Z`Ij`X)T+`MoG-hDMPPAg~74odjxzAt@+t znF!~pxgc2@l3S1{Xeoi=iri80EuL&P>)lbEGxA%66Sq`PDYWm8F1>jp-s&`HuYz_T z)j2-Z&kk`l-(_fV;sb4}o3(7MzNspJZz%#!UPmLBpfbU=VhXzeGeJu1 z&qNTOE~|D-BuITNA1ojzpF6d_E<=G1a41)ZOM7Jxw7x<1Z(>V#KKs7V+~F2Ueo|t0 z=;caMvdm|yJVJf_17i#t-~oRl7F@WN$W!jO9gN`}Dkx|{JgAMmkuCIGqJVRW_D*0W zyS#+&w#flBlQrVrT>Eom!KA|j1M&I~^Pid*YBj@7S-``RzqgI`#*snr=Q@JjoV$Ka zW0^}F1mC9j@*oX95(b2q%Shg#W@O;2AG8=y(hn244&?TEc1j!Xd5un(h2kL(>%7*n?HNZb*9=ga@aGocc5uv#U%xL7M`G?W?+r$)tx=? zsp8jewV;=*u{;SRjqx&QwAqJtYoMuTZ2VOF=HVj=xG9(G0VxwtathTm!*2IpQXoIv zf)L49GW$Jue=P@?pc>=V#jGiXdp$)BW7NFEj@qy)yc-UgZz0Q!%#u1VIjFi0@`m_K z%*GEuaA_$i8}j-vObp4Y#|StsHhmtz{~B|7fty(T2U}iZpN3kbS^ig8l}TDgu)fcd zSQv)RPkGfO*EzBALIu9sw9q1Y(>z1rcJyBFQA=sFYD-IbH{+XsA%}5B-+`lcGG4^O z;2#Zz)+pyInMLBJ<)-ePtL_1ss7h}cs(753z|?8^>!sd_5tWeN&glEhwcvELC!TDl z`#Hw`?Gyd~@(ae~$(kLl?a6X@b{gGB)jf!6#897@|8>4Q#3bte*@7)d5!pU##H~L#W;?G9bSOi zI$VZ(*Jbd4q-R$gFKk~6|Je`VxA>FDvba%m^{8Z_O?0*MKGg3>33qLA|ET$O6+gLG z{>GGu{^qQWqE(kzO&db7u~4LECDU?$o?oxh4)fZMN_Ns~%R z(PoEGzs{y#H$u}CtU}N<3hfHNCNu~iZ^eB(Y0cs4W6=DcKpD+c5g=vROMf8sR@LZ~ zXpR2h>DM*5r&`IuTKTQ8$f1IB%J0!L7U?_Q+>}B=vL&)1@{ki5h2I>?`TwFD{*RH{ X|6TC+q0;`#PV~Qp{X4y3wl(q(HW^X_ literal 0 HcmV?d00001 From 9d0c25fbab50d92db541ab73034e9b2b670f49d9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 11:15:26 -0400 Subject: [PATCH 25/33] improve wording --- doc/src/Howto_bulk2slab.rst | 135 ++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 61 deletions(-) diff --git a/doc/src/Howto_bulk2slab.rst b/doc/src/Howto_bulk2slab.rst index 58d22f8037..cd167b1403 100644 --- a/doc/src/Howto_bulk2slab.rst +++ b/doc/src/Howto_bulk2slab.rst @@ -3,62 +3,74 @@ Convert a bulk system to a slab system ====================================== A regularly encountered simulation problem is how to convert a bulk -system that has been run for a while into a slab system with some vacuum -space. The challenge here is that one cannot just change the box -dimensions with the :doc:`change_box command ` because some -atoms will have non-zero image flags. Changing the box dimensions -results in an undesired displacement of those atoms, since the image -flags indicate how many times the box length in x-, y-, or z-direction -needs to be added or subtracted to get the "unwrapped" coordinates. +system that has been run for a while to equilibrate into a slab system +with some vacuum space. The challenge here is that one cannot just +change the box dimensions with the :doc:`change_box command +` or edit the box boundaries in a data file because some +atoms will have non-zero image flags from diffusing around. Changing +the box dimensions results in an undesired displacement of those atoms, +since the image flags indicate how many times the box length in x-, y-, +or z-direction needs to be added or subtracted to get the "unwrapped" +coordinates. By changing the box dimension this distance is changed and +thus those atoms move unphysically relative to their neighbors with zero +image flags. Setting image flags forcibly to zero creates problems because +that could break apart molecules by have one atom of a bond on the top +of the system and the other at the bottom. +.. _bulk2slab: .. figure:: JPG/rhodo-both.jpg :figwidth: 80% :figclass: align-center Snapshots of the bulk Rhodopsin system (right) and the slab geometry (left) -Below is a suggested workflow that can be applied to the :doc:`Rhodopsin -benchmark input `. The modifications to the ``in.rhodo`` -input file are discussed below. The first lines up to and including the -:doc:`read_data command ` remain unchanged. Then we insert -the following lines to add vacuum to the z direction above and below -the system: +Below is a suggested workflow using the :doc:`Rhodopsin benchmark input +` for demonstration. The figure shows the state before on +the left (with unwrapped atoms that have diffused out of the box) and +after on the right (with the vacuum added above and below). The process +is done by modifying the ``in.rhodo`` input file. The first lines up to +and including the :doc:`read_data command ` remain unchanged. +Then we insert the following lines to add vacuum to the z direction +above and below the system: .. code-block:: LAMMPS variable delta index 10.0 reset_atoms image all write_dump all custom rhodo-unwrap.lammpstrj id xu yu zu - change_box all z final $(zlo-2.0*v_delta) $(zhi+2.0*v_delta) - set atom * image NULL NULL 0 + change_box all z final $(zlo-2.0*v_delta) $(zhi+2.0*v_delta) & + boundary p p f read_dump rhodo-unwrap.lammpstrj 0 x y z box no replace yes - change_box all boundary p p f kspace_modify slab 3.0 -The :doc:`variable delta ` (set to :math:`10 \AA`) represents -a distance that determines the amount of vacuum added: we add twice its -value in each direction to the z-dimension so in total :math:`40 \AA` -get added. The :doc:`reset_atoms image all ` command shall -reset any image flags to become either 0 or :math:`\pm 1`. +Specifically, the :doc:`variable delta ` (set to :math:`10 +\AA`) represents a distance that determines the amount of vacuum added: +we add twice its value in each direction to the z-dimension; thus in +total :math:`40 \AA` get added. The :doc:`reset_atoms image all +` command shall reset any image flags to become either 0 or +:math:`\pm 1` and thus have the minimum distance from the center of the +simulation box, but the correct relative distance for bonded atoms. The :doc:`write_dump command ` then writes out the resulting -"unwrapped" coordinates of the system. After expanding the box, coordinates -that were outside the box should now be inside. +*unwrapped* coordinates of the system. After expanding the box, +coordinates that were outside the box should now be inside and the +unwrapped coordinates will become "wrapped", while atoms outside the +periodic boundaries will be wrapped back into the box and their image +flags in those directions restored. -The first :doc:`change_box command ` adds the desired -distance to the low and high box boundary in z-direction as thus will -create an undesired displacement for the atoms with non-zero image -flags. With the :doc:`set command ` the image flags in z-direction -will be set to zero while preserving the values in x- and y-direction. +The :doc:`change_box command ` adds the desired +distance to the low and high box boundary in z-direction and then changes +the :doc:`boundary to "p p f" ` which will force the image +flags in z-direction to zero and create an undesired displacement for +the atoms with non-zero image flags. With the :doc:`read_dump command ` we read back and replace partially incorrect coordinates with the previously saved, unwrapped coordinates. It is important to ignore the box dimensions stored in the -dump file. We want to preserve the expanded box. At this point it is -also possible to change the periodicity in z-direction with the second -:doc:`change_box command ` and turn on the slab correction -to the PPPM long-range solver with the :doc:`kspace_modify command -`. +dump file. We want to preserve the expanded box. Finally, we turn on +the slab correction for the PPPM long-range solver with the +:doc:`kspace_modify command ` as required when using a +long range Coulomb solver for non-periodic z-dimension. Next we replace the :doc:`fix npt command ` with: @@ -67,18 +79,17 @@ Next we replace the :doc:`fix npt command ` with: fix 2 nvt temp 300.0 300.0 10.0 We now have an open system and thus the adjustment of the cell in -z-direction is no longer required. Since the splitting of the bulk -system where the vacuum is inserted, we reduce the thermostat time -constant from 100.0 to 10.0 to remove excess kinetic energy resulting -from that change faster. +z-direction is no longer required. Since splitting of the bulk where +the vacuum is inserted, creates surface atoms with high potential +energy, we reduce the thermostat time constant from 100.0 to 10.0 to +remove excess kinetic energy resulting from that change faster. -Since atoms and molecules at the interface will experience a large -change in potential energy due to the box expansion, and thus it is -possible that some of them will be ejected from the slab. In order to -suppress that, we add soft harmonic walls to push back any atoms that -want to leave the slab. To determine the position of the wall, we -first need to to determine the extent of the atoms in z-direction -and then place the harmonic walls based on that information: +Also the high potential energy of the surface atoms can cause that some +of them are ejected from the slab. In order to suppress that, we add +soft harmonic walls to push back any atoms that want to leave the slab. +To determine the position of the wall, we first need to to determine the +extent of the atoms in z-direction and then place the harmonic walls +based on that information: .. code-block:: LAMMPS @@ -91,16 +102,17 @@ and then place the harmonic walls based on that information: The two :doc:`compute reduce ` command determine the minimum and maximum z-coordinate across all atoms. In order to trigger -the compute commands we need to "consume" them. This is done with the -:doc:`thermo_style custom ` command followed by the -:doc:`run 0 ` command. This enables using the min/max values -determined by the compute commands to compute the location of the wall -in lower and upper direction. This uses the previously defined *delta* -variable to determine the distance of the wall from the extent of the -system and the cutoff for the wall interaction. This way only atoms -that move beyond the min/max values in z-direction will experience a -restoring force. The force constant of :math:`10.0 -\frac{\mathrm{kcal/mol}}{\AA}` was determined empirically. +the execution of the compute commands we need to "consume" them. This +is done with the :doc:`thermo_style custom ` command +followed by the :doc:`run 0 ` command. This avoids and error +accessing the min/max values determined by the compute commands to +compute the location of the wall in lower and upper direction. This +uses the previously defined *delta* variable to determine the distance +of the wall from the extent of the system and the cutoff for the wall +interaction. This way only atoms that move beyond the min/max values in +z-direction will experience a restoring force, nudging them back to the +slab. The force constant of :math:`10.0 \frac{\mathrm{kcal/mol}}{\AA}` +was determined empirically. Finally, we replace the :doc:`run 100 ` of the original input with: @@ -116,10 +128,11 @@ Finally, we replace the :doc:`run 100 ` of the original input with: This runs the system converted to a slab first for 1000 MD steps using the walls and stronger Nose-Hoover thermostat. Then the walls are -removed and the thermostat time constant reset to 100.0 and the system -run for another 1000 steps. Finally the resulting slab geometry is -written to a new data file ``data.rhodo-slab`` with a :doc:`write_data -command `. The number of MD steps required to reach a -proper equilibrium state is very likely larger. The number of 1000 -steps (corresponding to 2 picoseconds) was chosen for demonstration -purposes, so that the procedure can be easily and quickly tested. +removed with :doc:`unfix 3 ` and the thermostat time constant +reset to 100.0 and the system run for another 1000 steps. Finally the +resulting slab geometry is written to a new data file +``data.rhodo-slab`` with a :doc:`write_data command `. The +number of MD steps required to reach a proper equilibrium state is very +likely larger. The number of 1000 steps (corresponding to 2 +picoseconds) was chosen for demonstration purposes, so that the +procedure can be easily and quickly tested. From 8a0900f0ab1e80aaade0c9f2f3e10de0f0e9b4c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 15 Mar 2025 21:17:00 -0400 Subject: [PATCH 26/33] revert broken change to print angstrom character --- doc/utils/sphinx-config/conf.py.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/utils/sphinx-config/conf.py.in b/doc/utils/sphinx-config/conf.py.in index 12e5c57f78..073143a7e9 100644 --- a/doc/utils/sphinx-config/conf.py.in +++ b/doc/utils/sphinx-config/conf.py.in @@ -288,7 +288,7 @@ rst_prolog = r""" .. only:: html - :math:`\renewcommand{\AA}{\textup{\r{A}}` + :math:`\renewcommand{\AA}{\text{â„«}}` .. role:: lammps(code) :language: LAMMPS From cb5e45ff1f7822165f023e43baf8f77900b67217 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 11:24:53 -0400 Subject: [PATCH 27/33] small tweaks --- doc/src/Howto_bulk2slab.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/Howto_bulk2slab.rst b/doc/src/Howto_bulk2slab.rst index cd167b1403..56de49d299 100644 --- a/doc/src/Howto_bulk2slab.rst +++ b/doc/src/Howto_bulk2slab.rst @@ -1,6 +1,6 @@ -====================================== -Convert a bulk system to a slab system -====================================== +=========================== +Convert bulk system to slab +=========================== A regularly encountered simulation problem is how to convert a bulk system that has been run for a while to equilibrate into a slab system @@ -43,10 +43,10 @@ above and below the system: read_dump rhodo-unwrap.lammpstrj 0 x y z box no replace yes kspace_modify slab 3.0 -Specifically, the :doc:`variable delta ` (set to :math:`10 -\AA`) represents a distance that determines the amount of vacuum added: -we add twice its value in each direction to the z-dimension; thus in -total :math:`40 \AA` get added. The :doc:`reset_atoms image all +Specifically, the :doc:`variable delta ` (set to 10.0) +represents a distance that determines the amount of vacuum added: we add +twice its value in each direction to the z-dimension; thus in total +:math:`40 \AA` get added. The :doc:`reset_atoms image all ` command shall reset any image flags to become either 0 or :math:`\pm 1` and thus have the minimum distance from the center of the simulation box, but the correct relative distance for bonded atoms. From 12cc12b4f49a59d6af3ea2e3d2f6097ecf1d8c3e Mon Sep 17 00:00:00 2001 From: jtclemm Date: Sat, 22 Mar 2025 12:57:28 -0600 Subject: [PATCH 28/33] Typos and alternate wording suggestions --- doc/src/Build_manual.rst | 4 +-- doc/src/Errors_details.rst | 58 ++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/doc/src/Build_manual.rst b/doc/src/Build_manual.rst index 4993aa53a0..dea98e9b61 100644 --- a/doc/src/Build_manual.rst +++ b/doc/src/Build_manual.rst @@ -223,7 +223,7 @@ This translation uses `Pandoc `_ instead of Sphinx and thus all special Sphinx features (cross-references, advanced tables, embedding of Python docstrings or doxygen documentation, and so on) will not render correctly. Most embedded math should render correctly. This -is a **very fast** way to check the syntaxs and layout of documentation +is a **very fast** way to check the syntaxes and layout of documentation as HTML while writing the documentation. To translate **all** manual pages, you can type ``make fasthtml`` at the @@ -236,7 +236,7 @@ directly translate only individual pages: e.g. to translate only the After writing the documentation is completed, you will still need to verify with ``make html`` and ``make pdf`` that it translates -correctly in the actual translations used for download and online +correctly in the actual translations used for downloaded and online documentation. Tests for consistency, completeness, and other known issues diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index ae731a316b..a5b4d088f0 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -2,14 +2,12 @@ Errors and warnings details =========================== Many errors and warnings that LAMMPS outputs are self-explanatory and -thus straightforward to resolve. However, there are also cases, where -there is no single cause and explanation. LAMMPS can only detect -symptoms of an error but not name the exact cause, or the explanation -needs to be more detailed than what can be fit into a short message -printed by the program. The following are discussions of such cases; -first on a more general level and then for specific cases. In the -latter cases, LAMMPS will output a short message and then provide -a URL that links to a specific section on this page. +thus straightforward to resolve. However, there are also cases where +there is no single cause or simple explanation that can be provided in a +short message printed by LAMMPS. Therefore, more detailed discussions of +such scenarios are provided here; first on a more general level and then for +specific errors. In the latter cases, LAMMPS will output a short message +and then provide a URL that links to a specific section on this page. .. contents:: @@ -375,14 +373,14 @@ warning or turned off using the *lost/bond* keyword in the :doc:`thermo_modify Non-numeric atom coords or pressure or box dimensions - simulation unstable --------------------------------------------------------------------------- -This kind of error usually occurs due to issues with system geometry or -the potential in use, or too aggressive simulation settings. See -:ref:`Pressure, forces, positions becoming NaN or Inf ` above in -the general troubleshooting section. It is more likely to happen during +This error usually occurs due to overly aggressive simulation settings or +issues with the system geometry or the potential. See :ref:`Pressure, +forces, positions becoming NaN or Inf ` above in the general +troubleshooting section. This error is more likely to happen during equilibration, so it can help to do a minimization before or even add a second or third minimization after running a few equilibration MD steps. -It also is more likely when using a Nose-Hoover barostat directly, and -thus it may be advisable to run with only a thermostat for a bit until +It also is more likely when directly using a Nose-Hoover (or other) barostat, +and thus it may be advisable to run with only a thermostat for a bit until the potential energy has stabilized. .. _err007: @@ -409,7 +407,7 @@ causes. By default, LAMMPS checks for whether the total number of atoms is consistent with the sum of atoms "owned" by MPI processors every time that thermodynamic output is written. In the majority of cases, lost atoms are unexpected and a result of extremely high velocities causing -instabilities in the system, and those velocities can result from a +instabilities in the system. Such velocities can result from a variety of issues. For ideas on how to track down issues with unexpected lost atoms, see :ref:`Fast moving atoms ` and :ref:`Neighbor list settings ` in the general troubleshooting @@ -427,11 +425,11 @@ Too many neighbor bins The simulation box is or has become too large relative to the size of a neighbor bin (which in turn depends on the largest pair-wise cutoff by -default) and LAMMPS is unable to store the needed number of bins. This +default) such that LAMMPS is unable to store the needed number of bins. This typically implies the simulation box has expanded too far. That can -happen when some atoms move rapidly apart with shrink-wrap boundaries or +occur when some atoms move rapidly apart with shrink-wrap boundaries or when a fix (like fix deform or a barostat) excessively grows the -simulation box. This can also happen, if the largest pair-wise cutoff +simulation box. This can also happen if the largest pair-wise cutoff is small. In this case, the error can be avoided by using the :doc:`neigh_modify command ` to set the bin width to a suitably large value. @@ -448,11 +446,11 @@ the relevant Makefile or CMake build directory. See :doc:`Section 3. Build LAMMPS ` for more details. One can check if the expected package and pair style is present in the executable by running it with the ``-help`` (or ``-h``) flag on the command line. One -common oversight, especially for beginner LAMMPS users, is to enable the -package, but to forget to run commands to rebuild (e.g., to run the +common oversight, especially for beginner LAMMPS users, is enabling the +package but forgetting to run commands to rebuild (e.g., to run the final ``make`` or ``cmake`` command). -If this error is occurring with an executable that the user does not control +If this error occurs with an executable that the user does not control (e.g., through a module on HPC clusters), the user will need to get in contact with the relevant person or people who can update the executable. @@ -461,14 +459,14 @@ with the relevant person or people who can update the executable. Energy or stress was not tallied by pair style ---------------------------------------------- -This warning will be printed by computes from the :ref:`TALLY package -`. Those use a callback mechanism that will only work for +This warning can be printed by computes from the :ref:`TALLY package +`. Those use a callback mechanism that only work for regular pair-wise additive pair styles like :doc:`Lennard-Jones `, :doc:`Morse `, :doc:`Born-Meyer-Huggins -`, and similar. Making these computes work for many-body -potentials will require to implement similar callbacks suitable for such -potentials, which has not been done (and may be difficult to do in a -generic fashion). Whether this warning indicates that contributions to +`, and similar. Such required callbacks have not been +implemented for many-body potentials so one would have to implement them +to add compatiability with these computes (which may be difficult to do in +a generic fashion). Whether this warning indicates that contributions to the computed properties are missing depends on the groups used. At any rate, careful testing of the results is advised when this warning appears. @@ -918,7 +916,7 @@ the documentation carefully. XXX command before simulation box is defined -------------------------------------------- -This error happens, when trying to excute a LAMMPS command that requires +This error occurs when trying to excute a LAMMPS command that requires information about the system dimensions, or the number atom, bond, angle, dihedral, or improper types, or the number of atoms or similar data that is only available *after* the simulation box has been created. @@ -930,8 +928,8 @@ created ` for additional information. XXX command after simulation box is defined -------------------------------------------- -This error happens, when trying to excute a LAMMPS command that that -changes a global setting that will be locked in when the simulation box +This error occurs when trying to excute a LAMMPS command that +changes a global setting that is locked in when the simulation box is created (for instance defining the :doc:`atom style `, :doc:`dimension `, :doc:`newton `, or :doc:`units ` setting). These settings may only be changed *before* the From 6f24e1edd5b58460ff92894443ea83f8f5ec1814 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 15:42:51 -0400 Subject: [PATCH 29/33] remove leftover pieces of obsolete warning --- doc/src/Errors_warnings.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Errors_warnings.rst b/doc/src/Errors_warnings.rst index c99b3f6b7c..3f18ddd2ca 100644 --- a/doc/src/Errors_warnings.rst +++ b/doc/src/Errors_warnings.rst @@ -609,7 +609,7 @@ Please also see the page with :doc:`Error messages ` assumed to also be for all atoms. Thus the pressure printed by thermo could be inaccurate. -*The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed*The minimizer does not re-orient dipoles when using fix efield* +*The minimizer does not re-orient dipoles when using fix efield* This means that only the atom coordinates will be minimized, not the orientation of the dipoles. From f4b92a23ae79e793c08db5dc09c103fce6ab1188 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 15:47:52 -0400 Subject: [PATCH 30/33] small clarification cherry-picked from PR #4502 --- doc/src/Build_manual.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/src/Build_manual.rst b/doc/src/Build_manual.rst index dea98e9b61..2fc29f584b 100644 --- a/doc/src/Build_manual.rst +++ b/doc/src/Build_manual.rst @@ -223,8 +223,8 @@ This translation uses `Pandoc `_ instead of Sphinx and thus all special Sphinx features (cross-references, advanced tables, embedding of Python docstrings or doxygen documentation, and so on) will not render correctly. Most embedded math should render correctly. This -is a **very fast** way to check the syntaxes and layout of documentation -as HTML while writing the documentation. +is a **very fast** way to check the syntax and layout of a documentation +file translated to HTML while writing or updating it. To translate **all** manual pages, you can type ``make fasthtml`` at the command line. The translated HTML files are then in the ``fasthtml`` @@ -236,8 +236,7 @@ directly translate only individual pages: e.g. to translate only the After writing the documentation is completed, you will still need to verify with ``make html`` and ``make pdf`` that it translates -correctly in the actual translations used for downloaded and online -documentation. +correctly in both formats. Tests for consistency, completeness, and other known issues ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From c65c8819e3879406210536f6325cfe8dde3558be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 Mar 2025 16:06:17 -0400 Subject: [PATCH 31/33] cosmetic changes and re-wrap paragraphs --- doc/src/Errors_details.rst | 619 +++++++++++++++++++------------------ 1 file changed, 317 insertions(+), 302 deletions(-) diff --git a/doc/src/Errors_details.rst b/doc/src/Errors_details.rst index a5b4d088f0..9ca69c5068 100644 --- a/doc/src/Errors_details.rst +++ b/doc/src/Errors_details.rst @@ -4,10 +4,11 @@ Errors and warnings details Many errors and warnings that LAMMPS outputs are self-explanatory and thus straightforward to resolve. However, there are also cases where there is no single cause or simple explanation that can be provided in a -short message printed by LAMMPS. Therefore, more detailed discussions of -such scenarios are provided here; first on a more general level and then for -specific errors. In the latter cases, LAMMPS will output a short message -and then provide a URL that links to a specific section on this page. +short message printed by LAMMPS. Therefore, more detailed discussions +of such scenarios are provided here; first on a more general level and +then for specific errors. In the latter cases, LAMMPS will output a +short message and then provide a URL that links to a specific section on +this page. .. contents:: @@ -76,13 +77,13 @@ simulation settings. For time critical code paths, LAMMPS will assume the user has chosen the settings carefully and will not make any checks to avoid to avoid performance penalties. -A crucial step in resolving a segmentation fault is to identify the exact -location in the code where it happens. Please see `Errors_debug` for -a couple of examples showing how to do this on a Linux machine. With -this information -- a simple way to reproduce the segmentation fault and -the exact :doc:`LAMMPS version ` and platform you are -running on -- you can contact the LAMMPS developers or post in the LAMMPS -forum to get assistance. +A crucial step in resolving a segmentation fault is to identify the +exact location in the code where it happens. Please see `Errors_debug` +for a couple of examples showing how to do this on a Linux machine. +With this information -- a simple way to reproduce the segmentation +fault and the exact :doc:`LAMMPS version ` and platform +you are running on -- you can contact the LAMMPS developers or post in +the LAMMPS forum to get assistance. .. _hint05: @@ -92,55 +93,57 @@ Fast moving atoms Fast moving atoms may be "lost" or "missing" when their velocity becomes so large that they can cross a sub-domain within one timestep. This often happens when atoms are too close, but atoms may also "move" too -fast from sub-domain to sub-domain if the box changes rapidly. E.g. when -setting a large an initial box with :doc:`shrink-wrap boundary +fast from sub-domain to sub-domain if the box changes rapidly. +E.g. when setting a large an initial box with :doc:`shrink-wrap boundary conditions ` that collapses on the first step (in this case the solution is often using 'm' instead of 's' as a boundary condition). To reduce the impact of "close contacts", one can remove those atoms or molecules with something like :doc:`delete_atoms overlap 0.1 all all -`. With periodic boundaries, a close contact pair of atoms -may be on opposite sides of the simulation box. Another option would be -to first run a minimization (aka quench) before starting the MD. Reducing -the time step can also help. Many times, one just needs to "ease" the -system into a balanced state and can then switch to more aggressive settings. +`. With periodic boundaries, a close contact pair of +atoms may be on opposite sides of the simulation box. Another option +would be to first run a minimization (aka quench) before starting +the MD. Reducing the time step can also help. Many times, one just +needs to "ease" the system into a balanced state and can then switch to +more aggressive settings. The speed of atoms during an MD run depends on the steepness of the potential function and their mass. Since the positions and velocities of atoms are computed with finite timesteps, the timestep needs to be -small enough for stable numeric integration of the trajectory. If the timestep -is too large during initialization (or other instances of extreme dynamics), -using :doc:`fix nve/limit ` or :doc:`fix dt/reset ` -temporarily can help to avoid too large updates or adapt the timestep according -to the displacements. +small enough for stable numeric integration of the trajectory. If the +timestep is too large during initialization (or other instances of +extreme dynamics), using :doc:`fix nve/limit ` or +:doc:`fix dt/reset ` temporarily can help to avoid too +large updates or adapt the timestep according to the displacements. .. _hint06: Ignoring lost atoms ^^^^^^^^^^^^^^^^^^^ -It is tempting to use the :doc:`thermo_modify lost ignore ` -to avoid LAMMPS aborting with an error on lost atoms. This setting should, -however, *only* be used when atoms *should* leave the system. In general, -ignoring a problem does not solve it. +It is tempting to use the :doc:`thermo_modify lost ignore +` to avoid LAMMPS aborting with an error on lost atoms. +This setting should, however, *only* be used when atoms *should* leave +the system. In general, ignoring a problem does not solve it. .. _hint07: Pressure, forces, positions becoming NaN or Inf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Some potentials can overflow or have a division by zero with close contacts -or bad geometries (for the given force styles in use) leading to forces -that can no longer be represented as numbers. Those will show as "NaN" or -"Inf". On most machines, the program will continue, but there is no way -to recover from it and those NaN or Inf values will propagate. So-called -:doc:`"soft-core" potentials ` or the :doc:`"soft" repulsive-only -pair style ` are less prone for this behavior (depending on the -settings in use) and can be used at the beginning of a simulation. Also, -single precision numbers can overflow much faster, so for the GPU or INTEL -package it may be beneficial to run with double precision initially before -switching to mixed or single precision for faster execution when the system -has relaxed. +Some potentials can overflow or have a division by zero with close +contacts or bad geometries (for the given force styles in use) leading +to forces that can no longer be represented as numbers. Those will show +as "NaN" or "Inf". On most machines, the program will continue, but +there is no way to recover from it and those NaN or Inf values will +propagate. So-called :doc:`"soft-core" potentials ` or +the :doc:`"soft" repulsive-only pair style ` are less prone +for this behavior (depending on the settings in use) and can be used at +the beginning of a simulation. Also, single precision numbers can +overflow much faster, so for the GPU or INTEL package it may be +beneficial to run with double precision initially before switching to +mixed or single precision for faster execution when the system has +relaxed. .. _hint08: @@ -150,17 +153,17 @@ Communication cutoff The communication cutoff determines the "overlap" between sub-domains and atoms in these regions are referred to in LAMMPS as "ghost atoms". This region has to be large enough to contain all atoms of a bond, -angle, dihedral, or improper with just one atom in the actual sub-domain. -Typically, this cutoff is set to the largest cutoff from the :doc:`pair -style(s) ` plus the :doc:`neighbor list skin distance -` and will typically be sufficient for all bonded +angle, dihedral, or improper with just one atom in the actual +sub-domain. Typically, this cutoff is set to the largest cutoff from +the :doc:`pair style(s) ` plus the :doc:`neighbor list skin +distance ` and will typically be sufficient for all bonded interactions. But if the pair style cutoff is small, this may not be enough. LAMMPS will print a warning in this case using some heuristic -based on the equilibrium bond length, but that still may not be sufficient -for cases where the force constants are small and thus bonds may be -stretched very far. The communication cutoff can be adjusted with -:doc:`comm_modify cutoff \ `, but setting this too -large will waste CPU time and memory. +based on the equilibrium bond length, but that still may not be +sufficient for cases where the force constants are small and thus bonds +may be stretched very far. The communication cutoff can be adjusted +with :doc:`comm_modify cutoff \ `, but setting this +too large will waste CPU time and memory. .. _hint09: @@ -205,12 +208,12 @@ In some cases -- especially when running in parallel with MPI -- LAMMPS may stop without displaying an error. But the fact that nothing was displayed does not mean there was not an error message. Instead it is highly likely that the message was written to a buffer and LAMMPS was -aborted before the buffer was output. Usually, output buffers are output -for every line of output, but sometimes this is delayed until 4096 or -8192 bytes of output have been accumulated. This buffering for screen -and logfile output can be disabled by using the :ref:`-nb or -nonbuf -` command-line flag. This is most often needed when debugging -crashing multi-replica calculations. +aborted before the buffer was output. Usually, output buffers are +output for every line of output, but sometimes this is delayed until +4096 or 8192 bytes of output have been accumulated. This buffering for +screen and logfile output can be disabled by using the :ref:`-nb +or -nonbuf ` command-line flag. This is most often needed when +debugging crashing multi-replica calculations. .. _hint12: @@ -229,7 +232,7 @@ defined. Very few commands can be used before and after, like Most LAMMPS commands must be used after the simulation box is created. Consequently, LAMMPS will stop with an error, if a command is used in -the wrong place. This is not always obvious. So index or string style +the wrong place. This is not always obvious. So index or string style :doc:`variables ` can be expanded anywhere in the input, but equal style (or similar) variables can only be expanded before the box is defined if they do not reference anything that cannot be defined @@ -252,13 +255,14 @@ The header section informs LAMMPS how many entries or lines are expected in the various sections (like Atoms, Masses, Pair Coeffs, *etc.*\ ) of the data file. If there is a mismatch, LAMMPS will either keep reading beyond the end of a section or stop reading before the section has -ended. In that case the next line will not contain a recognized keyword. +ended. In that case the next line will not contain a recognized +keyword. -Such a mismatch can also happen when the first line of the data -is *not* a comment as required by the format, but a line with a valid -header keyword. That would result in LAMMPS expecting, for instance, -0 atoms because the "atoms" header line is the first line and thus -treated as a comment. +Such a mismatch can also happen when the first line of the data is *not* +a comment as required by the format, but a line with a valid header +keyword. That would result in LAMMPS expecting, for instance, 0 atoms +because the "atoms" header line is the first line and thus treated as a +comment. Another possibility to trigger this error is to have a keyword in the data file that corresponds to a fix (e.g. :doc:`fix cmap `) @@ -274,15 +278,15 @@ Incorrect format in ... section of data file This error happens when LAMMPS reads the contents of a section of a :doc:`data file ` and the number of parameters in the line -differs from what is expected. This most commonly happens when the -atom style is different from what is expected for a specific data file -since changing the atom style usually changes the format of the line. +differs from what is expected. This most commonly happens when the atom +style is different from what is expected for a specific data file since +changing the atom style usually changes the format of the line. This error can also occur when the number of entries indicated in the header of a data file (e.g. the number of atoms) is larger than the number of lines provided (e.g. in the corresponding Atoms section) -causing LAMMPS to continue reading into the next section which has -a completely different format. +causing LAMMPS to continue reading into the next section which has a +completely different format. .. _err0003: @@ -290,98 +294,100 @@ Illegal variable command: expected X arguments but found Y ---------------------------------------------------------- This error indicates that a variable command has the wrong number of -arguments. A common reason for this is that the variable expression -has whitespace, but is not enclosed in single or double quotes. +arguments. A common reason for this is that the variable expression has +whitespace, but is not enclosed in single or double quotes. To explain, the LAMMPS input parser reads and processes lines. The resulting line is broken down into "words". Those are usually -individual commands, labels, names, and values separated by whitespace (a -space or tab character). For "words" that may contain whitespace, they -have to be enclosed in single (') or double (") quotes. The parser will -then remove the outermost pair of quotes and pass that string as +individual commands, labels, names, and values separated by whitespace +(a space or tab character). For "words" that may contain whitespace, +they have to be enclosed in single (') or double (") quotes. The parser +will then remove the outermost pair of quotes and pass that string as "word" to the variable command. Thus missing quotes or accidental extra whitespace will trigger this -error because the unquoted whitespace will result in the text being broken -into more "words", i.e. the variable expression being split. +error because the unquoted whitespace will result in the text being +broken into more "words", i.e. the variable expression being split. .. _err0004: Out of range atoms - cannot compute ... --------------------------------------- -The PPPM (and also PPPMDisp and MSM) methods need to assemble a grid -of electron density data derived from the (partial) charges assigned to -the atoms. These charges are smeared out across multiple grid points -(see :doc:`kspace_modify order `). When running in -parallel with MPI, LAMMPS uses a :doc:`domain decomposition scheme +The PPPM (and also PPPMDisp and MSM) methods need to assemble a grid of +electron density data derived from the (partial) charges assigned to the +atoms. These charges are smeared out across multiple grid points (see +:doc:`kspace_modify order `). When running in parallel +with MPI, LAMMPS uses a :doc:`domain decomposition scheme ` where each processor manages a subset of atoms and -thus also a grid representing the density. The processor's grid covers the -actual volume of the sub-domain and some extra space corresponding to the -:doc:`neighbor list skin `. These are then :doc:`combined and -redistributed ` for parallel processing of the -long-range component of the Coulomb interaction. +thus also a grid representing the density. The processor's grid covers +the actual volume of the sub-domain and some extra space corresponding +to the :doc:`neighbor list skin `. These are then +:doc:`combined and redistributed ` for parallel +processing of the long-range component of the Coulomb interaction. The ``Out of range atoms`` error can happen when atoms move too fast, the neighbor list skin is too small, or the neighbor lists are not updated frequently enough. The smeared charges cannot then be fully assigned to the density grid for all atoms. LAMMPS checks for this condition and stops with an error. Most of the time, this is an -indication of a system with very high forces, often at the beginning -of a simulation or when boundary conditions are changed. The -error becomes more likely with more MPI processes. +indication of a system with very high forces, often at the beginning of +a simulation or when boundary conditions are changed. The error becomes +more likely with more MPI processes. There are multiple options to explore for avoiding the error. The best choice depends strongly on the individual system, and often a combination of changes is required. For example, more conservative MD parameter settings can be used (larger neighbor skin, shorter time step, more frequent neighbor list updates). Sometimes, it helps to revisit -the system generation and avoid close contacts when building it. Otherwise -one can use the :doc:`delete_atoms overlap` command to delete -those close contact atoms or run a minimization before the MD. It can also -help to temporarily use a cutoff-Coulomb pair style and no kspace style -until the system has somewhat equilibrated and then switch to the -long-range solver. +the system generation and avoid close contacts when building it. +Otherwise one can use the :doc:`delete_atoms overlap` +command to delete those close contact atoms or run a minimization before +the MD. It can also help to temporarily use a cutoff-Coulomb pair style +and no kspace style until the system has somewhat equilibrated and then +switch to the long-range solver. .. _err0005: Bond (or angle, dihedral, improper, cmap, or shake) atoms missing ----------------------------------------------------------------- -The second atom needed to compute a particular bond (or the third or fourth -atom for angle, dihedral, or improper) is missing on the indicated timestep -and processor. Typically, this is because the two bonded atoms have become -too far apart relative to the communication cutoff distance for ghost atoms. -By default, the communication cutoff is set by the pair cutoff. However, to -accommodate larger distances between topologically connected atoms, it can -be manually adjusted using :doc:`comm_modify ` at the cost of -increased communication and more ghost atoms. However, missing bond atoms -may also indicate that there are unstable dynamics which caused the atoms -to blow apart. In this scenario, increasing the communication distance will -not solve the underlying issue. Rather, see :ref:`Fast moving atoms ` -and :ref:`Neighbor list settings ` in the general troubleshooting +The second atom needed to compute a particular bond (or the third or +fourth atom for angle, dihedral, or improper) is missing on the +indicated timestep and processor. Typically, this is because the two +bonded atoms have become too far apart relative to the communication +cutoff distance for ghost atoms. By default, the communication cutoff +is set by the pair cutoff. However, to accommodate larger distances +between topologically connected atoms, it can be manually adjusted using +:doc:`comm_modify ` at the cost of increased communication +and more ghost atoms. However, missing bond atoms may also indicate +that there are unstable dynamics which caused the atoms to blow apart. +In this scenario, increasing the communication distance will not solve +the underlying issue. Rather, see :ref:`Fast moving atoms ` and +:ref:`Neighbor list settings ` in the general troubleshooting section above for ideas to fix unstable dynamics. -If atoms are intended to be lost during a simulation (e.g. due to open boundary -conditions or :doc:`fix evaporate `) such that two bonded atoms -may be lost at different times from each other, this error can be converted to a -warning or turned off using the *lost/bond* keyword in the :doc:`thermo_modify -` command. +If atoms are intended to be lost during a simulation (e.g. due to open +boundary conditions or :doc:`fix evaporate `) such that +two bonded atoms may be lost at different times from each other, this +error can be converted to a warning or turned off using the *lost/bond* +keyword in the :doc:`thermo_modify ` command. .. _err0006: Non-numeric atom coords or pressure or box dimensions - simulation unstable --------------------------------------------------------------------------- -This error usually occurs due to overly aggressive simulation settings or -issues with the system geometry or the potential. See :ref:`Pressure, -forces, positions becoming NaN or Inf ` above in the general -troubleshooting section. This error is more likely to happen during -equilibration, so it can help to do a minimization before or even add a -second or third minimization after running a few equilibration MD steps. -It also is more likely when directly using a Nose-Hoover (or other) barostat, -and thus it may be advisable to run with only a thermostat for a bit until -the potential energy has stabilized. +This error usually occurs due to overly aggressive simulation settings +or issues with the system geometry or the potential. See +:ref:`Pressure, forces, positions becoming NaN or Inf ` above in +the general troubleshooting section. This error is more likely to +happen during equilibration, so it can help to do a minimization before +or even add a second or third minimization after running a few +equilibration MD steps. It also is more likely when directly using a +Nose-Hoover (or other) barostat, and thus it may be advisable to run +with only a thermostat for a bit until the potential energy has +stabilized. .. _err007: @@ -392,10 +398,10 @@ Many fix styles are invoked only every *nevery* timesteps, which means their data is only valid on those steps. When data from a fix is used as input for a compute, a dump, another fix, or thermo output, it must read that data at timesteps when the fix in question was invoked, i.e. -on timesteps that are multiples of its *nevery* setting. If this is -not the case, LAMMPS will stop with an error. To remedy this, it may -be required to change the output frequency or the *nevery* setting of -the fix. +on timesteps that are multiples of its *nevery* setting. If this is not +the case, LAMMPS will stop with an error. To remedy this, it may be +required to change the output frequency or the *nevery* setting of the +fix. .. _err0008: @@ -407,16 +413,15 @@ causes. By default, LAMMPS checks for whether the total number of atoms is consistent with the sum of atoms "owned" by MPI processors every time that thermodynamic output is written. In the majority of cases, lost atoms are unexpected and a result of extremely high velocities causing -instabilities in the system. Such velocities can result from a -variety of issues. For ideas on how to track down issues with -unexpected lost atoms, see :ref:`Fast moving atoms ` and -:ref:`Neighbor list settings ` in the general troubleshooting -section above. In specific situations however, losing atoms is expected -material behavior (e.g. with sputtering and surface evaporation -simulations) and an unwanted crash can be resolved by changing the -:doc:`thermo_modify lost ` keyword from the default -'error' to 'warn' or 'ignore' (though heed the advice in :ref:`Ignoring -lost atoms ` above!). +instabilities in the system. Such velocities can result from a variety +of issues. For ideas on how to track down issues with unexpected lost +atoms, see :ref:`Fast moving atoms ` and :ref:`Neighbor list +settings ` in the general troubleshooting section above. In +specific situations however, losing atoms is expected material behavior +(e.g. with sputtering and surface evaporation simulations), and an +unwanted crash can be avoided by changing the :doc:`thermo_modify lost +` keyword from the default 'error' to 'warn' or 'ignore' +(though heed the advice in :ref:`Ignoring lost atoms ` above!). .. _err0009: @@ -425,12 +430,12 @@ Too many neighbor bins The simulation box is or has become too large relative to the size of a neighbor bin (which in turn depends on the largest pair-wise cutoff by -default) such that LAMMPS is unable to store the needed number of bins. This -typically implies the simulation box has expanded too far. That can -occur when some atoms move rapidly apart with shrink-wrap boundaries or -when a fix (like fix deform or a barostat) excessively grows the -simulation box. This can also happen if the largest pair-wise cutoff -is small. In this case, the error can be avoided by using the +default) such that LAMMPS is unable to store the needed number of bins. +This typically implies the simulation box has expanded too far. That +can occur when some atoms move rapidly apart with shrink-wrap boundaries +or when a fix (like fix deform or a barostat) excessively grows the +simulation box. This can also happen if the largest pair-wise cutoff is +small. In this case, the error can be avoided by using the :doc:`neigh_modify command ` to set the bin width to a suitably large value. @@ -442,17 +447,18 @@ Unrecognized ... style ... is part of ... package which is not enabled in this L The LAMMPS executable (binary) being used was not compiled with a package containing the specified style. This indicates that the executable needs to be re-built after enabling the correct package in -the relevant Makefile or CMake build directory. See +the relevant Makefile or CMake build directory. See :doc:`Section 3. Build LAMMPS ` for more details. One can check if the expected package and pair style is present in the executable by -running it with the ``-help`` (or ``-h``) flag on the command line. One +running it with the ``-help`` (or ``-h``) flag on the command line. One common oversight, especially for beginner LAMMPS users, is enabling the package but forgetting to run commands to rebuild (e.g., to run the final ``make`` or ``cmake`` command). If this error occurs with an executable that the user does not control -(e.g., through a module on HPC clusters), the user will need to get in contact -with the relevant person or people who can update the executable. +(e.g., through a module on HPC clusters), the user will need to get in +contact with the relevant person or people who can update the +executable. .. _err011: @@ -460,13 +466,13 @@ Energy or stress was not tallied by pair style ---------------------------------------------- This warning can be printed by computes from the :ref:`TALLY package -`. Those use a callback mechanism that only work for -regular pair-wise additive pair styles like :doc:`Lennard-Jones -`, :doc:`Morse `, :doc:`Born-Meyer-Huggins -`, and similar. Such required callbacks have not been -implemented for many-body potentials so one would have to implement them -to add compatiability with these computes (which may be difficult to do in -a generic fashion). Whether this warning indicates that contributions to +`. Those use a callback mechanism that only work for regular +pair-wise additive pair styles like :doc:`Lennard-Jones `, +:doc:`Morse `, :doc:`Born-Meyer-Huggins `, and +similar. Such required callbacks have not been implemented for +many-body potentials so one would have to implement them to add +compatiability with these computes (which may be difficult to do in a +generic fashion). Whether this warning indicates that contributions to the computed properties are missing depends on the groups used. At any rate, careful testing of the results is advised when this warning appears. @@ -493,9 +499,10 @@ Substitution for illegal variable A variable in an input script or a variable expression was not found in the list of valid variables. The most common reason for this is a typo -somewhere in the input file such that the expression uses an invalid variable -name. The second most common reason is omitting the curly braces for a -direct variable with a name that is not a single letter. For example: +somewhere in the input file such that the expression uses an invalid +variable name. The second most common reason is omitting the curly +braces for a direct variable with a name that is not a single letter. +For example: .. code-block:: LAMMPS @@ -507,14 +514,13 @@ direct variable with a name that is not a single letter. For example: Another potential source of this error may be invalid command line variables (-var or -v argument) used when launching LAMMPS from an interactive shell or shell scripts. An uncommon source for this error -is using the :doc:`next command ` to advance through a list of values -provided by an index style variable. If there is no remaining element in -the list, LAMMPS will delete the variable and any following expansion or -reference attempt will trigger the error. +is using the :doc:`next command ` to advance through a list of +values provided by an index style variable. If there is no remaining +element in the list, LAMMPS will delete the variable and any following +expansion or reference attempt will trigger the error. -Users with harder-to-track variable errors might also find reading -:doc:`Section 5.2. Parsing rules for input scripts` -helpful. +Users with harder-to-track variable errors might also find reading the +:doc:`Parsing rules for input scripts ` helpful. .. _err0014: @@ -527,9 +533,9 @@ of the LAMMPS code where it updates the domain decomposition and before it builds the neighbor lists. It checks that both atoms of a bond are within the communication cutoff of a subdomain. It is usually caused by atoms moving too fast (see the :ref:`paragraph on fast moving atoms -`), or by the :doc:`communication cutoff being too -small `, or by waiting too long between :doc:`sub-domain -and neighbor list updates `. +`), or by the :doc:`communication cutoff being too small +`, or by waiting too long between :doc:`sub-domain and +neighbor list updates `. .. _err0015: @@ -537,41 +543,43 @@ Cannot use neighbor bins - box size \<\< cutoff ----------------------------------------------- LAMMPS is unable to build neighbor bins since the size of the box is -much smaller than an interaction cutoff in at least one of its dimensions. -Typically, this error is triggered when the simulation box has one very -thin dimension. If a cubic neighbor bin had to fit exactly within -the thin dimension, then an inordinate amount of bins would be created to -fill space. This error can be avoided using the generally slower -:doc:`nsq neighbor style ` or by increasing the size of the -smallest box lengths. +much smaller than an interaction cutoff in at least one of its +dimensions. Typically, this error is triggered when the simulation box +has one very thin dimension. If a cubic neighbor bin had to fit exactly +within the thin dimension, then an inordinate amount of bins would be +created to fill space. This error can be avoided using the generally +slower :doc:`nsq neighbor style ` or by increasing the size of +the smallest box lengths. .. _err0016: Did not assign all atoms correctly ---------------------------------- -This error happens most commonly when :doc:`reading a data file ` -under :doc:`non-periodic boundary conditions`. Only atoms with -positions **inside** the simulation box will be read and thus any atoms -outside the box will be skipped and the total atom count will not match, -which triggers the error. This does not happen with periodic boundary -conditions where atoms outside the principal box will be "wrapped" into -the principal box and their image flags set accordingly. +This error happens most commonly when :doc:`reading a data file +` under :doc:`non-periodic boundary conditions`. +Only atoms with positions **inside** the simulation box will be read and +thus any atoms outside the box will be skipped and the total atom count +will not match, which triggers the error. This does not happen with +periodic boundary conditions where atoms outside the principal box will +be "wrapped" into the principal box and their image flags set +accordingly. -Similar errors can happen with the :doc:`replicate command` or -the :doc:`read_restart command`. In these cases the cause -may be a problematic geometry, an insufficient communication cutoff, or -a bug in the LAMMPS source code. In these cases it is advisable to set -up :ref:`small test case ` for testing and debugging. This will -be required in case you need to get help from a LAMMPS developer. +Similar errors can happen with the :doc:`replicate command` +or the :doc:`read_restart command`. In these cases the +cause may be a problematic geometry, an insufficient communication +cutoff, or a bug in the LAMMPS source code. In these cases it is +advisable to set up :ref:`small test case ` for testing and +debugging. This will be required in case you need to get help from a +LAMMPS developer. .. _err0017: Domain too large for neighbor bins ---------------------------------- -The domain has become extremely large so that neighbor bins cannot -be used. Too many neighbor bins would need to be created to fill space. +The domain has become extremely large so that neighbor bins cannot be +used. Too many neighbor bins would need to be created to fill space. Most likely, one or more atoms have been blown a great distance out of the simulation box or a fix (like fix deform or a barostat) has excessively grown the simulation box. @@ -587,13 +595,13 @@ of bonds and hydrogen bonds can change due to chemical reactions. The default approach, however, assumes that these changes are not very large, so it allocates buffers for the current system setup plus a safety margin. This can be adjusted with the :doc:`safezone, mincap, -and minhbonds settings of the pair style `, but only to some -extent. When equilibrating a new system, or simulating a sparse system -in parallel, this can be difficult to control and become wasteful. A -simple workaround is often to break a simulation down in multiple -chunks. A better approach, however, is to compile and use the KOKKOS -package version of ReaxFF (you do not need a GPU for that, but can also -compile it in serial or OpenMP mode), which uses a more robust +and minhbonds settings of the pair style `, but only to +some extent. When equilibrating a new system, or simulating a sparse +system in parallel, this can be difficult to control and become +wasteful. A simple workaround is often to break a simulation down in +multiple chunks. A better approach, however, is to compile and use the +KOKKOS package version of ReaxFF (you do not need a GPU for that, but +can also compile it in serial or OpenMP mode), which uses a more robust memory allocation approach. .. _err0019: @@ -605,17 +613,17 @@ This error most commonly happens when setting force field coefficients with either the :doc:`pair_coeff `, the :doc:`bond_coeff `, the :doc:`angle_coeff `, the :doc:`dihedral_coeff `, or the :doc:`improper_coeff -` command. These commands accept type labels, -explicit numbers, and wildcards for ranges of numbers. If the numeric -value of any of these is outside the valid range (defined by the number -of corresponding types), LAMMPS will stop with this error. A few other -commands and styles also allow ranges of numbers and check -using the same method and thus print the same kind of error. +` command. These commands accept type labels, explicit +numbers, and wildcards for ranges of numbers. If the numeric value of +any of these is outside the valid range (defined by the number of +corresponding types), LAMMPS will stop with this error. A few other +commands and styles also allow ranges of numbers and check using the +same method and thus print the same kind of error. -The cause is almost always a typo in the input or a logic error -when defining the values or ranges. So one needs to carefully -review the input. Along with the error, LAMMPS will print the -valid range as a hint. +The cause is almost always a typo in the input or a logic error when +defining the values or ranges. So one needs to carefully review the +input. Along with the error, LAMMPS will print the valid range as a +hint. .. _err0020: @@ -627,7 +635,7 @@ per-atom vector or array provided by a compute or fix or atom-style or vector-style variable or data from a specific atom, an index in square brackets ("[ ]") (or two indices) must be provided to determine which element to access and it must be in a valid range or else LAMMPS would -access invalid data or crash with a segmentation fault. In the two most +access invalid data or crash with a segmentation fault. In the two most common cases, where this data is accessed, :doc:`variable expressions ` and :doc:`thermodynamic output `, LAMMPS will check for valid indices and stop with an error otherwise. @@ -645,34 +653,37 @@ properties at every step. Incorrect args for pair coefficients (also bond/angle/dihedral/improper coefficients) ------------------------------------------------------------------------------------- -The parameters in the :doc:`pair_coeff ` command for a specified -:doc:`pair_style ` have a missing or erroneous argument. The same -applies when seeing this error for :doc:`bond_coeff `, -:doc:`angle_coeff `, :doc:`dihedral_coeff `, or -:doc:`improper_coeff ` and their respective style commands when -using the MOLECULE or EXTRA-MOLECULE packages. The cases below describe -some ways to approach pair coefficient errors, but the same strategies -apply to bonded systems as well. +The parameters in the :doc:`pair_coeff ` command for a +specified :doc:`pair_style ` have a missing or erroneous +argument. The same applies when seeing this error for :doc:`bond_coeff +`, :doc:`angle_coeff `, :doc:`dihedral_coeff +`, or :doc:`improper_coeff ` and their +respective style commands when using the MOLECULE or EXTRA-MOLECULE +packages. The cases below describe some ways to approach pair +coefficient errors, but the same strategies apply to bonded systems as +well. -Outside of normal typos, this error can have several sources. In all cases, the -first step is to compare the command arguments to the expected format found in -the corresponding :doc:`pair_style ` page. This can reveal cases -where, for example, a pair style was changed, but the pair coefficients were not -updated. This can happen especially with pair style variants such as -:doc:`pair_style eam ` vs. :doc:`pair_style eam/alloy ` -that look very similar but accept different parameters (the latter 'eam/alloy' -variant takes element type names while 'eam' does not). +Outside of normal typos, this error can have several sources. In all +cases, the first step is to compare the command arguments to the +expected format found in the corresponding :doc:`pair_style +` page. This can reveal cases where, for example, a pair +style was changed, but the pair coefficients were not updated. This can +happen especially with pair style variants such as :doc:`pair_style eam +` vs. :doc:`pair_style eam/alloy ` that look very +similar but accept different parameters (the latter 'eam/alloy' variant +takes element type names while 'eam' does not). -Another common source of coefficient errors is when using multiple pair styles -with commands such as :doc:`pair_style hybrid `. Using hybrid pair -styles requires adding an extra "label" argument in the coefficient commands -that designates which pair style the command line refers to. Moreover, if -the same pair style is used multiple times, this label must be followed by -an additional numeric argument. Also, different pair styles may require -different arguments. +Another common source of coefficient errors is when using multiple pair +styles with commands such as :doc:`pair_style hybrid `. +Using hybrid pair styles requires adding an extra "label" argument in +the coefficient commands that designates which pair style the command +line refers to. Moreover, if the same pair style is used multiple +times, this label must be followed by an additional numeric argument. +Also, different pair styles may require different arguments. -This error message might also require a close look at other LAMMPS input files -that are read in by the input script, such as data files or restart files. +This error message might also require a close look at other LAMMPS input +files that are read in by the input script, such as data files or +restart files. .. _err0022: @@ -685,20 +696,20 @@ LAMMPS does *not* calculate these quantities when the forces are calculated on every timestep or iteration. Global quantities are only calculated when they are needed for :doc:`thermo ` output (at the beginning, end, and at regular intervals specified by the -:doc:`thermo ` command). Similarly, per-atom quantities are only -calculated if they are needed to write per-atom energy or virial to a -dump file. This system works fine for simple input scripts. However, +:doc:`thermo ` command). Similarly, per-atom quantities are +only calculated if they are needed to write per-atom energy or virial to +a dump file. This system works fine for simple input scripts. However, the many user-specified `variable`, `fix`, and `compute` commands that LAMMPS provides make it difficult to anticipate when a quantity will be -requested. In some use cases, LAMMPS will figure out that a quantity is +requested. In some use cases, LAMMPS will figure out that a quantity is needed and arrange for it to be calculated on that timestep e.g. if it is requested by :doc:`fix ave/time ` or similar commands. If that fails, it can be detected by a mismatch between the current timestep and when a quantity was last calculated, in which case an error message of this type is generated. -The most common cause of this type of error is requesting a quantity before -the start of the simulation. +The most common cause of this type of error is requesting a quantity +before the start of the simulation. .. code-block:: LAMMPS @@ -707,13 +718,13 @@ the start of the simulation. print "Potential energy = $e" # this will generate the error run 1000 # start of simulation -This situation can be avoided by adding in a "run 0" command, as explained in -more detail in the "Variable Accuracy" section of the +This situation can be avoided by adding in a "run 0" command, as +explained in more detail in the "Variable Accuracy" section of the :doc:`variable ` doc page. -Another cause is requesting a quantity on a timestep that is not -a thermo or dump output timestep. This can often be -remedied by increasing the frequency of thermo or dump output. +Another cause is requesting a quantity on a timestep that is not a +thermo or dump output timestep. This can often be remedied by +increasing the frequency of thermo or dump output. .. _err0023: @@ -722,19 +733,19 @@ Molecule auto special bond generation overflow In order to correctly apply the :doc:`special_bonds ` settings (also known as "exclusions"), LAMMPS needs to maintain for each -atom a list of atoms that are connected to this atom, either directly with -a bond or indirectly through bonding with an intermediate atom(s). The purpose -is to either remove or tag those pairs of atoms in the neighbor list. This -information is stored with individual -atoms and thus the maximum number of such "special" neighbors is set -when the simulation box is created. When reading (relative) geometry -and topology of a 'molecule' from a :doc:`molecule file `, -LAMMPS will build the list of such "special" neighbors for the molecule atom +atom a list of atoms that are connected to this atom, either directly +with a bond or indirectly through bonding with an intermediate atom(s). +The purpose is to either remove or tag those pairs of atoms in the +neighbor list. This information is stored with individual atoms and +thus the maximum number of such "special" neighbors is set when the +simulation box is created. When reading (relative) geometry and +topology of a 'molecule' from a :doc:`molecule file `, LAMMPS +will build the list of such "special" neighbors for the molecule atom (if not given in the molecule file explicitly). The error is triggered -when the resulting list is too long for the space reserved when -creating the simulation box. The solution is to increase the -corresponding setting. Overestimating this value will only consume -more memory, and is thus a safe choice. +when the resulting list is too long for the space reserved when creating +the simulation box. The solution is to increase the corresponding +setting. Overestimating this value will only consume more memory, and +is thus a safe choice. .. _err0024: @@ -742,14 +753,14 @@ Molecule topology/atom exceeds system topology/atom --------------------------------------------------- LAMMPS uses :doc:`domain decomposition ` to -distribute data (i.e. atoms) across the MPI processes in parallel -runs. This includes topology data about bonds, angles, -dihedrals, impropers and :doc:`"special" neighbors `. -This information is stored with either one or all atoms involved in such -a topology entry (which of the two option applies depends on the -:doc:`newton ` setting for bonds). When reading a data file, -LAMMPS analyzes the requirements for this file and then the values are -"locked in" and cannot be extended. +distribute data (i.e. atoms) across the MPI processes in parallel runs. +This includes topology data about bonds, angles, dihedrals, impropers +and :doc:`"special" neighbors `. This information is +stored with either one or all atoms involved in such a topology entry +(which of the two option applies depends on the :doc:`newton ` +setting for bonds). When reading a data file, LAMMPS analyzes the +requirements for this file and then the values are "locked in" and +cannot be extended. So loading a molecule file that requires more of the topology per atom storage or adding a data file with such needs will lead to an error. To @@ -765,10 +776,10 @@ Molecule topology type exceeds system topology type --------------------------------------------------- The total number of atom, bond, angle, dihedral, and improper types is -"locked in" when LAMMPS creates the simulation box. This can happen +"locked in" when LAMMPS creates the simulation box. This can happen through either the :doc:`create_box `, the :doc:`read_data `, or the :doc:`read_restart ` command. After -this it is not possible to refer to an additional type. So loading a +this it is not possible to refer to an additional type. So loading a molecule file that uses additional types or adding a data file that would require additional types will lead to an error. To avoid the error, one or more of the `extra/XXX/types` keywords are required to @@ -817,17 +828,18 @@ beginning of the chain. No fixes with time integration, atoms won't move ------------------------------------------------ -This warning will be issued if LAMMPS encounters a :doc:`run ` command that -does not have a preceding :doc:`fix ` command that updates atom/object -positions and velocities per step. In other words, there are no fixes detected -that perform velocity-Verlet time integration, such as :doc:`fix nve `. -Note that this alert does not mean that there are no active fixes. LAMMPS has a -very wide variety of fixes, many of which do not move objects but also operate -through steps, such as printing outputs (e.g. :doc:`fix print `), -performing calculations (e.g. :doc:`fix ave/time `), or changing -other system parameters (e.g. :doc:`fix dt/reset `). It is up to -the user to determine whether the lack of a time-integrating fix is intentional -or not. +This warning will be issued if LAMMPS encounters a :doc:`run ` +command that does not have a preceding :doc:`fix ` command that +updates atom/object positions and velocities per step. In other words, +there are no fixes detected that perform velocity-Verlet time +integration, such as :doc:`fix nve `. Note that this alert +does not mean that there are no active fixes. LAMMPS has a very wide +variety of fixes, many of which do not move objects but also operate +through steps, such as printing outputs (e.g. :doc:`fix print +`), performing calculations (e.g. :doc:`fix ave/time +`), or changing other system parameters (e.g. :doc:`fix +dt/reset `). It is up to the user to determine whether +the lack of a time-integrating fix is intentional or not. .. _err0029: @@ -835,36 +847,39 @@ or not. System is not charge neutral, net charge = ... ---------------------------------------------- -the sum of charges in the system is not zero. When a system is not -charge-neutral, methods that evolve/manipulate per-atom charges, evaluate -Coulomb interactions, evaluate Coulomb forces, or evaluate/manipulate other -properties relying on per-atom charges may raise this warning. A non-zero -net charge most commonly arises after setting per-atom charges :doc:`set ` -such that the sum is non-zero or by reading in a system through :doc:`read_data -` where the per-atom charges do not sum to zero. However, a loss of -charge neutrality may occur in other less common ways, like when charge +the sum of charges in the system is not zero. When a system is not +charge-neutral, methods that evolve/manipulate per-atom charges, +evaluate Coulomb interactions, evaluate Coulomb forces, or +evaluate/manipulate other properties relying on per-atom charges may +raise this warning. A non-zero net charge most commonly arises after +setting per-atom charges :doc:`set ` such that the sum is non-zero +or by reading in a system through :doc:`read_data ` where the +per-atom charges do not sum to zero. However, a loss of charge +neutrality may occur in other less common ways, like when charge equilibration methods (e.g., :doc:`fix qeq `) fail. -A similar warning/error may be raised when using certain charge equilibration -methods: :doc:`fix qeq `, :doc:`fix qeq/comb `, :doc:`fix -qeq/reaxff `, and :doc:`fix qtpie/reaxff `. In -such cases, this warning/error will be raised for the fix :doc:`group ` -when the group has a non-zero net charge. +A similar warning/error may be raised when using certain charge +equilibration methods: :doc:`fix qeq `, :doc:`fix qeq/comb +`, :doc:`fix qeq/reaxff `, and :doc:`fix +qtpie/reaxff `. In such cases, this warning/error +will be raised for the fix :doc:`group ` when the group has a +non-zero net charge. -When the system is expected to be charge-neutral, this warning often arises due -to an error in the lammps input (e.g., an incorrect :doc:`set ` command, -error in the data file read by :doc:`read_data `, incorrectly -grouping atoms with charge, etc.). If the system is NOT expected to be -charge-neutral, the user should make sure that the method(s) used are -appropriate for systems with a non-zero net charge. Some commonly used fixes for -charge equilibration :doc:`fix qeq `, pair styles that include charge -interactions :doc:`pair_style coul/XXX `, and kspace methods -:doc:`kspace_style ` can, in theory, support systems with non-zero -net charge. However, non-zero net charge can lead to spurious artifacts. The -severity of these artifacts depends on the magnitude of total charge, system -size, and methods used. Before running simulations or calculations for systems -with non-zero net charge, users should test for artifacts and convergence of -properties. +When the system is expected to be charge-neutral, this warning often +arises due to an error in the lammps input (e.g., an incorrect :doc:`set +` command, error in the data file read by :doc:`read_data +`, incorrectly grouping atoms with charge, etc.). If the +system is NOT expected to be charge-neutral, the user should make sure +that the method(s) used are appropriate for systems with a non-zero net +charge. Some commonly used fixes for charge equilibration :doc:`fix qeq +`, pair styles that include charge interactions +:doc:`pair_style coul/XXX `, and kspace methods +:doc:`kspace_style ` can, in theory, support systems with +non-zero net charge. However, non-zero net charge can lead to spurious +artifacts. The severity of these artifacts depends on the magnitude of +total charge, system size, and methods used. Before running simulations +or calculations for systems with non-zero net charge, users should test +for artifacts and convergence of properties. .. _err0030: @@ -928,9 +943,9 @@ created ` for additional information. XXX command after simulation box is defined -------------------------------------------- -This error occurs when trying to excute a LAMMPS command that -changes a global setting that is locked in when the simulation box -is created (for instance defining the :doc:`atom style `, +This error occurs when trying to excute a LAMMPS command that changes a +global setting *after* it is locked in when the simulation box is +created (for instance defining the :doc:`atom style `, :doc:`dimension `, :doc:`newton `, or :doc:`units ` setting). These settings may only be changed *before* the simulation box has been created. See the paragraph on :ref:`errors From fecd93783bfe846f4108109f2dd44a74b3e6e477 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Mar 2025 15:40:40 -0400 Subject: [PATCH 32/33] spelling --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 084f7c0ec1..ab93ca7c98 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2780,6 +2780,7 @@ omegaz Omelyan omp OMP +ondulated oneAPI onebody onelevel From 227b7840e7b3399f9f06d1161e452ba38efb4d21 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Mar 2025 15:42:11 -0400 Subject: [PATCH 33/33] add disclaimer and improve some formulations --- doc/src/Howto_bulk2slab.rst | 70 ++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/doc/src/Howto_bulk2slab.rst b/doc/src/Howto_bulk2slab.rst index 56de49d299..2c26961522 100644 --- a/doc/src/Howto_bulk2slab.rst +++ b/doc/src/Howto_bulk2slab.rst @@ -4,34 +4,51 @@ Convert bulk system to slab A regularly encountered simulation problem is how to convert a bulk system that has been run for a while to equilibrate into a slab system -with some vacuum space. The challenge here is that one cannot just -change the box dimensions with the :doc:`change_box command -` or edit the box boundaries in a data file because some -atoms will have non-zero image flags from diffusing around. Changing -the box dimensions results in an undesired displacement of those atoms, -since the image flags indicate how many times the box length in x-, y-, -or z-direction needs to be added or subtracted to get the "unwrapped" -coordinates. By changing the box dimension this distance is changed and -thus those atoms move unphysically relative to their neighbors with zero -image flags. Setting image flags forcibly to zero creates problems because -that could break apart molecules by have one atom of a bond on the top -of the system and the other at the bottom. +with some vacuum space and free surfaces. The challenge here is that +one cannot just change the box dimensions with the :doc:`change_box +command ` or edit the box boundaries in a data file because +some atoms will have non-zero image flags from diffusing around. + +Changing the box dimensions results in an undesired displacement of +those atoms, since the image flags indicate how many times the box +length in x-, y-, or z-direction needs to be added or subtracted to get +the "unwrapped" coordinates. By changing the box dimension this +distance is changed and thus those atoms move unphysically relative to +their neighbors with zero image flags. Setting image flags forcibly to +zero creates problems because that could break apart molecules by having +one atom of a bond on the top of the system and the other at the bottom. .. _bulk2slab: .. figure:: JPG/rhodo-both.jpg :figwidth: 80% :figclass: align-center - Snapshots of the bulk Rhodopsin system (right) and the slab geometry (left) + Snapshots of the bulk Rhodopsin in lipid layer and water system (right) + and the generated slab geometry (left) + +.. admonition:: Disclaimer + :class: note + + The following workflow will work for many bulk systems, but not all. + Some systems cannot be converted (e.g. polymers with bonds to the + same molecule across periodic boundaries, sometimes called "infinite + polymers"). The amount of vacuum that needs to be added depends on + the length of the molecules where the system is split (the example + here splits where there is water with short molecules). In some + cases, the system may need to be re-centered in the box first using + the :doc:`displace_atoms command `. Also, the time + spent on strong thermalization and equilibration will depend on the + specific system and its thermodynamic conditions. Below is a suggested workflow using the :doc:`Rhodopsin benchmark input -` for demonstration. The figure shows the state before on -the left (with unwrapped atoms that have diffused out of the box) and -after on the right (with the vacuum added above and below). The process -is done by modifying the ``in.rhodo`` input file. The first lines up to -and including the :doc:`read_data command ` remain unchanged. -Then we insert the following lines to add vacuum to the z direction -above and below the system: +` for demonstration. The figure shows the state *before* +the procedure on the left (with unwrapped atoms that have diffused out +of the box) and *after* on the right (with the vacuum added above and +below). The procedure is implemented by modifying a copy of the +``in.rhodo`` input file. The first lines up to and including the +:doc:`read_data command ` remain unchanged. Then we insert +the following lines to add vacuum to the z direction above and below the +system: .. code-block:: LAMMPS @@ -79,10 +96,10 @@ Next we replace the :doc:`fix npt command ` with: fix 2 nvt temp 300.0 300.0 10.0 We now have an open system and thus the adjustment of the cell in -z-direction is no longer required. Since splitting of the bulk where -the vacuum is inserted, creates surface atoms with high potential -energy, we reduce the thermostat time constant from 100.0 to 10.0 to -remove excess kinetic energy resulting from that change faster. +z-direction is no longer required. Since splitting the bulk water +region where the vacuum is inserted, creates surface atoms with high +potential energy, we reduce the thermostat time constant from 100.0 to +10.0 to remove excess kinetic energy resulting from that change faster. Also the high potential energy of the surface atoms can cause that some of them are ejected from the slab. In order to suppress that, we add @@ -114,6 +131,11 @@ z-direction will experience a restoring force, nudging them back to the slab. The force constant of :math:`10.0 \frac{\mathrm{kcal/mol}}{\AA}` was determined empirically. +Adding these "restoring" soft walls assist in making the free surfaces +above and below the slab flat, instead of having rugged or ondulated +surfaces. The impact of the walls can be changed by adjusting the force +constant, cutoff, and position of the wall. + Finally, we replace the :doc:`run 100 ` of the original input with: .. code-block:: LAMMPS