diff --git a/.github/release_steps.md b/.github/release_steps.md index 4ecd05d0433..6a3bda821cf 100644 --- a/.github/release_steps.md +++ b/.github/release_steps.md @@ -33,10 +33,14 @@ release and should not contain any other changes. (Exceptions: this document, last minute trivial(!) changes). This PR shall not be merged before **all** pending tests have completed -and cleared. We currently use a mix of automated tests running on -either Temple's Jenkins cluster or GitHub workflows. Those include time -consuming tests not run on pull requests. If needed, a bug-fix pull -request should be created and merged to clear all tests. +and cleared. We currently use automated tests with GitHub workflows. +There is also a Coverity Scan run with static code analysis done every +thursday evening or when triggered manually. That output should be +checked for any significant issues before a release, too. In addition +there is a nightly static code analysis run that can be checked at +https://downloads.lammps.org/analysis/ +If needed, a bug-fix pull request should be created and merged to clear +pending issues. ### Create release on GitHub @@ -45,9 +49,9 @@ cleared testing, the 'next\_release' branch is merged into 'develop'. Check out or update the 'develop' branch locally, pull the latest changes, merge them into 'release' with a fast forward(!) merge, and -apply a suitable release tag (for historical reasons the tag starts with -"patch_" followed by the date, and finally push everything back to -GitHub. There should be no commits made to 'release' but only +apply a suitable release tag (for historical reasons the tag starts +with "patch_" followed by the date, and finally push everything back +to GitHub. There should be no commits made to 'release' but only fast forward merges. Example: ``` @@ -60,17 +64,20 @@ git tag -s -m "LAMMPS feature release 4 February 2025" patch_4Feb2025 git push git@github.com:lammps/lammps.git --tags develop release ``` -Applying this tag will trigger two actions on the Temple Jenkins cluster: -- The online manual at https://docs.lammps.org/ will be updated to the +After applying this tag two steps will need to be executed manually +(they used to be run automatically, but this is currently not available). +- The online manual at https://docs.lammps.org/ needs to be updated to the state of the 'release' branch. Merges to the 'develop' branch will trigger updating https://docs.lammps.org/latest/ so by reviewing the version of the manual under the "latest" URL, it is possible to preview what the updated release documentation will look like. - A downloadable tar archive of the LAMMPS distribution that includes the - html format documentation and a PDF of the manual will be created and - uploaded to the download server at https://download.lammps.org/tars + html format documentation and a PDF of the manual needs to be created + and uploaded to the download server at https://download.lammps.org/tars Note that the file is added, but the `index.html` file is not updated, - so it is not yet publicly visible. + so it is not yet publicly visible. The index file is updated manually + with a local script after symlinks and SHASUM files have been updated + as well. Go to https://github.com/lammps/lammps/releases and create a new (draft) release page with a summary of all the changes included and references @@ -81,9 +88,17 @@ a tag" drop-down list. Go to the bottom of the list and select the "Set as pre-release" checkbox. The "Set as the latest release" button is reserved for stable releases and updates to them. -If everything is in order, you can click on the "Publish release" -button. Otherwise, click on "Save draft" and finish pending tasks until -you can return to edit the release page and publish it. +Releases are now "immutable", so neither the tag hash nor any uploaded +assets can be changed after the release is published. Only the +release notes text may be changed, e.g. to document issues with the +uploaded assets. + +Thus only when *everything* is in order *and* all required assets (source, +binary packages for different platforms, manual PDF) are uploaded in +a suitable version, you can click on the "Publish release" button. +Otherwise, click on "Save draft" and finish pending tasks until you can +return to edit the release page, update assets, and publish it when +it is ready. ### Prepare pre-compiled packages, update packages to GitHub diff --git a/doc/lammps.1 b/doc/lammps.1 index 28f639362b3..3d2dfd8d8ab 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "10 September 2025" "2025-09-10" +.TH LAMMPS "1" "10 December 2025" "2025-12-10" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 10 September 2025 +\- Molecular Dynamics Simulator. Version 10 Decmber 2025 .SH SYNOPSIS .B lmp diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 4d490a6b55e..c1e730a37e0 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -274,6 +274,7 @@ OPT. * :doc:`wall/gran (k) ` * :doc:`wall/gran/region ` * :doc:`wall/harmonic ` + * :doc:`wall/harmonic/outside ` * :doc:`wall/lj1043 ` * :doc:`wall/lj126 ` * :doc:`wall/lj93 (k) ` diff --git a/doc/src/Developer_unittest.rst b/doc/src/Developer_unittest.rst index a925d20c5e9..2b0cdab3bb5 100644 --- a/doc/src/Developer_unittest.rst +++ b/doc/src/Developer_unittest.rst @@ -147,7 +147,7 @@ additional tests. FFT Testing Infrastructure """""""""""""""""""""""""" -.. versionadded:: TBD +.. versionadded:: 10Dec2025 The FFT tests (``test_fft3d.cpp`` and ``test_fft3d_kokkos.cpp``) validate the LAMMPS FFT wrapper implementations for both standard (CPU) diff --git a/doc/src/compute_reduce.rst b/doc/src/compute_reduce.rst index 6ee54ae3d15..39b6f902fd6 100644 --- a/doc/src/compute_reduce.rst +++ b/doc/src/compute_reduce.rst @@ -243,18 +243,20 @@ scalar or vector values from a compute as input. See the :doc:`Howto output ` doc page for an overview of LAMMPS output options. +.. versionadded:: 10Dec2025 + This compute supports automatically generated thermo column names when using :doc:`thermo_modify colname auto `. The thermo column -names are 'c_', followed by the compute ID, followed by a colon, followed +names are "c\_", followed by the compute ID, followed by a colon, followed by the reduction operation (*mode*), followed by the compute being operated on in parentheses. E.g., for the first in-text example above, the first -printed thermo column name would be 'c_2:min(c_myPress[1])', rather than -the default 'c_2[1]'. If the *replace* keyword is used, *vec1* of the +printed thermo column name would be "c\_2:min(c_myPress[1])", rather than +the default "c\_2[1]". If the *replace* keyword is used, *vec1* of the *replace* keyword is listed after the colon, followed by '<-', followed by the reduction operation, followed by *vec2* of the *replace* keyword in parentheses. E.g., for the second in-text example above, the first printed -thermo column name would be 'c_3:c_batoms[1]<-max(c_blength)' rather than -the default 'c_3[1]'. +thermo column name would be "c\_3:c\_batoms[1]<-max(c\_blength)" rather than +the default "c\_3[1]". All the scalar or vector values calculated by this compute are "intensive", except when the *sum*, *sumabs*, or *sumsq* modes are used on diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 20f4e46cf6e..cda13dcf7c3 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -453,6 +453,7 @@ accelerated styles exist. * :doc:`wall/gran ` - frictional wall(s) for granular simulations * :doc:`wall/gran/region ` - :doc:`fix wall/region ` equivalent for use with granular particles * :doc:`wall/harmonic ` - harmonic spring wall +* :doc:`wall/harmonic/outside ` - harmonic spring wall for containing particles * :doc:`wall/lj1043 ` - Lennard-Jones 10--4--3 wall * :doc:`wall/lj126 ` - Lennard-Jones 12--6 wall * :doc:`wall/lj93 ` - Lennard-Jones 9--3 wall diff --git a/doc/src/fix_addtorque_atom.rst b/doc/src/fix_addtorque_atom.rst index 521b451702f..282be917210 100644 --- a/doc/src/fix_addtorque_atom.rst +++ b/doc/src/fix_addtorque_atom.rst @@ -39,7 +39,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 10Dec2025 This fix is intended to add a peratom torque of each individual finite-sized atom in the group to the specified values. Unlike diff --git a/doc/src/fix_addtorque_group.rst b/doc/src/fix_addtorque_group.rst index 3eb1f470040..30e971842f4 100644 --- a/doc/src/fix_addtorque_group.rst +++ b/doc/src/fix_addtorque_group.rst @@ -26,7 +26,7 @@ Examples Description """"""""""" -.. versionchanged:: TBD +.. versionchanged:: 10Dec2025 Fix *addtorque* was renamed to fix *addtorque/group* Add a set of forces to each atom in diff --git a/doc/src/fix_align_self.rst b/doc/src/fix_align_self.rst index de9d504ca74..f0994d8b5ee 100644 --- a/doc/src/fix_align_self.rst +++ b/doc/src/fix_align_self.rst @@ -34,7 +34,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 10Dec2025 Add a torque to each atom in the group due to a self-alignment toward an intrinsic orientation. The torque is given by : @@ -122,7 +122,7 @@ Related commands :doc:`fix propel/self `, :doc:`fix brownian `, -:doc:`fix addtorque ` +:doc:`fix addtorque/group ` Default """"""" diff --git a/doc/src/fix_atom_swap.rst b/doc/src/fix_atom_swap.rst index 8a5ef0c99aa..52a3cfcbc0a 100644 --- a/doc/src/fix_atom_swap.rst +++ b/doc/src/fix_atom_swap.rst @@ -49,17 +49,27 @@ atoms of the other given atom types. The specified scaling temperature *T* is used in the Metropolis criterion dictating swap probabilities. Perform *X* swaps of atoms of one type with atoms of another type -according to a Monte Carlo probability. Swap candidates must be in the -fix group, must be in the region (if specified), and must be of one of -the listed types. Swaps are attempted between candidates that are chosen -randomly with equal probability among the candidate atoms. Swaps are not -attempted between atoms of the same type since nothing would happen. - -All atoms in the simulation domain can be moved using regular time -integration displacements (e.g., via :doc:`fix nvt `), resulting -in a hybrid MC+MD simulation. A smaller-than-usual timestep size may be -needed when running such a hybrid simulation, especially if the swapped -atoms are not well equilibrated. +according to a Monte Carlo probability. Swap candidates must be in +the fix group, must be in the region (if specified), and must be of +one of the listed types. Swaps are attempted between candidates that +are chosen randomly with equal probability among the candidate +atoms. Swaps are not attempted between atoms of the same type since +nothing would happen. + +All atoms in the simulation domain can also be moved using regular +time integration displacements (e.g., via :doc:`fix nvt `), +resulting in a hybrid MC+MD simulation, where $X$ MC swap attempts are +made once every $N$ MD steps. A smaller-than-usual timestep size may +be needed when running such a hybrid simulation, especially if the +swapped atoms are not well equilibrated. + +.. note:: + + To run an MC-only simulation (no MD), you should define no + time-integration fix, set the :doc:`thermo ` command to 1, + set *N* to 1, and set *X* small enough to see the MC evolution of + the system. But if *X* is too small, the overhead at the start and + stop of MC moves each timestep will slow down the simulation. The *types* keyword is required. At least two atom types must be specified. If not using *semi-grand*, exactly two atom types are diff --git a/doc/src/fix_bond_react.rst b/doc/src/fix_bond_react.rst index 43c6ac75f2b..3705ded8176 100644 --- a/doc/src/fix_bond_react.rst +++ b/doc/src/fix_bond_react.rst @@ -836,12 +836,14 @@ There is one quantity in the global vector for each *react* argument: (1) cumulative number of reactions that occurred +.. versionadded:: 10Dec2025 + This fix supports automatically generated thermo column names when using :doc:`thermo_modify colname auto `. The thermo column names -are 'f_', followed by the fix ID, followed by a colon, followed by the +are "f\_", followed by the fix ID, followed by a colon, followed by the react-ID. E.g., the first example in the Examples section above would -print a thermo column name of 'f_rxns:diels_alder', compared to the default column -output name of 'f_rxns[1]'. +print a thermo column name of "f\_rxns:diels_alder", compared to the default column +output name of "f\_rxns[1]". No parameter of this fix can be used with the *start/stop* keywords of the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. diff --git a/doc/src/fix_gcmc.rst b/doc/src/fix_gcmc.rst index 84f482fc95b..04cbc326078 100644 --- a/doc/src/fix_gcmc.rst +++ b/doc/src/fix_gcmc.rst @@ -1,3 +1,4 @@ + .. index:: fix gcmc fix gcmc command @@ -80,22 +81,30 @@ isotherms in microporous materials, or computing vapor-liquid coexistence curves. Every *N* timesteps the fix attempts both GCMC exchanges (insertions or -deletions) and MC moves of gas atoms or molecules. On those timesteps, -the average number of attempted GCMC exchanges is *X*, while the average -number of attempted MC moves is *M*. For GCMC exchanges of either -molecular or atomic gasses, these exchanges can be either deletions or -insertions, with equal probability. - -The possible choices for MC moves are translation of an atom, -translation of a molecule, and rotation of a molecule. The relative -amounts of each are determined by the optional *mcmoves* keyword (see -below). The default behavior is as follows. If the *mol* keyword is -used, only molecule translations and molecule rotations are performed -with equal probability. Conversely, if the *mol* keyword is not used, -only atom translations are performed. *M* should typically be chosen to -be approximately equal to the expected number of gas atoms or molecules -of the given type within the simulation cell or region, which will -result in roughly one MC move per atom or molecule per MC cycle. +deletions) and MC moves of gas atoms or molecules. On those timesteps, the +average number of attempted GCMC exchanges is *X*, while the average number +of attempted MC moves is *M*. For GCMC exchanges of either molecular or +atomic gasses, these exchanges can be either deletions or insertions, with +equal probability. + +.. note:: + + To run an MC-only simulation (no MD), you should define no + time-integration fix, set the :doc:`thermo ` command to 1, + set *N* to 1, and set *X+M* small enough to see the MC evolution of + the system. But if *X+M* is too small, the overhead at the start + and stop of MC moves each timestep will slow down the simulation. + +The possible choices for MC moves are translation of an atom, translation +of a molecule, and rotation of a molecule. The relative amounts of each are +determined by the optional *mcmoves* keyword (see below). The default +behavior is as follows. If the *mol* keyword is used, only molecule +translations and molecule rotations are performed with equal probability. +Conversely, if the *mol* keyword is not used, only atom translations are +performed. *M* should typically be chosen to be approximately equal to the +expected number of gas atoms or molecules of the given type within the +simulation cell or region, which will result in roughly one MC move per +atom or molecule per MC cycle. All inserted particles are always added to two groups: the default group "all" and the fix group specified in the fix command. In addition, diff --git a/doc/src/fix_neighbor_swap.rst b/doc/src/fix_neighbor_swap.rst index 55fe56ac2c2..648dfb87fc8 100644 --- a/doc/src/fix_neighbor_swap.rst +++ b/doc/src/fix_neighbor_swap.rst @@ -97,6 +97,14 @@ The algorithm implemented by this fix is as follows: using the energy change of the system and the specified temperature *T*. +.. note:: + + To run an MC-only simulation (no MD), you should define no + time-integration fix, set the :doc:`thermo ` command to 1, + set *N* to 1, and set *X* small enough to see the MC evolution of + the system. But if *X* is too small, the overhead at the start and + stop of MC moves each timestep will slow down the simulation. + Here are a few comments on the computational cost of the swapping algorithm. diff --git a/doc/src/fix_nh.rst b/doc/src/fix_nh.rst index 3ea95f94aff..fd048d56fc5 100644 --- a/doc/src/fix_nh.rst +++ b/doc/src/fix_nh.rst @@ -642,14 +642,16 @@ by tchain for eta_dot, followed by ndof for omega, etc: * KE_etap_dot[pchain] = kinetic energy of each barostat thermostat velocity (energy units) * PE_strain[1] = scalar strain energy (energy units) +.. versionadded:: 10Dec2025 + This fix supports automatically generated thermo column names when using :doc:`thermo_modify colname auto `. The thermo column names -are 'f_', followed by the fix ID, followed by a colon, followed by a +are "f\_", followed by the fix ID, followed by a colon, followed by a keyword listed above, followed by an index for that keyword. Indices range from 1 to the number of values for that keyword. E.g., the first example in the Examples section above would print a thermo column name of -'f_1:eta[1]', compared to the default column output name of 'f_1[1]'. -Similarly, f_1:eta_dot[1] would be printed instead of the default 'f_1[4]'. +"f\_1:eta[1]", compared to the default column output name of "f\_1[1]". +Similarly, "f\_1:eta_dot[1]" would be printed instead of the default "f\_1[4]. These fixes can ramp their external temperature and pressure over multiple runs, using the *start* and *stop* keywords of the diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 23f934b908b..1f92fd47d69 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -244,7 +244,7 @@ support for bosonic normal modes. (:math:`\sum_{i=1}^P \frac{1}{2}m\omega_P^2(q_i - q_{i+1})^2`, :math:`m` is always the actual mass of the particles). -.. versionchanged:: TBD +.. versionchanged:: 10Dec2025 *sp* keyword added to *fix pimd/langevin* diff --git a/doc/src/fix_reaxff_species.rst b/doc/src/fix_reaxff_species.rst index 248c9514c90..dd73289e761 100644 --- a/doc/src/fix_reaxff_species.rst +++ b/doc/src/fix_reaxff_species.rst @@ -160,7 +160,7 @@ an equal-style :doc:`variable `. When using the first Nsteps timesteps of the first run (after reading either a data or restart file). -.. versionadded:: TBD +.. versionadded:: 10Dec2025 The *delete_subgroup* keyword enforces a requirement that deleted molecules must have at least one atom in the group specified by the keyword's diff --git a/doc/src/fix_settorque_atom.rst b/doc/src/fix_settorque_atom.rst index ad9a1d409d7..9553e1a01ef 100644 --- a/doc/src/fix_settorque_atom.rst +++ b/doc/src/fix_settorque_atom.rst @@ -34,7 +34,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 10Dec2025 This fix is intended to set the peratom torque of individual finite-size atoms in the fix group to the specified values. Unlike :doc:`fix @@ -80,10 +80,10 @@ to it. This fix is not (currently) designed to be used with rigid fixes. While it will set the torque of all of the atoms in a rigid body as described above, there is not always an easy mapping between these - peratom torques and the torque experienced by the body. The exception - may be when used in conjunction to :doc:`fix setforce ` to - simultaneously zero forces and torques to freeze a rigid body. - + peratom torques and the torque experienced by the body. The exception + may be when it is used in conjunction with + :doc:`fix setforce ` to simultaneously zero forces and + torques to freeze a rigid body. ---------- diff --git a/doc/src/fix_shake.rst b/doc/src/fix_shake.rst index a823c23c1a9..0b37a0a07a5 100644 --- a/doc/src/fix_shake.rst +++ b/doc/src/fix_shake.rst @@ -204,7 +204,7 @@ will be fulfilled to the desired accuracy within a few MD steps following the minimization. The default value for *kbond* depends on the :doc:`units ` setting and is 1.0e9*k_B. -.. versionadded:: TBD +.. versionadded:: 10Dec2025 The *store* keyword controls whether the fix stores the constraint (or restraint) forces as a per-atom property. diff --git a/doc/src/fix_srd.rst b/doc/src/fix_srd.rst index ff7cdc8c314..fc9253545ff 100644 --- a/doc/src/fix_srd.rst +++ b/doc/src/fix_srd.rst @@ -295,7 +295,7 @@ big particles or walls have a thermostatting effect on the colliding particles, so it may not be necessary to thermostat the SRD particles on a bin by bin basis in that case. -.. versionadded:: TBD +.. versionadded:: 10Dec2025 The *unbiased* keyword controls how the thermostat operates if there is a streaming velocity associated with the system, e.g. due to use of the diff --git a/doc/src/fix_store_state.rst b/doc/src/fix_store_state.rst index d683a163bca..fa6ad799e0d 100644 --- a/doc/src/fix_store_state.rst +++ b/doc/src/fix_store_state.rst @@ -64,7 +64,7 @@ Syntax *com* value = *yes* or *no* *thresh* args = variable operator value variable = equal style or compatible variable reference - operator = "<" or "<=" or ">" or ">=" or "==" or "!=" or "|^" + operator = "<" or "<=" or ">" or ">=" or "==" or "!=" or "\|^" value = numeric value to compare to @@ -111,7 +111,7 @@ If the *com* keyword is set to *yes* then the *xu*, *yu*, and *zu* inputs store the position of each atom relative to the center-of-mass of the group of atoms, instead of storing the absolute position. -.. versionadded:: TBD +.. versionadded:: 10Dec2025 If the *thresh* keyword is used, data is only stored on steps where also the threshold condition following the keyword is met. The first diff --git a/doc/src/fix_ttm.rst b/doc/src/fix_ttm.rst index dea587ceb91..9f1376bdcb1 100644 --- a/doc/src/fix_ttm.rst +++ b/doc/src/fix_ttm.rst @@ -123,7 +123,7 @@ expensive computationally than fix *ttm* because it treats the thermal diffusion equation as non-linear. More details on fix *ttm/mod* are given below. -.. versionadded:: TBD +.. versionadded:: 10Dec2025 Fix *ttm/thermal* allows for electronic properties to be assigned independently to each TTM grid point and supports external heat sources diff --git a/doc/src/fix_wall.rst b/doc/src/fix_wall.rst index 0460182669a..c570d85c395 100644 --- a/doc/src/fix_wall.rst +++ b/doc/src/fix_wall.rst @@ -27,7 +27,7 @@ fix wall/harmonic command ========================= fix wall/harmonic/outside command -========================= +================================= fix wall/lepton command ========================= @@ -333,11 +333,11 @@ the density of particles in the wall and colloid can be different, as specified by the :math:`\epsilon` prefactor. For the *wall/harmonic* and *wall/harmonic/outside* style, - :math:`\epsilon` is effectively the spring -constant K, and has units (energy/distance\^2). The input parameter -:math:`\sigma` is ignored. The minimum energy position of the harmonic -spring is at the *cutoff*\ . This is a repulsive-only spring since the -interaction is truncated at the *cutoff* +:math:`\epsilon` is effectively the spring constant K, and has units +(energy/distance\^2). The input parameter :math:`\sigma` is ignored. +The minimum energy position of the harmonic spring is at the *cutoff*\ . +This is a repulsive-only spring since the interaction is truncated at +the *cutoff* For the *wall/morse* style, the three parameters are in this order: :math:`D_0` the depth of the potential, :math:`\alpha` the width diff --git a/doc/src/package.rst b/doc/src/package.rst index 52177e8759b..1c3ced7cf67 100644 --- a/doc/src/package.rst +++ b/doc/src/package.rst @@ -220,7 +220,7 @@ tasks (per node) than GPUs, multiple MPI tasks will share each GPU. Optional keyword/value pairs can also be specified. Each has a default value as listed below. -.. versionchanged:: TBD +.. versionchanged:: 10Dec2025 Updated description to the current state of the GPU package diff --git a/doc/src/pair_saip_metal.rst b/doc/src/pair_saip_metal.rst index f36293292b1..8973641f197 100644 --- a/doc/src/pair_saip_metal.rst +++ b/doc/src/pair_saip_metal.rst @@ -51,7 +51,7 @@ The *saip/metal* style computes the semi-anisotropic interfacial potential (SAIP) potential for hetero-junctions formed with hexagonal 2D materials and metal surfaces, as described in :ref:`(Ouyang6) ` and :ref:`(Yao1) `. -.. versionadded:: TBD +.. versionadded:: 10Dec2025 The *saip/metal/tmd* style computes the semi-anisotropic interfacial potential (SAIP) potential for hetero-junctions formed with transition diff --git a/doc/src/thermo_modify.rst b/doc/src/thermo_modify.rst index ffbeecc76fe..a9c52b8a5cb 100644 --- a/doc/src/thermo_modify.rst +++ b/doc/src/thermo_modify.rst @@ -171,6 +171,8 @@ column/keyword), or a thermo keyword (or compute, fix, property, or variable reference) and then it replaces the string for that specific thermo keyword. +.. versionadded:: 10Dec2025 + With a setting of *auto*, certain fixes or computes will generate more descriptive strings as their thermo keywords, which are described in the 'output' section of their documentation. Current commands diff --git a/doc/src/write_molecule.rst b/doc/src/write_molecule.rst index 4ae51de9e14..4ab3b5c3bef 100644 --- a/doc/src/write_molecule.rst +++ b/doc/src/write_molecule.rst @@ -25,7 +25,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 10Dec2025 Write the data from a :doc:`molecule template` to a molecule file. diff --git a/doc/utils/check-styles.py b/doc/utils/check-styles.py index 3b5ea232e2e..0a0fbf7fcee 100644 --- a/doc/utils/check-styles.py +++ b/doc/utils/check-styles.py @@ -301,7 +301,7 @@ def check_style_index(name, styles, index, skip=[]): print("Total number of style index entries:", total_index) skip_angle = ('sdk') -skip_fix = ('python', 'NEIGH_HISTORY/omp','acks2/reax','qeq/reax','reax/c/bonds','reax/c/species', 'pimd', 'colvars/kk', 'addtorque') +skip_fix = ('python', 'NEIGH_HISTORY/omp', 'acks2/reax', 'qeq/reax', 'reax/c/bonds', 'reax/c/species', 'pimd', 'colvars/kk', 'wall/harmonic/returned', 'addtorque') skip_pair = ('meam/c','lj/sf','reax/c','lj/sdk','lj/sdk/coul/long','lj/sdk/coul/msm') skip_compute = ('pressure/cylinder') @@ -331,7 +331,7 @@ def check_style_index(name, styles, index, skip=[]): counter = 0 counter += check_style_index("compute", compute, index["compute"], skip=['pressure/cylinder']) -counter += check_style_index("fix", fix, index["fix"], skip=['python','acks2/reax','qeq/reax','reax/c/bonds','reax/c/species','pimd','addtorque']) +counter += check_style_index("fix", fix, index["fix"], skip=['python','acks2/reax','qeq/reax','reax/c/bonds','reax/c/species','pimd','wall/harmonic/returned','addtorque']) counter += check_style_index("angle_style", angle, index["angle_style"], skip=['sdk']) counter += check_style_index("bond_style", bond, index["bond_style"]) counter += check_style_index("dihedral_style", dihedral, index["dihedral_style"]) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 07bd1b5abb8..d49c8210b7e 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -232,7 +232,7 @@ Babaei Baconnier backcolor Baczewski -Bear +Baer Bagchi Bagi Bagnold @@ -266,6 +266,7 @@ Bashford bashrc Baskes Batatia +batoms Batra Bayly bb @@ -337,6 +338,7 @@ Bkappa blabel Blaise blanchedalmond +blength blo blocksize blueviolet @@ -647,6 +649,7 @@ createAtoms CreateIDs crespi Crespi +Creton Creuze Critchley crossterm @@ -721,6 +724,7 @@ cyrstals cython cz Daivis +Dalmazzone Dammak dampflag Darden @@ -837,6 +841,7 @@ dichalcogenide dichalcogenides Dickel diel +diels Dietz differentiable diffusively @@ -910,6 +915,7 @@ dpme dr dR dragforce +Draghi Drautz dreiding Dreiding @@ -2430,6 +2436,7 @@ MoS Mosayebi Moseler Moskalev +Moureta Moustafa mov mpi @@ -2512,6 +2519,7 @@ myIndex mylammps myMultiply MyPool +myPress mysocket mySpin myTemp @@ -2642,6 +2650,7 @@ nhc nhi NiAlH Nicklas +Nieto Niklasson Nikolskiy nimproperlist @@ -2698,6 +2707,7 @@ noguess Noid nolib nonaffine +nonblocking nonequilibrium nongauss nonGaussian @@ -2932,6 +2942,7 @@ Parrinello Partay Particuology Pascuet +Pasquier pastewka Pastewka pathangle @@ -3455,6 +3466,7 @@ rx rxd rxnave rxnbond +rxns rxnsum ry Ryckaert diff --git a/src/BROWNIAN/fix_align_self.cpp b/src/BROWNIAN/fix_align_self.cpp index 7642a7feb3c..df13c5e133d 100644 --- a/src/BROWNIAN/fix_align_self.cpp +++ b/src/BROWNIAN/fix_align_self.cpp @@ -125,7 +125,7 @@ void FixAlignSelf::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixAlignSelf::post_force_dipole(int vflag) +void FixAlignSelf::post_force_dipole(int /*vflag*/) { double **torque = atom->torque; double **v = atom->v; @@ -147,7 +147,7 @@ void FixAlignSelf::post_force_dipole(int vflag) /* ---------------------------------------------------------------------- */ -void FixAlignSelf::post_force_quaternion(int vflag) +void FixAlignSelf::post_force_quaternion(int /*vflag*/) { double **torque = atom->torque; double **v = atom->v; diff --git a/src/EXTRA-FIX/fix_addtorque_group.cpp b/src/EXTRA-FIX/fix_addtorque_group.cpp index 89f235c791c..e0b77946084 100644 --- a/src/EXTRA-FIX/fix_addtorque_group.cpp +++ b/src/EXTRA-FIX/fix_addtorque_group.cpp @@ -38,7 +38,7 @@ enum{NONE,CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ FixAddTorqueGroup::FixAddTorqueGroup(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) + Fix(lmp, narg, arg), xstr(nullptr), ystr(nullptr), zstr(nullptr) { if (narg != 6) error->all(FLERR,"Illegal fix addtorque/group command"); @@ -56,7 +56,9 @@ FixAddTorqueGroup::FixAddTorqueGroup(LAMMPS *lmp, int narg, char **arg) : respa_level_support = 1; ilevel_respa = 0; - xstr = ystr = zstr = nullptr; + xstyle = ystyle = zstyle = NONE; + xvar = yvar = zvar = -1; + varflag = NONE; if (utils::strmatch(arg[3],"^v_")) { xstr = utils::strdup(arg[3]+2); diff --git a/src/GRANULAR/fix_addtorque_atom.cpp b/src/GRANULAR/fix_addtorque_atom.cpp index db616ea83c9..4532533cb0b 100644 --- a/src/GRANULAR/fix_addtorque_atom.cpp +++ b/src/GRANULAR/fix_addtorque_atom.cpp @@ -49,6 +49,10 @@ FixAddTorqueAtom::FixAddTorqueAtom(LAMMPS *lmp, int narg, char **arg) : respa_level_support = 1; ilevel_respa = 0; + xstyle = ystyle = zstyle = NONE; + xvar = yvar = zvar = -1; + varflag = NONE; + if (utils::strmatch(arg[3], "^v_")) { xstr = utils::strdup(arg[3] + 2); } else { @@ -200,12 +204,11 @@ void FixAddTorqueAtom::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixAddTorqueAtom::post_force(int vflag) +void FixAddTorqueAtom::post_force(int /*vflag*/) { double **x = atom->x; double **torque = atom->torque; int *mask = atom->mask; - imageint *image = atom->image; int nlocal = atom->nlocal; if (update->ntimestep % nevery) return; diff --git a/src/GRANULAR/fix_settorque_atom.cpp b/src/GRANULAR/fix_settorque_atom.cpp index 26e9e3592e2..c1258269aa0 100644 --- a/src/GRANULAR/fix_settorque_atom.cpp +++ b/src/GRANULAR/fix_settorque_atom.cpp @@ -80,7 +80,9 @@ FixSetTorqueAtom::FixSetTorqueAtom(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg], "region") == 0) { if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix settorque/atom region", error); region = domain->get_region_by_id(arg[iarg + 1]); - if (!region) error->all(FLERR, "Region {} for fix settorque/atom does not exist", arg[iarg + 1]); + if (!region) + error->all(FLERR, "Region {} for fix settorque/atom does not exist", arg[iarg + 1]); + delete[] idregion; idregion = utils::strdup(arg[iarg + 1]); iarg += 2; } else diff --git a/src/KOKKOS/neigh_bond_kokkos.cpp b/src/KOKKOS/neigh_bond_kokkos.cpp index 85a1b1c82b1..290ee3d9add 100644 --- a/src/KOKKOS/neigh_bond_kokkos.cpp +++ b/src/KOKKOS/neigh_bond_kokkos.cpp @@ -70,6 +70,17 @@ NeighBondKokkos::NeighBondKokkos(LAMMPS *lmp) : Pointers(lmp) /* ---------------------------------------------------------------------- */ +template +NeighBondKokkos::~NeighBondKokkos() +{ + memoryKK->destroy_kokkos(k_bondlist,neighbor->bondlist); + memoryKK->destroy_kokkos(k_anglelist,neighbor->anglelist); + memoryKK->destroy_kokkos(k_dihedrallist,neighbor->dihedrallist); + memoryKK->destroy_kokkos(k_improperlist,neighbor->improperlist); +} + +/* ---------------------------------------------------------------------- */ + template void NeighBondKokkos::init_topology_kk() { diff --git a/src/KOKKOS/neigh_bond_kokkos.h b/src/KOKKOS/neigh_bond_kokkos.h index 650df4b9579..7bd19a26e46 100644 --- a/src/KOKKOS/neigh_bond_kokkos.h +++ b/src/KOKKOS/neigh_bond_kokkos.h @@ -41,7 +41,7 @@ class NeighBondKokkos : protected Pointers { typedef int value_type; NeighBondKokkos(class LAMMPS *); - ~NeighBondKokkos() override = default; + ~NeighBondKokkos() override; void init_topology_kk(); void build_topology_kk(); diff --git a/src/KOKKOS/remap_kokkos.cpp b/src/KOKKOS/remap_kokkos.cpp index 9530dc626b9..9b67c62eff0 100644 --- a/src/KOKKOS/remap_kokkos.cpp +++ b/src/KOKKOS/remap_kokkos.cpp @@ -132,7 +132,6 @@ void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d if (!plan->usecollective) { int i,isend,irecv; - for (irecv = 0; irecv < plan->nrecv; irecv++) { FFT_SCALAR* scratch = v_scratch + plan->recv_bufloc[irecv]; MPI_Irecv(scratch,plan->recv_size[irecv], @@ -297,6 +296,26 @@ struct remap_plan_3d_kokkos* RemapKokkos::remap_3d_creat plan = new struct remap_plan_3d_kokkos; if (plan == nullptr) return nullptr; + + // nullify all pointers managed with malloc()/free() + plan->commringlist = nullptr; + plan->isend_reqs = nullptr; + plan->packplan = nullptr; + plan->rcvcnts = nullptr; + plan->rdispls = nullptr; + plan->recv_bufloc = nullptr; + plan->recv_offset = nullptr; + plan->recv_proc = nullptr; + plan->recv_size = nullptr; + plan->request = nullptr; + plan->sdispls = nullptr; + plan->send_bufloc = nullptr; + plan->send_offset = nullptr; + plan->send_proc = nullptr; + plan->send_size = nullptr; + plan->sendcnts = nullptr; + plan->unpackplan = nullptr; + plan->usecollective = usecollective; plan->usenonblocking = usenonblocking; plan->usegpu_aware = usegpu_aware; @@ -811,49 +830,27 @@ void RemapKokkos::remap_3d_destroy_plan_kokkos(struct remap_plan_3d_ if (!((plan->usecollective) && (plan->commringlen == 0))) MPI_Comm_free(&plan->comm); - if (plan->usecollective) { - if (plan->commringlist != nullptr) { - free(plan->commringlist); - free(plan->sendcnts); - free(plan->rcvcnts); - free(plan->sdispls); - free(plan->rdispls); - } - - if (plan->nsend) { - free(plan->send_offset); - free(plan->send_size); - free(plan->packplan); - } - - if (plan->nrecv) { - free(plan->recv_offset); - free(plan->recv_size); - free(plan->unpackplan); - } - } else { - // free arrays used in pt2pt communication - - if (plan->nsend || plan->self) { - free(plan->send_offset); - free(plan->send_size); - free(plan->send_proc); - free(plan->packplan); - if (plan->usenonblocking) { - free(plan->isend_reqs); - free(plan->send_bufloc); - } - } - - if (plan->nrecv || plan->self) { - free(plan->recv_offset); - free(plan->recv_size); - free(plan->recv_proc); - free(plan->recv_bufloc); - free(plan->request); - free(plan->unpackplan); - } - } +#define SAFE_FREE(ptr) if (ptr) free(ptr) + + SAFE_FREE(plan->commringlist); + SAFE_FREE(plan->isend_reqs); + SAFE_FREE(plan->packplan); + SAFE_FREE(plan->rcvcnts); + SAFE_FREE(plan->rdispls); + SAFE_FREE(plan->recv_bufloc); + SAFE_FREE(plan->recv_offset); + SAFE_FREE(plan->recv_proc); + SAFE_FREE(plan->recv_size); + SAFE_FREE(plan->request); + SAFE_FREE(plan->sdispls); + SAFE_FREE(plan->send_bufloc); + SAFE_FREE(plan->send_offset); + SAFE_FREE(plan->send_proc); + SAFE_FREE(plan->send_size); + SAFE_FREE(plan->sendcnts); + SAFE_FREE(plan->unpackplan); + +#undef SAFE_FREE // free plan itself diff --git a/src/KSPACE/remap.cpp b/src/KSPACE/remap.cpp index 2fb6679b102..c1a5fbc8bf6 100644 --- a/src/KSPACE/remap.cpp +++ b/src/KSPACE/remap.cpp @@ -15,6 +15,7 @@ #include "remap.h" #include +#include #include #define PACK_DATA FFT_SCALAR @@ -227,10 +228,11 @@ struct remap_plan_3d *remap_3d_create_plan( plan = (struct remap_plan_3d *) malloc(sizeof(struct remap_plan_3d)); if (plan == nullptr) return nullptr; + + // zero out entire plan data structure including all pointers and set flags + memset(plan, 0, sizeof(struct remap_plan_3d)); plan->usecollective = usecollective; plan->usenonblocking = usenonblocking; - plan->scratch = nullptr; - plan->sendbuf = nullptr; // store parameters in local data structs @@ -304,8 +306,8 @@ struct remap_plan_3d *remap_3d_create_plan( if (plan->usenonblocking) plan->isend_reqs = (MPI_Request *) malloc(nsend*sizeof(MPI_Request)); - plan->send_bufloc = (int *) malloc(nsend*sizeof(int)); - if (plan->send_bufloc == nullptr) return nullptr; + plan->send_bufloc = (int *) malloc(nsend*sizeof(int)); + if (plan->send_bufloc == nullptr) return nullptr; if (plan->send_offset == nullptr || plan->send_size == nullptr || plan->send_proc == nullptr || plan->packplan == nullptr) return nullptr; @@ -543,10 +545,10 @@ struct remap_plan_3d *remap_3d_create_plan( plan->pack = pack_3d; plan->send_offset = (int *) malloc(nsend*sizeof(int)); - plan->send_size = (int *) malloc(plan->commringlen*sizeof(int)); + plan->send_size = (int *) malloc(plan->commringlen*sizeof(int) + 1); - plan->sendcnts = (int *) malloc(plan->commringlen*sizeof(int)); - plan->sdispls = (int *) malloc(plan->commringlen*sizeof(int)); + plan->sendcnts = (int *) malloc(plan->commringlen*sizeof(int) + 1); + plan->sdispls = (int *) malloc(plan->commringlen*sizeof(int) + 1); // only used when sendcnt > 0 @@ -744,57 +746,32 @@ void remap_3d_destroy_plan(struct remap_plan_3d *plan) if (!((plan->usecollective) && (plan->commringlen == 0))) MPI_Comm_free(&plan->comm); - if (plan->usecollective) { - if (plan->commringlist != nullptr) { - free(plan->commringlist); - free(plan->sendcnts); - free(plan->rcvcnts); - free(plan->sdispls); - free(plan->rdispls); - } - - if (plan->nsend) { - free(plan->send_offset); - free(plan->send_size); - free(plan->packplan); - } - - if (plan->nrecv) { - free(plan->recv_offset); - free(plan->recv_size); - free(plan->unpackplan); - } - } else { - - // free arrays used in pt2pt communication - - if (plan->nsend || plan->self) { - free(plan->send_offset); - free(plan->send_size); - free(plan->send_proc); - free(plan->packplan); - if (plan->usenonblocking) { - free(plan->isend_reqs); - free(plan->send_bufloc); - } - } - - if (plan->nrecv || plan->self) { - free(plan->recv_offset); - free(plan->recv_size); - free(plan->recv_proc); - free(plan->recv_bufloc); - free(plan->request); - free(plan->unpackplan); - } - } - - // free buffers, if needed - - if (plan->scratch) free(plan->scratch); - if (plan->sendbuf) free(plan->sendbuf); - - // free plan itself + // free allocated buffers +#define SAFE_FREE(ptr) if (ptr) free(ptr) + + SAFE_FREE(plan->commringlist); + SAFE_FREE(plan->isend_reqs); + SAFE_FREE(plan->packplan); + SAFE_FREE(plan->rcvcnts); + SAFE_FREE(plan->rdispls); + SAFE_FREE(plan->recv_bufloc); + SAFE_FREE(plan->recv_offset); + SAFE_FREE(plan->recv_proc); + SAFE_FREE(plan->recv_size); + SAFE_FREE(plan->request); + SAFE_FREE(plan->scratch); + SAFE_FREE(plan->sdispls); + SAFE_FREE(plan->send_bufloc); + SAFE_FREE(plan->send_offset); + SAFE_FREE(plan->send_proc); + SAFE_FREE(plan->send_size); + SAFE_FREE(plan->sendbuf); + SAFE_FREE(plan->sendcnts); + SAFE_FREE(plan->unpackplan); + +#undef SAFE_FREE + + // free the plan itself free(plan); } diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 430175de6de..8f970ea6596 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -702,14 +702,13 @@ std::string ComputeReduce::get_thermo_colname(int m) { std::string val2string = fmt::format("c_{}", val2.id); if (val2.argindex) val2string += fmt::format("[{}]", val2.argindex); return fmt::format("c_{}:{}<-{}({})", id, val1string, modestr, val2string); - } else { - if (m == -1) m = 0; // scalar - auto &val = values[m]; - std::string valstring = fmt::format("c_{}", val.id); - if (val.argindex) valstring += fmt::format("[{}]", val.argindex); - return fmt::format("c_{}:{}({})", id, modestr, valstring); } - return "none"; + + if (m == -1) m = 0; // scalar + auto &val = values[m]; + std::string valstring = fmt::format("c_{}", val.id); + if (val.argindex) valstring += fmt::format("[{}]", val.argindex); + return fmt::format("c_{}:{}({})", id, modestr, valstring); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_addforce.cpp b/src/fix_addforce.cpp index 948a935e259..af1392d06d4 100644 --- a/src/fix_addforce.cpp +++ b/src/fix_addforce.cpp @@ -50,6 +50,10 @@ FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) : respa_level_support = 1; ilevel_respa = 0; + xstyle = ystyle = zstyle = NONE; + xvar = yvar = zvar = -1; + varflag = NONE; + if (utils::strmatch(arg[3], "^v_")) { xstr = utils::strdup(arg[3] + 2); } else { diff --git a/src/fix_aveforce.cpp b/src/fix_aveforce.cpp index bc5a6ea344e..5941752fff8 100644 --- a/src/fix_aveforce.cpp +++ b/src/fix_aveforce.cpp @@ -46,7 +46,9 @@ FixAveForce::FixAveForce(LAMMPS *lmp, int narg, char **arg) : respa_level_support = 1; ilevel_respa = nlevels_respa = 0; - xstr = ystr = zstr = nullptr; + xstyle = ystyle = zstyle = NONE; + xvar = yvar = zvar = -1; + varflag = NONE; if (utils::strmatch(arg[3], "^v_")) { xstr = utils::strdup(arg[3] + 2); diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index 7f98b5a295a..4866db51790 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -1751,10 +1751,7 @@ std::string FixNH::get_thermo_colname(int n) ilen = mtchain; if (n < ilen) { ich = n; - if (ich == 0) - return fmt::format("f_{}:KE_eta_dot[{}]",id,n+1); - else - return fmt::format("f_{}:KE_eta_dot[{}]",id,n+1); + return fmt::format("f_{}:KE_eta_dot[{}]",id,n+1); } n -= ilen; } diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 1a94fc687b7..73de684d5d5 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -193,13 +193,13 @@ void ReadDump::setup_reader(int narg, char **arg) firstfile = -1; MPI_Comm_dup(world, &clustercomm); } else if (multiproc_nfile >= nprocs) { - firstfile = static_cast ((bigint) me * multiproc_nfile/nprocs); - int lastfile = static_cast ((bigint) (me+1) * multiproc_nfile/nprocs); + firstfile = static_cast((bigint) me * multiproc_nfile/nprocs); + int lastfile = static_cast((bigint) (me+1) * multiproc_nfile/nprocs); nreader = lastfile - firstfile; MPI_Comm_split(world, me, 0, &clustercomm); } else if (multiproc_nfile < nprocs) { nreader = 1; - int icluster = static_cast ((bigint) me * multiproc_nfile/nprocs); + int icluster = static_cast((bigint) me * multiproc_nfile/nprocs); firstfile = icluster; MPI_Comm_split(world, icluster, 0, &clustercomm); } @@ -692,7 +692,7 @@ void ReadDump::read_atoms() olast = (bigint) (otherproc+1) * nsnap/nprocs_cluster; if (olast-ofirst > MAXSMALLINT) error->one(FLERR,"Read dump snapshot is too large for a proc"); - nnew = static_cast (olast - ofirst); + nnew = static_cast(olast - ofirst); if (nnew > maxnew || maxnew == 0) { memory->destroy(fields); @@ -735,7 +735,7 @@ void ReadDump::read_atoms() olast = (bigint) (me_cluster+1) * nsnap/nprocs_cluster; if (olast-ofirst > MAXSMALLINT) error->one(FLERR,"Read dump snapshot is too large for a proc"); - nnew = static_cast (olast - ofirst); + nnew = static_cast(olast - ofirst); if (nnew > maxnew || maxnew == 0) { memory->destroy(fields); maxnew = MAX(nnew,1); // avoid null pointer @@ -761,7 +761,7 @@ void ReadDump::read_atoms() sum += nsnapatoms[i]; if (sum > MAXSMALLINT) error->one(FLERR,"Read dump snapshot is too large for a proc"); - nnew = static_cast (sum); + nnew = static_cast(sum); if (nnew > maxnew || maxnew == 0) { memory->destroy(fields); maxnew = MAX(nnew,1); // avoid null pointer @@ -830,7 +830,7 @@ void ReadDump::process_atoms() // NOTE: atom ID in fields is stored as double, not as ubuf // so can only cast it to tagint, thus cannot be full 64-bit ID - mtag = static_cast (fields[i][0]); + mtag = static_cast(fields[i][0]); if (mtag <= map_tag_max) m = atom->map(mtag); else m = -1; if (m < 0 || m >= nlocal) continue; @@ -868,7 +868,7 @@ void ReadDump::process_atoms() q[m] = fields[i][ifield]; break; case Reader::MOL: - molecule[m] = fields[i][ifield]; + molecule[m] = static_cast(fields[i][ifield]); break; case Reader::APIP_LAMBDA: apip_lambda[m] = fields[i][ifield]; @@ -880,13 +880,13 @@ void ReadDump::process_atoms() v[m][2] = fields[i][ifield]; break; case Reader::IX: - xbox = static_cast (fields[i][ifield]); + xbox = static_cast(fields[i][ifield]); break; case Reader::IY: - ybox = static_cast (fields[i][ifield]); + ybox = static_cast(fields[i][ifield]); break; case Reader::IZ: - zbox = static_cast (fields[i][ifield]); + zbox = static_cast(fields[i][ifield]); break; case Reader::FX: f[m][0] = fields[i][ifield]; @@ -964,7 +964,7 @@ void ReadDump::process_atoms() for (ifield = 1; ifield < nfield; ifield++) { switch (fieldtype[ifield]) { case Reader::TYPE: - itype = static_cast (fields[i][ifield]); + itype = static_cast(fields[i][ifield]); break; case Reader::X: one[0] = xfield(i,ifield); @@ -1013,7 +1013,7 @@ void ReadDump::process_atoms() switch (fieldtype[ifield]) { case Reader::ID: if (addflag == KEEPADD) - tag[m] = static_cast (fields[i][ifield]); + tag[m] = static_cast(fields[i][ifield]); break; case Reader::VX: v[m][0] = fields[i][ifield]; @@ -1028,19 +1028,19 @@ void ReadDump::process_atoms() q[m] = fields[i][ifield]; break; case Reader::MOL: - molecule[m] = fields[i][ifield]; + molecule[m] = static_cast(fields[i][ifield]); break; case Reader::APIP_LAMBDA: apip_lambda[m] = fields[i][ifield]; break; case Reader::IX: - xbox = static_cast (fields[i][ifield]); + xbox = static_cast(fields[i][ifield]); break; case Reader::IY: - ybox = static_cast (fields[i][ifield]); + ybox = static_cast(fields[i][ifield]); break; case Reader::IZ: - zbox = static_cast (fields[i][ifield]); + zbox = static_cast(fields[i][ifield]); break; } @@ -1112,7 +1112,7 @@ void ReadDump::migrate_new_atoms() memory->create(procassign,nnew,"read_dump:procassign"); for (int i = 0; i < nnew; i++) { - mtag = static_cast (fields[i][0]); + mtag = static_cast(fields[i][0]); procassign[i] = mtag % comm->nprocs; } diff --git a/src/version.h b/src/version.h index be317f6a1ee..e27241b11a3 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1 @@ -#define LAMMPS_VERSION "10 Sep 2025" -#define LAMMPS_UPDATE "Development" +#define LAMMPS_VERSION "10 Dec 2025"