diff --git a/doc/src/mass.rst b/doc/src/mass.rst index 3da580df1c..f359ccf3a5 100644 --- a/doc/src/mass.rst +++ b/doc/src/mass.rst @@ -10,7 +10,7 @@ Syntax mass I value -* I = atom type (see asterisk form below) +* I = atom type (see asterisk form below), or type label * value = mass Examples @@ -22,6 +22,9 @@ Examples mass * 62.5 mass 2* 62.5 + labelmap atom 1 C + mass C 12.01 + Description """"""""""" @@ -30,12 +33,16 @@ values can also be set in the :doc:`read_data ` data file using the "Masses" keyword. See the :doc:`units ` command for what mass units to use. -The I index can be specified in one of two ways. An explicit numeric -value can be used, as in the first example above. Or a wild-card -asterisk can be used to set the mass for multiple atom types. This -takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of -atom types, then an asterisk with no numeric values means all types -from 1 to N. A leading asterisk means all types from 1 to n +The I index can be specified in one of several ways. An explicit +numeric value can be used, as in the first example above. Or I can be +a type label, which is an alphanumeric string defined by the +:doc:`labelmap ` command or in a section of a data file read +by the :doc:`read_data ` command, and which converts +internally to a numeric type. Or a wild-card asterisk can be used to +set the mass for multiple atom types. This takes the form "\*" or +"\*n" or "n\*" or "m\*n", where m and n are numbers. If N = the +number of atom types, then an asterisk with no numeric values means +all types from 1 to N. A leading asterisk means all types from 1 to n (inclusive). A trailing asterisk means all types from n to N (inclusive). A middle asterisk means all types from m to n (inclusive). diff --git a/doc/src/pair_coeff.rst b/doc/src/pair_coeff.rst index 1065ec0fe0..1704afdbf0 100644 --- a/doc/src/pair_coeff.rst +++ b/doc/src/pair_coeff.rst @@ -26,6 +26,10 @@ Examples pair_coeff * 3 morse.table ENTRY1 pair_coeff 1 2 lj/cut 1.0 1.0 2.5 (for pair_style hybrid) + labelmap atom 1 C + labelmap atom 2 H + pair_coeff C H 1.0 1.0 2.5 + Description """"""""""" @@ -41,7 +45,7 @@ alphanumeric string defined by the :doc:`labelmap ` command or in a section of a data file read by the :doc:`read_data ` command, and which converts internally to a numeric type. Internally, LAMMPS will set coefficients for the symmetric J,I -interaction to the same values as the I <= J interaction. +interaction to the same values as the I,J interaction. For numeric values only, a wildcard asterisk can be used in place of or in conjunction with the I,J arguments to set the coefficients for diff --git a/src/atom.cpp b/src/atom.cpp index a82dab77bb..15880f186e 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1849,15 +1849,24 @@ void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg) { if (mass == nullptr) error->all(file,line,"Cannot set mass for this atom style"); - int lo,hi; - utils::bounds(file,line,arg[0],1,ntypes,lo,hi,error); - if (lo < 1 || hi > ntypes) error->all(file,line,"Invalid type for mass set"); - - for (int itype = lo; itype <= hi; itype++) { + if (!isdigit(arg[0][0]) && arg[0][0] != '*') { + std::string typestr(arg[0]); + int itype = atom->find_label(typestr,Atom::ATOM); mass[itype] = utils::numeric(FLERR,arg[1],false,lmp); mass_setflag[itype] = 1; if (mass[itype] <= 0.0) error->all(file,line,"Invalid mass value"); + } else { + int lo,hi; + utils::bounds(file,line,arg[0],1,ntypes,lo,hi,error); + if (lo < 1 || hi > ntypes) error->all(file,line,"Invalid type for mass set"); + + for (int itype = lo; itype <= hi; itype++) { + mass[itype] = utils::numeric(FLERR,arg[1],false,lmp); + mass_setflag[itype] = 1; + + if (mass[itype] <= 0.0) error->all(file,line,"Invalid mass value"); + } } }