diff --git a/.github/release_steps.md b/.github/release_steps.md index 857acfdb85..1ffd3cb291 100644 --- a/.github/release_steps.md +++ b/.github/release_steps.md @@ -216,7 +216,7 @@ and using the CMake settings: ``` sh -D CMAKE_OSX_ARCHITECTURES=arm64;x86_64 --D CMAKE_OSX_DEPLOYMENT_TARGER=11.0 +-D CMAKE_OSX_DEPLOYMENT_TARGET=11.0 ``` This will add the compiler flags `-arch arm64 -arch x86_64 @@ -324,6 +324,47 @@ At this point it should be possible to do a fast-forward merge of ### Push branches and tags - - ## LAMMPS Stable Update Release + +After making a stable release, bugfixes from the 'develop' branch +are selectively backported to the 'maintenance' branch. This is +done with "git cherry-pick \' wherever possible. +The LAMMPS\_UPDATE define in "src/version.h" is set to "Maintenance". + +### Prerequesites + +When a sufficient number of bugfixes has accumulated or an urgent +or important bugfix needs to be distributed a new stable update +release is made. To make this publicly visible a pull request +is submitted that will merge 'maintenance' into 'stable'. Before +merging, set LAMMPS\_UPDATE in "src/version.h" to "Update #" with +"#" indicating the update count (1, 2, and so on). +Also draft suitable release notes under https://github.com/lammps/lammps/releases + +### Fast-forward merge of 'maintenance' into 'stable', apply tag, and publish + +Do a fast-forward merge of 'maintenance' to 'stable' and then +apply the stable\_DMmmYYYY\_update# tag and push branch and tag +to GitHub. The corresponding pull request will be automatically +closed. Example: + +``` +git checkout maintenance +git pull +git checkout stable +git pull +git merge --ff-only maintenance +git tag -s -m 'Update 2 for Stable LAMMPS version 29 August 2024' stable_29Aug2024_update2 +git push git@github.com:lammps/lammps.git --tags maintenance stable +``` + +Associate draft release notes with new tag and publish as "latest release". + +On https://ci.lammps.org/ go to "dev", "stable" and manually execute +the "update\_release" task. This will update https://docs.lammps.org/stable +and prepare a stable tarball. + +### Build and upload binary packages and source tarball to GitHub + +The build procedure is the same as for the feature releases, only +that packages are built from the 'stable' branch. diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index a38b42b4f4..2349eebf62 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -119,6 +119,13 @@ configured) and additional files like LAMMPS API headers, manpages, potential and force field files. The location of the installation tree defaults to ``${HOME}/.local``. +.. note:: + + If you have set `-D CMAKE_INSTALL_PREFIX` to install LAMMPS into a + system location on a Linux machine , you may also have to run (as + root) the `ldconfig` program to update the cache file for fast lookup + of system shared libraries. + .. _cmake_options: Configuration and build options diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index 7717618f12..226e19bfc3 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -13,7 +13,8 @@ explains how to do this for building both with CMake and make. * `Size of LAMMPS integer types and size limits`_ * `Read or write compressed files`_ * `Output of JPEG, PNG, and movie files`_ via the :doc:`dump image ` or :doc:`dump movie ` commands -* `Support for downloading files`_ +* `Support for downloading files from the input`_ +* `Prevent download of large potential files`_ * `Memory allocation alignment`_ * `Workaround for long long integers`_ * `Exception handling when using LAMMPS as a library`_ to capture errors @@ -509,8 +510,8 @@ during a run. .. _libcurl: -Support for downloading files ------------------------------ +Support for downloading files from the input +-------------------------------------------- .. versionadded:: 29Aug2024 @@ -553,6 +554,25 @@ LAMMPS is compiled accordingly which needs the following settings: ---------- +.. _download_pot: + +Prevent download of large potential files +----------------------------------------- + +.. versionadded:: 8Feb2023 + +LAMMPS bundles a selection of potential files in the ``potentials`` +folder as examples of how those kinds of potential files look like and +for use with the provided input examples in the ``examples`` tree. To +keep the size of the distributed LAMMPS source package small, very large +potential files (> 5 MBytes) are not bundled, but only downloaded on +demand when the :doc:`corresponding package ` is +installed. This automatic download can be prevented when :doc:`building +LAMMPS with CMake ` by adding the setting `-D +DOWNLOAD_POTENTIALS=off` when configuring. + +---------- + .. _align: Memory allocation alignment diff --git a/doc/src/Howto_python.rst b/doc/src/Howto_python.rst index bfb182d989..ee919e96e7 100644 --- a/doc/src/Howto_python.rst +++ b/doc/src/Howto_python.rst @@ -62,17 +62,17 @@ with :ref:`PNG, JPEG and FFMPEG output support ` enabled. cd $LAMMPS_DIR/src - # add packages if necessary + # add LAMMPS packages if necessary make yes-MOLECULE make yes-PYTHON # compile shared library using Makefile make mpi mode=shlib LMP_INC="-DLAMMPS_PNG -DLAMMPS_JPEG -DLAMMPS_FFMPEG" JPG_LIB="-lpng -ljpeg" -Step 2: Installing the LAMMPS Python package -"""""""""""""""""""""""""""""""""""""""""""" +Step 2: Installing the LAMMPS Python module +""""""""""""""""""""""""""""""""""""""""""" -Next install the LAMMPS Python package into your current Python installation with: +Next install the LAMMPS Python module into your current Python installation with: .. code-block:: bash @@ -89,6 +89,29 @@ privileges) or into your personal Python module folder. Recompiling the shared library requires re-installing the Python package. +.. _externally_managed: + +.. admonition:: Handling an "externally-managed-environment" Error + :class: Hint + + Some Python installations made through Linux distributions + (e.g. Ubuntu 24.04LTS or later) will prevent installing the LAMMPS + Python module into a system folder or a corresponding folder of the + individual user as attempted by ``make install-python`` with an error + stating that an *externally managed* python installation must be only + managed by the same package package management tool. This is an + optional setting, so not all Linux distributions follow it currently + (Spring 2025). The reasoning and explanations for this error can be + found in the `Python Packaging User Guide + `_ + + These guidelines suggest to create a virtual environment and install + the LAMMPS Python module there (see below). This is generally a good + idea and the LAMMPS developers recommend this, too. If, however, you + want to proceed and install the LAMMPS Python module regardless, you + can install the "wheel" file (see above) manually with the ``pip`` + command by adding the ``--break-system-packages`` flag. + Installation inside of a virtual environment ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 1e53a99914..1bb0768d62 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -110,13 +110,16 @@ folder that the dynamic loader searches or inside of the installed .. code-block:: bash - python install.py -p -l -v [-n] + python install.py -p -l -v [-n] [-f] * The ``-p`` flag points to the ``lammps`` Python package folder to be installed, * the ``-l`` flag points to the LAMMPS shared library file to be installed, * the ``-v`` flag points to the LAMMPS version header file to extract the version date, - * and the optional ``-n`` instructs the script to only build a wheel file - but not attempt to install it. + * the optional ``-n`` instructs the script to only build a wheel file but not attempt + to install it, + * and the optional ``-f`` argument instructs the script to force installation even if + pip would otherwise refuse installation with an + :ref:`error about externally managed environments `. .. tab:: Virtual environment @@ -198,6 +201,10 @@ folder that the dynamic loader searches or inside of the installed The ``PYTHONPATH`` needs to point to the parent folder that contains the ``lammps`` package! +In case you run into an "externally-managed-environment" error when +trying to install the LAMMPS Python module, please refer to +:ref:`corresponding paragraph ` in the Python HOWTO +page to learn about options for handling this error. To verify if LAMMPS can be successfully started from Python, start the Python interpreter, load the ``lammps`` Python module and create a diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index d13a6d384f..11468787f1 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -930,7 +930,7 @@ dependencies and redirects the download to the local cache. mkdir build cd build - cmake -D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C "${LAMMPS_HTTP_CACHE_CONFIG}" -C ../cmake/presets/most.cmake ../cmake + cmake -D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C "${LAMMPS_HTTP_CACHE_CONFIG}" -C ../cmake/presets/most.cmake -D DOWNLOAD_POTENTIALS=off ../cmake make -j 8 deactivate_caches diff --git a/doc/utils/sphinx-config/_static/up.png b/doc/utils/sphinx-config/_static/up.png new file mode 100644 index 0000000000..2a940a7da7 Binary files /dev/null and b/doc/utils/sphinx-config/_static/up.png differ diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/layout.html b/doc/utils/sphinx-config/_themes/lammps_theme/layout.html index 83fdb7054b..7e938d2d70 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/layout.html +++ b/doc/utils/sphinx-config/_themes/lammps_theme/layout.html @@ -137,6 +137,7 @@ {# the master_doc variable was renamed to root_doc in Sphinx 4 (master_doc still exists in later Sphinx versions) #} {%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1)) %} {%- set _root_doc = root_doc|default(master_doc) %} + {% if not theme_logo_only %}{{ project }}{% endif %} {%- if logo or logo_url %} @@ -172,6 +173,15 @@ {%- endblock %} + +
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 diff --git a/python/install.py b/python/install.py index fd9f95f1bf..352225e49d 100644 --- a/python/install.py +++ b/python/install.py @@ -27,6 +27,8 @@ parser.add_argument("-w", "--wheeldir", required=False, help="path to a directory where the created wheel will be stored") parser.add_argument("-v", "--versionfile", required=True, help="path to the LAMMPS version.h source file") +parser.add_argument("-f", "--force", action="store_true", required=False, default=False, + help="force installation of LAMMPS Python package") args = parser.parse_args() @@ -145,7 +147,10 @@ else: py_exe = sys.executable try: - txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False) + if args.force: + txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', '--break-system-packages', wheel], stderr=subprocess.STDOUT, shell=False) + else: + txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False) print(txt.decode('UTF-8')) sys.exit(0) except subprocess.CalledProcessError as err: @@ -154,7 +159,10 @@ except subprocess.CalledProcessError as err: sys.exit(errmsg + "You need to uninstall the LAMMPS python module manually first.\n") try: print('Installing wheel into system site-packages folder failed. Trying user folder now') - txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False) + if args.force: + txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', '--break-system-packages', wheel], stderr=subprocess.STDOUT, shell=False) + else: + txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False) print(txt.decode('UTF-8')) except: sys.exit('Failed to install wheel ' + wheel) diff --git a/src/BPM/bond_bpm_spring_plastic.cpp b/src/BPM/bond_bpm_spring_plastic.cpp index b011df2f9b..7059449f3b 100644 --- a/src/BPM/bond_bpm_spring_plastic.cpp +++ b/src/BPM/bond_bpm_spring_plastic.cpp @@ -440,7 +440,7 @@ double BondBPMSpringPlastic::single(int type, double rsq, int i, int j, double & double r = sqrt(rsq); double rinv = 1.0 / r; - double e = (r - r0) / r0; + double e = (r0 != 0.0) ? (r - r0) / r0 : 0.0; if (normalize_flag) fforce = -k[type] * (e - ep); @@ -460,7 +460,7 @@ double BondBPMSpringPlastic::single(int type, double rsq, int i, int j, double & fforce *= rinv; if (smooth_flag) { - double smooth = (r - r0) / (r0 * ecrit[type]); + double smooth = (r0 != 0.0) ? (r - r0) / (r0 * ecrit[type]) : 0.0; smooth *= smooth; smooth *= smooth; smooth *= smooth; diff --git a/src/EXTRA-COMPUTE/compute_stress_mop.cpp b/src/EXTRA-COMPUTE/compute_stress_mop.cpp index 4dcab3e322..6f96debd40 100644 --- a/src/EXTRA-COMPUTE/compute_stress_mop.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_mop.cpp @@ -882,7 +882,7 @@ void ComputeStressMop::compute_dihedrals() double x_atom_4[3] = {0.0, 0.0, 0.0}; // initialization - for (int i = 0; i < nvalues; i++) { dihedral_local[i] = 0.0; } + for (int i = 0; i < nvalues; i++) dihedral_local[i] = 0.0; double local_contribution[3] = {0.0, 0.0, 0.0}; for (atom2 = 0; atom2 < nlocal; atom2++) { @@ -1118,10 +1118,6 @@ void ComputeStressMop::compute_dihedrals() df[2] = sgn * (f1[2] + f3[2]); } - // no if matches - else { - df[0] = df[1] = df[2] = 0.0; - } local_contribution[0] += df[0] / area * nktv2p; local_contribution[1] += df[1] / area * nktv2p; local_contribution[2] += df[2] / area * nktv2p; diff --git a/src/fix_halt.cpp b/src/fix_halt.cpp index 2139242169..a1cd921cd4 100644 --- a/src/fix_halt.cpp +++ b/src/fix_halt.cpp @@ -294,6 +294,7 @@ void FixHalt::end_of_step() for (int i = 0; i < universe->nworlds; ++i) { if (universe->me == universe->root_proc[i]) continue; MPI_Wait(req + i, MPI_STATUS_IGNORE); + MPI_Request_free(req + i); } } diff --git a/src/utils.cpp b/src/utils.cpp index 4c48069afb..7427dd0722 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -272,11 +272,7 @@ void utils::print(FILE *fp, const std::string &mesg) void utils::fmtargs_print(FILE *fp, fmt::string_view format, fmt::format_args args) { - try { - print(fp, fmt::vformat(format, args)); - } catch (fmt::format_error &) { - ; // do nothing - } + print(fp, fmt::vformat(format, args)); } std::string utils::errorurl(int errorcode) diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt index b09c6c26d9..e41cf90a78 100644 --- a/tools/lammps-gui/CMakeLists.txt +++ b/tools/lammps-gui/CMakeLists.txt @@ -94,8 +94,8 @@ endif() option(BUILD_WHAM "Download and compile WHAM executable from Grossfield Lab" YES) if(BUILD_WHAM) - set(WHAM_URL "http://membrane.urmc.rochester.edu/sites/default/files/wham/wham-release-2.0.11.tgz" CACHE STRING "URL for WHAM tarball") - set(WHAM_MD5 "f56751ac71a8d1c485b9ebd4ccff8dbe" CACHE STRING "MD5 checksum of WHAM tarball") + set(WHAM_URL "http://membrane.urmc.rochester.edu/sites/default/files/wham/wham-release-2.1.0.tgz" CACHE STRING "URL for WHAM tarball") + set(WHAM_MD5 "4ed6e24254925ec124f44bb381c3b87f" CACHE STRING "MD5 checksum of WHAM tarball") mark_as_advanced(WHAM_URL) mark_as_advanced(WHAM_MD5) @@ -122,7 +122,7 @@ if(BUILD_WHAM) if(PATCH_FOUND) message(STATUS "Apply patch to customize WHAM using ${Patch_EXECUTABLE}") execute_process( - COMMAND ${Patch_EXECUTABLE} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/update-wham-2.0.11.patch + COMMAND ${Patch_EXECUTABLE} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/update-wham-2.1.0.patch WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src/wham/ ) endif() diff --git a/tools/lammps-gui/lammps-gui.appdata.xml b/tools/lammps-gui/lammps-gui.appdata.xml index 64d8892956..95032b961d 100644 --- a/tools/lammps-gui/lammps-gui.appdata.xml +++ b/tools/lammps-gui/lammps-gui.appdata.xml @@ -61,7 +61,6 @@ Highlight warnings and error messages in Output window Make Tutorial wizards more compact Include download and compilation of WHAM software from Alan Grossfield - Add dialog to run WHAM directly from LAMMPS-GUI Add entry to Run menu to restart the LAMMPS instance Use mutex to avoid corruption of thermo data diff --git a/tools/lammps-gui/update-wham-2.0.11.patch b/tools/lammps-gui/update-wham-2.1.0.patch similarity index 64% rename from tools/lammps-gui/update-wham-2.0.11.patch rename to tools/lammps-gui/update-wham-2.1.0.patch index b884c25336..dff9dcffeb 100644 --- a/tools/lammps-gui/update-wham-2.0.11.patch +++ b/tools/lammps-gui/update-wham-2.1.0.patch @@ -1,73 +1,29 @@ -diff --git a/.gitignore b/.gitignore -index 28ac6ef..a401160 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -6,6 +6,8 @@ doc.toc - wham-dist.tar.gz - - *.o -+*~ - - wham/wham - wham-2d/wham-2d -+/build diff --git a/CMakeLists.txt b/CMakeLists.txt -new file mode 100644 -index 0000000..b4f0fe6 ---- /dev/null +index b4f0fe6..a61cec8 100644 +--- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -0,0 +1,38 @@ -+# Custom minimal -*- CMake -*- file for wham -+ -+cmake_minimum_required(VERSION 3.16) -+project(wham VERSION 2.0.11 -+ DESCRIPTION "WHAM: a fast, memory efficient implementation of the Weighted Histogram Analysis Method" -+ LANGUAGES C -+ HOMEPAGE_URL http://membrane.urmc.rochester.edu/content/wham/) -+ -+include(GNUInstallDirs) -+ -+add_executable(wham -+ nr/ran2.c -+ nr/locate.c -+ wham/wham.c -+ wham/file_read.c -+ wham/histogram.c -+ wham/bootstrap.c -+) -+target_include_directories(wham PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wham) -+target_link_libraries(wham PRIVATE m) -+install(TARGETS wham DESTINATION ${CMAKE_INSTALL_BINDIR}) -+ -+add_executable(wham-2d -+ nr/ran2.c -+ nr/locate.c -+ wham-2d/wham-2d.c -+ wham-2d/file_read.c -+ wham-2d/histogram.c -+ wham/bootstrap.c -+) -+target_include_directories(wham-2d PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wham) -+target_link_libraries(wham-2d PRIVATE m) -+install(TARGETS wham-2d DESTINATION ${CMAKE_INSTALL_BINDIR}) -+ -+install(FILES doc/doc.pdf -+ TYPE DOC -+ PERMISSIONS OWNER_READ GROUP_READ WORLD_READ -+) -diff --git a/nr/locate.c b/nr/locate.c -index 9f92dc0..f3bf294 100644 ---- a/nr/locate.c -+++ b/nr/locate.c -@@ -11,7 +11,7 @@ void locate(double xx[], int n, double x, int *j) - ascnd=(xx[n] > xx[0]); // I think this makes it zero based - while (ju-jl > 1) { - jm=(ju+jl) >> 1; -- if (x > xx[jm] == ascnd) -+ if ((x > xx[jm]) == ascnd) - jl=jm; - else - ju=jm; +@@ -1,7 +1,7 @@ + # Custom minimal -*- CMake -*- file for wham + + cmake_minimum_required(VERSION 3.16) +-project(wham VERSION 2.0.11 ++project(wham VERSION 2.1.0 + DESCRIPTION "WHAM: a fast, memory efficient implementation of the Weighted Histogram Analysis Method" + LANGUAGES C + HOMEPAGE_URL http://membrane.urmc.rochester.edu/content/wham/) +diff --git a/doc/doc.tex b/doc/doc.tex +index cf36616..84ee891 100644 +--- a/doc/doc.tex ++++ b/doc/doc.tex +@@ -53,7 +53,7 @@ Suggestions and patches are welcome. + + + \subsection{New in release 2.1.0} +-Two changes, both contributed by Alex Kohlmeyer. First, we switched from old ++Two changes, both contributed by Axel Kohlmeyer. First, we switched from old + make to CMake for the build. Second, we changed how energy units are set; where + it used to be a compile-time option, now it is set on the command line. + diff --git a/wham-2d/histogram.c b/wham-2d/histogram.c index 1bd1329..b5d1c01 100644 --- a/wham-2d/histogram.c @@ -127,99 +83,10 @@ index 1bd1329..b5d1c01 100644 - - diff --git a/wham-2d/wham-2d.c b/wham-2d/wham-2d.c -index fb6e059..a6b8483 100644 +index 76389ac..05fe7cf 100644 --- a/wham-2d/wham-2d.c +++ b/wham-2d/wham-2d.c -@@ -25,7 +25,7 @@ - #include - #include "wham-2d.h" - --#define COMMAND_LINE "Command line: wham-2d Px[=0|pi|val] hist_min_x hist_max_x num_bins_x Py[=0|pi|val] hist_min_y hist_max_y num_bins_y tol temperature numpad metadatafile freefile use_mask\n" -+#define COMMAND_LINE "Command line: wham-2d [units ] Px[=0|pi|val] hist_min_x hist_max_x num_bins_x Py[=0|pi|val] hist_min_y hist_max_y num_bins_y tol temperature numpad metadatafile freefile use_mask\n" - double HIST_MAXx,HIST_MINx,BIN_WIDTHx; - double HIST_MAXy,HIST_MINy,BIN_WIDTHy; - double TOL; -@@ -35,7 +35,7 @@ int NUM_BINSx, NUM_BINSy; - int PERIODICx, PERIODICy; - double PERIODx, PERIODy; - double *data1,**num,***bias; -- -+double k_B = k_B_DEFAULT; - - int main(int argc, char *argv[]) - { -@@ -57,7 +57,7 @@ double sum; - int iteration; - int max_iteration = 100000; - int numpad; --int **mask; -+int **mask = NULL; - int use_mask; - - cpu1 = ((double) clock())/CLOCKS_PER_SEC; -@@ -76,6 +76,61 @@ for (i=0; i] [P|Ppi|Pval] hist_min hist_max num_bins tol temperature numpad metadatafile freefile [num_MC_trials randSeed]\n" - - double HIST_MAX,HIST_MIN,BIN_WIDTH,TOL; - double *HISTOGRAM; -@@ -29,6 +29,7 @@ double kT; - int NUM_BINS; - int PERIODIC; - double PERIOD; -+double k_B = k_B_DEFAULT; - - int main(int argc, char *argv[]) - { -@@ -41,7 +42,7 @@ int first; - int bin_min; +@@ -39,10 +39,9 @@ double kT; // temperature + int i,j; + int len; + int first; +-int bin_min; int have_energy; char *freefile; -FILE *METAFILE, *FREEFILE; @@ -467,69 +296,7 @@ index 487871b..edb8125 100644 struct hist_group *hist_group; struct histogram *hp; double coor; -@@ -82,6 +83,61 @@ for (i=0; inum_windows); +@@ -304,7 +303,7 @@ assert(i == hist_group->num_windows); // Figure out if we have trajectories at different temperatures. // Missing temperatures are set to -1 in read_metadata, and // since we require that either all trajectories specify a temperature @@ -563,7 +330,7 @@ index 487871b..edb8125 100644 // have to check one of them if (hist_group->kT[0] > 0) { -@@ -257,7 +313,7 @@ if (hist_group->kT[0] > 0) +@@ -313,7 +312,7 @@ if (hist_group->kT[0] > 0) else { have_energy = 0; @@ -572,7 +339,7 @@ index 487871b..edb8125 100644 { hist_group->kT[i] = kT; } -@@ -269,7 +325,7 @@ if (!final_f) +@@ -325,7 +324,7 @@ if (!final_f) { printf("couldn't allocate space for final_f: %s\n", strerror(errno)); exit(errno); @@ -581,7 +348,7 @@ index 487871b..edb8125 100644 free(HISTOGRAM); -@@ -305,7 +361,8 @@ while (! is_converged(hist_group) || first ) +@@ -361,7 +360,8 @@ while (! is_converged(hist_group) || first ) for (i=0; i< NUM_BINS; i++) { coor = calc_coor(i); @@ -591,7 +358,7 @@ index 487871b..edb8125 100644 } printf("\n"); -@@ -319,7 +376,7 @@ while (! is_converged(hist_group) || first ) +@@ -375,7 +375,7 @@ while (! is_converged(hist_group) || first ) } } // Cheesy bailout if we're going on too long @@ -600,7 +367,16 @@ index 487871b..edb8125 100644 { printf("Too many iterations: %d\n", iteration); break; -@@ -383,11 +440,11 @@ for (i=0; i< num_mc_runs; i++) +@@ -408,7 +408,7 @@ for (i=0; i < NUM_BINS; i++) + } + + // Compute the free energy from the normalized probability +-bin_min = calc_free(free_ene, prob,kT); ++ calc_free(free_ene, prob,kT); + + // Do the requested number of bootstrap monte carlo error analysis runs. + if (num_mc_runs <= 0) +@@ -439,11 +439,11 @@ for (i=0; i< num_mc_runs; i++) //printf("Faking %d: %d %d\n", i,j,hp->num_points); num_used = hp->last - hp->first + 1; mk_new_hist(hp->cum, hp->data, num_used, hp->num_mc_samples, &idum); @@ -614,7 +390,7 @@ index 487871b..edb8125 100644 // perform WHAM iterations on the fake data sets iteration = 0; first = 1; -@@ -403,7 +460,7 @@ for (i=0; i< num_mc_runs; i++) +@@ -459,7 +459,7 @@ for (i=0; i< num_mc_runs; i++) printf("Too many iterations: %d\n", iteration); break; } @@ -623,7 +399,7 @@ index 487871b..edb8125 100644 printf("#MC trial %d: %d iterations\n", i, iteration); printf("#PMF values\n"); // accumulate the average and stdev of the resulting probabilities -@@ -419,18 +476,19 @@ for (i=0; i< num_mc_runs; i++) +@@ -475,18 +475,19 @@ for (i=0; i< num_mc_runs; i++) for (j=0; j < NUM_BINS; j++) { pdf = -kT*log(prob[j]); @@ -647,7 +423,7 @@ index 487871b..edb8125 100644 for (i=0; i < NUM_BINS; i++) { ave_p[i] /= (double)num_mc_runs; -@@ -457,12 +515,12 @@ if (!FREEFILE) +@@ -513,12 +514,12 @@ if (!FREEFILE) for (i=0; i< NUM_BINS; i++) { coor = calc_coor(i); @@ -663,7 +439,7 @@ index 487871b..edb8125 100644 } exit(errno); -@@ -470,38 +528,37 @@ if (!FREEFILE) +@@ -526,38 +527,37 @@ if (!FREEFILE) else { // write out header @@ -714,7 +490,7 @@ index 487871b..edb8125 100644 } } -@@ -515,7 +572,7 @@ exit(0); +@@ -571,7 +571,7 @@ exit(0); /* * Perform a single WHAM iteration */ @@ -723,7 +499,7 @@ index 487871b..edb8125 100644 int have_energy) { int i,j; -@@ -535,9 +592,9 @@ for (i=0; ihists[j]),i); bias = calc_bias(hist_group,j,coor); bf = exp((hist_group->F_old[j] - bias) / hist_group->kT[j]); @@ -736,27 +512,3 @@ index 487871b..edb8125 100644 * number of points. */ if (have_energy) -diff --git a/wham/wham.h b/wham/wham.h -index aacc1e8..7d509f2 100644 ---- a/wham/wham.h -+++ b/wham/wham.h -@@ -15,14 +15,16 @@ extern double kT; - extern int NUM_BINS; - extern int PERIODIC; - extern double PERIOD; -+extern double k_B; -+ - - // Some predefined periodic units - #define DEGREES 360.0 - #define RADIANS 6.28318530717959 - --#define k_B 0.001982923700 // Boltzmann's constant in kcal/mol K --//#define k_B 0.0083144621 // Boltzmann's constant kJ/mol-K --//#define k_B 1.0 // Boltzmann's constant in reduced units -+#define k_B_DEFAULT 0.001982923700 // Boltzmann's constant in kcal/mol K -+//#define k_B_DEFAULT 0.0083144621 // Boltzmann's constant kJ/mol-K -+//#define k_B_DEFAULT 1.0 // Boltzmann's constant in reduced units - - - // global (untrimmed) histogram, global to prevent reallocation diff --git a/unittest/force-styles/tests/mol-pair-tip4p_table.yaml b/unittest/force-styles/tests/mol-pair-tip4p_table.yaml index e76ecdf0f0..5826e5f1c5 100644 --- a/unittest/force-styles/tests/mol-pair-tip4p_table.yaml +++ b/unittest/force-styles/tests/mol-pair-tip4p_table.yaml @@ -2,7 +2,7 @@ lammps_version: 17 Feb 2022 tags: unstable date_generated: Fri Mar 18 22:17:36 2022 -epsilon: 2.5e-13 +epsilon: 1.0e-11 skip_tests: prerequisites: ! | atom full