diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0f15bf02be..08522c6d15 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -73,7 +73,7 @@ Here is a checklist of steps you need to follow to submit a single file or user * If you want your contribution to be added as a user-contributed feature, and it is a single file (actually a `.cpp` and `.h` file) it can be rapidly added to the USER-MISC directory. Include the one-line entry to add to the USER-MISC/README file in that directory, along with the 2 source files. You can do this multiple times if you wish to contribute several individual features. * If you want your contribution to be added as a user-contribution and it is several related features, it is probably best to make it a user package directory with a name like USER-FOO. In addition to your new files, the directory should contain a README text file. The README should contain your name and contact information and a brief description of what your new package does. If your files depend on other LAMMPS style files also being installed (e.g. because your file is a derived class from the other LAMMPS class), then an Install.sh file is also needed to check for those dependencies. See other README and Install.sh files in other USER directories as examples. Send us a tarball of this USER-FOO directory. * Your new source files need to have the LAMMPS copyright, GPL notice, and your name and email address at the top, like other user-contributed LAMMPS source files. They need to create a class that is inside the LAMMPS namespace. If the file is for one of the USER packages, including USER-MISC, then we are not as picky about the coding style (see above). I.e. the files do not need to be in the same stylistic format and syntax as other LAMMPS files, though that would be nice for developers as well as users who try to read your code. -* You **must** also create or extend a documentation file for each new command or style you are adding to LAMMPS. For simplicity and convenience, the documentation of groups of closely related commands or styles may be combined into a single file. This will be one file for a single-file feature. For a package, it might be several files. These are files in the [reStructuredText](https://docutils.sourceforge.io/rst.html) markup language, that are then converted to HTML and PDF. The tools for this conversion are included in the source distribution, and the translation can be as simple as doing "make html pdf" in the doc folder. Thus the documentation source files must be in the same format and style as other `.rst` files in the lammps/doc/src directory for similar commands and styles; use one or more of them as a starting point. An introduction to reStructuredText can be found at [https://docutils.sourceforge.io/docs/user/rst/quickstart.html](https://docutils.sourceforge.io/docs/user/rst/quickstart.html). As appropriate, the text files can include mathematical expressions in MathJAX markup or links to equations (see doc/Eqs/*.tex for examples, we auto-create the associated JPG files), or figures (see doc/JPG for examples), or even additional PDF files with further details (see doc/PDF for examples). The doc page should also include literature citations as appropriate; see the bottom of doc/fix_nh.rst for examples and the earlier part of the same file for how to format the cite itself. The "Restrictions" section of the doc page should indicate that your command is only available if LAMMPS is built with the appropriate USER-MISC or USER-FOO package. See other user package doc files for examples of how to do this. The prerequisite for building the HTML format files are Python 3.x and virtualenv. Please run at least `make html` and `make spelling` and carefully inspect and proofread the resulting HTML format doc page as well as the output produced to the screen. Make sure that all spelling errors are fixed or the necessary false positives are added to the `doc/utils/sphinx-config/false_positives.txt` file. For new styles, those usually also need to be added to lists on the respective overview pages. This can be checked for also with `make style_check`. +* You **must** also create or extend a documentation file for each new command or style you are adding to LAMMPS. For simplicity and convenience, the documentation of groups of closely related commands or styles may be combined into a single file. This will be one file for a single-file feature. For a package, it might be several files. These are files in the [reStructuredText](https://docutils.sourceforge.io/rst.html) markup language, that are then converted to HTML and PDF. The tools for this conversion are included in the source distribution, and the translation can be as simple as doing "make html pdf" in the doc folder. Thus the documentation source files must be in the same format and style as other `.rst` files in the lammps/doc/src directory for similar commands and styles; use one or more of them as a starting point. An introduction to reStructuredText can be found at [https://docutils.sourceforge.io/docs/user/rst/quickstart.html](https://docutils.sourceforge.io/docs/user/rst/quickstart.html). The text files can include mathematical expressions and symbol in ".. math::" sections or ":math:" expressions or figures (see doc/JPG for examples), or even additional PDF files with further details (see doc/PDF for examples). The doc page should also include literature citations as appropriate; see the bottom of doc/fix_nh.rst for examples and the earlier part of the same file for how to format the cite itself. The "Restrictions" section of the doc page should indicate that your command is only available if LAMMPS is built with the appropriate USER-MISC or USER-FOO package. See other user package doc files for examples of how to do this. The prerequisite for building the HTML format files are Python 3.x and virtualenv. Please run at least `make html`, `make pdf` and `make spelling` and carefully inspect and proofread the resulting HTML format doc page as well as the output produced to the screen. Make sure that all spelling errors are fixed or the necessary false positives are added to the `doc/utils/sphinx-config/false_positives.txt` file. For new styles, those usually also need to be added to lists on the respective overview pages. This can be checked for also with `make style_check`. * For a new package (or even a single command) you should include one or more example scripts demonstrating its use. These should run in no more than a couple minutes, even on a single processor, and not require large data files as input. See directories under examples/USER for examples of input scripts other users provided for their packages. These example inputs are also required for validating memory accesses and testing for memory leaks with valgrind * If there is a paper of yours describing your feature (either the algorithm/science behind the feature itself, or its initial usage, or its implementation in LAMMPS), you can add the citation to the *.cpp source file. See src/USER-EFF/atom_vec_electron.cpp for an example. A LaTeX citation is stored in a variable at the top of the file and a single line of code that references the variable is added to the constructor of the class. Whenever a user invokes your feature from their input script, this will cause LAMMPS to output the citation to a log.cite file and prompt the user to examine the file. Note that you should only use this for a paper you or your group authored. E.g. adding a cite in the code for a paper by Nose and Hoover if you write a fix that implements their integrator is not the intended usage. That kind of citation should just be in the doc page you provide. diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 13e1d1539f..faba3a5ce0 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -2,7 +2,7 @@ # CMake build system # This file is part of LAMMPS # Created by Christoph Junghans and Richard Berger -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.10) project(lammps CXX) set(SOVERSION 0) @@ -52,16 +52,19 @@ include(CheckCCompilerFlag) include(CheckIncludeFileCXX) if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict -std=c++11") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() -option(DISABLE_CXX11_REQUIREMENT "Disable check that requires C++11 for compiling LAMMPS" OFF) -if(DISABLE_CXX11_REQUIREMENT) - add_definitions(-DLAMMPS_CXX98) -# else() -# set(CMAKE_CXX_STANDARD 11) +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + if(NOT ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -ftree-vectorize -fexpensive-optimizations") + endif() endif() +# we require C++11 +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + # GNU compiler features if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") option(ENABLE_COVERAGE "Enable code coverage" OFF) @@ -131,9 +134,9 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC - USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF - USER-VTK USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) + USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REACTION + USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY + USER-UEF USER-VTK USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) option(PKG_${PKG} "Build ${PKG} Package" OFF) @@ -178,6 +181,7 @@ option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) if(BUILD_MPI) find_package(MPI REQUIRED) include_directories(${MPI_CXX_INCLUDE_PATH}) + add_definitions(-DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) list(APPEND LAMMPS_LINK_LIBS ${MPI_CXX_LIBRARIES}) option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF) if(LAMMPS_LONGLONG_TO_LONG) @@ -355,9 +359,6 @@ endforeach(HEADER) set(MATH_LIBRARIES "m" CACHE STRING "math library") mark_as_advanced( MATH_LIBRARIES ) include(CheckLibraryExists) -if (CMAKE_VERSION VERSION_LESS "3.4") - enable_language(C) # check_library_exists isn't supported without a C compiler before v3.4 -endif() # RB: disabled this check because it breaks with KOKKOS CUDA enabled #foreach(FUNC sin cos) # check_library_exists(${MATH_LIBRARIES} ${FUNC} "" FOUND_${FUNC}_${MATH_LIBRARIES}) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index dab9d51a3f..200d8fb51e 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -1,7 +1,4 @@ if(PKG_GPU) - if (CMAKE_VERSION VERSION_LESS "3.1") - message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") - endif() set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h ${GPU_SOURCES_DIR}/fix_gpu.h diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index de7116780b..8bcda84cdc 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -8,9 +8,6 @@ if(PKG_LATTE) endif() option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) if(DOWNLOAD_LATTE) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") - endif() if(CMAKE_GENERATOR STREQUAL "Ninja") message(FATAL_ERROR "Cannot build downloaded LATTE library with Ninja build tool") endif() diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index b442580583..99d98659ee 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -8,9 +8,6 @@ if(PKG_MSCG) endif() option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) if(DOWNLOAD_MSCG) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") - endif() if(CMAKE_GENERATOR STREQUAL "Ninja") message(FATAL_ERROR "Cannot build downloaded MSCG library with Ninja build tool") endif() diff --git a/cmake/Modules/Packages/USER-MOLFILE.cmake b/cmake/Modules/Packages/USER-MOLFILE.cmake index b8c4234d26..16ffc34994 100644 --- a/cmake/Modules/Packages/USER-MOLFILE.cmake +++ b/cmake/Modules/Packages/USER-MOLFILE.cmake @@ -1,8 +1,4 @@ if(PKG_USER-MOLFILE) - if (CMAKE_VERSION VERSION_LESS "3.10") # due to INTERFACE without a library - message(FATAL_ERROR "For configuring USER-MOLFILE you need CMake 3.10 or later") - endif() - set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") add_library(molfile INTERFACE) target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) diff --git a/doc/lammps.1 b/doc/lammps.1 index 08a282aac9..1368679d3c 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "27 February 2020" "2020-02-27" +.TH LAMMPS "3 March 2020" "2020-03-03" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index 8314afaa0e..939431c6b3 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -95,10 +95,8 @@ this directory or sub-directories within it that CMake creates. directory to un-install all packages. The purge removes all the \*.h files auto-generated by make. -You must have CMake version 2.8 or later on your system to build -LAMMPS. A handful of LAMMPS packages (KOKKOS, LATTE, MSCG) require a -later version. CMake will print a message telling you if a later -version is required. Installation instructions for CMake are below. +You must have CMake version 3.10 or later on your system to build +LAMMPS. Installation instructions for CMake are below. After the initial build, if you edit LAMMPS source files, or add your own new files to the source directory, you can just re-type make from diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 74c4e71dbd..a4064ee812 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -287,22 +287,29 @@ KOKKOS\_ARCH settings described below. Note that for CMake, these are really Kokkos variables, not LAMMPS variables. Hence you must use case-sensitive values, e.g. BDW, not bdw. +* AMDAVX = AMD 64-bit x86 CPUs +* EPYC = AMD EPYC Zen class CPUs * ARMv80 = ARMv8.0 Compatible CPU * ARMv81 = ARMv8.1 Compatible CPU * ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU -* BGQ = IBM Blue Gene/Q CPUs -* Power8 = IBM POWER8 CPUs -* Power9 = IBM POWER9 CPUs +* ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU +* WSM = Intel Westmere CPUs * SNB = Intel Sandy/Ivy Bridge CPUs * HSW = Intel Haswell CPUs * BDW = Intel Broadwell Xeon E-class CPUs * SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512) * KNC = Intel Knights Corner Xeon Phi * KNL = Intel Knights Landing Xeon Phi +* BGQ = IBM Blue Gene/Q CPUs +* Power7 = IBM POWER8 CPUs +* Power8 = IBM POWER8 CPUs +* Power9 = IBM POWER9 CPUs +* Kepler = NVIDIA Kepler default (generation CC 3.5) * Kepler30 = NVIDIA Kepler generation CC 3.0 * Kepler32 = NVIDIA Kepler generation CC 3.2 * Kepler35 = NVIDIA Kepler generation CC 3.5 * Kepler37 = NVIDIA Kepler generation CC 3.7 +* Maxwell = NVIDIA Maxwell default (generation CC 5.0) * Maxwell50 = NVIDIA Maxwell generation CC 5.0 * Maxwell52 = NVIDIA Maxwell generation CC 5.2 * Maxwell53 = NVIDIA Maxwell generation CC 5.3 diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index 1e668ee95d..5f835f76a0 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -23,11 +23,11 @@ explain how to do this for building both with CMake and make. C++11 standard compliance ------------------------------------------ -The LAMMPS developers plan to transition to make the C++11 standard the -minimum requirement for compiling LAMMPS. Currently this only applies to -some packages like KOKKOS while the rest aims to be compatible with the C++98 -standard. Most currently used compilers are compatible with C++11; some need -to set extra flags to enable C++11 compliance. Example for GNU c++: +A C++11 standard compatible compiler is a requirement for compiling LAMMPS. +LAMMPS version 3 March 2020 is the last version compatible with the previous +C++98 standard for the core code and most packages. Most currently used +C++ compilers are compatible with C++11, but some older ones may need extra +flags to enable C++11 compliance. Example for GNU c++ 4.8.x: .. code-block:: make diff --git a/doc/src/Commands_all.rst b/doc/src/Commands_all.rst index 721c5ece37..36ae112527 100644 --- a/doc/src/Commands_all.rst +++ b/doc/src/Commands_all.rst @@ -17,7 +17,7 @@ General commands An alphabetic list of all general LAMMPS commands. .. table_from_list:: - :columns: 6 + :columns: 5 * :doc:`angle_coeff ` * :doc:`angle_style ` diff --git a/doc/src/Commands_category.rst b/doc/src/Commands_category.rst index 00d06fed47..da40ada999 100644 --- a/doc/src/Commands_category.rst +++ b/doc/src/Commands_category.rst @@ -9,133 +9,161 @@ have their own pages where they are listed alphabetically. Initialization: ------------------------------ -* :doc:`newton `, -* :doc:`package `, -* :doc:`processors `, -* :doc:`suffix `, -* :doc:`units ` +.. table_from_list:: + :columns: 5 + + * :doc:`newton ` + * :doc:`package ` + * :doc:`processors ` + * :doc:`suffix ` + * :doc:`units ` Setup simulation box: ------------------------------ -* :doc:`boundary `, -* :doc:`box `, -* :doc:`change_box `, -* :doc:`create_box `, -* :doc:`dimension `, -* :doc:`lattice `, -* :doc:`region ` +.. table_from_list:: + :columns: 4 + + * :doc:`boundary ` + * :doc:`box ` + * :doc:`change_box ` + * :doc:`create_box ` + * :doc:`dimension ` + * :doc:`lattice ` + * :doc:`region ` Setup atoms: ------------------------------ -* :doc:`atom_modify `, -* :doc:`atom_style `, -* :doc:`balance `, -* :doc:`create_atoms `, -* :doc:`create_bonds `, -* :doc:`delete_atoms `, -* :doc:`delete_bonds `, -* :doc:`displace_atoms `, -* :doc:`group `, -* :doc:`mass `, -* :doc:`molecule `, -* :doc:`read_data `, -* :doc:`read_dump `, -* :doc:`read_restart `, -* :doc:`replicate `, -* :doc:`set `, -* :doc:`velocity ` +.. table_from_list:: + :columns: 4 + + * :doc:`atom_modify ` + * :doc:`atom_style ` + * :doc:`balance ` + * :doc:`create_atoms ` + * :doc:`create_bonds ` + * :doc:`delete_atoms ` + * :doc:`delete_bonds ` + * :doc:`displace_atoms ` + * :doc:`group ` + * :doc:`mass ` + * :doc:`molecule ` + * :doc:`read_data ` + * :doc:`read_dump ` + * :doc:`read_restart ` + * :doc:`replicate ` + * :doc:`set ` + * :doc:`velocity ` Force fields: ------------------------------ -* :doc:`angle_coeff `, -* :doc:`angle_style `, -* :doc:`bond_coeff `, -* :doc:`bond_style `, -* :doc:`bond_write `, -* :doc:`dielectric `, -* :doc:`dihedral_coeff `, -* :doc:`dihedral_style `, -* :doc:`improper_coeff `, -* :doc:`improper_style `, -* :doc:`kspace_modify `, -* :doc:`kspace_style `, -* :doc:`pair_coeff `, -* :doc:`pair_modify `, -* :doc:`pair_style `, -* :doc:`pair_write `, -* :doc:`special_bonds ` +.. table_from_list:: + :columns: 4 + + * :doc:`angle_coeff ` + * :doc:`angle_style ` + * :doc:`bond_coeff ` + * :doc:`bond_style ` + * :doc:`bond_write ` + * :doc:`dielectric ` + * :doc:`dihedral_coeff ` + * :doc:`dihedral_style ` + * :doc:`improper_coeff ` + * :doc:`improper_style ` + * :doc:`kspace_modify ` + * :doc:`kspace_style ` + * :doc:`pair_coeff ` + * :doc:`pair_modify ` + * :doc:`pair_style ` + * :doc:`pair_write ` + * :doc:`special_bonds ` Settings: ------------------------------ -* :doc:`comm_modify `, -* :doc:`comm_style `, -* :doc:`info `, -* :doc:`min_modify `, -* :doc:`min_style `, -* :doc:`neigh_modify `, -* :doc:`neighbor `, -* :doc:`partition `, -* :doc:`reset_timestep `, -* :doc:`run_style `, -* :doc:`timer `, -* :doc:`timestep ` +.. table_from_list:: + :columns: 4 + + * :doc:`comm_modify ` + * :doc:`comm_style ` + * :doc:`info ` + * :doc:`min_modify ` + * :doc:`min_style ` + * :doc:`neigh_modify ` + * :doc:`neighbor ` + * :doc:`partition ` + * :doc:`reset_timestep ` + * :doc:`run_style ` + * :doc:`timer ` + * :doc:`timestep ` Operations within timestepping (fixes) and diagnostics (computes): ------------------------------------------------------------------------------------------ -* :doc:`compute `, -* :doc:`compute_modify `, -* :doc:`fix `, -* :doc:`fix_modify `, -* :doc:`uncompute `, -* :doc:`unfix ` +.. table_from_list:: + :columns: 4 + + * :doc:`compute ` + * :doc:`compute_modify ` + * :doc:`fix ` + * :doc:`fix_modify ` + * :doc:`uncompute ` + * :doc:`unfix ` Output: ------------------------------ -* :doc:`dump image `, -* :doc:`dump movie `, -* :doc:`dump `, -* :doc:`dump_modify `, -* :doc:`restart `, -* :doc:`thermo `, -* :doc:`thermo_modify `, -* :doc:`thermo_style `, -* :doc:`undump `, -* :doc:`write_coeff `, -* :doc:`write_data `, -* :doc:`write_dump `, -* :doc:`write_restart ` +.. table_from_list:: + :columns: 4 + + * :doc:`dump image ` + * :doc:`dump movie ` + * :doc:`dump ` + * :doc:`dump_modify ` + * :doc:`restart ` + * :doc:`thermo ` + * :doc:`thermo_modify ` + * :doc:`thermo_style ` + * :doc:`undump ` + * :doc:`write_coeff ` + * :doc:`write_data ` + * :doc:`write_dump ` + * :doc:`write_restart ` Actions: ------------------------------ -* :doc:`minimize `, -* :doc:`neb `, -* :doc:`neb_spin `, -* :doc:`prd `, -* :doc:`rerun `, -* :doc:`run `, -* :doc:`tad `, -* :doc:`temper ` +.. table_from_list:: + :columns: 6 + + * :doc:`minimize ` + * :doc:`neb ` + * :doc:`neb_spin ` + * :doc:`prd ` + * :doc:`rerun ` + * :doc:`run ` + * :doc:`tad ` + * :doc:`temper ` Input script control: ------------------------------ -* :doc:`clear `, -* :doc:`echo `, -* :doc:`if `, -* :doc:`include `, -* :doc:`jump `, -* :doc:`label