From cea31e463d54effc7687cabdaa2156652f7cb1c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Mar 2025 10:20:31 -0400 Subject: [PATCH] remove references to -DLAMMPS_SMALLSMALL and trigger error when used --- cmake/CMakeLists.txt | 4 +- cmake/Modules/LAMMPSInterfacePlugin.cmake | 4 +- doc/src/Build_extras.rst | 9 ++-- doc/src/Build_settings.rst | 15 ++---- doc/src/Errors_messages.rst | 5 +- doc/src/Fortran.rst | 3 +- doc/src/Library_add.rst | 6 +-- fortran/lammps.f90 | 66 +++-------------------- src/info.cpp | 2 - src/lammps.cpp | 7 --- src/library.h | 2 +- src/lmptype.h | 42 +++------------ 12 files changed, 35 insertions(+), 130 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c1a0875c15..f22fa401a2 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -431,8 +431,8 @@ else() target_link_libraries(lammps PUBLIC mpi_stubs) endif() -set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") -set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) +set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") +set(LAMMPS_SIZES_VALUES smallbig bigbig) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES) string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES) diff --git a/cmake/Modules/LAMMPSInterfacePlugin.cmake b/cmake/Modules/LAMMPSInterfacePlugin.cmake index fcaf604778..5b7444f62c 100644 --- a/cmake/Modules/LAMMPSInterfacePlugin.cmake +++ b/cmake/Modules/LAMMPSInterfacePlugin.cmake @@ -260,8 +260,8 @@ endif() ################ # integer size selection -set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") -set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) +set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") +set(LAMMPS_SIZES_VALUES smallbig bigbig) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES) string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index f57407f9c1..ca64ffbe2e 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -255,11 +255,10 @@ Traditional make Before building LAMMPS, you must build the GPU library in ``lib/gpu``\ . You can do this manually if you prefer; follow the instructions in -``lib/gpu/README``. Note that the GPU library uses MPI calls, so you must -use the same MPI library (or the STUBS library) settings as the main -LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG``\ , -``-DLAMMPS_SMALLBIG``\ , or ``-DLAMMPS_SMALLSMALL`` settings in whichever -Makefile you use. +``lib/gpu/README``. Note that the GPU library uses MPI calls, so you +must use the same MPI library (or the STUBS library) settings as the +main LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG`` or +``-DLAMMPS_SMALLBIG`` settings in whichever Makefile you use. You can also build the library in one step from the ``lammps/src`` dir, using a command like these, which simply invokes the ``lib/gpu/Install.py`` diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index fb3ebf4b48..7717618f12 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -315,7 +315,7 @@ large counters can become before "rolling over". The default setting of .. code-block:: bash - -D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall + -D LAMMPS_SIZES=value # smallbig (default) or bigbig If the variable is not set explicitly, "smallbig" is used. @@ -326,7 +326,7 @@ large counters can become before "rolling over". The default setting of .. code-block:: make - LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL + LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG The default setting is ``-DLAMMPS_SMALLBIG`` if nothing is specified @@ -335,34 +335,27 @@ LAMMPS system size restrictions .. list-table:: :header-rows: 1 - :widths: 18 27 28 27 + :widths: 27 36 37 :align: center * - - smallbig - bigbig - - smallsmall * - Total atom count - :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`) - :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`) - - :math:`2^{31}` atoms (= :math:`2.147 \cdot 10^9`) * - Total timesteps - :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`) - :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`) - - :math:`2^{31}` steps (= :math:`2.147 \cdot 10^9`) * - Atom ID values - :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)` - :math:`1 \le i \le 2^{63} (= 9.223 \cdot 10^{18})` - - :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)` * - Image flag values - :math:`-512 \le i \le 511` - :math:`- 1\,048\,576 \le i \le 1\,048\,575` - - :math:`-512 \le i \le 511` The "bigbig" setting increases the size of image flags and atom IDs over -"smallbig" and the "smallsmall" setting is only needed if your machine -does not support 64-bit integers or incurs performance penalties when -using them. +the default "smallbig" setting. These are limits for the core of the LAMMPS code, specific features or some styles may impose additional limits. The :ref:`ATC diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index bfc395067a..7be94f6fb3 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -6233,8 +6233,9 @@ Doc page with :doc:`WARNING messages ` Atom IDs must be positive integers. *One or more atom IDs is too big* - The limit on atom IDs is set by the SMALLBIG, BIGBIG, SMALLSMALL - setting in your LAMMPS build. See the :doc:`Build settings ` page for more info. + The limit on atom IDs is set by the SMALLBIG, BIGBIG + setting in your LAMMPS build. See the + :doc:`Build settings ` page for more info. *One or more atom IDs is zero* Either all atoms IDs must be zero or none of them. diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index ea0ade5cf4..0a8434f63d 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -2773,8 +2773,7 @@ Procedures Bound to the :f:type:`lammps` Derived Type END SUBROUTINE external_callback END INTERFACE - where ``c_bigint`` is ``c_int`` if ``-DLAMMPS_SMALLSMALL`` was used and - ``c_int64_t`` otherwise; and ``c_tagint`` is ``c_int64_t`` if + where ``c_bigint`` is ``c_int64_t`` and ``c_tagint`` is ``c_int64_t`` if ``-DLAMMPS_BIGBIG`` was used and ``c_int`` otherwise. The argument *caller* to :f:subr:`set_fix_external_callback` is unlimited diff --git a/doc/src/Library_add.rst b/doc/src/Library_add.rst index 8777ebbcad..e955422984 100644 --- a/doc/src/Library_add.rst +++ b/doc/src/Library_add.rst @@ -19,9 +19,9 @@ there are now a few requirements for including new changes or extensions. be added. - New features should also be implemented and documented not just for the C interface, but also the Python and Fortran interfaces. - - All additions should work and be compatible with ``-DLAMMPS_BIGBIG``, - ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` as well as when - compiling with and without MPI support. + - All additions should work and be compatible with + ``-DLAMMPS_BIGBIG``, ``-DLAMMPS_SMALLBIG`` as well as when compiling + with and without MPI support. - The ``library.h`` file should be kept compatible to C code at a level similar to C89. Its interfaces may not reference any custom data types (e.g. ``bigint``, ``tagint``, and so on) that diff --git a/fortran/lammps.f90 b/fortran/lammps.f90 index 2cfd4422b0..9922fd1f2d 100644 --- a/fortran/lammps.f90 +++ b/fortran/lammps.f90 @@ -334,14 +334,6 @@ MODULE LIBLAMMPS ! Interface templates for fix external callbacks ABSTRACT INTERFACE - SUBROUTINE external_callback_smallsmall(caller, timestep, ids, x, fexternal) - IMPORT :: c_int, c_double - CLASS(*), INTENT(INOUT) :: caller - INTEGER(c_int), INTENT(IN) :: timestep - INTEGER(c_int), DIMENSION(:), INTENT(IN) :: ids - REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x - REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: fexternal - END SUBROUTINE external_callback_smallsmall SUBROUTINE external_callback_smallbig(caller, timestep, ids, x, fexternal) IMPORT :: c_int, c_double, c_int64_t CLASS(*), INTENT(INOUT) :: caller @@ -363,8 +355,6 @@ MODULE LIBLAMMPS ! Derived type for fix external callback data TYPE fix_external_data CHARACTER(LEN=:), ALLOCATABLE :: id - PROCEDURE(external_callback_smallsmall), NOPASS, POINTER :: & - callback_smallsmall => NULL() PROCEDURE(external_callback_smallbig), NOPASS, POINTER :: & callback_smallbig => NULL() PROCEDURE(external_callback_bigbig), NOPASS, POINTER :: & @@ -2262,7 +2252,7 @@ CONTAINS CALL lammps_free(Cname) END SUBROUTINE lmp_scatter_atoms_subset_double - ! equivalent function to lammps_gather_bonds (LAMMPS_SMALLSMALL or SMALLBIG) + ! equivalent function to lammps_gather_bonds (LAMMPS_SMALLBIG) SUBROUTINE lmp_gather_bonds_small(self, data) CLASS(lammps), INTENT(IN) :: self INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data @@ -2304,7 +2294,7 @@ CONTAINS CALL lammps_gather_bonds(self%handle, Cdata) END SUBROUTINE lmp_gather_bonds_big - ! equivalent function to lammps_gather_angles (LAMMPS_SMALLSMALL or SMALLBIG) + ! equivalent function to lammps_gather_angles (LAMMPS_SMALLBIG) SUBROUTINE lmp_gather_angles_small(self, data) CLASS(lammps), INTENT(IN) :: self INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data @@ -2346,7 +2336,7 @@ CONTAINS CALL lammps_gather_angles(self%handle, Cdata) END SUBROUTINE lmp_gather_angles_big - ! equivalent function to lammps_gather_dihedrals (LAMMPS_SMALLSMALL or SMALLBIG) + ! equivalent function to lammps_gather_dihedrals (LAMMPS_SMALLBIG) SUBROUTINE lmp_gather_dihedrals_small(self, data) CLASS(lammps), INTENT(IN) :: self INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data @@ -2388,7 +2378,7 @@ CONTAINS CALL lammps_gather_dihedrals(self%handle, Cdata) END SUBROUTINE lmp_gather_dihedrals_big - ! equivalent function to lammps_gather_impropers (LAMMPS_SMALLSMALL or SMALLBIG) + ! equivalent function to lammps_gather_impropers (LAMMPS_SMALLBIG) SUBROUTINE lmp_gather_impropers_small(self, data) CLASS(lammps), INTENT(IN) :: self INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data @@ -2763,7 +2753,7 @@ CONTAINS IF (tagint_size /= 4_c_int .AND. (PRESENT(id) .OR. PRESENT(image))) THEN CALL lmp_error(self, LMP_ERROR_ALL + LMP_ERROR_WORLD, & 'Unable to create_atoms; your id/image array types are incompatible& - & with LAMMPS_SMALLBIG and LAMMPS_SMALLSMALL [Fortran/create_atoms]') + & with LAMMPS_SMALLBIG [Fortran/create_atoms]') END IF n = SIZE(type, KIND=c_int) IF (PRESENT(bexpand)) THEN @@ -3360,7 +3350,7 @@ CONTAINS construct_fix_external_data%id = ' ' END FUNCTION construct_fix_external_data - ! equivalent function to lammps_set_fix_external_callback for -DSMALLSMALL + ! equivalent function to lammps_set_fix_external_callback ! note that "caller" is wrapped into a fix_external_data derived type along ! with the fix id and the Fortran calling function. SUBROUTINE lmp_set_fix_external_callback(self, id, callback, caller) @@ -3394,11 +3384,7 @@ CONTAINS ext_data(this_fix)%id = id ext_data(this_fix)%lammps_instance => self - IF (SIZE_TAGINT == 4_c_int .AND. SIZE_BIGINT == 4_c_int) THEN - ! -DSMALLSMALL - c_callback = C_FUNLOC(callback_wrapper_smallsmall) - CALL set_fix_external_callback_smallsmall(this_fix, callback) - ELSE IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN + IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN ! -DBIGBIG c_callback = C_FUNLOC(callback_wrapper_bigbig) CALL set_fix_external_callback_bigbig(this_fix, callback) @@ -3420,12 +3406,6 @@ CONTAINS END SUBROUTINE lmp_set_fix_external_callback ! Wrappers to assign callback pointers with explicit interfaces - SUBROUTINE set_fix_external_callback_smallsmall(id, callback) - INTEGER, INTENT(IN) :: id - PROCEDURE(external_callback_smallsmall) :: callback - - ext_data(id)%callback_smallsmall => callback - END SUBROUTINE set_fix_external_callback_smallsmall SUBROUTINE set_fix_external_callback_smallbig(id, callback) INTEGER, INTENT(IN) :: id @@ -3450,9 +3430,7 @@ CONTAINS DO i = 1, SIZE(ext_data) - 1 c_id = f2c_string(ext_data(i)%id) c_caller = C_LOC(ext_data(i)) - IF (SIZE_TAGINT == 4_c_int .AND. SIZE_BIGINT == 4_c_int) THEN - c_callback = C_FUNLOC(callback_wrapper_smallsmall) - ELSE IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN + IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN c_callback = C_FUNLOC(callback_wrapper_bigbig) ELSE c_callback = C_FUNLOC(callback_wrapper_smallbig) @@ -3464,34 +3442,6 @@ CONTAINS END SUBROUTINE rebind_external_callback_data ! companions to lmp_set_fix_external_callback to change interface - SUBROUTINE callback_wrapper_smallsmall(caller, timestep, nlocal, ids, x, & - fexternal) BIND(C) - TYPE(c_ptr), INTENT(IN), VALUE :: caller - INTEGER(c_int), INTENT(IN), VALUE :: timestep - INTEGER(c_int), INTENT(IN), VALUE :: nlocal - TYPE(c_ptr), INTENT(IN), VALUE :: ids, x, fexternal - TYPE(c_ptr), DIMENSION(:), POINTER :: x0, f0 - INTEGER(c_int), DIMENSION(:), POINTER :: f_ids => NULL() - REAL(c_double), DIMENSION(:,:), POINTER :: f_x => NULL(), & - f_fexternal => NULL() - TYPE(fix_external_data), POINTER :: f_caller => NULL() - - CALL C_F_POINTER(ids, f_ids, [nlocal]) - CALL C_F_POINTER(x, x0, [nlocal]) - CALL C_F_POINTER(x0(1), f_x, [3, nlocal]) - CALL C_F_POINTER(fexternal, f0, [nlocal]) - CALL C_F_POINTER(f0(1), f_fexternal, [3, nlocal]) - IF (C_ASSOCIATED(caller)) THEN - CALL C_F_POINTER(caller, f_caller) - CALL f_caller%callback_smallsmall(f_caller%caller, timestep, f_ids, & - f_x, f_fexternal) - ELSE - CALL lmp_error(f_caller%lammps_instance, & - LMP_ERROR_ALL + LMP_ERROR_WORLD, & - 'Got null pointer from "caller"; this should never happen;& - & please report a bug') - END IF - END SUBROUTINE callback_wrapper_smallsmall SUBROUTINE callback_wrapper_smallbig(caller, timestep, nlocal, ids, x, & fexternal) BIND(C) diff --git a/src/info.cpp b/src/info.cpp index 17b1f417ea..072ec97899 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -304,8 +304,6 @@ void Info::command(int narg, char **arg) fputs("-DLAMMPS_BIGBIG\n",out); #elif defined(LAMMPS_SMALLBIG) fputs("-DLAMMPS_SMALLBIG\n",out); -#else // defined(LAMMPS_SMALLSMALL) - fputs("-DLAMMPS_SMALLSMALL\n",out); #endif if (has_gzip_support()) utils::print(out,"\n{}\n",platform::compress_info()); diff --git a/src/lammps.cpp b/src/lammps.cpp index cecad6e870..9d2e755f77 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -688,11 +688,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : sizeof(tagint) != 8 || sizeof(bigint) != 8) error->all(FLERR,"Small to big integers are not sized correctly"); #endif -#ifdef LAMMPS_SMALLSMALL - if (sizeof(smallint) != 4 || sizeof(imageint) != 4 || - sizeof(tagint) != 4 || sizeof(bigint) != 4) - error->all(FLERR,"Small to big integers are not sized correctly"); -#endif // create Kokkos class if KOKKOS installed, unless explicitly switched off // instantiation creates dummy Kokkos class if KOKKOS is not installed @@ -1481,8 +1476,6 @@ void LAMMPS::print_config(FILE *fp) fputs("-DLAMMPS_BIGBIG\n",fp); #elif defined(LAMMPS_SMALLBIG) fputs("-DLAMMPS_SMALLBIG\n",fp); -#else // defined(LAMMPS_SMALLSMALL) - fputs("-DLAMMPS_SMALLSMALL\n",fp); #endif utils::print(fp,"sizeof(smallint): {}-bit\n" diff --git a/src/library.h b/src/library.h index 99b251ee85..6f1c21d748 100644 --- a/src/library.h +++ b/src/library.h @@ -24,7 +24,7 @@ /* We follow the behavior of regular LAMMPS compilation and assume * -DLAMMPS_SMALLBIG when no define is set. */ -#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) && !defined(LAMMPS_SMALLSMALL) +#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) #define LAMMPS_SMALLBIG #endif diff --git a/src/lmptype.h b/src/lmptype.h index ec2cd3f7e9..8927de429c 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -80,10 +80,16 @@ static constexpr uint32_t MEMCPYMASK = (static_cast(1) << 31) - 1U; // default to 32-bit smallint and other ints, 64-bit bigint -#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) +#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) #define LAMMPS_SMALLBIG #endif +// we no longer support LAMMPS_SMALLSMALL + +#if defined(LAMMPS_SMALLSMALL) +#error LAMMPS no longer supports -DLAMMPS_SMALLSMALL +#endif + // allow user override of LONGLONG to LONG, necessary for some machines/MPI #ifdef LAMMPS_LONGLONG_TO_LONG @@ -162,40 +168,6 @@ typedef int64_t bigint; #endif -// for machines that do not support 64-bit ints -// 32-bit smallint/imageint/tagint/bigint - -#ifdef LAMMPS_SMALLSMALL - -typedef int smallint; -typedef int imageint; -typedef int tagint; -typedef int bigint; - -#define MAXSMALLINT INT_MAX -#define MAXTAGINT INT_MAX -#define MAXBIGINT INT_MAX -#define MAXDOUBLEINT INT_MAX - -#define MPI_LMP_TAGINT MPI_INT -#define MPI_LMP_IMAGEINT MPI_INT -#define MPI_LMP_BIGINT MPI_INT - -#define TAGINT_FORMAT "%d" -#define BIGINT_FORMAT "%d" - -#define LAMMPS_TAGINT LAMMPS_INT -#define LAMMPS_TAGINT_2D LAMMPS_INT_2D -#define LAMMPS_BIGINT LAMMPS_INT -#define LAMMPS_BIGINT_2D LAMMPS_INT_2D - -#define IMGMASK 1023 -#define IMGMAX 512 -#define IMGBITS 10 -#define IMG2BITS 20 - -#endif - /** Data structure for packing 32-bit and 64-bit integers * into double (communication) buffers *