diff --git a/.github/workflows/check-cpp23.yml b/.github/workflows/check-cpp23.yml new file mode 100644 index 0000000000..2cd53f2208 --- /dev/null +++ b/.github/workflows/check-cpp23.yml @@ -0,0 +1,92 @@ +# GitHub action to build LAMMPS on Linux with gcc and C++23 +name: "Check for C++23 Compatibility" + +on: + push: + branches: + - develop + pull_request: + branches: + - develop + + workflow_dispatch: + +jobs: + build: + name: Build with C++23 support enabled + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - name: Install extra packages + run: | + sudo apt-get update + sudo apt-get install -y ccache \ + libeigen3-dev \ + libcurl4-openssl-dev \ + mold \ + mpi-default-bin \ + mpi-default-dev \ + ninja-build \ + python3-dev + + - name: Create Build Environment + run: mkdir build + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: linux-cpp23-ccache-${{ github.sha }} + restore-keys: linux-cpp23-ccache- + + - name: Building LAMMPS via CMake + shell: bash + run: | + ccache -z + python3 -m venv linuxenv + source linuxenv/bin/activate + python3 -m pip install numpy + python3 -m pip install pyyaml + cmake -S cmake -B build \ + -C cmake/presets/most.cmake \ + -C cmake/presets/kokkos-openmp.cmake \ + -D CMAKE_CXX_STANDARD=23 \ + -D CMAKE_CXX_COMPILER=g++ \ + -D CMAKE_C_COMPILER=gcc \ + -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -D CMAKE_C_COMPILER_LAUNCHER=ccache \ + -D CMAKE_BUILD_TYPE=Debug \ + -D CMAKE_CXX_FLAGS_DEBUG="-Og -g" \ + -D DOWNLOAD_POTENTIALS=off \ + -D BUILD_MPI=on \ + -D BUILD_SHARED_LIBS=on \ + -D BUILD_TOOLS=off \ + -D ENABLE_TESTING=off \ + -D MLIAP_ENABLE_ACE=on \ + -D MLIAP_ENABLE_PYTHON=off \ + -D PKG_AWPMD=on \ + -D PKG_GPU=on \ + -D GPU_API=opencl \ + -D PKG_KOKKOS=on \ + -D PKG_LATBOLTZ=on \ + -D PKG_MDI=on \ + -D PKG_MANIFOLD=on \ + -D PKG_ML-PACE=on \ + -D PKG_ML-RANN=off \ + -D PKG_MOLFILE=on \ + -D PKG_RHEO=on \ + -D PKG_PTM=on \ + -D PKG_PYTHON=on \ + -D PKG_QTB=on \ + -D PKG_SMTBQ=on \ + -G Ninja + cmake --build build + ccache -s diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1bd387b5b9..afae18745f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -141,7 +141,7 @@ endif() # silence nvcc warnings if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) - set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma") + set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma -Xcudafe --diag_suppress=128") endif() # we require C++11 without extensions. Kokkos requires at least C++17 (currently) @@ -165,6 +165,7 @@ if(MSVC) add_compile_options(/wd4267) add_compile_options(/wd4250) add_compile_options(/EHsc) + add_compile_options(/utf-8) endif() add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() diff --git a/cmake/Modules/Packages/H5MD.cmake b/cmake/Modules/Packages/H5MD.cmake index 6f6922f13e..1e611b94e6 100644 --- a/cmake/Modules/Packages/H5MD.cmake +++ b/cmake/Modules/Packages/H5MD.cmake @@ -3,7 +3,7 @@ enable_language(C) # we don't use the parallel i/o interface. set(HDF5_PREFER_PARALLEL FALSE) -find_package(HDF5 REQUIRED) +find_package(HDF5 COMPONENTS C REQUIRED) # parallel HDF5 will import incompatible MPI headers with a serial build if((NOT BUILD_MPI) AND HDF5_IS_PARALLEL) diff --git a/doc/src/compute_composition_atom.rst b/doc/src/compute_composition_atom.rst index c3e6fb7c60..4b68e7c79e 100644 --- a/doc/src/compute_composition_atom.rst +++ b/doc/src/compute_composition_atom.rst @@ -88,6 +88,10 @@ too frequently. ---------- +.. include:: accel_styles.rst + +---------- + Output info """"""""""" diff --git a/doc/src/compute_pressure.rst b/doc/src/compute_pressure.rst index 439f701bd4..92dcdb307a 100644 --- a/doc/src/compute_pressure.rst +++ b/doc/src/compute_pressure.rst @@ -125,10 +125,6 @@ where thermo_temp is the ID of a similarly defined compute of style ---------- -.. include:: accel_styles.rst - ----------- - Output info """"""""""" diff --git a/doc/src/compute_rheo_property_atom.rst b/doc/src/compute_rheo_property_atom.rst index 2e905b97be..8686a0dec2 100644 --- a/doc/src/compute_rheo_property_atom.rst +++ b/doc/src/compute_rheo_property_atom.rst @@ -81,7 +81,7 @@ includes *xx*, *xy*, *yx*, and *yy*. In 3D, this includes *xx*, *xy*, *xz*, Many properties require their respective fixes, listed below in related commands, be defined. For instance, the *viscosity* attribute is the viscosity of a particle calculated by -:doc:`fix rheo/viscous `. The meaning of less obvious +:doc:`fix rheo/viscosity `. The meaning of less obvious properties is described below. The *phase* property indicates whether the particle is in a fluid state, diff --git a/doc/src/compute_temp_deform.rst b/doc/src/compute_temp_deform.rst index 1c8c2da096..abeb7041cc 100644 --- a/doc/src/compute_temp_deform.rst +++ b/doc/src/compute_temp_deform.rst @@ -128,6 +128,12 @@ See the :doc:`Howto thermostat ` page for a discussion of different ways to compute temperature and perform thermostatting. +---------- + +.. include:: accel_styles.rst + +---------- + Output info """"""""""" diff --git a/doc/src/compute_temp_partial.rst b/doc/src/compute_temp_partial.rst index d98558c159..43691c048e 100644 --- a/doc/src/compute_temp_partial.rst +++ b/doc/src/compute_temp_partial.rst @@ -82,12 +82,6 @@ See the :doc:`Howto thermostat ` page for a discussion of different ways to compute temperature and perform thermostatting. ----------- - -.. include:: accel_styles.rst - ----------- - Output info """"""""""" diff --git a/doc/src/fix_addforce.rst b/doc/src/fix_addforce.rst index 68a32695b7..2813270307 100644 --- a/doc/src/fix_addforce.rst +++ b/doc/src/fix_addforce.rst @@ -115,10 +115,6 @@ correctly, the minimization will not converge properly. ---------- -.. include:: accel_styles.rst - ----------- - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/fix_aveforce.rst b/doc/src/fix_aveforce.rst index ea535697f4..36f53ef571 100644 --- a/doc/src/fix_aveforce.rst +++ b/doc/src/fix_aveforce.rst @@ -71,10 +71,6 @@ to it. ---------- -.. include:: accel_styles.rst - ----------- - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/fix_nonaffine_displacement.rst b/doc/src/fix_nonaffine_displacement.rst index fd9830cc48..5fdd3ae772 100644 --- a/doc/src/fix_nonaffine_displacement.rst +++ b/doc/src/fix_nonaffine_displacement.rst @@ -102,7 +102,6 @@ zeroed. The *update* reference style implies the reference state will be updated *nstep* timesteps. The *offset* reference will update the reference state *nstep* timesteps before a multiple of *nevery* timesteps. - ---------- Restart, fix_modify, output, run start/stop, minimize info @@ -129,6 +128,12 @@ This compute is part of the EXTRA-FIX package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. +As this fix depends on a run including specific reference timesteps, it +currently does not update peratom values if used in conjunction with the +:doc:`rerun command ` since it cannot ensure the necessary reference +timesteps are included. + + Related commands """""""""""""""" diff --git a/doc/src/fix_nph_body.rst b/doc/src/fix_nph_body.rst index 9ee0bd7669..4cc6084ad1 100644 --- a/doc/src/fix_nph_body.rst +++ b/doc/src/fix_nph_body.rst @@ -79,8 +79,6 @@ It also means that changing attributes of *thermo_temp* or ---------- -.. include:: accel_styles.rst - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/fix_npt_body.rst b/doc/src/fix_npt_body.rst index 31ef1653b8..b1a7e56fe4 100644 --- a/doc/src/fix_npt_body.rst +++ b/doc/src/fix_npt_body.rst @@ -103,8 +103,6 @@ remaining thermal degrees of freedom, and the bias is added back in. ---------- -.. include:: accel_styles.rst - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/fix_nvt_body.rst b/doc/src/fix_nvt_body.rst index 4397159515..c3275a0e00 100644 --- a/doc/src/fix_nvt_body.rst +++ b/doc/src/fix_nvt_body.rst @@ -85,8 +85,6 @@ remaining thermal degrees of freedom, and the bias is added back in. ---------- -.. include:: accel_styles.rst - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/fix_pour.rst b/doc/src/fix_pour.rst index 3b4bb5c723..7986929745 100644 --- a/doc/src/fix_pour.rst +++ b/doc/src/fix_pour.rst @@ -155,6 +155,22 @@ many timesteps until the desired # of particles has been inserted. the :doc:`compute_modify dynamic/dof yes ` command for the temperature compute you are using. +.. admonition:: Implementation Notes + :class: Hint + + The exact insertion procedure depends on many factors (e.g. the range of + diameters inserted or whether molecules are being inserted). However, in + the simplest scenario of monodisperse atoms, the procedure works as + follows. First, the number of timesteps between two insertion events is + calculated as the time for a particle to fall through the insertion region, + accounting for gravity and any region motion. Next, the target number of + particles inserted per event (assuming no failed insertions due to overlaps) + is calculated as the product of the volume fraction and the volume of the + insertion region divided by the volume of a particle (or area in 2D). + Events are repeated until all N particles have been inserted, where + the final event is likely interrupted upon reaching N. Estimates of this + process are printed to the log/screen at the start of a run. + ---------- All other keywords are optional with defaults as shown below. diff --git a/doc/src/fix_rheo.rst b/doc/src/fix_rheo.rst index 2977662238..eb88ef0536 100644 --- a/doc/src/fix_rheo.rst +++ b/doc/src/fix_rheo.rst @@ -16,8 +16,7 @@ Syntax * kstyle = *quintic* or *RK0* or *RK1* or *RK2* * zmin = minimal number of neighbors for reproducing kernels * zero or more keyword/value pairs may be appended to args -* keyword = *thermal* or *interface/reconstruct* or *surface/detection* or - *shift* or *rho/sum* or *density* or *self/mass* or *speed/sound* +* keyword = *thermal* or *interface/reconstruct* or *surface/detection* or *shift* or *rho/sum* or *density* or *self/mass* or *speed/sound* .. parsed-literal:: diff --git a/doc/src/fix_wall_flow.rst b/doc/src/fix_wall_flow.rst index d498e57c63..ce2f204616 100644 --- a/doc/src/fix_wall_flow.rst +++ b/doc/src/fix_wall_flow.rst @@ -123,6 +123,12 @@ also be potentially mitigated by using more multiple walls. conservative as possible (every timestep if needed). Those are the default settings. +---------- + +.. include:: accel_styles.rst + +---------- + Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/min_style.rst b/doc/src/min_style.rst index b89ae6d398..bbf5236885 100644 --- a/doc/src/min_style.rst +++ b/doc/src/min_style.rst @@ -3,6 +3,8 @@ min_style cg command ==================== +Accelerator Variant: *cg/kk* + min_style hftn command ====================== diff --git a/doc/src/pair_coul.rst b/doc/src/pair_coul.rst index cccdd46694..17e9358754 100644 --- a/doc/src/pair_coul.rst +++ b/doc/src/pair_coul.rst @@ -182,16 +182,17 @@ coulomb styles in :doc:`hybrid pair styles `. .. versionadded:: TBD -Style *coul/ctip* computes the Coulomb interations as described in +Style *coul/ctip* computes the Coulomb interactions as described in :ref:`Plummer `. It uses the the damped shifted model as in -style *coul/dsf* but is further extended to the second derivative of -the potential and incorporates empirical charge shielding meant to -approximate the more expensive Coulomb integrals used in style *coul/streitz*. -More details can be found in the referenced paper. Like the style *coul/streitz*, -style *coul/ctip* is a variable charge potential and must be hybridized -with a short-range potential via the :doc:`pair_style hybrid/overlay ` -command. Charge equilibration must be performed with the :doc:`fix qeq/ctip -` command. For example: +style *coul/dsf* but is further extended to the second derivative of the +potential and incorporates empirical charge shielding meant to +approximate the more expensive Coulomb integrals used in style +*coul/streitz*. More details can be found in the referenced paper. Like +the style *coul/streitz*, style *coul/ctip* is a variable charge +potential and must be hybridized with a short-range potential via the +:doc:`pair_style hybrid/overlay ` command. Charge +equilibration must be performed with the :doc:`fix qeq/ctip ` +command. For example: .. code-block:: LAMMPS @@ -200,9 +201,9 @@ command. Charge equilibration must be performed with the :doc:`fix qeq/ctip pair_coeff * * coul/ctip NiO.ctip Ni O fix 1 all qeq/ctip 1 12.0 1.0e-8 100 coul/ctip cdamp 0.30 maxrepeat 10 -See the examples/ctip directory for an example input script using the CTIP -potential. An Ni-O CTIP and EAM/FS parametrization are included for use with -the example. +See the examples/ctip directory for an example input script using the +CTIP potential. An Ni-O CTIP and EAM/FS parameterization are included +for use with the example. ---------- diff --git a/doc/src/pair_coul_diel.rst b/doc/src/pair_coul_diel.rst index 77c00c633a..5b5b5f3501 100644 --- a/doc/src/pair_coul_diel.rst +++ b/doc/src/pair_coul_diel.rst @@ -71,6 +71,10 @@ The global cutoff (:math:`r_c`) specified in the pair_style command is used. ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_coul_slater.rst b/doc/src/pair_coul_slater.rst index 7abc1f8b07..7af1ec42c6 100644 --- a/doc/src/pair_coul_slater.rst +++ b/doc/src/pair_coul_slater.rst @@ -77,6 +77,10 @@ The global decay length of the charge (:math:`\lambda`) specified in the pair_st ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_granular.rst b/doc/src/pair_granular.rst index f061331497..e0f15ccd62 100644 --- a/doc/src/pair_granular.rst +++ b/doc/src/pair_granular.rst @@ -741,10 +741,6 @@ atom types. ---------- -.. include:: accel_styles.rst - ----------- - Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_mesodpd.rst b/doc/src/pair_mesodpd.rst index 28a398754f..6674b013ba 100644 --- a/doc/src/pair_mesodpd.rst +++ b/doc/src/pair_mesodpd.rst @@ -287,6 +287,10 @@ concentration profiles of the two chemical species as ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_mie.rst b/doc/src/pair_mie.rst index 6e9eec1f5c..0a0e1d9c32 100644 --- a/doc/src/pair_mie.rst +++ b/doc/src/pair_mie.rst @@ -62,6 +62,10 @@ cutoff specified in the pair_style command is used. ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_sph_heatconduction.rst b/doc/src/pair_sph_heatconduction.rst index e9004cb5a4..33472b64c7 100644 --- a/doc/src/pair_sph_heatconduction.rst +++ b/doc/src/pair_sph_heatconduction.rst @@ -39,6 +39,10 @@ above. ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_sph_lj.rst b/doc/src/pair_sph_lj.rst index 5ac7ab9c6b..4dbccc41de 100644 --- a/doc/src/pair_sph_lj.rst +++ b/doc/src/pair_sph_lj.rst @@ -43,6 +43,10 @@ above. ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/src/pair_sph_taitwater.rst b/doc/src/pair_sph_taitwater.rst index 79972660c4..f25b69a969 100644 --- a/doc/src/pair_sph_taitwater.rst +++ b/doc/src/pair_sph_taitwater.rst @@ -52,6 +52,10 @@ above. ---------- +.. include:: accel_styles.rst + +---------- + Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/doc/utils/check-styles.py b/doc/utils/check-styles.py index d9f7381473..8a5dae538f 100644 --- a/doc/utils/check-styles.py +++ b/doc/utils/check-styles.py @@ -61,16 +61,50 @@ region = {} total = 0 index_pattern = re.compile(r"^.. index:: (compute|fix|pair_style|angle_style|bond_style|dihedral_style|improper_style|kspace_style|dump)\s+([a-zA-Z0-9/_]+)$") +accel_pattern = re.compile(r"^.. include::\s+accel_styles.rst$") style_pattern = re.compile(r"(.+)Style\((.+),(.+)\)") +cmd_pattern = re.compile(r"^.. index:: ([a-zA-Z0-9/_]+)$") upper = re.compile("[A-Z]+") -gpu = re.compile("(.+)/gpu$") -intel = re.compile("(.+)/intel$") -kokkos = re.compile("(.+)/kk$") -kokkos_skip = re.compile("(.+)/kk/(host|device)$") -omp = re.compile("(.+)/omp$") -opt = re.compile("(.+)/opt$") +gpu = re.compile("(.+)/gpu\\s*$") +intel = re.compile("(.+)/intel\\s*$") +kokkos = re.compile("(.+)/kk$\\s*") +kokkos_skip = re.compile("(.+)/kk/(host|device)\\s*$") +omp = re.compile("(.+)/omp\\s*$") +opt = re.compile("(.+)/opt\\s*$") removed = re.compile("(.*)Deprecated$") +accel_pattern = re.compile(r"^.. include::\s+accel_styles.rst$") + +def require_accel_include(path): + found = False + needs = False + # handle exceptions + if path == "src/min_style.rst" : needs = True + if path == "src/atom_style.rst" : needs = True + # check file + with open(path, 'r') as reader: + for line in reader: + m = accel_pattern.match(line) + if m: found = True + m = index_pattern.match(line) + if m: + if gpu.match(line): needs = True + if omp.match(line): needs = True + if kokkos.match(line): needs = True + if intel.match(line): needs = True + if opt.match(line): needs = True + m = cmd_pattern.match(line) + if m: + if gpu.match(line): needs = True + if omp.match(line): needs = True + if kokkos.match(line): needs = True + if intel.match(line): needs = True + if opt.match(line): needs = True + if needs and not found: + print("Missing '.. include:: accel_style.rst' in file ", path) + if not needs and found: + print("Have '.. include:: accel_style.rst' without accelerated styles in file ", path) + def load_index_entries_in_file(path): entries = [] with open(path, 'r') as reader: @@ -82,6 +116,11 @@ def load_index_entries_in_file(path): entries.append((command_type, style)) return entries +def check_accel_includes(): + rst_files = glob(os.path.join(doc_dir, '*.rst')) + for f in rst_files: + require_accel_include(f) + def load_index_entries(): index = {'compute': set(), 'fix': set(), 'pair_style': set(), 'angle_style': set(), 'bond_style': set(), 'dihedral_style': set(), 'improper_style': set(), @@ -249,6 +288,8 @@ Total number of styles (including suffixes): %d""" \ len(fix), len(improper), len(integrate), len(kspace), \ len(minimize), len(pair), len(reader), len(region), total)) +check_accel_includes() + index = load_index_entries() total_index = 0 diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 70d6b4e323..2754e4bb1c 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -639,6 +639,7 @@ cstyle csvr ctest ctilde +ctip ctrl ctrn ctypes @@ -3664,6 +3665,7 @@ Tanmoy Tartakovsky taskset taubi +Tavenner taylor tb tchain diff --git a/examples/granregion/log.16Mar23.granregion.box.g++.1 b/examples/granregion/log.16Mar23.granregion.box.g++.1 deleted file mode 100644 index b7bdeda1d4..0000000000 --- a/examples/granregion/log.16Mar23.granregion.box.g++.1 +++ /dev/null @@ -1,484 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# pouring spheres into container box - -units lj -atom_style sphere -boundary f f f -dimension 3 -comm_modify vel yes - -region box block -10 10 -10 10 -10 10 units box -create_box 2 box -Created orthogonal box = (-10 -10 -10) to (10 10 10) - 1 by 1 by 1 MPI processor grid - -pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 -pair_coeff * * gran/hooke - -region container block -6 6 -6 6 -6 6 units box -fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 2 all nve/sphere -fix 3 all gravity 1.0 vector 0 0 -1 - -region slab block -2 2 -2 2 -2 2 units box -fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore -Particle insertion: 48 every 566 steps, 100 by step 1133 - -timestep 0.005 - -compute 1 all temp -compute_modify 1 dynamic/dof yes - -compute 2 all temp/sphere -compute_modify 2 dynamic/dof yes - -thermo 100 -thermo_style custom step atoms temp c_1 c_2 press -thermo_modify lost ignore -compute_modify thermo_temp dynamic/dof yes - -#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 -#dump_modify 2 pad 5 - -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65, bins = 31 31 31 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke, perpetual - attributes: half, newton on, size - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 0.5861 | 0.5861 | 0.5861 Mbytes - Step Atoms Temp c_1 c_2 Press - 0 0 0 0 0 0 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 100 30 0.803783 0.803783 0.39507978 0.0029137134 - 200 30 1.1967995 1.1967995 0.5882574 0.0043383984 - 300 30 1.2814686 1.2814686 0.62987441 0.0046453238 - 400 30 0.82331082 0.82331082 0.41173176 0.0029845017 - 500 30 0.7708462 0.7708462 0.38777784 0.0043831147 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 600 64 0.51564897 0.51564897 0.26631577 0.0040059368 - 700 64 0.57239348 0.57239348 0.29566901 0.0045075987 - 800 64 0.61837087 0.61837087 0.32195387 0.0048123564 - 900 64 0.53061888 0.53061888 0.28564763 0.0055906552 - 1000 64 0.496299 0.496299 0.26801572 0.0061169128 - 1100 64 0.46068308 0.46068308 0.24699057 0.0055717699 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 1200 99 0.39206225 0.39206225 0.21356546 0.0066294211 - 1300 99 0.38624966 0.38624966 0.21345854 0.0049051051 - 1400 99 0.35615284 0.35615284 0.19785725 0.0046170772 - 1500 99 0.31486693 0.31486693 0.17429055 0.0064903432 - 1600 99 0.26369001 0.26369001 0.15095266 0.0045226847 - 1700 100 0.1925923 0.1925923 0.11308104 0.007362313 - 1800 100 0.13724978 0.13724978 0.083276845 0.0058136373 - 1900 100 0.077212636 0.077212636 0.053159386 0.0016509598 - 2000 100 0.065294031 0.065294031 0.04372752 0.0020346467 - 2100 100 0.057431398 0.057431398 0.037977068 0.0012681098 - 2200 100 0.059093045 0.059093045 0.037435193 0.00096610799 - 2300 100 0.03422338 0.03422338 0.025491304 0.00069886052 - 2400 100 0.020558284 0.020558284 0.016163009 0.0017260663 - 2500 100 0.015339709 0.015339709 0.012329236 0.00041308031 - 2600 100 0.012891354 0.012891354 0.009766054 0.00030356722 - 2700 100 0.0092634449 0.0092634449 0.0073580108 0.00077723051 - 2800 100 0.0073925841 0.0073925841 0.0059932218 0.00016466767 - 2900 100 0.0081228267 0.0081228267 0.006281761 0.00013828388 - 3000 100 0.0041833223 0.0041833223 0.0035147096 0.00013160599 - 3100 100 0.0035930775 0.0035930775 0.0030039922 0.00060639771 - 3200 100 0.0030824465 0.0030824465 0.0026541293 0.00047391014 - 3300 100 0.0035087522 0.0035087522 0.0027664508 0.00014080317 - 3400 100 0.0018537868 0.0018537868 0.0017099705 6.3326674e-05 - 3500 100 0.0015371228 0.0015371228 0.0014155433 0.00021612522 - 3600 100 0.001708556 0.001708556 0.0014369892 8.1034202e-05 - 3700 100 0.00095948652 0.00095948652 0.0009788528 3.4694023e-05 - 3800 100 0.00091875668 0.00091875668 0.00086805146 3.9373686e-05 - 3900 100 0.001557068 0.001557068 0.001159526 2.5178607e-05 - 4000 100 0.00062012451 0.00062012451 0.00066806922 5.6680551e-06 - 4100 100 0.00060940771 0.00060940771 0.00065614741 1.0137901e-05 - 4200 100 0.00059538437 0.00059538437 0.00064501521 7.3679744e-06 - 4300 100 0.00052946048 0.00052946048 0.00059353641 5.9225081e-06 - 4400 100 0.00051202281 0.00051202281 0.00057524772 3.6198435e-05 - 4500 100 0.00049986632 0.00049986632 0.00055754521 2.2275519e-05 - 4600 100 0.00048187334 0.00048187334 0.00053988815 2.2015243e-05 - 4700 100 0.00045261491 0.00045261491 0.00050298355 8.9681339e-05 - 4800 100 0.00034965427 0.00034965427 0.0004278781 1.0983535e-05 - 4900 100 0.00033555621 0.00033555621 0.00041435167 2.9266598e-05 - 5000 100 0.00031387148 0.00031387148 0.00039605781 2.5628425e-05 -Loop time of 0.073938 on 1 procs for 5000 steps with 100 atoms - -Performance: 29213677.752 tau/day, 67624.254 timesteps/s, 6.762 Matom-step/s -98.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0084547 | 0.0084547 | 0.0084547 | 0.0 | 11.43 -Neigh | 0.011399 | 0.011399 | 0.011399 | 0.0 | 15.42 -Comm | 0.00077205 | 0.00077205 | 0.00077205 | 0.0 | 1.04 -Output | 0.00042663 | 0.00042663 | 0.00042663 | 0.0 | 0.58 -Modify | 0.049692 | 0.049692 | 0.049692 | 0.0 | 67.21 -Other | | 0.003194 | | | 4.32 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 164 ave 164 max 164 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 164 -Ave neighs/atom = 1.64 -Neighbor list builds = 281 -Dangerous builds = 0 - -region container delete -variable theta equal (step-5000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -WARNING: Region properties for region container changed between runs, resetting its motion (src/GRANULAR/fix_wall_gran_region.cpp:101) -Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes - Step Atoms Temp c_1 c_2 Press - 5000 100 0.00031387148 0.00031387148 0.00039605781 2.6174978e-05 - 5100 100 0.54537023 0.54537023 0.30042175 0.0087427352 - 5200 100 0.57210852 0.57210852 0.3192468 0.0098134067 - 5300 100 0.7168108 0.7168108 0.38577893 0.011004584 - 5400 100 0.78895524 0.78895524 0.41889428 0.013555713 - 5500 100 0.87797874 0.87797874 0.45689223 0.01565356 - 5600 100 0.95424379 0.95424379 0.48830429 0.014707858 - 5700 100 1.0046012 1.0046012 0.51054927 0.01469179 - 5800 100 1.0371453 1.0371453 0.5262568 0.015576788 - 5900 100 1.0545743 1.0545743 0.5361173 0.01589889 - 6000 100 1.0932949 1.0932949 0.55402214 0.017484573 - 6100 100 1.1148364 1.1148364 0.56241126 0.01721788 - 6200 100 1.1315267 1.1315267 0.57050887 0.017961246 - 6300 100 1.1506124 1.1506124 0.58009471 0.017159062 - 6400 100 1.1663328 1.1663328 0.5876586 0.017935311 - 6500 100 1.1821086 1.1821086 0.59595161 0.018005316 - 6600 100 1.2039397 1.2039397 0.60567523 0.021604661 - 6700 100 1.2269912 1.2269912 0.61770225 0.018907995 - 6800 100 1.2447034 1.2447034 0.62576519 0.020537655 - 6900 100 1.2625323 1.2625323 0.63486698 0.02010613 - 7000 100 1.2617127 1.2617127 0.63318163 0.019670429 - 7100 100 1.260715 1.260715 0.63311254 0.01981063 - 7200 100 1.2790404 1.2790404 0.64079 0.020218912 - 7300 100 1.2760228 1.2760228 0.6395331 0.021749952 - 7400 100 1.2799657 1.2799657 0.64139078 0.020472917 - 7500 100 1.2846472 1.2846472 0.64343076 0.020610029 - 7600 100 1.2883963 1.2883963 0.6449186 0.020748906 - 7700 100 1.2926891 1.2926891 0.64684538 0.020599574 - 7800 100 1.3033565 1.3033565 0.65126214 0.021822145 - 7900 100 1.3025797 1.3025797 0.65069472 0.02121384 - 8000 100 1.3052551 1.3052551 0.65209898 0.021398725 - 8100 100 1.3069868 1.3069868 0.65304899 0.021246465 - 8200 100 1.3091964 1.3091964 0.65438143 0.021222398 - 8300 100 1.3101277 1.3101277 0.65518554 0.021329556 - 8400 100 1.3117162 1.3117162 0.65551056 0.021468306 - 8500 100 1.3143892 1.3143892 0.65683087 0.021610874 - 8600 100 1.3164123 1.3164123 0.65789423 0.021564818 - 8700 100 1.3186854 1.3186854 0.65914031 0.021745193 - 8800 100 1.3216944 1.3216944 0.66041385 0.022178553 - 8900 100 1.3207558 1.3207558 0.65988071 0.021810027 - 9000 100 1.3213131 1.3213131 0.66020938 0.021890893 - 9100 100 1.3224905 1.3224905 0.66088289 0.021824994 - 9200 100 1.3240681 1.3240681 0.66183168 0.021784616 - 9300 100 1.3254174 1.3254174 0.66279883 0.021664485 - 9400 100 1.3326916 1.3326916 0.66633358 0.021979709 - 9500 100 1.3405062 1.3405062 0.66975745 0.022238702 - 9600 100 1.3363695 1.3363695 0.66742377 0.022104646 - 9700 100 1.3363391 1.3363391 0.6673032 0.022066628 - 9800 100 1.334875 1.334875 0.6665532 0.021902669 - 9900 100 1.3339805 1.3339805 0.66614358 0.022018971 - 10000 100 1.3337897 1.3337897 0.66609803 0.022184385 -Loop time of 0.213875 on 1 procs for 5000 steps with 100 atoms - -Performance: 10099379.673 tau/day, 23378.194 timesteps/s, 2.338 Matom-step/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.031863 | 0.031863 | 0.031863 | 0.0 | 14.90 -Neigh | 0.026844 | 0.026844 | 0.026844 | 0.0 | 12.55 -Comm | 0.0011059 | 0.0011059 | 0.0011059 | 0.0 | 0.52 -Output | 0.00072907 | 0.00072907 | 0.00072907 | 0.0 | 0.34 -Modify | 0.14874 | 0.14874 | 0.14874 | 0.0 | 69.54 -Other | | 0.004595 | | | 2.15 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 186 ave 186 max 186 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 186 -Ave neighs/atom = 1.86 -Neighbor list builds = 626 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes - Step Atoms Temp c_1 c_2 Press - 10000 100 1.3337897 1.3337897 0.66609803 0.022303323 - 10100 100 0.29960521 0.29960521 0.17535846 0.0099382421 - 10200 100 0.15737069 0.15737069 0.1024212 0.0045555648 - 10300 100 0.087501771 0.087501771 0.070895975 0.00093482858 - 10400 100 0.069967301 0.069967301 0.059253397 0.0008760803 - 10500 100 0.056137153 0.056137153 0.047810947 0.0009202993 - 10600 100 0.046835352 0.046835352 0.039400006 0.0011343063 - 10700 100 0.035422167 0.035422167 0.030746587 0.00081816474 - 10800 100 0.029180739 0.029180739 0.02627693 0.00039292712 - 10900 100 0.025094915 0.025094915 0.023244435 0.00044742245 - 11000 100 0.018014893 0.018014893 0.016862375 0.00017018411 - 11100 100 0.014549072 0.014549072 0.014551468 0.00020988549 - 11200 100 0.012586232 0.012586232 0.012569333 0.00019035396 - 11300 100 0.01003586 0.01003586 0.010253286 0.0004598214 - 11400 100 0.0067515743 0.0067515743 0.0069569741 0.00040592883 - 11500 100 0.0057834612 0.0057834612 0.0060790719 0.00013993531 - 11600 100 0.005496335 0.005496335 0.0056855922 0.00013419698 - 11700 100 0.0051524178 0.0051524178 0.0053354591 7.4388594e-05 - 11800 100 0.004911096 0.004911096 0.0051415984 0.00010665621 - 11900 100 0.004687138 0.004687138 0.0049520306 6.7492552e-05 - 12000 100 0.0041516495 0.0041516495 0.0044351666 4.3841199e-05 - 12100 100 0.0033948026 0.0033948026 0.0036851466 4.2010682e-05 - 12200 100 0.0029584231 0.0029584231 0.0031151054 5.1583068e-05 - 12300 100 0.0028401114 0.0028401114 0.0030094644 4.5499489e-05 - 12400 100 0.002650861 0.002650861 0.0027699066 0.00015370263 - 12500 100 0.0026018053 0.0026018053 0.0027178583 3.219734e-05 - 12600 100 0.0025788693 0.0025788693 0.0026939358 3.6615314e-05 - 12700 100 0.0024798907 0.0024798907 0.0026181033 3.0688648e-05 - 12800 100 0.0023930719 0.0023930719 0.0025491721 7.5200629e-05 - 12900 100 0.0022100795 0.0022100795 0.0024231125 2.3210159e-05 - 13000 100 0.0021267492 0.0021267492 0.0023312893 2.463758e-05 - 13100 100 0.0020732193 0.0020732193 0.0022673707 2.5656089e-05 - 13200 100 0.0020010659 0.0020010659 0.0021834293 2.4913608e-05 - 13300 100 0.0019645929 0.0019645929 0.0021311636 6.8209063e-05 - 13400 100 0.0019236711 0.0019236711 0.0020928899 2.3805429e-05 - 13500 100 0.001857137 0.001857137 0.0020387354 3.1316165e-05 - 13600 100 0.0018399111 0.0018399111 0.0020204586 2.27689e-05 - 13700 100 0.0016240252 0.0016240252 0.0017492695 0.00023180963 - 13800 100 0.0015856393 0.0015856393 0.0017164012 4.2480373e-05 - 13900 100 0.0014770352 0.0014770352 0.001571278 2.3192512e-05 - 14000 100 0.0013712974 0.0013712974 0.0014839763 4.7410142e-05 - 14100 100 0.0012396318 0.0012396318 0.0013778109 1.3867692e-05 - 14200 100 0.0011502319 0.0011502319 0.0012780584 0.00018410725 - 14300 100 0.0011020896 0.0011020896 0.0012348357 7.8122446e-05 - 14400 100 0.0010486644 0.0010486644 0.0011483239 0.00015074963 - 14500 100 0.00094167471 0.00094167471 0.0010033809 1.9550083e-05 - 14600 100 0.00080775791 0.00080775791 0.00087434944 4.6043659e-05 - 14700 100 0.00076176039 0.00076176039 0.00083462461 8.1916038e-05 - 14800 100 0.00073637901 0.00073637901 0.00081306941 9.1126903e-06 - 14900 100 0.00072682383 0.00072682383 0.00079396231 8.9944449e-06 - 15000 100 0.00070207518 0.00070207518 0.00077168127 2.2155171e-05 -Loop time of 0.0756704 on 1 procs for 5000 steps with 100 atoms - -Performance: 28544845.995 tau/day, 66076.032 timesteps/s, 6.608 Matom-step/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0079484 | 0.0079484 | 0.0079484 | 0.0 | 10.50 -Neigh | 0.0043035 | 0.0043035 | 0.0043035 | 0.0 | 5.69 -Comm | 0.00064796 | 0.00064796 | 0.00064796 | 0.0 | 0.86 -Output | 0.00044137 | 0.00044137 | 0.00044137 | 0.0 | 0.58 -Modify | 0.059329 | 0.059329 | 0.059329 | 0.0 | 78.40 -Other | | 0.003 | | | 3.97 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 165 ave 165 max 165 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 165 -Ave neighs/atom = 1.65 -Neighbor list builds = 101 -Dangerous builds = 0 - -region container delete -variable theta equal (step-15000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes - Step Atoms Temp c_1 c_2 Press - 15000 100 0.00070207518 0.00070207518 0.00077168127 2.0192237e-05 - 15100 100 1.1160127 1.1160127 0.69939857 0.01822663 - 15200 100 1.2546016 1.2546016 0.78819474 0.017013321 - 15300 100 1.1930613 1.1930613 0.77429911 0.015607175 - 15400 100 1.3791371 1.3791371 0.87875984 0.018478669 - 15500 100 1.6063158 1.6063158 0.98587325 0.027330546 - 15600 100 1.7719925 1.7719925 1.0773314 0.025651867 - 15700 100 1.8053439 1.8053439 1.0934572 0.033790716 - 15800 100 1.959016 1.959016 1.1465659 0.033715025 - 15900 100 2.1365654 2.1365654 1.2217718 0.03009529 - 16000 100 2.2883378 2.2883378 1.2768504 0.030582689 - 16100 100 2.4384012 2.4384012 1.3513708 0.031435936 - 16200 100 2.3571308 2.3571308 1.29989 0.034824253 - 16300 100 2.4671092 2.4671092 1.3516798 0.032364282 - 16400 100 2.4411936 2.4411936 1.3385743 0.031890134 - 16500 100 2.4930545 2.4930545 1.3635435 0.032601452 - 16600 100 2.5771906 2.5771906 1.4113993 0.034547128 - 16700 100 2.723199 2.723199 1.4769168 0.036582811 - 16800 100 2.8616886 2.8616886 1.5379462 0.036224198 - 16900 100 2.9517942 2.9517942 1.5872824 0.038757052 - 17000 100 3.0150335 3.0150335 1.6337001 0.044031411 - 17100 100 3.2211536 3.2211536 1.7374532 0.041483093 - 17200 100 3.2509982 3.2509982 1.7512835 0.042718835 - 17300 100 3.262348 3.262348 1.7648674 0.049291835 - 17400 100 3.4050702 3.4050702 1.8352043 0.04435958 - 17500 100 3.5236051 3.5236051 1.9003369 0.045640904 - 17600 100 3.4005287 3.4005287 1.8404347 0.044832295 - 17700 100 3.3190992 3.3190992 1.8154147 0.046365998 - 17800 100 3.2981138 3.2981138 1.811389 0.04607132 - 17900 100 3.2839466 3.2839466 1.7863773 0.045628167 - 18000 100 3.1519747 3.1519747 1.7382103 0.041739193 - 18100 100 3.1205305 3.1205305 1.7101547 0.043511342 - 18200 100 3.2014874 3.2014874 1.746745 0.04452173 - 18300 100 3.2739622 3.2739622 1.7796276 0.041345823 - 18400 100 3.3157359 3.3157359 1.8158932 0.047414 - 18500 100 3.5592096 3.5592096 1.9307695 0.046458132 - 18600 100 3.6594352 3.6594352 1.9851626 0.046396953 - 18700 100 3.6392917 3.6392917 1.9701361 0.047272883 - 18800 100 3.8490892 3.8490892 2.0832481 0.052344106 - 18900 100 3.8465732 3.8465732 2.0790411 0.054203126 - 19000 100 4.010008 4.010008 2.1620722 0.054242542 - 19100 100 4.0417392 4.0417392 2.168506 0.066484948 - 19200 100 3.8791541 3.8791541 2.0791914 0.060788142 - 19300 100 4.1023603 4.1023603 2.1944127 0.056461298 - 19400 100 4.1294375 4.1294375 2.2009649 0.061099665 - 19500 100 3.9274112 3.9274112 2.0877398 0.066068401 - 19600 100 4.066229 4.066229 2.1678487 0.055961003 - 19700 100 3.9829257 3.9829257 2.1184329 0.061961838 - 19800 100 4.0303258 4.0303258 2.14544 0.053667616 - 19900 100 3.9385166 3.9385166 2.1074364 0.060804382 - 20000 100 3.8534401 3.8534401 2.0796496 0.057588336 -Loop time of 0.167801 on 1 procs for 5000 steps with 100 atoms - -Performance: 12872385.064 tau/day, 29797.188 timesteps/s, 2.980 Matom-step/s -99.1% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.013849 | 0.013849 | 0.013849 | 0.0 | 8.25 -Neigh | 0.038108 | 0.038108 | 0.038108 | 0.0 | 22.71 -Comm | 0.0011352 | 0.0011352 | 0.0011352 | 0.0 | 0.68 -Output | 0.00073125 | 0.00073125 | 0.00073125 | 0.0 | 0.44 -Modify | 0.10927 | 0.10927 | 0.10927 | 0.0 | 65.12 -Other | | 0.004703 | | | 2.80 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 157 ave 157 max 157 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 157 -Ave neighs/atom = 1.57 -Neighbor list builds = 914 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes - Step Atoms Temp c_1 c_2 Press - 20000 100 3.8534401 3.8534401 2.0796496 0.057176513 - 20100 100 1.2993548 1.2993548 0.81360425 0.016153186 - 20200 100 1.0761427 1.0761427 0.68479926 0.014383682 - 20300 100 0.95889127 0.95889127 0.61193887 0.01314653 - 20400 100 0.89684043 0.89684043 0.57475851 0.011106613 - 20500 100 0.85901565 0.85901565 0.54372093 0.015717834 - 20600 100 0.98438384 0.98438384 0.6079212 0.013965815 - 20700 100 1.1061789 1.1061789 0.66511277 0.013698526 - 20800 100 1.0615292 1.0615292 0.6269413 0.014496973 - 20900 100 0.92980037 0.92980037 0.54727184 0.014568574 - 21000 100 0.71248123 0.71248123 0.41945517 0.01199152 - 21100 100 0.34785801 0.34785801 0.21699877 0.0062324631 - 21200 100 0.2452514 0.2452514 0.15265503 0.0041094159 - 21300 100 0.22937209 0.22937209 0.13988978 0.0034016589 - 21400 100 0.17765021 0.17765021 0.11334596 0.0024169343 - 21500 100 0.11484505 0.11484505 0.078119393 0.0020987046 - 21600 100 0.077564645 0.077564645 0.056175123 0.002107237 - 21700 100 0.049571519 0.049571519 0.039920177 0.00099127481 - 21800 100 0.0403125 0.0403125 0.032827882 0.00074671903 - 21900 100 0.02735168 0.02735168 0.023877339 0.0018186225 - 22000 100 0.02218474 0.02218474 0.01893178 0.00061438633 - 22100 100 0.021701103 0.021701103 0.0179008 0.00068071664 - 22200 100 0.01777321 0.01777321 0.014521817 0.00045296506 - 22300 100 0.016056338 0.016056338 0.01280709 0.00038192299 - 22400 100 0.013344054 0.013344054 0.010788852 0.0002617289 - 22500 100 0.011625836 0.011625836 0.0094362641 0.00045947089 - 22600 100 0.0068875777 0.0068875777 0.0058858647 0.00028566999 - 22700 100 0.0054081662 0.0054081662 0.0049545239 0.00029291503 - 22800 100 0.0045080107 0.0045080107 0.0042362636 0.00015217816 - 22900 100 0.0038090552 0.0038090552 0.0036905284 0.00049430003 - 23000 100 0.003551951 0.003551951 0.0033639677 0.00022478393 - 23100 100 0.0033854012 0.0033854012 0.00317485 0.00015179604 - 23200 100 0.0032951003 0.0032951003 0.0029760374 0.00015363208 - 23300 100 0.0022995179 0.0022995179 0.0023224311 0.00018791799 - 23400 100 0.0020834178 0.0020834178 0.0021434342 0.00020683744 - 23500 100 0.0019221303 0.0019221303 0.0020227484 0.00018960984 - 23600 100 0.0018393381 0.0018393381 0.0019560681 0.00021375486 - 23700 100 0.0019027035 0.0019027035 0.0020047598 0.00010932204 - 23800 100 0.0023612063 0.0023612063 0.0021895633 6.7671176e-05 - 23900 100 0.0019570853 0.0019570853 0.0018847178 5.6761457e-05 - 24000 100 0.0013011744 0.0013011744 0.0013899106 3.8847148e-05 - 24100 100 0.001281115 0.001281115 0.0013737259 3.7559904e-05 - 24200 100 0.0012136262 0.0012136262 0.0013002937 6.8727546e-05 - 24300 100 0.0011789934 0.0011789934 0.0012399341 3.7633632e-05 - 24400 100 0.0011601514 0.0011601514 0.0012186534 4.0077907e-05 - 24500 100 0.0010660295 0.0010660295 0.0011419405 0.00015757237 - 24600 100 0.00098862453 0.00098862453 0.0010869455 4.5714503e-05 - 24700 100 0.00087647136 0.00087647136 0.00091405278 3.3129869e-05 - 24800 100 0.00063913046 0.00063913046 0.00072298864 3.5424308e-05 - 24900 100 0.00062195456 0.00062195456 0.00070527087 2.6201396e-05 - 25000 100 0.00057599538 0.00057599538 0.00065623226 2.0096103e-05 -Loop time of 0.0771328 on 1 procs for 5000 steps with 100 atoms - -Performance: 28003659.560 tau/day, 64823.286 timesteps/s, 6.482 Matom-step/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0090635 | 0.0090635 | 0.0090635 | 0.0 | 11.75 -Neigh | 0.012028 | 0.012028 | 0.012028 | 0.0 | 15.59 -Comm | 0.0008345 | 0.0008345 | 0.0008345 | 0.0 | 1.08 -Output | 0.00038777 | 0.00038777 | 0.00038777 | 0.0 | 0.50 -Modify | 0.051619 | 0.051619 | 0.051619 | 0.0 | 66.92 -Other | | 0.0032 | | | 4.15 - -Nlocal: 100 ave 100 max 100 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 158 ave 158 max 158 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 158 -Ave neighs/atom = 1.58 -Neighbor list builds = 310 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/granregion/log.16Mar23.granregion.box.g++.4 b/examples/granregion/log.16Mar23.granregion.box.g++.4 deleted file mode 100644 index 0874981da4..0000000000 --- a/examples/granregion/log.16Mar23.granregion.box.g++.4 +++ /dev/null @@ -1,484 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# pouring spheres into container box - -units lj -atom_style sphere -boundary f f f -dimension 3 -comm_modify vel yes - -region box block -10 10 -10 10 -10 10 units box -create_box 2 box -Created orthogonal box = (-10 -10 -10) to (10 10 10) - 1 by 2 by 2 MPI processor grid - -pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 -pair_coeff * * gran/hooke - -region container block -6 6 -6 6 -6 6 units box -fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 2 all nve/sphere -fix 3 all gravity 1.0 vector 0 0 -1 - -region slab block -2 2 -2 2 -2 2 units box -fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore -Particle insertion: 48 every 566 steps, 100 by step 1133 - -timestep 0.005 - -compute 1 all temp -compute_modify 1 dynamic/dof yes - -compute 2 all temp/sphere -compute_modify 2 dynamic/dof yes - -thermo 100 -thermo_style custom step atoms temp c_1 c_2 press -thermo_modify lost ignore -compute_modify thermo_temp dynamic/dof yes - -#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 -#dump_modify 2 pad 5 - -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 1.3 - binsize = 0.65, bins = 31 31 31 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke, perpetual - attributes: half, newton on, size - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 0.4843 | 0.4843 | 0.4843 Mbytes - Step Atoms Temp c_1 c_2 Press - 0 0 0 0 0 0 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 100 30 0.803783 0.803783 0.39507978 0.0029137134 - 200 30 1.1967995 1.1967995 0.5882574 0.0043383984 - 300 30 1.2814686 1.2814686 0.62987441 0.0046453238 - 400 30 0.82331082 0.82331082 0.41173176 0.0029845017 - 500 30 0.7708462 0.7708462 0.38777784 0.0043831147 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 600 64 0.51564897 0.51564897 0.26631577 0.0040059368 - 700 64 0.57239348 0.57239348 0.29566901 0.0045075987 - 800 64 0.61837087 0.61837087 0.32195387 0.0048123564 - 900 64 0.53061888 0.53061888 0.28564763 0.0055906552 - 1000 64 0.496299 0.496299 0.26801572 0.0061169128 - 1100 64 0.46068308 0.46068308 0.24699057 0.0055717699 -WARNING: Fewer insertions than requested (src/GRANULAR/fix_pour.cpp:681) - 1200 99 0.39206225 0.39206225 0.21356546 0.0066294211 - 1300 99 0.38624966 0.38624966 0.21345854 0.0049051051 - 1400 99 0.35615284 0.35615284 0.19785725 0.0046170772 - 1500 99 0.31486693 0.31486693 0.17429055 0.0064903432 - 1600 99 0.26369001 0.26369001 0.15095266 0.0045226847 - 1700 100 0.1925923 0.1925923 0.11308104 0.007362313 - 1800 100 0.13724978 0.13724978 0.083276845 0.0058136373 - 1900 100 0.077212636 0.077212636 0.053159386 0.0016509598 - 2000 100 0.065294031 0.065294031 0.04372752 0.0020346467 - 2100 100 0.057431398 0.057431398 0.037977068 0.0012681098 - 2200 100 0.059093046 0.059093046 0.037435194 0.00096610935 - 2300 100 0.034223376 0.034223376 0.025491303 0.00069886041 - 2400 100 0.020558283 0.020558283 0.016163008 0.0017260646 - 2500 100 0.015339698 0.015339698 0.012329233 0.00041312351 - 2600 100 0.012891357 0.012891357 0.0097660566 0.00030356702 - 2700 100 0.0092631621 0.0092631621 0.0073576327 0.00077729311 - 2800 100 0.0073866488 0.0073866488 0.0060126175 0.00018677664 - 2900 100 0.0081122362 0.0081122362 0.0062557089 0.00013749542 - 3000 100 0.0042333757 0.0042333757 0.0035407672 0.00016515787 - 3100 100 0.0035433278 0.0035433278 0.0029683167 0.00033693479 - 3200 100 0.0030692964 0.0030692964 0.0026495167 0.00043739373 - 3300 100 0.0033703684 0.0033703684 0.0026931948 0.00014857157 - 3400 100 0.0018405709 0.0018405709 0.0016990035 6.0202278e-05 - 3500 100 0.0014788087 0.0014788087 0.0013889916 0.00016730937 - 3600 100 0.0015932961 0.0015932961 0.0013807898 0.0001418157 - 3700 100 0.00096238915 0.00096238915 0.00097931829 6.7974535e-05 - 3800 100 0.00093087985 0.00093087985 0.00087659377 0.0001504142 - 3900 100 0.0015825065 0.0015825065 0.0011708936 1.9583518e-05 - 4000 100 0.00062295367 0.00062295367 0.00067129665 3.9455653e-05 - 4100 100 0.00061259406 0.00061259406 0.00065710963 1.8540759e-05 - 4200 100 0.00059619666 0.00059619666 0.00064365219 7.3779336e-06 - 4300 100 0.00051191641 0.00051191641 0.00057870947 6.3349656e-06 - 4400 100 0.00050668587 0.00050668587 0.00057057233 6.2702376e-06 - 4500 100 0.00049474942 0.00049474942 0.00055151343 1.5746831e-05 - 4600 100 0.00049309932 0.00049309932 0.00054086323 6.1021041e-06 - 4700 100 0.00049263883 0.00049263883 0.00052677244 6.0964056e-06 - 4800 100 0.00041885021 0.00041885021 0.00047389202 9.5350789e-05 - 4900 100 0.00035596444 0.00035596444 0.00042522549 5.8036712e-05 - 5000 100 0.00032946897 0.00032946897 0.00040320773 6.5350005e-06 -Loop time of 0.0763179 on 4 procs for 5000 steps with 100 atoms - -Performance: 28302682.620 tau/day, 65515.469 timesteps/s, 6.552 Matom-step/s -96.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0010572 | 0.0039588 | 0.0074661 | 4.6 | 5.19 -Neigh | 0.0025868 | 0.0049885 | 0.0075283 | 3.4 | 6.54 -Comm | 0.011862 | 0.014631 | 0.018383 | 2.0 | 19.17 -Output | 0.0009702 | 0.0012326 | 0.0014234 | 0.5 | 1.62 -Modify | 0.0019843 | 0.018558 | 0.036592 | 12.2 | 24.32 -Other | | 0.03295 | | | 43.17 - -Nlocal: 25 ave 54 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 4.5 ave 10 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 40.5 ave 94 max 0 min -Histogram: 2 0 0 0 0 0 0 1 0 1 - -Total # of neighbors = 162 -Ave neighs/atom = 1.62 -Neighbor list builds = 281 -Dangerous builds = 0 - -region container delete -variable theta equal (step-5000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -WARNING: Region properties for region container changed between runs, resetting its motion (src/GRANULAR/fix_wall_gran_region.cpp:101) -Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes - Step Atoms Temp c_1 c_2 Press - 5000 100 0.00032946897 0.00032946897 0.00040320773 6.050219e-06 - 5100 100 0.54371575 0.54371575 0.29836301 0.008148168 - 5200 100 0.60281896 0.60281896 0.33161676 0.0083772071 - 5300 100 0.70823011 0.70823011 0.38289657 0.0099694209 - 5400 100 0.78467127 0.78467127 0.4133495 0.010119104 - 5500 100 0.85741178 0.85741178 0.44761254 0.013013239 - 5600 100 0.93241573 0.93241573 0.47879351 0.017769592 - 5700 100 1.019104 1.019104 0.51644461 0.015312937 - 5800 100 1.0550014 1.0550014 0.53450507 0.017227797 - 5900 100 1.0910946 1.0910946 0.55272891 0.017469625 - 6000 100 1.1275288 1.1275288 0.56906788 0.018958103 - 6100 100 1.1545017 1.1545017 0.58324166 0.019220208 - 6200 100 1.1815817 1.1815817 0.59552677 0.019397271 - 6300 100 1.1963931 1.1963931 0.60251664 0.018382058 - 6400 100 1.2084652 1.2084652 0.60776713 0.020027986 - 6500 100 1.2217215 1.2217215 0.61406339 0.021750945 - 6600 100 1.2364016 1.2364016 0.62124174 0.021701243 - 6700 100 1.2739954 1.2739954 0.63930766 0.02025277 - 6800 100 1.3032733 1.3032733 0.65268105 0.021684843 - 6900 100 1.3226653 1.3226653 0.66168772 0.021187963 - 7000 100 1.3464995 1.3464995 0.67431153 0.022066117 - 7100 100 1.3250485 1.3250485 0.66342366 0.02109487 - 7200 100 1.3384316 1.3384316 0.67035095 0.021554113 - 7300 100 1.3280234 1.3280234 0.66553439 0.020829435 - 7400 100 1.3218971 1.3218971 0.66186263 0.020882591 - 7500 100 1.3293858 1.3293858 0.66506462 0.020897778 - 7600 100 1.3386019 1.3386019 0.66909392 0.020754479 - 7700 100 1.3465327 1.3465327 0.67316081 0.021231547 - 7800 100 1.3510586 1.3510586 0.67531764 0.021053475 - 7900 100 1.3508987 1.3508987 0.67535907 0.020769633 - 8000 100 1.3575635 1.3575635 0.67875993 0.022020776 - 8100 100 1.3655144 1.3655144 0.68258066 0.021016999 - 8200 100 1.375187 1.375187 0.68732222 0.021385146 - 8300 100 1.3799568 1.3799568 0.69000134 0.02114428 - 8400 100 1.3755871 1.3755871 0.68757909 0.022395102 - 8500 100 1.3708345 1.3708345 0.68509834 0.021603853 - 8600 100 1.3689806 1.3689806 0.68388935 0.022127839 - 8700 100 1.3697516 1.3697516 0.68411868 0.02165119 - 8800 100 1.3700522 1.3700522 0.68423671 0.021554001 - 8900 100 1.3705045 1.3705045 0.68451935 0.021470392 - 9000 100 1.3715107 1.3715107 0.68506443 0.021789844 - 9100 100 1.3707806 1.3707806 0.68467539 0.021451331 - 9200 100 1.371112 1.371112 0.68485975 0.021479203 - 9300 100 1.3716851 1.3716851 0.68516034 0.021515076 - 9400 100 1.3719031 1.3719031 0.68529221 0.021502802 - 9500 100 1.3726759 1.3726759 0.68544012 0.021585119 - 9600 100 1.3746583 1.3746583 0.68636924 0.02206073 - 9700 100 1.3761662 1.3761662 0.68716579 0.021533719 - 9800 100 1.3760157 1.3760157 0.687092 0.02163129 - 9900 100 1.3762626 1.3762626 0.68726404 0.021707045 - 10000 100 1.376303 1.376303 0.68735031 0.022306557 -Loop time of 0.128472 on 4 procs for 5000 steps with 100 atoms - -Performance: 16812995.511 tau/day, 38918.971 timesteps/s, 3.892 Matom-step/s -98.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0012241 | 0.0085024 | 0.016023 | 7.8 | 6.62 -Neigh | 0.0051137 | 0.0079745 | 0.011012 | 3.2 | 6.21 -Comm | 0.0050448 | 0.009504 | 0.015048 | 4.6 | 7.40 -Output | 0.00090309 | 0.0014765 | 0.0019648 | 1.2 | 1.15 -Modify | 0.0072253 | 0.041211 | 0.076226 | 16.7 | 32.08 -Other | | 0.0598 | | | 46.55 - -Nlocal: 25 ave 51 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 3.25 ave 7 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 46 ave 101 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 184 -Ave neighs/atom = 1.84 -Neighbor list builds = 628 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes - Step Atoms Temp c_1 c_2 Press - 10000 100 1.376303 1.376303 0.68735031 0.022411506 - 10100 100 0.28192752 0.28192752 0.16298909 0.0041760951 - 10200 100 0.14576408 0.14576408 0.10117889 0.0058653094 - 10300 100 0.10070361 0.10070361 0.078060938 0.0041432979 - 10400 100 0.07455595 0.07455595 0.061163197 0.0029733745 - 10500 100 0.063531027 0.063531027 0.052515707 0.0015731241 - 10600 100 0.049259626 0.049259626 0.041321284 0.00073083104 - 10700 100 0.037377957 0.037377957 0.032017729 0.0022631642 - 10800 100 0.031849901 0.031849901 0.027079116 0.0014148618 - 10900 100 0.02795233 0.02795233 0.02461403 0.00037567522 - 11000 100 0.02597858 0.02597858 0.022516094 0.00054992645 - 11100 100 0.021812043 0.021812043 0.019276946 0.00043233309 - 11200 100 0.019318956 0.019318956 0.017224213 0.00035792964 - 11300 100 0.017760494 0.017760494 0.01578407 0.00056959435 - 11400 100 0.015485043 0.015485043 0.013703 0.00061308169 - 11500 100 0.015051781 0.015051781 0.012994991 0.00040607387 - 11600 100 0.012204953 0.012204953 0.01079191 0.00059482171 - 11700 100 0.011242847 0.011242847 0.0096811013 0.00018299476 - 11800 100 0.0089605707 0.0089605707 0.0075086629 0.0012779422 - 11900 100 0.0065544011 0.0065544011 0.0056480432 0.00039599272 - 12000 100 0.0048068901 0.0048068901 0.004185961 0.00022434097 - 12100 100 0.0045272524 0.0045272524 0.0039084556 7.8443821e-05 - 12200 100 0.0038926209 0.0038926209 0.0033949999 0.00011203445 - 12300 100 0.0034653 0.0034653 0.0030246557 0.00014999893 - 12400 100 0.0034031041 0.0034031041 0.0029879474 7.9628343e-05 - 12500 100 0.0032219984 0.0032219984 0.0028369239 6.1651251e-05 - 12600 100 0.0031148659 0.0031148659 0.0027543848 5.7332789e-05 - 12700 100 0.0027407824 0.0027407824 0.0024822578 5.150993e-05 - 12800 100 0.0026205294 0.0026205294 0.0023576698 8.896122e-05 - 12900 100 0.0025633289 0.0025633289 0.0023134486 7.0525939e-05 - 13000 100 0.0025434711 0.0025434711 0.0022833007 5.5638668e-05 - 13100 100 0.0025046562 0.0025046562 0.002227265 5.2772716e-05 - 13200 100 0.0023544645 0.0023544645 0.0021086805 0.00030775943 - 13300 100 0.0022163971 0.0022163971 0.0020107508 4.9204292e-05 - 13400 100 0.0021307794 0.0021307794 0.0019334987 4.8144132e-05 - 13500 100 0.0019891796 0.0019891796 0.0018128084 4.8532374e-05 - 13600 100 0.0018591538 0.0018591538 0.0016721703 4.4781385e-05 - 13700 100 0.001768055 0.001768055 0.001597222 1.6800418e-05 - 13800 100 0.001569014 0.001569014 0.0014331265 4.2982654e-05 - 13900 100 0.0013700893 0.0013700893 0.0012782771 4.8209662e-05 - 14000 100 0.0012398662 0.0012398662 0.0011606486 5.5766702e-05 - 14100 100 0.0011707267 0.0011707267 0.0010811523 3.4913501e-05 - 14200 100 0.0010483984 0.0010483984 0.0009831881 3.4742894e-05 - 14300 100 0.0010043196 0.0010043196 0.00092474592 3.4196115e-05 - 14400 100 0.00094238924 0.00094238924 0.00087181843 8.1414071e-05 - 14500 100 0.00093341457 0.00093341457 0.00086429224 3.3276909e-05 - 14600 100 0.00086042474 0.00086042474 0.00079524877 3.2260019e-05 - 14700 100 0.00080525469 0.00080525469 0.00075380989 2.8374703e-05 - 14800 100 0.00070848512 0.00070848512 0.0006762901 2.9937591e-05 - 14900 100 0.00060414588 0.00060414588 0.00058494979 2.5684401e-05 - 15000 100 0.00054251571 0.00054251571 0.00053643753 4.5496354e-05 -Loop time of 0.0553238 on 4 procs for 5000 steps with 100 atoms - -Performance: 39042861.362 tau/day, 90376.994 timesteps/s, 9.038 Matom-step/s -98.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.00085556 | 0.0028667 | 0.0052429 | 3.6 | 5.18 -Neigh | 0.00076731 | 0.0012173 | 0.0016987 | 1.3 | 2.20 -Comm | 0.0016497 | 0.0060965 | 0.010792 | 5.7 | 11.02 -Output | 0.00072675 | 0.00099509 | 0.0011615 | 0.0 | 1.80 -Modify | 0.00064371 | 0.014719 | 0.030427 | 11.6 | 26.61 -Other | | 0.02943 | | | 53.19 - -Nlocal: 25 ave 54 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 5 ave 11 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Neighs: 40 ave 88 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 160 -Ave neighs/atom = 1.6 -Neighbor list builds = 97 -Dangerous builds = 0 - -region container delete -variable theta equal (step-15000)*(4.0*PI/5000) -region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes - Step Atoms Temp c_1 c_2 Press - 15000 100 0.00054251571 0.00054251571 0.00053643753 4.3506263e-05 - 15100 100 1.1164435 1.1164435 0.7163854 0.017358175 - 15200 100 1.0384203 1.0384203 0.66790042 0.016095459 - 15300 100 1.0829984 1.0829984 0.712381 0.015915015 - 15400 100 1.4187366 1.4187366 0.89537718 0.023771032 - 15500 100 1.5397547 1.5397547 0.97895571 0.025145916 - 15600 100 1.7993339 1.7993339 1.1003794 0.026783317 - 15700 100 1.8858073 1.8858073 1.1481696 0.030802833 - 15800 100 1.9368129 1.9368129 1.1450129 0.032144729 - 15900 100 2.0379823 2.0379823 1.1738926 0.031969116 - 16000 100 2.0655671 2.0655671 1.187038 0.032395513 - 16100 100 2.1199141 2.1199141 1.2102937 0.028830059 - 16200 100 2.1819656 2.1819656 1.245147 0.029493813 - 16300 100 2.2451204 2.2451204 1.2726968 0.029915554 - 16400 100 2.1697892 2.1697892 1.2342734 0.027495983 - 16500 100 2.2689358 2.2689358 1.2710223 0.029516621 - 16600 100 2.3901976 2.3901976 1.3328992 0.030049751 - 16700 100 2.4731258 2.4731258 1.3763126 0.032663365 - 16800 100 2.5708338 2.5708338 1.4255635 0.032731991 - 16900 100 2.7232422 2.7232422 1.5006931 0.036649645 - 17000 100 2.901986 2.901986 1.5886643 0.037333791 - 17100 100 2.8787369 2.8787369 1.5752504 0.03582313 - 17200 100 3.1137189 3.1137189 1.6974538 0.041245422 - 17300 100 3.1805823 3.1805823 1.7370013 0.040766564 - 17400 100 3.3215703 3.3215703 1.8109954 0.044269306 - 17500 100 3.3767256 3.3767256 1.813696 0.048012575 - 17600 100 3.3618731 3.3618731 1.8004834 0.06103562 - 17700 100 3.2288285 3.2288285 1.7447885 0.042875761 - 17800 100 3.2545435 3.2545435 1.7617642 0.04661949 - 17900 100 3.1162969 3.1162969 1.6850561 0.040086156 - 18000 100 3.2053719 3.2053719 1.7132296 0.040657811 - 18100 100 3.2924625 3.2924625 1.7709303 0.048407939 - 18200 100 3.1682076 3.1682076 1.7136129 0.040996326 - 18300 100 3.2244534 3.2244534 1.7401102 0.043957312 - 18400 100 3.1470903 3.1470903 1.7171698 0.043123438 - 18500 100 3.2690021 3.2690021 1.7803818 0.042693323 - 18600 100 3.2566233 3.2566233 1.7670476 0.04776305 - 18700 100 3.384347 3.384347 1.8334885 0.04441225 - 18800 100 3.6479797 3.6479797 1.9565845 0.047454733 - 18900 100 3.6894531 3.6894531 1.9767079 0.053222159 - 19000 100 3.7867788 3.7867788 2.0265223 0.055923793 - 19100 100 3.9120999 3.9120999 2.0850815 0.053591707 - 19200 100 3.8255419 3.8255419 2.0517931 0.061034295 - 19300 100 3.764721 3.764721 2.0089969 0.068118255 - 19400 100 3.8604884 3.8604884 2.0640292 0.052825172 - 19500 100 3.7763823 3.7763823 2.0223758 0.054529616 - 19600 100 3.9158781 3.9158781 2.0873723 0.053130512 - 19700 100 3.6394071 3.6394071 1.9735106 0.047466529 - 19800 100 3.5409741 3.5409741 1.9335311 0.047317029 - 19900 100 3.5961407 3.5961407 1.954696 0.048093129 - 20000 100 3.4355899 3.4355899 1.8679902 0.0486077 -Loop time of 0.107854 on 4 procs for 5000 steps with 100 atoms - -Performance: 20026986.271 tau/day, 46358.765 timesteps/s, 4.636 Matom-step/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0025992 | 0.0042158 | 0.0061269 | 1.9 | 3.91 -Neigh | 0.0089595 | 0.011254 | 0.012853 | 1.3 | 10.43 -Comm | 0.020408 | 0.022579 | 0.024669 | 1.4 | 20.94 -Output | 0.0010271 | 0.0011457 | 0.0012268 | 0.2 | 1.06 -Modify | 0.019454 | 0.032696 | 0.040003 | 4.4 | 30.31 -Other | | 0.03596 | | | 33.34 - -Nlocal: 25 ave 36 max 16 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 5.5 ave 8 max 2 min -Histogram: 1 0 0 0 0 1 0 0 1 1 -Neighs: 34.25 ave 48 max 19 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 137 -Ave neighs/atom = 1.37 -Neighbor list builds = 908 -Dangerous builds = 0 - -region container delete -region container block -6 6 -6 6 -6 6 units box -run 5000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.734 | 5.735 | 5.735 Mbytes - Step Atoms Temp c_1 c_2 Press - 20000 100 3.4355899 3.4355899 1.8679902 0.047866781 - 20100 100 1.1677914 1.1677914 0.70763342 0.015645481 - 20200 100 0.99137326 0.99137326 0.61064707 0.012080974 - 20300 100 0.84603548 0.84603548 0.52093267 0.012501649 - 20400 100 0.82813609 0.82813609 0.50585936 0.010248184 - 20500 100 0.86524293 0.86524293 0.5210492 0.011145216 - 20600 100 0.92229302 0.92229302 0.54567614 0.012838894 - 20700 100 0.93499886 0.93499886 0.55161401 0.011618713 - 20800 100 0.95831407 0.95831407 0.56173113 0.014502297 - 20900 100 0.88486451 0.88486451 0.51926962 0.013847246 - 21000 100 0.66876325 0.66876325 0.39313901 0.010224296 - 21100 100 0.46578708 0.46578708 0.28086455 0.0089121873 - 21200 100 0.21445902 0.21445902 0.14749113 0.0033665892 - 21300 100 0.12935011 0.12935011 0.09319765 0.002811107 - 21400 100 0.10572326 0.10572326 0.075154962 0.0034728629 - 21500 100 0.10952604 0.10952604 0.073864376 0.0017411404 - 21600 100 0.074321422 0.074321422 0.051368858 0.0037915268 - 21700 100 0.043324694 0.043324694 0.032954769 0.00092476658 - 21800 100 0.034911155 0.034911155 0.026843877 0.00061350592 - 21900 100 0.02261818 0.02261818 0.018357224 0.00049800957 - 22000 100 0.015096211 0.015096211 0.01390442 0.00059260194 - 22100 100 0.016119209 0.016119209 0.013990821 0.00038431756 - 22200 100 0.012184692 0.012184692 0.011062653 0.00030466184 - 22300 100 0.0090526001 0.0090526001 0.0080893293 0.00082507232 - 22400 100 0.007155528 0.007155528 0.0067365227 0.00094740021 - 22500 100 0.0057433117 0.0057433117 0.0057438575 0.00016706605 - 22600 100 0.0053029734 0.0053029734 0.0050429137 0.00018457156 - 22700 100 0.0041888319 0.0041888319 0.0039979907 0.00029467329 - 22800 100 0.0046486843 0.0046486843 0.0042259456 0.00019395675 - 22900 100 0.0046414295 0.0046414295 0.0040659744 0.00016025205 - 23000 100 0.0033983576 0.0033983576 0.0033431909 0.00039998961 - 23100 100 0.0031212625 0.0031212625 0.0031113361 0.00024783655 - 23200 100 0.0026724347 0.0026724347 0.0026905233 0.00026001445 - 23300 100 0.0029222876 0.0029222876 0.002946198 0.00012385327 - 23400 100 0.0023944825 0.0023944825 0.0021829995 0.00016185776 - 23500 100 0.0020384082 0.0020384082 0.0019106613 9.2139544e-05 - 23600 100 0.0019773679 0.0019773679 0.0018577006 8.9169073e-05 - 23700 100 0.0018850072 0.0018850072 0.0017715658 9.1301463e-05 - 23800 100 0.0020857322 0.0020857322 0.001864009 7.4633597e-05 - 23900 100 0.0017616498 0.0017616498 0.001680563 4.8547939e-05 - 24000 100 0.0017183254 0.0017183254 0.0016568629 6.56741e-05 - 24100 100 0.0014311732 0.0014311732 0.0013829993 6.0743962e-05 - 24200 100 0.0013434756 0.0013434756 0.001315682 0.00025727478 - 24300 100 0.0012855885 0.0012855885 0.0012558467 9.0130585e-05 - 24400 100 0.0012731213 0.0012731213 0.0012408428 8.2008231e-05 - 24500 100 0.0011333063 0.0011333063 0.001045815 8.8391061e-05 - 24600 100 0.0010560932 0.0010560932 0.00098304208 5.6725938e-05 - 24700 100 0.00097698038 0.00097698038 0.00092381967 7.1771848e-05 - 24800 100 0.00094316799 0.00094316799 0.00089343119 5.5558578e-05 - 24900 100 0.00082812377 0.00082812377 0.00076615512 5.8668812e-05 - 25000 100 0.00076097781 0.00076097781 0.00069462801 6.5742694e-05 -Loop time of 0.0523621 on 4 procs for 5000 steps with 100 atoms - -Performance: 41251226.669 tau/day, 95488.951 timesteps/s, 9.549 Matom-step/s -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0011166 | 0.0029573 | 0.0049613 | 3.3 | 5.65 -Neigh | 0.0026276 | 0.0033989 | 0.0041666 | 1.1 | 6.49 -Comm | 0.0054479 | 0.0084136 | 0.01182 | 2.9 | 16.07 -Output | 0.00070658 | 0.00092447 | 0.0010421 | 0.0 | 1.77 -Modify | 0.0015069 | 0.012796 | 0.025273 | 9.9 | 24.44 -Other | | 0.02387 | | | 45.59 - -Nlocal: 25 ave 55 max 0 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 6 ave 14 max 0 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 39.25 ave 88 max 0 min -Histogram: 2 0 0 0 0 0 0 1 0 1 - -Total # of neighbors = 157 -Ave neighs/atom = 1.57 -Neighbor list builds = 280 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/granregion/log.16Mar23.granregion.funnel.g++.1 b/examples/granregion/log.16Mar23.granregion.funnel.g++.1 deleted file mode 100644 index 0ead1ddd41..0000000000 --- a/examples/granregion/log.16Mar23.granregion.funnel.g++.1 +++ /dev/null @@ -1,635 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# pour particles into cone-shaped funnel, settle them, let them run out bottom - -variable name string funnel_pour - -thermo_modify flush yes -units si -variable PI equal 3.141592653589 -variable seed equal 14314 - -############################################### -# Geometry-related parameters -############################################### - -variable xlo equal 10 -variable xhi equal 40 -variable ylo equal 10 -variable yhi equal 40 -variable zlo equal -20 -variable zhi equal 50 - -variable xc equal 25 -variable yc equal 25 - -variable zconehi equal 50 -variable zconelo equal 10 -variable zcyllo equal 0 -variable radconelo equal 2 -variable radconehi equal 20 - -################################################ -# Particle sizes -################################################ - -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable skin equal ${rhi} -variable skin equal 0.5 - -############################################### -# Granular contact parameters -############################################### - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable density equal 1.0 -variable EYoung equal 10^5 -variable Poisson equal 2.0/7.0 -variable GShear equal ${EYoung}/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+0.285714285714286)) - -variable gravity equal 1.0 - -variable reff equal 0.5*(${rhi}+${rlo}) -variable reff equal 0.5*(0.5+${rlo}) -variable reff equal 0.5*(0.5+0.25) -variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 -variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 -variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 - -## Typical way to set kn, kt, etc.: -variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) -variable kt equal 4.0*${GShear}/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) - -variable a equal (-2.0*log(${coeffRes})/${PI})^2 -variable a equal (-2.0*log(0.1)/${PI})^2 -variable a equal (-2.0*log(0.1)/3.141592653589)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 903.503751814138*0.5 - -variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) - -variable dt equal ${tcol}*0.05 -variable dt equal 0.00210943016014969*0.05 -timestep ${dt} -timestep 0.000105471508007485 - -############################################### -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton off -atom_style sphere - -boundary p p f - -region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 40 ${zlo} ${zhi} -region boxreg block 10 40 10 40 -20 ${zhi} -region boxreg block 10 40 10 40 -20 50 -create_box 1 boxreg -Created orthogonal box = (10 10 -20) to (40 40 50) - 1 by 1 by 1 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 -pair_coeff * * - -neighbor ${skin} multi -neighbor 0.5 multi -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Balancing ... -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 30, bins = 1 1 3 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton off, size, history - pair build: half/size/multi/newtoff - stencil: full/multi/3d - bin: multi -WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210) -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -# insertion region for fix/pour - -region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box -region insreg cylinder z 25 ${yc} 10 30 50 side in units box -region insreg cylinder z 25 25 10 30 50 side in units box - -# define cone and cylinder regions - see lammps doc on region command -# note new open options - -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 2 - -region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open -region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 - -region hopreg union 2 conereg cylreg - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - - -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 3000 every 59965 steps, 2000 by step 1 - -#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke -WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:895) -thermo_modify flush yes lost warn - -# Initial run to fill up the cone - -run 20000 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 - -@Article{Intveld08, - author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, - title = {Accurate and Efficient Methods for Modeling Colloidal - Mixtures in an Explicit Solvent using Molecular Dynamics}, - journal = {Comput.\ Phys.\ Commut.}, - year = 2008, - volume = 179, - pages = {320--329} -} - -@article{Shire2020, - author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, - title = {{DEM} Simulations of Polydisperse Media: Efficient Contact - Detection Applied to Investigate the Quasi-Static Limit}, - journal = {Computational Particle Mechanics}, - year = {2020} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 6.648 | 6.648 | 6.648 Mbytes - Step CPU Atoms KinEng - 0 0 0 -0 - 1000 0.52844331 2000 -0 - 2000 0.76085445 2000 -0 - 3000 0.99183068 2000 -0 - 4000 1.2193085 2000 -0 - 5000 1.4439617 2000 -0 - 6000 1.6703511 2000 -0 - 7000 1.9053408 2000 -0 - 8000 2.1323525 2000 -0 - 9000 2.3566342 2000 -0 - 10000 2.5829638 2000 -0 - 11000 2.8106202 2000 -0 - 12000 3.0371473 2000 -0 - 13000 3.2621782 2000 -0 - 14000 3.4860689 2000 -0 - 15000 3.7138322 2000 -0 - 16000 3.9424002 2000 -0 - 17000 4.1703584 2000 -0 - 18000 4.3973348 2000 -0 - 19000 4.6213358 2000 -0 - 20000 4.8547603 2000 -0 -Loop time of 4.85478 on 1 procs for 20000 steps with 2000 atoms - -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.52375 | 0.52375 | 0.52375 | 0.0 | 10.79 -Neigh | 0.070018 | 0.070018 | 0.070018 | 0.0 | 1.44 -Comm | 0.011077 | 0.011077 | 0.011077 | 0.0 | 0.23 -Output | 0.00071321 | 0.00071321 | 0.00071321 | 0.0 | 0.01 -Modify | 4.1233 | 4.1233 | 4.1233 | 0.0 | 84.93 -Other | | 0.126 | | | 2.59 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1607 ave 1607 max 1607 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1607 -Ave neighs/atom = 0.8035 -Neighbor list builds = 71 -Dangerous builds = 0 -unfix ins -run 150000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 12.69 | 12.69 | 12.69 Mbytes - Step CPU Atoms KinEng - 20000 0 2000 6652.2957 - 21000 0.22761741 2000 6807.2201 - 22000 0.45508977 2000 6973.9359 - 23000 0.68132308 2000 7142.3648 - 24000 0.91084802 2000 7276.9717 - 25000 1.1397154 2000 7369.4191 - 26000 1.3724974 2000 7497.6526 - 27000 1.6037436 2000 7638.946 - 28000 1.8381254 2000 7780.0339 - 29000 2.0763695 2000 7881.8177 - 30000 2.3169444 2000 7967.2641 - 31000 2.5544704 2000 7994.9273 - 32000 2.7981688 2000 7937.0671 - 33000 3.0486439 2000 7774.0508 - 34000 3.3065315 2000 7591.1491 - 35000 3.5712927 2000 7357.5176 - 36000 3.8415508 2000 7147.2024 - 37000 4.1137466 2000 6979.1604 - 38000 4.3946186 2000 6813.2152 - 39000 4.6737386 2000 6660.2701 - 40000 4.9654287 2000 6502.8957 - 41000 5.2606376 2000 6324.3951 - 42000 5.5633065 2000 6132.7516 - 43000 5.8692745 2000 5913.1841 - 44000 6.1757115 2000 5732.2095 - 45000 6.4896845 2000 5508.8322 - 46000 6.8170163 2000 5306.8932 - 47000 7.1514543 2000 5152.0521 - 48000 7.4863157 2000 5028.2274 - 49000 7.8214974 2000 4896.102 - 50000 8.1600826 2000 4723.5189 - 51000 8.4984004 2000 4583.7526 - 52000 8.8500924 2000 4447.0187 - 53000 9.2046999 2000 4303.2307 - 54000 9.5724785 2000 4168.5251 - 55000 9.9479954 2000 4036.9704 - 56000 10.324666 2000 3901.1183 - 57000 10.708944 2000 3716.7071 - 58000 11.108887 2000 3473.5422 - 59000 11.515057 2000 3245.1223 - 60000 11.922119 2000 3039.7845 - 61000 12.331146 2000 2780.0187 - 62000 12.745147 2000 2577.3345 - 63000 13.169644 2000 2346.2488 - 64000 13.602869 2000 2116.7298 - 65000 14.044828 2000 1903.7828 - 66000 14.49159 2000 1631.1676 - 67000 14.953127 2000 1431.0198 - 68000 15.428874 2000 1212.875 - 69000 15.981012 2000 995.45046 - 70000 16.458356 2000 811.54766 - 71000 16.936094 2000 624.08622 - 72000 17.432306 2000 471.00862 - 73000 17.949423 2000 358.33486 - 74000 18.467878 2000 284.39416 - 75000 18.970599 2000 234.26671 - 76000 19.45957 2000 185.61836 - 77000 19.959792 2000 152.95918 - 78000 20.455734 2000 122.49023 - 79000 20.93849 2000 102.29396 - 80000 21.430632 2000 86.284684 - 81000 21.925932 2000 73.984781 - 82000 22.428573 2000 63.042918 - 83000 22.945552 2000 53.338428 - 84000 23.467102 2000 45.89585 - 85000 23.992243 2000 40.412826 - 86000 24.512956 2000 34.183381 - 87000 25.037944 2000 29.671524 - 88000 25.56622 2000 26.90414 - 89000 26.102251 2000 24.362631 - 90000 26.638165 2000 21.887341 - 91000 27.17863 2000 19.985662 - 92000 27.72662 2000 18.728162 - 93000 28.276842 2000 16.99941 - 94000 28.830281 2000 15.71941 - 95000 29.389744 2000 14.744057 - 96000 29.972451 2000 14.214918 - 97000 30.575245 2000 13.450182 - 98000 31.141552 2000 12.79222 - 99000 31.711177 2000 12.10595 - 100000 32.286609 2000 11.281863 - 101000 32.879692 2000 10.025419 - 102000 33.460265 2000 9.9574468 - 103000 34.040002 2000 9.4078117 - 104000 34.619096 2000 8.9079161 - 105000 35.199384 2000 8.6269302 - 106000 35.784782 2000 8.5512649 - 107000 36.37489 2000 8.4703948 - 108000 36.963891 2000 8.2747542 - 109000 37.551549 2000 8.2895118 - 110000 38.154561 2000 8.1785613 - 111000 38.749306 2000 7.8443234 - 112000 39.344241 2000 7.7436124 - 113000 39.938878 2000 7.8118604 - 114000 40.531935 2000 7.3806177 - 115000 41.130022 2000 7.0857235 - 116000 41.726772 2000 7.1346752 - 117000 42.322611 2000 7.0653751 - 118000 42.927287 2000 6.6314104 - 119000 43.524125 2000 6.2169614 - 120000 44.127912 2000 5.8988829 - 121000 44.724988 2000 5.4197277 - 122000 45.328051 2000 4.6381303 - 123000 45.93285 2000 4.4949206 - 124000 46.54149 2000 4.4261118 - 125000 47.301723 2000 4.4223703 - 126000 48.071689 2000 4.4858898 - 127000 48.834286 2000 4.3312536 - 128000 49.448737 2000 3.7124973 - 129000 50.169622 2000 3.5467396 - 130000 50.867494 2000 3.5104139 - 131000 51.585563 2000 3.5725612 - 132000 52.240372 2000 3.669455 - 133000 52.892134 2000 3.6168912 - 134000 53.50594 2000 3.3598517 - 135000 54.114565 2000 3.3743407 - 136000 54.725082 2000 3.1109764 - 137000 55.358218 2000 3.0720146 - 138000 55.977314 2000 3.1303776 - 139000 56.589791 2000 3.2052806 - 140000 57.212518 2000 2.8958882 - 141000 57.867102 2000 2.9931572 - 142000 58.690342 2000 3.0967832 - 143000 59.418639 2000 3.0576365 - 144000 60.035852 2000 3.2016943 - 145000 60.666569 2000 3.3817709 - 146000 61.368878 2000 3.4527239 - 147000 62.159309 2000 3.5928733 - 148000 62.879677 2000 3.7784682 - 149000 63.50784 2000 3.6587944 - 150000 64.129366 2000 3.7945669 - 151000 64.74324 2000 3.5551557 - 152000 65.360802 2000 3.6248848 - 153000 65.979475 2000 3.7361463 - 154000 66.593554 2000 3.8534319 - 155000 67.30899 2000 4.0101408 - 156000 68.295637 2000 3.7670652 - 157000 69.257704 2000 3.1487676 - 158000 70.085566 2000 2.980076 - 159000 70.914218 2000 3.0350592 - 160000 71.734553 2000 3.125389 - 161000 72.423913 2000 2.7516115 - 162000 73.264994 2000 2.413911 - 163000 74.126424 2000 2.297713 - 164000 75.050891 2000 2.3190806 - 165000 75.917063 2000 2.2868879 - 166000 76.783267 2000 2.1658547 - 167000 77.516683 2000 1.7511071 - 168000 78.319102 2000 1.4112478 - 169000 78.961239 2000 1.3623558 - 170000 79.578448 2000 1.3701579 -Loop time of 79.5785 on 1 procs for 150000 steps with 2000 atoms - -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 40.78 | 40.78 | 40.78 | 0.0 | 51.25 -Neigh | 0.6504 | 0.6504 | 0.6504 | 0.0 | 0.82 -Comm | 0.090848 | 0.090848 | 0.090848 | 0.0 | 0.11 -Output | 0.0059597 | 0.0059597 | 0.0059597 | 0.0 | 0.01 -Modify | 36.939 | 36.939 | 36.939 | 0.0 | 46.42 -Other | | 1.112 | | | 1.40 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 15308 ave 15308 max 15308 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 15308 -Ave neighs/atom = 7.654 -Neighbor list builds = 367 -Dangerous builds = 0 - -# remove "plug" - need to redefine cylinder region & union - -region cylreg delete -region hopreg delete -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 - -region hopreg union 2 cylreg conereg - -unfix hopper3 -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -run 100000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 12.69 | 12.69 | 12.69 Mbytes - Step CPU Atoms KinEng - 170000 0 2000 1.3701579 - 171000 0.71457906 2000 2.3724823 - 172000 1.4067557 2000 3.5881441 - 173000 2.0500352 2000 5.3771633 - 174000 2.8020081 2000 7.5896471 - 175000 3.467807 2000 10.77251 - 176000 4.064748 2000 14.806868 - 177000 4.6769962 2000 19.607624 - 178000 5.26259 2000 25.426227 - 179000 5.8424937 2000 32.23584 - 180000 6.4222206 2000 39.930468 - 181000 6.9910375 2000 47.686304 - 182000 7.5601562 2000 56.506806 - 183000 8.1243537 2000 66.514326 - 184000 8.6871123 2000 77.554644 - 185000 9.3749051 2000 89.224002 - 186000 10.008412 2000 102.07846 - 187000 10.668269 2000 116.08141 - 188000 11.26663 2000 130.97964 - 189000 11.874542 2000 146.77806 - 190000 12.436262 2000 162.79858 - 191000 12.973297 2000 179.02052 - 192000 13.532286 2000 196.26683 - 193000 14.056018 2000 214.38928 - 194000 14.593726 2000 232.32068 - 195000 15.115478 2000 251.74644 - 196000 15.637308 2000 272.25231 - 197000 16.159144 2000 294.64075 - 198000 16.676958 2000 318.32895 - 199000 17.186114 2000 342.44005 - 200000 17.706244 2000 368.35469 - 201000 18.221731 2000 395.2465 - 202000 18.739505 2000 422.63599 - 203000 19.259645 2000 450.45248 - 204000 19.769875 2000 479.60812 - 205000 20.293972 2000 510.44155 - 206000 20.806658 2000 543.25751 - 207000 21.348998 2000 577.35928 - 208000 21.888691 2000 612.29718 - 209000 22.421596 2000 647.8951 - 210000 22.922782 2000 683.79409 - 211000 23.473165 2000 720.36556 - 212000 24.008952 2000 759.27331 - 213000 24.56155 2000 798.27302 - 214000 25.062386 2000 837.93849 - 215000 25.563743 2000 877.92945 - 216000 26.066188 2000 919.62532 - 217000 26.584605 2000 962.83509 - 218000 27.15076 2000 1008.5243 - 219000 27.651387 2000 1054.5769 - 220000 28.146147 2000 1103.1843 - 221000 28.644239 2000 1153.0349 - 222000 29.141899 2000 1204.5599 - 223000 29.636644 2000 1257.1367 - 224000 30.13786 2000 1308.6735 -WARNING: Lost atoms: original 2000 current 1999 (src/thermo.cpp:487) - 225000 30.638093 1999 1360.1205 - 226000 31.127956 1998 1404.8405 - 227000 31.620394 1996 1448.4869 - 228000 32.108597 1992 1491.8112 - 229000 32.592048 1985 1518.7013 - 230000 33.067462 1971 1507.6699 - 231000 33.552874 1965 1533.5096 - 232000 34.037763 1948 1489.4128 - 233000 34.531058 1933 1477.4536 - 234000 35.01451 1915 1425.8398 - 235000 35.495081 1904 1410.1451 - 236000 35.963357 1892 1401.7595 - 237000 36.428382 1880 1368.893 - 238000 36.890459 1868 1341.8885 - 239000 37.358838 1850 1286.7968 - 240000 37.828549 1833 1219.5123 - 241000 38.29428 1820 1173.3608 - 242000 38.750021 1806 1106.0727 - 243000 39.206425 1788 1035.912 - 244000 39.690492 1779 1021.6147 - 245000 40.138287 1767 969.40032 - 246000 40.582591 1757 939.12022 - 247000 41.02378 1739 840.9396 - 248000 41.472154 1730 822.06575 - 249000 41.916625 1719 762.11057 - 250000 42.365019 1707 708.50308 - 251000 42.804617 1700 692.12647 - 252000 43.257666 1697 694.5812 - 253000 43.777656 1686 652.36951 - 254000 44.244131 1682 662.95256 - 255000 44.667759 1677 637.34619 - 256000 45.111967 1672 630.71277 - 257000 45.550194 1669 641.87365 - 258000 45.985106 1665 635.862 - 259000 46.42582 1664 658.5339 - 260000 46.860965 1662 669.95468 - 261000 47.298309 1660 676.93495 - 262000 47.748236 1657 681.72646 - 263000 48.215018 1655 687.4078 - 264000 48.657973 1651 681.61352 - 265000 49.076584 1647 673.20622 - 266000 49.497823 1644 677.30073 - 267000 49.917789 1641 671.05897 - 268000 50.347112 1639 689.55776 - 269000 50.778062 1637 711.98809 - 270000 51.226034 1633 705.29974 -Loop time of 51.2261 on 1 procs for 100000 steps with 1633 atoms - -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 27.462 | 27.462 | 27.462 | 0.0 | 53.61 -Neigh | 0.47887 | 0.47887 | 0.47887 | 0.0 | 0.93 -Comm | 0.058496 | 0.058496 | 0.058496 | 0.0 | 0.11 -Output | 0.0039167 | 0.0039167 | 0.0039167 | 0.0 | 0.01 -Modify | 22.566 | 22.566 | 22.566 | 0.0 | 44.05 -Other | | 0.6567 | | | 1.28 - -Nlocal: 1633 ave 1633 max 1633 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 11358 ave 11358 max 11358 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 11358 -Ave neighs/atom = 6.955297 -Neighbor list builds = 244 -Dangerous builds = 0 -Total wall time: 0:02:15 diff --git a/examples/granregion/log.16Mar23.granregion.funnel.g++.4 b/examples/granregion/log.16Mar23.granregion.funnel.g++.4 deleted file mode 100644 index 451e508fe3..0000000000 --- a/examples/granregion/log.16Mar23.granregion.funnel.g++.4 +++ /dev/null @@ -1,635 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# pour particles into cone-shaped funnel, settle them, let them run out bottom - -variable name string funnel_pour - -thermo_modify flush yes -units si -variable PI equal 3.141592653589 -variable seed equal 14314 - -############################################### -# Geometry-related parameters -############################################### - -variable xlo equal 10 -variable xhi equal 40 -variable ylo equal 10 -variable yhi equal 40 -variable zlo equal -20 -variable zhi equal 50 - -variable xc equal 25 -variable yc equal 25 - -variable zconehi equal 50 -variable zconelo equal 10 -variable zcyllo equal 0 -variable radconelo equal 2 -variable radconehi equal 20 - -################################################ -# Particle sizes -################################################ - -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable skin equal ${rhi} -variable skin equal 0.5 - -############################################### -# Granular contact parameters -############################################### - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable density equal 1.0 -variable EYoung equal 10^5 -variable Poisson equal 2.0/7.0 -variable GShear equal ${EYoung}/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+${Poisson})) -variable GShear equal 100000/(2*(1+0.285714285714286)) - -variable gravity equal 1.0 - -variable reff equal 0.5*(${rhi}+${rlo}) -variable reff equal 0.5*(0.5+${rlo}) -variable reff equal 0.5*(0.5+0.25) -variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*${PI}*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 -variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 -variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} -variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 -variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} -variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 - -## Typical way to set kn, kt, etc.: -variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) -variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) -variable kt equal 4.0*${GShear}/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-${Poisson}) -variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) - -variable a equal (-2.0*log(${coeffRes})/${PI})^2 -variable a equal (-2.0*log(0.1)/${PI})^2 -variable a equal (-2.0*log(0.1)/3.141592653589)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 903.503751814138*0.5 - -variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) -variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) - -variable dt equal ${tcol}*0.05 -variable dt equal 0.00210943016014969*0.05 -timestep ${dt} -timestep 0.000105471508007485 - -############################################### -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton off -atom_style sphere - -boundary p p f - -region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} -region boxreg block 10 40 10 40 ${zlo} ${zhi} -region boxreg block 10 40 10 40 -20 ${zhi} -region boxreg block 10 40 10 40 -20 50 -create_box 1 boxreg -Created orthogonal box = (10 10 -20) to (40 40 50) - 1 by 1 by 4 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 -pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 -pair_coeff * * - -neighbor ${skin} multi -neighbor 0.5 multi -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Balancing ... -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 30, bins = 1 1 3 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton off, size, history - pair build: half/size/multi/newtoff - stencil: full/multi/3d - bin: multi -WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210) -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -# insertion region for fix/pour - -region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box -region insreg cylinder z 25 ${yc} 10 30 50 side in units box -region insreg cylinder z 25 25 10 30 50 side in units box - -# define cone and cylinder regions - see lammps doc on region command -# note new open options - -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 2 - -region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open -region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 -region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 - -region hopreg union 2 conereg cylreg - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - - -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} -fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 3000 every 59965 steps, 2000 by step 1 - -#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke -WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:895) -thermo_modify flush yes lost warn - -# Initial run to fill up the cone - -run 20000 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 - -@Article{Intveld08, - author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, - title = {Accurate and Efficient Methods for Modeling Colloidal - Mixtures in an Explicit Solvent using Molecular Dynamics}, - journal = {Comput.\ Phys.\ Commut.}, - year = 2008, - volume = 179, - pages = {320--329} -} - -@article{Shire2020, - author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, - title = {{DEM} Simulations of Polydisperse Media: Efficient Contact - Detection Applied to Investigate the Quasi-Static Limit}, - journal = {Computational Particle Mechanics}, - year = {2020} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 6.049 | 6.049 | 6.049 Mbytes - Step CPU Atoms KinEng - 0 0 0 -0 - 1000 0.55467905 2000 -0 - 2000 0.77825615 2000 -0 - 3000 0.99338813 2000 -0 - 4000 1.2048904 2000 -0 - 5000 1.4073987 2000 -0 - 6000 1.6070452 2000 -0 - 7000 1.8056594 2000 -0 - 8000 1.9907326 2000 -0 - 9000 2.1732359 2000 -0 - 10000 2.3525506 2000 -0 - 11000 2.4202338 2000 -0 - 12000 2.4883928 2000 -0 - 13000 2.5587335 2000 -0 - 14000 2.6327822 2000 -0 - 15000 2.7095893 2000 -0 - 16000 2.7909032 2000 -0 - 17000 2.8763781 2000 -0 - 18000 2.9671807 2000 -0 - 19000 3.05783 2000 -0 - 20000 3.1546642 2000 -0 -Loop time of 3.1547 on 4 procs for 20000 steps with 2000 atoms - -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.045592 | 0.12271 | 0.29398 | 28.5 | 3.89 -Neigh | 0.011353 | 0.019401 | 0.032667 | 5.7 | 0.61 -Comm | 0.043342 | 0.09899 | 0.1539 | 14.6 | 3.14 -Output | 0.00097884 | 0.0019761 | 0.0024333 | 1.3 | 0.06 -Modify | 0.8096 | 1.2822 | 2.26 | 50.7 | 40.65 -Other | | 1.629 | | | 51.65 - -Nlocal: 500 ave 510 max 493 min -Histogram: 1 1 0 0 0 1 0 0 0 1 -Nghost: 154 ave 227 max 79 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Neighs: 415.5 ave 610 max 258 min -Histogram: 1 1 0 0 0 0 1 0 0 1 - -Total # of neighbors = 1662 -Ave neighs/atom = 0.831 -Neighbor list builds = 71 -Dangerous builds = 0 -unfix ins -run 150000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 12.33 | 12.5 | 12.68 Mbytes - Step CPU Atoms KinEng - 20000 0 2000 6652.2957 - 21000 0.068149031 2000 6807.2201 - 22000 0.13906682 2000 6973.9359 - 23000 0.21167896 2000 7142.3648 - 24000 0.28828482 2000 7276.9717 - 25000 0.36895294 2000 7369.4191 - 26000 0.45705665 2000 7497.6526 - 27000 0.55283141 2000 7638.946 - 28000 0.65163553 2000 7780.0339 - 29000 0.75208427 2000 7881.8177 - 30000 0.85956458 2000 7967.2641 - 31000 0.94177635 2000 7994.9273 - 32000 1.0345834 2000 7937.0672 - 33000 1.1315152 2000 7774.0508 - 34000 1.2426423 2000 7591.1511 - 35000 1.3578344 2000 7357.5032 - 36000 1.4893311 2000 7147.3776 - 37000 1.6240315 2000 6980.0719 - 38000 1.7664339 2000 6813.0872 - 39000 1.91857 2000 6657.0694 - 40000 2.0835393 2000 6505.1356 - 41000 2.2038908 2000 6330.3106 - 42000 2.330345 2000 6148.0635 - 43000 2.4596185 2000 5933.4808 - 44000 2.5912876 2000 5759.5507 - 45000 2.7316375 2000 5510.4729 - 46000 2.8777238 2000 5332.8673 - 47000 3.0357893 2000 5164.4197 - 48000 3.1931582 2000 5027.4099 - 49000 3.341993 2000 4904.6999 - 50000 3.4914327 2000 4712.0967 - 51000 3.6880787 2000 4575.8693 - 52000 3.8868278 2000 4443.4894 - 53000 4.0538325 2000 4272.1666 - 54000 4.2275386 2000 4113.2811 - 55000 4.3935565 2000 3974.5981 - 56000 4.6008319 2000 3863.5272 - 57000 4.8305792 2000 3676.8918 - 58000 5.1085757 2000 3446.5177 - 59000 5.3025239 2000 3227.8857 - 60000 5.5061134 2000 2997.8151 - 61000 5.6771065 2000 2745.5998 - 62000 5.8533046 2000 2530.2536 - 63000 6.0266287 2000 2352.9283 - 64000 6.1975348 2000 2102.4916 - 65000 6.375875 2000 1906.3034 - 66000 6.6008814 2000 1683.179 - 67000 6.8728018 2000 1440.0663 - 68000 7.1104699 2000 1220.2743 - 69000 7.3660591 2000 1012.4596 - 70000 7.6208232 2000 796.99913 - 71000 7.8459169 2000 631.28788 - 72000 8.0433916 2000 459.93641 - 73000 8.2225178 2000 359.28959 - 74000 8.3982201 2000 286.19292 - 75000 8.5769976 2000 235.53259 - 76000 8.7541865 2000 187.55737 - 77000 9.0010462 2000 144.42323 - 78000 9.2721615 2000 116.12613 - 79000 9.4992863 2000 95.625301 - 80000 9.7368141 2000 82.645629 - 81000 9.9462546 2000 72.124657 - 82000 10.15281 2000 64.266704 - 83000 10.365519 2000 56.7285 - 84000 10.55069 2000 49.44393 - 85000 10.764107 2000 42.434733 - 86000 10.993211 2000 37.816266 - 87000 11.243268 2000 33.892006 - 88000 11.487204 2000 29.898596 - 89000 11.684173 2000 26.4401 - 90000 11.880908 2000 23.329056 - 91000 12.078366 2000 21.291141 - 92000 12.347446 2000 19.494401 - 93000 12.582632 2000 18.157646 - 94000 12.833491 2000 17.176709 - 95000 13.109452 2000 16.059418 - 96000 13.34541 2000 15.524934 - 97000 13.604566 2000 13.887097 - 98000 13.816696 2000 12.98846 - 99000 14.043128 2000 12.325347 - 100000 14.35998 2000 11.567779 - 101000 14.584033 2000 11.097346 - 102000 14.793606 2000 10.981696 - 103000 15.011832 2000 10.914661 - 104000 15.223053 2000 10.183009 - 105000 15.435892 2000 9.9825606 - 106000 15.651946 2000 9.5164341 - 107000 15.870696 2000 9.4270389 - 108000 16.237826 2000 9.2752131 - 109000 16.525601 2000 8.580319 - 110000 16.74452 2000 8.3138082 - 111000 16.991527 2000 7.826454 - 112000 17.322972 2000 7.5958866 - 113000 17.649386 2000 7.2760339 - 114000 17.967676 2000 7.2879075 - 115000 18.27941 2000 6.8298855 - 116000 18.619507 2000 6.6964815 - 117000 18.979092 2000 6.490952 - 118000 19.303215 2000 6.0204595 - 119000 19.683409 2000 5.9293145 - 120000 20.034873 2000 5.7244854 - 121000 20.329374 2000 5.4221021 - 122000 20.670529 2000 4.8227757 - 123000 20.970073 2000 4.7914829 - 124000 21.297132 2000 4.6895984 - 125000 21.524346 2000 4.4951309 - 126000 21.742931 2000 4.5186107 - 127000 21.983039 2000 4.5989696 - 128000 22.203881 2000 4.5578225 - 129000 22.428553 2000 4.2667783 - 130000 22.662049 2000 4.0855202 - 131000 22.893977 2000 4.129346 - 132000 23.134398 2000 4.1720282 - 133000 23.367561 2000 4.3178701 - 134000 23.614361 2000 4.1047803 - 135000 23.840139 2000 3.856834 - 136000 24.095293 2000 4.0099605 - 137000 24.320746 2000 4.1104868 - 138000 24.555868 2000 4.1538456 - 139000 24.798604 2000 4.3079797 - 140000 25.125474 2000 4.0655486 - 141000 25.360498 2000 4.1257388 - 142000 25.597535 2000 4.1180413 - 143000 25.824173 2000 4.2764691 - 144000 26.082826 2000 4.3992832 - 145000 26.307002 2000 4.0978942 - 146000 26.532413 2000 4.1776805 - 147000 26.759469 2000 4.2261665 - 148000 26.989405 2000 4.4049886 - 149000 27.215826 2000 4.5559941 - 150000 27.443235 2000 4.7449947 - 151000 27.670397 2000 4.962558 - 152000 27.901368 2000 4.8517188 - 153000 28.148201 2000 4.9263912 - 154000 28.379071 2000 4.6200149 - 155000 28.621063 2000 4.8289752 - 156000 28.870192 2000 5.043235 - 157000 29.105614 2000 5.2399981 - 158000 29.330537 2000 5.494424 - 159000 29.558095 2000 4.9215021 - 160000 29.785841 2000 4.8938104 - 161000 30.011182 2000 5.0832139 - 162000 30.23825 2000 5.2281894 - 163000 30.464829 2000 5.4710487 - 164000 30.719854 2000 5.7311326 - 165000 31.038065 2000 5.9048483 - 166000 31.340672 2000 6.1177544 - 167000 31.649901 2000 4.0749212 - 168000 31.928746 2000 4.0087545 - 169000 32.153717 2000 2.8333927 - 170000 32.380796 2000 2.6131424 -Loop time of 32.3808 on 4 procs for 150000 steps with 2000 atoms - -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 6.997 | 12.251 | 14.992 | 89.3 | 37.83 -Neigh | 0.1358 | 0.20191 | 0.24331 | 9.0 | 0.62 -Comm | 1.2102 | 2.0432 | 2.4992 | 36.1 | 6.31 -Output | 0.0079578 | 0.012222 | 0.020149 | 4.4 | 0.04 -Modify | 7.1333 | 9.974 | 12.03 | 56.2 | 30.80 -Other | | 7.899 | | | 24.39 - -Nlocal: 500 ave 547 max 414 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 447.5 ave 678 max 201 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Neighs: 4478.75 ave 5715 max 3358 min -Histogram: 1 0 0 1 0 0 1 0 0 1 - -Total # of neighbors = 17915 -Ave neighs/atom = 8.9575 -Neighbor list builds = 375 -Dangerous builds = 0 - -# remove "plug" - need to redefine cylinder region & union - -region cylreg delete -region hopreg delete -region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open -region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 -region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 - -region hopreg union 2 cylreg conereg - -unfix hopper3 -fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg -fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg - -run 100000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 12.34 | 12.53 | 12.68 Mbytes - Step CPU Atoms KinEng - 170000 0 2000 2.6131424 - 171000 0.22601136 2000 3.529459 - 172000 0.45221016 2000 4.7071494 - 173000 0.68427839 2000 6.3480095 - 174000 0.91114205 2000 8.8055429 - 175000 1.1431874 2000 12.020148 - 176000 1.3732197 2000 16.079961 - 177000 1.6051751 2000 20.911155 - 178000 1.8346523 2000 26.447901 - 179000 2.0762403 2000 32.277607 - 180000 2.3420473 2000 39.374754 - 181000 2.6328957 2000 46.824434 - 182000 2.8669203 2000 54.755937 - 183000 3.1047916 2000 63.957816 - 184000 3.3310346 2000 74.217343 - 185000 3.5685015 2000 85.472859 - 186000 3.7955114 2000 97.586962 - 187000 4.0326183 2000 110.39658 - 188000 4.267244 2000 123.54524 - 189000 4.4987867 2000 137.45798 - 190000 4.7358838 2000 151.81094 - 191000 4.9494874 2000 166.91945 - 192000 5.1552044 2000 182.93379 - 193000 5.3547002 2000 200.32195 - 194000 5.5590208 2000 218.31863 - 195000 5.7575332 2000 237.22122 - 196000 5.9520759 2000 255.12936 - 197000 6.1457469 2000 273.87347 - 198000 6.341216 2000 293.82126 - 199000 6.5397944 2000 315.13067 - 200000 6.7418645 2000 337.18517 - 201000 6.9368245 2000 359.48438 - 202000 7.1538903 2000 382.76229 - 203000 7.3864641 2000 408.60338 - 204000 7.6731476 2000 435.15421 - 205000 7.9053649 2000 462.53542 - 206000 8.1480905 2000 490.85791 - 207000 8.3856692 2000 519.80878 - 208000 8.6034715 2000 550.44978 - 209000 8.8046602 2000 581.78594 - 210000 9.0044136 2000 615.02491 - 211000 9.2216638 2000 649.34564 - 212000 9.4269046 2000 684.24357 - 213000 9.6587854 2000 720.72627 - 214000 9.8596293 2000 757.96901 - 215000 10.05877 2000 796.8493 - 216000 10.256066 2000 836.58839 - 217000 10.48718 2000 877.81823 - 218000 10.694787 2000 920.81077 - 219000 10.891455 2000 963.77552 - 220000 11.147269 2000 1007.6868 - 221000 11.400829 2000 1054.0654 - 222000 11.65238 2000 1102.4934 - 223000 11.846807 2000 1151.1348 - 224000 12.040148 2000 1200.6622 - 225000 12.229259 2000 1251.5126 -WARNING: Lost atoms: original 2000 current 1999 (src/thermo.cpp:487) - 226000 12.420863 1999 1299.6349 - 227000 12.635492 1997 1338.1126 - 228000 12.827738 1987 1354.6661 - 229000 13.016127 1980 1369.1412 - 230000 13.211511 1970 1369.1776 - 231000 13.404909 1963 1377.7863 - 232000 13.602332 1950 1362.1028 - 233000 13.796103 1938 1344.4535 - 234000 13.988442 1924 1318.1397 - 235000 14.185813 1907 1269.3181 - 236000 14.378388 1895 1242.269 - 237000 14.568867 1881 1188.0729 - 238000 14.75676 1868 1162.8778 - 239000 14.947894 1854 1111.9974 - 240000 15.160004 1840 1050.2813 - 241000 15.340495 1831 1024.5782 - 242000 15.523597 1816 980.07203 - 243000 15.725193 1807 973.84606 - 244000 15.902549 1796 936.95947 - 245000 16.081382 1790 916.53685 - 246000 16.261081 1780 893.82891 - 247000 16.451727 1770 853.09944 - 248000 16.628641 1755 804.73429 - 249000 16.804105 1749 773.19378 - 250000 16.978354 1738 734.78084 - 251000 17.152527 1725 668.92528 - 252000 17.328291 1717 651.36038 - 253000 17.512786 1706 595.48412 - 254000 17.695931 1699 564.79829 - 255000 17.874221 1695 558.19897 - 256000 18.050516 1693 568.02459 - 257000 18.228697 1692 584.97166 - 258000 18.400925 1689 574.19701 - 259000 18.576449 1687 583.36332 - 260000 18.754006 1684 577.56927 - 261000 18.946091 1681 582.0375 - 262000 19.182957 1679 583.29644 - 263000 19.394795 1676 575.09831 - 264000 19.604668 1673 575.78272 - 265000 19.81517 1672 595.66572 - 266000 20.046658 1670 610.84262 - 267000 20.332684 1665 588.36505 - 268000 20.573691 1662 593.44831 - 269000 20.800574 1660 600.31964 - 270000 21.058624 1656 588.46212 -Loop time of 21.0587 on 4 procs for 100000 steps with 1656 atoms - -99.0% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.8632 | 8.4037 | 11.541 | 97.3 | 39.91 -Neigh | 0.13431 | 0.15665 | 0.17248 | 3.8 | 0.74 -Comm | 0.70516 | 1.4552 | 1.9637 | 40.7 | 6.91 -Output | 0.0030904 | 0.0079543 | 0.016722 | 5.9 | 0.04 -Modify | 5.3661 | 6.1781 | 6.8249 | 22.0 | 29.34 -Other | | 4.857 | | | 23.06 - -Nlocal: 414 ave 426 max 385 min -Histogram: 1 0 0 0 0 0 0 0 0 3 -Nghost: 408 ave 634 max 183 min -Histogram: 1 0 0 1 0 0 1 0 0 1 -Neighs: 3463 ave 4360 max 2354 min -Histogram: 1 0 0 1 0 0 0 0 1 1 - -Total # of neighbors = 13852 -Ave neighs/atom = 8.3647343 -Neighbor list builds = 255 -Dangerous builds = 0 -Total wall time: 0:00:56 diff --git a/examples/granregion/log.16Mar23.granregion.mixer.g++.1 b/examples/granregion/log.16Mar23.granregion.mixer.g++.1 deleted file mode 100644 index 3fc012d20c..0000000000 --- a/examples/granregion/log.16Mar23.granregion.mixer.g++.1 +++ /dev/null @@ -1,634 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -variable name string mixer - -thermo_modify flush yes -variable seed equal 14314 - -############################################### -# Particle parameters -################################################ - -variable rlo equal 0.3 -variable rhi equal 0.6 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.3 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.6 -variable skin equal ${rhi} -variable skin equal 0.6 - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable kn equal 10^5 -variable kt equal 0.2*${kn} -variable kt equal 0.2*100000 - -variable gravity equal 1.0 -variable density equal 1.0 - -variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 -variable a equal (-2.0*log(${coeffRes})/PI)^2 -variable a equal (-2.0*log(0.1)/PI)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 806.699778405191*0.5 - -variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) - -variable dt equal ${tcol}*0.02 -variable dt equal 0.00236257621510454*0.02 -timestep ${dt} -timestep 4.72515243020908e-05 - -############################################### - -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton on -atom_style sphere - -boundary p p f - -region boxreg block 0 20 0 20 0 20 -create_box 1 boxreg -Created orthogonal box = (0 0 0) to (20 20 20) - 1 by 1 by 1 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 -pair_coeff * * - -neighbor ${skin} multi -neighbor 0.6 multi -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Balancing ... -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 20, bins = 1 1 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/multi/newton - stencil: half/multi/3d - bin: multi -WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210) -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -region insreg cylinder z 10 10 8 10 18 side in units box -region cylreg cylinder z 10 10 10 0 20 side in units box - -variable theta equal (step/400000)*2*PI - -region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box -region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box - -region mixer intersect 3 cylreg b1 b2 side in - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - -fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer - -fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 -Particle insertion: 444 every 84653 steps, 1000 by step 169307 - -#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke v_theta -WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:895) -thermo_modify flush yes lost warn - -run 200000 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 - -@Article{Intveld08, - author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, - title = {Accurate and Efficient Methods for Modeling Colloidal - Mixtures in an Explicit Solvent using Molecular Dynamics}, - journal = {Comput.\ Phys.\ Commut.}, - year = 2008, - volume = 179, - pages = {320--329} -} - -@article{Shire2020, - author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, - title = {{DEM} Simulations of Polydisperse Media: Efficient Contact - Detection Applied to Investigate the Quasi-Static Limit}, - journal = {Computational Particle Mechanics}, - year = {2020} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.861 | 5.861 | 5.861 Mbytes - Step CPU Atoms KinEng v_theta - 0 0 0 -0 0 - 1000 0.11477344 444 -0 0.015707963 - 2000 0.21604269 444 -0 0.031415927 - 3000 0.31421365 444 -0 0.04712389 - 4000 0.41095902 444 -0 0.062831853 - 5000 0.50703042 444 -0 0.078539816 - 6000 0.60585007 444 -0 0.09424778 - 7000 0.70232419 444 -0 0.10995574 - 8000 0.80002622 444 -0 0.12566371 - 9000 0.89464008 444 -0 0.14137167 - 10000 0.99260726 444 -0 0.15707963 - 11000 1.090675 444 -0 0.1727876 - 12000 1.1878107 444 -0 0.18849556 - 13000 1.2860401 444 -0 0.20420352 - 14000 1.3830433 444 -0 0.21991149 - 15000 1.4834023 444 -0 0.23561945 - 16000 1.5799984 444 -0 0.25132741 - 17000 1.6758091 444 -0 0.26703538 - 18000 1.7713554 444 -0 0.28274334 - 19000 1.8684734 444 -0 0.2984513 - 20000 1.9661563 444 -0 0.31415927 - 21000 2.0629748 444 -0 0.32986723 - 22000 2.1575594 444 -0 0.34557519 - 23000 2.2530422 444 -0 0.36128316 - 24000 2.3525179 444 -0 0.37699112 - 25000 2.4494323 444 -0 0.39269908 - 26000 2.5454666 444 -0 0.40840704 - 27000 2.6402269 444 -0 0.42411501 - 28000 2.7364338 444 -0 0.43982297 - 29000 2.8349 444 -0 0.45553093 - 30000 2.9327959 444 -0 0.4712389 - 31000 3.0304534 444 -0 0.48694686 - 32000 3.1315005 444 -0 0.50265482 - 33000 3.2290307 444 -0 0.51836279 - 34000 3.3243787 444 -0 0.53407075 - 35000 3.4232964 444 -0 0.54977871 - 36000 3.5235978 444 -0 0.56548668 - 37000 3.6214101 444 -0 0.58119464 - 38000 3.7179412 444 -0 0.5969026 - 39000 3.8159856 444 -0 0.61261057 - 40000 3.9121916 444 -0 0.62831853 - 41000 4.0080794 444 -0 0.64402649 - 42000 4.1087349 444 -0 0.65973446 - 43000 4.2059697 444 -0 0.67544242 - 44000 4.3043867 444 -0 0.69115038 - 45000 4.4014253 444 -0 0.70685835 - 46000 4.5000241 444 -0 0.72256631 - 47000 4.5970258 444 -0 0.73827427 - 48000 4.6929243 444 -0 0.75398224 - 49000 4.7894702 444 -0 0.7696902 - 50000 4.8858098 444 -0 0.78539816 - 51000 4.985063 444 -0 0.80110613 - 52000 5.0863877 444 -0 0.81681409 - 53000 5.181301 444 -0 0.83252205 - 54000 5.2819523 444 -0 0.84823002 - 55000 5.3895357 444 -0 0.86393798 - 56000 5.5225568 444 -0 0.87964594 - 57000 5.6473901 444 -0 0.89535391 - 58000 5.7786123 444 -0 0.91106187 - 59000 5.8932617 444 -0 0.92676983 - 60000 6.004952 444 -0 0.9424778 - 61000 6.1168028 444 -0 0.95818576 - 62000 6.2274784 444 -0 0.97389372 - 63000 6.341172 444 -0 0.98960169 - 64000 6.4565154 444 -0 1.0053096 - 65000 6.5684785 444 -0 1.0210176 - 66000 6.6836542 444 -0 1.0367256 - 67000 6.797745 444 -0 1.0524335 - 68000 6.9091592 444 -0 1.0681415 - 69000 7.0230958 444 -0 1.0838495 - 70000 7.140508 444 -0 1.0995574 - 71000 7.2547153 444 -0 1.1152654 - 72000 7.3698096 444 -0 1.1309734 - 73000 7.4846587 444 -0 1.1466813 - 74000 7.6005538 444 -0 1.1623893 - 75000 7.715498 444 -0 1.1780972 - 76000 7.8306339 444 -0 1.1938052 - 77000 7.9458861 444 -0 1.2095132 - 78000 8.0608796 444 -0 1.2252211 - 79000 8.1819612 444 -0 1.2409291 - 80000 8.3017939 444 -0 1.2566371 - 81000 8.4206794 444 -0 1.272345 - 82000 8.5396045 444 -0 1.288053 - 83000 8.6588178 444 -0 1.303761 - 84000 8.7939815 444 -0 1.3194689 - 85000 8.9999511 888 -0 1.3351769 - 86000 9.2762515 888 -0 1.3508848 - 87000 9.5497189 888 -0 1.3665928 - 88000 9.8025426 888 -0 1.3823008 - 89000 10.063005 888 -0 1.3980087 - 90000 10.343956 888 -0 1.4137167 - 91000 10.630004 888 -0 1.4294247 - 92000 10.865437 888 -0 1.4451326 - 93000 11.090302 888 -0 1.4608406 - 94000 11.306921 888 -0 1.4765485 - 95000 11.525442 888 -0 1.4922565 - 96000 11.786482 888 -0 1.5079645 - 97000 12.033336 888 -0 1.5236724 - 98000 12.258224 888 -0 1.5393804 - 99000 12.486583 888 -0 1.5550884 - 100000 12.70566 888 -0 1.5707963 - 101000 12.934051 888 -0 1.5865043 - 102000 13.194977 888 -0 1.6022123 - 103000 13.503561 888 -0 1.6179202 - 104000 13.737785 888 -0 1.6336282 - 105000 13.96388 888 -0 1.6493361 - 106000 14.190156 888 -0 1.6650441 - 107000 14.416346 888 -0 1.6807521 - 108000 14.642321 888 -0 1.69646 - 109000 14.877668 888 -0 1.712168 - 110000 15.114644 888 -0 1.727876 - 111000 15.354762 888 -0 1.7435839 - 112000 15.615795 888 -0 1.7592919 - 113000 15.854301 888 -0 1.7749998 - 114000 16.099855 888 -0 1.7907078 - 115000 16.344044 888 -0 1.8064158 - 116000 16.60829 888 -0 1.8221237 - 117000 16.847146 888 -0 1.8378317 - 118000 17.086787 888 -0 1.8535397 - 119000 17.324264 888 -0 1.8692476 - 120000 17.563913 888 -0 1.8849556 - 121000 17.798333 888 -0 1.9006636 - 122000 18.033339 888 -0 1.9163715 - 123000 18.275883 888 -0 1.9320795 - 124000 18.542879 888 -0 1.9477874 - 125000 18.790098 888 -0 1.9634954 - 126000 19.034113 888 -0 1.9792034 - 127000 19.286183 888 -0 1.9949113 - 128000 19.574764 888 -0 2.0106193 - 129000 19.832536 888 -0 2.0263273 - 130000 20.085705 888 -0 2.0420352 - 131000 20.327805 888 -0 2.0577432 - 132000 20.576476 888 -0 2.0734512 - 133000 20.82021 888 -0 2.0891591 - 134000 21.063425 888 -0 2.1048671 - 135000 21.304848 888 -0 2.120575 - 136000 21.554936 888 -0 2.136283 - 137000 21.797949 888 -0 2.151991 - 138000 22.041181 888 -0 2.1676989 - 139000 22.288509 888 -0 2.1834069 - 140000 22.539512 888 -0 2.1991149 - 141000 22.786046 888 -0 2.2148228 - 142000 23.052553 888 -0 2.2305308 - 143000 23.321282 888 -0 2.2462387 - 144000 23.619171 888 -0 2.2619467 - 145000 23.918581 888 -0 2.2776547 - 146000 24.200849 888 -0 2.2933626 - 147000 24.500127 888 -0 2.3090706 - 148000 24.756357 888 -0 2.3247786 - 149000 25.015262 888 -0 2.3404865 - 150000 25.271136 888 -0 2.3561945 - 151000 25.519846 888 -0 2.3719025 - 152000 25.780481 888 -0 2.3876104 - 153000 26.027917 888 -0 2.4033184 - 154000 26.277021 888 -0 2.4190263 - 155000 26.54158 888 -0 2.4347343 - 156000 26.828357 888 -0 2.4504423 - 157000 27.172993 888 -0 2.4661502 - 158000 27.454171 888 -0 2.4818582 - 159000 27.72964 888 -0 2.4975662 - 160000 28.007464 888 -0 2.5132741 - 161000 28.28268 888 -0 2.5289821 - 162000 28.561094 888 -0 2.54469 - 163000 28.839295 888 -0 2.560398 - 164000 29.117588 888 -0 2.576106 - 165000 29.394126 888 -0 2.5918139 - 166000 29.675102 888 -0 2.6075219 - 167000 29.951524 888 -0 2.6232299 - 168000 30.233181 888 -0 2.6389378 - 169000 30.516798 888 -0 2.6546458 - 170000 30.818897 1000 -0 2.6703538 - 171000 31.215403 1000 -0 2.6860617 - 172000 31.528362 1000 -0 2.7017697 - 173000 31.844759 1000 -0 2.7174776 - 174000 32.159787 1000 -0 2.7331856 - 175000 32.482605 1000 -0 2.7488936 - 176000 32.798004 1000 -0 2.7646015 - 177000 33.112668 1000 -0 2.7803095 - 178000 33.429501 1000 -0 2.7960175 - 179000 33.74646 1000 -0 2.8117254 - 180000 34.059172 1000 -0 2.8274334 - 181000 34.381226 1000 -0 2.8431414 - 182000 34.697465 1000 -0 2.8588493 - 183000 35.008892 1000 -0 2.8745573 - 184000 35.332856 1000 -0 2.8902652 - 185000 35.650733 1000 -0 2.9059732 - 186000 35.971328 1000 -0 2.9216812 - 187000 36.298046 1000 -0 2.9373891 - 188000 36.622634 1000 -0 2.9530971 - 189000 36.945728 1000 -0 2.9688051 - 190000 37.268801 1000 -0 2.984513 - 191000 37.592615 1000 -0 3.000221 - 192000 37.915197 1000 -0 3.0159289 - 193000 38.226138 1000 -0 3.0316369 - 194000 38.534735 1000 -0 3.0473449 - 195000 38.844711 1000 -0 3.0630528 - 196000 39.159518 1000 -0 3.0787608 - 197000 39.474235 1000 -0 3.0944688 - 198000 39.786609 1000 -0 3.1101767 - 199000 40.10213 1000 -0 3.1258847 - 200000 40.421226 1000 -0 3.1415927 -Loop time of 40.4213 on 1 procs for 200000 steps with 1000 atoms - -Performance: 20199.903 tau/day, 4947.886 timesteps/s, 4.948 Matom-step/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.6681 | 3.6681 | 3.6681 | 0.0 | 9.07 -Neigh | 0.050194 | 0.050194 | 0.050194 | 0.0 | 0.12 -Comm | 0.53308 | 0.53308 | 0.53308 | 0.0 | 1.32 -Output | 0.0071363 | 0.0071363 | 0.0071363 | 0.0 | 0.02 -Modify | 35.563 | 35.563 | 35.563 | 0.0 | 87.98 -Other | | 0.5999 | | | 1.48 - -Nlocal: 1000 ave 1000 max 1000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 197 ave 197 max 197 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3812 ave 3812 max 3812 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3812 -Ave neighs/atom = 3.812 -Neighbor list builds = 205 -Dangerous builds = 0 -unfix ins -run 200000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 11.89 | 11.89 | 11.89 Mbytes - Step CPU Atoms KinEng v_theta - 200000 0 1000 1.0188213 3.1415927 - 201000 0.31745969 1000 1.0237918 3.1573006 - 202000 0.6315036 1000 1.0177231 3.1730086 - 203000 0.9480314 1000 1.0127096 3.1887165 - 204000 1.2572431 1000 1.0084386 3.2044245 - 205000 1.5683429 1000 0.9957528 3.2201325 - 206000 1.8801922 1000 1.0003921 3.2358404 - 207000 2.1905883 1000 0.99358387 3.2515484 - 208000 2.4948426 1000 0.99103748 3.2672564 - 209000 2.8195665 1000 0.98488628 3.2829643 - 210000 3.1420952 1000 0.98305824 3.2986723 - 211000 3.4618849 1000 0.97185818 3.3143802 - 212000 3.7910078 1000 0.96191966 3.3300882 - 213000 4.1184009 1000 0.95953159 3.3457962 - 214000 4.4491355 1000 0.95307268 3.3615041 - 215000 4.7782398 1000 0.95612155 3.3772121 - 216000 5.1088177 1000 0.96582166 3.3929201 - 217000 5.4376503 1000 0.96124408 3.408628 - 218000 5.7707229 1000 0.95705813 3.424336 - 219000 6.1055922 1000 0.9660222 3.440044 - 220000 6.4418056 1000 0.97539486 3.4557519 - 221000 6.7755181 1000 0.97919396 3.4714599 - 222000 7.104521 1000 0.97448171 3.4871678 - 223000 7.4368025 1000 0.95742917 3.5028758 - 224000 7.7623405 1000 0.94218245 3.5185838 - 225000 8.0932682 1000 0.93056484 3.5342917 - 226000 8.4217598 1000 0.92009109 3.5499997 - 227000 8.747426 1000 0.90684871 3.5657077 - 228000 9.0818038 1000 0.91719046 3.5814156 - 229000 9.4125504 1000 0.92681746 3.5971236 - 230000 9.7439963 1000 0.9195493 3.6128316 - 231000 10.075499 1000 0.93275667 3.6285395 - 232000 10.404017 1000 0.9494565 3.6442475 - 233000 10.774786 1000 0.95036607 3.6599554 - 234000 11.158713 1000 0.9596283 3.6756634 - 235000 11.566878 1000 0.98314341 3.6913714 - 236000 11.977294 1000 0.98115865 3.7070793 - 237000 12.347191 1000 0.9723466 3.7227873 - 238000 12.686388 1000 0.95267817 3.7384953 - 239000 13.031631 1000 0.92661956 3.7542032 - 240000 13.451121 1000 0.92237207 3.7699112 - 241000 13.855031 1000 0.91301732 3.7856191 - 242000 14.272001 1000 0.90488754 3.8013271 - 243000 14.632631 1000 0.90430417 3.8170351 - 244000 14.97608 1000 0.90179051 3.832743 - 245000 15.419173 1000 0.89658897 3.848451 - 246000 15.903699 1000 0.89583335 3.864159 - 247000 16.312374 1000 0.89409138 3.8798669 - 248000 16.660472 1000 0.89948364 3.8955749 - 249000 17.063147 1000 0.90196936 3.9112829 - 250000 17.423622 1000 0.89616943 3.9269908 - 251000 17.76439 1000 0.87816303 3.9426988 - 252000 18.103828 1000 0.86705341 3.9584067 - 253000 18.454644 1000 0.84494344 3.9741147 - 254000 18.876297 1000 0.81541663 3.9898227 - 255000 19.264851 1000 0.80071805 4.0055306 - 256000 19.669757 1000 0.80290754 4.0212386 - 257000 20.066097 1000 0.80000385 4.0369466 - 258000 20.481516 1000 0.80379277 4.0526545 - 259000 20.851537 1000 0.81091684 4.0683625 - 260000 21.246226 1000 0.80124855 4.0840704 - 261000 21.586832 1000 0.79581606 4.0997784 - 262000 21.968726 1000 0.78415946 4.1154864 - 263000 22.388474 1000 0.78837276 4.1311943 - 264000 22.76238 1000 0.78962435 4.1469023 - 265000 23.13787 1000 0.79388706 4.1626103 - 266000 23.470742 1000 0.80484385 4.1783182 - 267000 23.801402 1000 0.79505699 4.1940262 - 268000 24.14266 1000 0.78663829 4.2097342 - 269000 24.545281 1000 0.77557297 4.2254421 - 270000 24.886776 1000 0.76992342 4.2411501 - 271000 25.218744 1000 0.75955867 4.256858 - 272000 25.549898 1000 0.76207709 4.272566 - 273000 25.882738 1000 0.76891185 4.288274 - 274000 26.212384 1000 0.77380617 4.3039819 - 275000 26.540612 1000 0.77349795 4.3196899 - 276000 26.869636 1000 0.77559636 4.3353979 - 277000 27.200449 1000 0.76806972 4.3511058 - 278000 27.548549 1000 0.76223861 4.3668138 - 279000 27.883681 1000 0.76306533 4.3825218 - 280000 28.221552 1000 0.76369569 4.3982297 - 281000 28.558479 1000 0.75945303 4.4139377 - 282000 28.892758 1000 0.75872312 4.4296456 - 283000 29.224927 1000 0.75354345 4.4453536 - 284000 29.565477 1000 0.74433058 4.4610616 - 285000 29.914679 1000 0.7349005 4.4767695 - 286000 30.265305 1000 0.73182808 4.4924775 - 287000 30.607982 1000 0.73334122 4.5081855 - 288000 30.94168 1000 0.73308623 4.5238934 - 289000 31.276062 1000 0.73620818 4.5396014 - 290000 31.614934 1000 0.73906492 4.5553093 - 291000 31.959782 1000 0.73921306 4.5710173 - 292000 32.296279 1000 0.73919766 4.5867253 - 293000 32.615262 1000 0.75148875 4.6024332 - 294000 32.93925 1000 0.76390126 4.6181412 - 295000 33.266316 1000 0.76421084 4.6338492 - 296000 33.591115 1000 0.78124272 4.6495571 - 297000 33.924279 1000 0.78526224 4.6652651 - 298000 34.256265 1000 0.78279226 4.6809731 - 299000 34.584382 1000 0.78390001 4.696681 - 300000 34.910629 1000 0.78017239 4.712389 - 301000 35.233205 1000 0.77432653 4.7280969 - 302000 35.55956 1000 0.7627792 4.7438049 - 303000 35.885484 1000 0.75222273 4.7595129 - 304000 36.205453 1000 0.73765921 4.7752208 - 305000 36.525101 1000 0.72338298 4.7909288 - 306000 36.845236 1000 0.71944975 4.8066368 - 307000 37.168044 1000 0.71547274 4.8223447 - 308000 37.491196 1000 0.71267737 4.8380527 - 309000 37.827079 1000 0.70506173 4.8537606 - 310000 38.168049 1000 0.70685173 4.8694686 - 311000 38.504282 1000 0.70327488 4.8851766 - 312000 38.846152 1000 0.69732519 4.9008845 - 313000 39.191958 1000 0.70137823 4.9165925 - 314000 39.532177 1000 0.70613806 4.9323005 - 315000 39.876728 1000 0.70981591 4.9480084 - 316000 40.225244 1000 0.72246602 4.9637164 - 317000 40.573681 1000 0.71946499 4.9794244 - 318000 40.918134 1000 0.73275857 4.9951323 - 319000 41.261914 1000 0.74357547 5.0108403 - 320000 41.607984 1000 0.74138038 5.0265482 - 321000 41.957822 1000 0.73285846 5.0422562 - 322000 42.30176 1000 0.72990718 5.0579642 - 323000 42.644077 1000 0.72024459 5.0736721 - 324000 42.985509 1000 0.71052943 5.0893801 - 325000 43.323921 1000 0.69560261 5.1050881 - 326000 43.664945 1000 0.69939398 5.120796 - 327000 44.004741 1000 0.71331291 5.136504 - 328000 44.347204 1000 0.72181082 5.152212 - 329000 44.689866 1000 0.72534262 5.1679199 - 330000 45.055673 1000 0.73874292 5.1836279 - 331000 45.400501 1000 0.74135464 5.1993358 - 332000 45.743289 1000 0.73578005 5.2150438 - 333000 46.087061 1000 0.72662516 5.2307518 - 334000 46.427231 1000 0.72030125 5.2464597 - 335000 46.767813 1000 0.72801784 5.2621677 - 336000 47.108619 1000 0.73020974 5.2778757 - 337000 47.44666 1000 0.7344527 5.2935836 - 338000 47.784653 1000 0.73826638 5.3092916 - 339000 48.124114 1000 0.74079395 5.3249995 - 340000 48.463953 1000 0.74030413 5.3407075 - 341000 48.804616 1000 0.74815855 5.3564155 - 342000 49.143226 1000 0.75762011 5.3721234 - 343000 49.482788 1000 0.76311094 5.3878314 - 344000 49.822597 1000 0.76394459 5.4035394 - 345000 50.162186 1000 0.75550163 5.4192473 - 346000 50.496689 1000 0.7594991 5.4349553 - 347000 50.831695 1000 0.76650932 5.4506633 - 348000 51.167201 1000 0.76750437 5.4663712 - 349000 51.501847 1000 0.77084248 5.4820792 - 350000 51.841805 1000 0.76487701 5.4977871 - 351000 52.179907 1000 0.76870148 5.5134951 - 352000 52.517605 1000 0.77597853 5.5292031 - 353000 52.850047 1000 0.77929348 5.544911 - 354000 53.182408 1000 0.7744937 5.560619 - 355000 53.512931 1000 0.76114616 5.576327 - 356000 53.845782 1000 0.75392687 5.5920349 - 357000 54.178336 1000 0.74858889 5.6077429 - 358000 54.514517 1000 0.75630978 5.6234508 - 359000 54.850783 1000 0.75781107 5.6391588 - 360000 55.183323 1000 0.75613713 5.6548668 - 361000 55.518704 1000 0.75250391 5.6705747 - 362000 55.851425 1000 0.75790051 5.6862827 - 363000 56.212376 1000 0.75283475 5.7019907 - 364000 56.542027 1000 0.7431151 5.7176986 - 365000 56.874325 1000 0.73274509 5.7334066 - 366000 57.208926 1000 0.72261631 5.7491146 - 367000 57.596495 1000 0.71279773 5.7648225 - 368000 58.007863 1000 0.70452113 5.7805305 - 369000 58.346944 1000 0.69777381 5.7962384 - 370000 58.686215 1000 0.69698007 5.8119464 - 371000 59.030366 1000 0.69322062 5.8276544 - 372000 59.368607 1000 0.67728454 5.8433623 - 373000 59.704376 1000 0.67335006 5.8590703 - 374000 60.044772 1000 0.66920493 5.8747783 - 375000 60.382875 1000 0.65614401 5.8904862 - 376000 60.72002 1000 0.65874131 5.9061942 - 377000 61.058554 1000 0.67072465 5.9219022 - 378000 61.400078 1000 0.68118419 5.9376101 - 379000 61.748931 1000 0.68481865 5.9533181 - 380000 62.098203 1000 0.68840839 5.969026 - 381000 62.444961 1000 0.69447162 5.984734 - 382000 62.797286 1000 0.69881397 6.000442 - 383000 63.154921 1000 0.69610171 6.0161499 - 384000 63.508448 1000 0.70059329 6.0318579 - 385000 63.857115 1000 0.71085103 6.0475659 - 386000 64.207915 1000 0.71532684 6.0632738 - 387000 64.561127 1000 0.72968624 6.0789818 - 388000 64.939826 1000 0.74729894 6.0946897 - 389000 65.284635 1000 0.76268063 6.1103977 - 390000 65.631752 1000 0.77170089 6.1261057 - 391000 65.981566 1000 0.77212462 6.1418136 - 392000 66.328406 1000 0.773784 6.1575216 - 393000 66.655905 1000 0.7731096 6.1732296 - 394000 66.993751 1000 0.77245259 6.1889375 - 395000 67.322842 1000 0.76912533 6.2046455 - 396000 67.647532 1000 0.76397972 6.2203535 - 397000 67.977448 1000 0.75736166 6.2360614 - 398000 68.310064 1000 0.75287599 6.2517694 - 399000 68.635966 1000 0.75354368 6.2674773 - 400000 68.963492 1000 0.75582397 6.2831853 -Loop time of 68.9635 on 1 procs for 200000 steps with 1000 atoms - -Performance: 11839.683 tau/day, 2900.084 timesteps/s, 2.900 Matom-step/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 11.238 | 11.238 | 11.238 | 0.0 | 16.30 -Neigh | 0.077817 | 0.077817 | 0.077817 | 0.0 | 0.11 -Comm | 1.5441 | 1.5441 | 1.5441 | 0.0 | 2.24 -Output | 0.0082341 | 0.0082341 | 0.0082341 | 0.0 | 0.01 -Modify | 55.304 | 55.304 | 55.304 | 0.0 | 80.19 -Other | | 0.7909 | | | 1.15 - -Nlocal: 1000 ave 1000 max 1000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 278 ave 278 max 278 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 5072 ave 5072 max 5072 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 5072 -Ave neighs/atom = 5.072 -Neighbor list builds = 166 -Dangerous builds = 0 -Total wall time: 0:01:49 diff --git a/examples/granregion/log.16Mar23.granregion.mixer.g++.4 b/examples/granregion/log.16Mar23.granregion.mixer.g++.4 deleted file mode 100644 index b601f3f13a..0000000000 --- a/examples/granregion/log.16Mar23.granregion.mixer.g++.4 +++ /dev/null @@ -1,634 +0,0 @@ -LAMMPS (8 Feb 2023) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -variable name string mixer - -thermo_modify flush yes -variable seed equal 14314 - -############################################### -# Particle parameters -################################################ - -variable rlo equal 0.3 -variable rhi equal 0.6 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.3 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.6 -variable skin equal ${rhi} -variable skin equal 0.6 - -variable coeffRes equal 0.1 -variable coeffFric equal 0.5 - -variable kn equal 10^5 -variable kt equal 0.2*${kn} -variable kt equal 0.2*100000 - -variable gravity equal 1.0 -variable density equal 1.0 - -variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} -variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 -variable a equal (-2.0*log(${coeffRes})/PI)^2 -variable a equal (-2.0*log(0.1)/PI)^2 -variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) -variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) -variable gamma_t equal ${gamma_n}*0.5 -variable gamma_t equal 806.699778405191*0.5 - -variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) -variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) - -variable dt equal ${tcol}*0.02 -variable dt equal 0.00236257621510454*0.02 -timestep ${dt} -timestep 4.72515243020908e-05 - -############################################### - -variable dumpfreq equal 1000 -variable logfreq equal 1000 - -newton on -atom_style sphere - -boundary p p f - -region boxreg block 0 20 0 20 0 20 -create_box 1 boxreg -Created orthogonal box = (0 0 0) to (20 20 20) - 1 by 2 by 2 MPI processor grid - -pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 -pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 -pair_coeff * * - -neighbor ${skin} multi -neighbor 0.6 multi -thermo ${logfreq} -thermo 1000 - -comm_style brick -comm_modify mode multi group all vel yes -balance 1.1 shift xyz 20 1.1 -Balancing ... -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 0 - ghost atom cutoff = 0 - binsize = 20, bins = 1 1 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/multi/newton - stencil: half/multi/3d - bin: multi -WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210) -fix bal all balance 10000 1.1 shift xyz 20 1.01 - -####################### Options specific to pouring ######################### - -region insreg cylinder z 10 10 8 10 18 side in units box -region cylreg cylinder z 10 10 10 0 20 side in units box - -variable theta equal (step/400000)*2*PI - -region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box -region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box - -region mixer intersect 3 cylreg b1 b2 side in - -fix grav all gravity ${gravity} vector 0 0 -1 -fix grav all gravity 1 vector 0 0 -1 -fix 1 all nve/sphere - -fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer -fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer - -fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} -fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 -Particle insertion: 444 every 84653 steps, 1000 by step 169307 - -#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z - -#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 -#dump_modify 2 pad 6 - -thermo_style custom step cpu atoms ke v_theta -WARNING: New thermo_style command, previous thermo_modify settings will be lost (src/output.cpp:895) -thermo_modify flush yes lost warn - -run 200000 - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Your simulation uses code contributions which should be cited: - -- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 - -@Article{Intveld08, - author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, - title = {Accurate and Efficient Methods for Modeling Colloidal - Mixtures in an Explicit Solvent using Molecular Dynamics}, - journal = {Comput.\ Phys.\ Commut.}, - year = 2008, - volume = 179, - pages = {320--329} -} - -@article{Shire2020, - author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, - title = {{DEM} Simulations of Polydisperse Media: Efficient Contact - Detection Applied to Investigate the Quasi-Static Limit}, - journal = {Computational Particle Mechanics}, - year = {2020} -} - -CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE - -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 5.816 | 5.816 | 5.816 Mbytes - Step CPU Atoms KinEng v_theta - 0 0 0 -0 0 - 1000 0.069039547 444 -0 0.015707963 - 2000 0.12867095 444 -0 0.031415927 - 3000 0.18791426 444 -0 0.04712389 - 4000 0.24614388 444 -0 0.062831853 - 5000 0.30404486 444 -0 0.078539816 - 6000 0.36105446 444 -0 0.09424778 - 7000 0.41713358 444 -0 0.10995574 - 8000 0.47282802 444 -0 0.12566371 - 9000 0.52742586 444 -0 0.14137167 - 10000 0.58233488 444 -0 0.15707963 - 11000 0.62155506 444 -0 0.1727876 - 12000 0.6605457 444 -0 0.18849556 - 13000 0.69971591 444 -0 0.20420352 - 14000 0.73821845 444 -0 0.21991149 - 15000 0.77860211 444 -0 0.23561945 - 16000 0.8188072 444 -0 0.25132741 - 17000 0.85992964 444 -0 0.26703538 - 18000 0.9008443 444 -0 0.28274334 - 19000 0.94216466 444 -0 0.2984513 - 20000 0.98508697 444 -0 0.31415927 - 21000 1.0241468 444 -0 0.32986723 - 22000 1.0606191 444 -0 0.34557519 - 23000 1.0972735 444 -0 0.36128316 - 24000 1.134726 444 -0 0.37699112 - 25000 1.1723693 444 -0 0.39269908 - 26000 1.211349 444 -0 0.40840704 - 27000 1.250291 444 -0 0.42411501 - 28000 1.2906408 444 -0 0.43982297 - 29000 1.3307315 444 -0 0.45553093 - 30000 1.3704867 444 -0 0.4712389 - 31000 1.4064392 444 -0 0.48694686 - 32000 1.4426955 444 -0 0.50265482 - 33000 1.4789666 444 -0 0.51836279 - 34000 1.5163037 444 -0 0.53407075 - 35000 1.5534135 444 -0 0.54977871 - 36000 1.5907054 444 -0 0.56548668 - 37000 1.6296055 444 -0 0.58119464 - 38000 1.6690167 444 -0 0.5969026 - 39000 1.7082024 444 -0 0.61261057 - 40000 1.7476796 444 -0 0.62831853 - 41000 1.7847465 444 -0 0.64402649 - 42000 1.8216975 444 -0 0.65973446 - 43000 1.8594424 444 -0 0.67544242 - 44000 1.8975401 444 -0 0.69115038 - 45000 1.9361216 444 -0 0.70685835 - 46000 1.9764821 444 -0 0.72256631 - 47000 2.0221252 444 -0 0.73827427 - 48000 2.0635337 444 -0 0.75398224 - 49000 2.104472 444 -0 0.7696902 - 50000 2.1447842 444 -0 0.78539816 - 51000 2.1808558 444 -0 0.80110613 - 52000 2.2180542 444 -0 0.81681409 - 53000 2.2547243 444 -0 0.83252205 - 54000 2.2934546 444 -0 0.84823002 - 55000 2.3321909 444 -0 0.86393798 - 56000 2.3732179 444 -0 0.87964594 - 57000 2.4141133 444 -0 0.89535391 - 58000 2.455667 444 -0 0.91106187 - 59000 2.4983196 444 -0 0.92676983 - 60000 2.5415086 444 -0 0.9424778 - 61000 2.581342 444 -0 0.95818576 - 62000 2.6215029 444 -0 0.97389372 - 63000 2.6633884 444 -0 0.98960169 - 64000 2.7048848 444 -0 1.0053096 - 65000 2.7497607 444 -0 1.0210176 - 66000 2.7952373 444 -0 1.0367256 - 67000 2.8399748 444 -0 1.0524335 - 68000 2.8851806 444 -0 1.0681415 - 69000 2.9303317 444 -0 1.0838495 - 70000 2.9815632 444 -0 1.0995574 - 71000 3.0257986 444 -0 1.1152654 - 72000 3.068788 444 -0 1.1309734 - 73000 3.1130125 444 -0 1.1466813 - 74000 3.1558178 444 -0 1.1623893 - 75000 3.1993327 444 -0 1.1780972 - 76000 3.2444469 444 -0 1.1938052 - 77000 3.2901781 444 -0 1.2095132 - 78000 3.3356302 444 -0 1.2252211 - 79000 3.3814834 444 -0 1.2409291 - 80000 3.4290631 444 -0 1.2566371 - 81000 3.4715671 444 -0 1.272345 - 82000 3.5136342 444 -0 1.288053 - 83000 3.5566281 444 -0 1.303761 - 84000 3.6001405 444 -0 1.3194689 - 85000 3.6709788 888 -0 1.3351769 - 86000 3.7652387 888 -0 1.3508848 - 87000 3.8618109 888 -0 1.3665928 - 88000 3.9546406 888 -0 1.3823008 - 89000 4.0475587 888 -0 1.3980087 - 90000 4.1424919 888 -0 1.4137167 - 91000 4.2114594 888 -0 1.4294247 - 92000 4.2842588 888 -0 1.4451326 - 93000 4.3524161 888 -0 1.4608406 - 94000 4.4204131 888 -0 1.4765485 - 95000 4.4886628 888 -0 1.4922565 - 96000 4.5588224 888 -0 1.5079645 - 97000 4.6304943 888 -0 1.5236724 - 98000 4.7018695 888 -0 1.5393804 - 99000 4.774147 888 -0 1.5550884 - 100000 4.847776 888 -0 1.5707963 - 101000 4.9173562 888 -0 1.5865043 - 102000 4.9886499 888 -0 1.6022123 - 103000 5.0618801 888 -0 1.6179202 - 104000 5.1331411 888 -0 1.6336282 - 105000 5.205209 888 -0 1.6493361 - 106000 5.2795148 888 -0 1.6650441 - 107000 5.3523346 888 -0 1.6807521 - 108000 5.4263886 888 -0 1.69646 - 109000 5.5029416 888 -0 1.712168 - 110000 5.5807033 888 -0 1.727876 - 111000 5.6574852 888 -0 1.7435839 - 112000 5.7320356 888 -0 1.7592919 - 113000 5.8097178 888 -0 1.7749998 - 114000 5.8858974 888 -0 1.7907078 - 115000 5.9636528 888 -0 1.8064158 - 116000 6.0421783 888 -0 1.8221237 - 117000 6.12052 888 -0 1.8378317 - 118000 6.2016349 888 -0 1.8535397 - 119000 6.2834058 888 -0 1.8692476 - 120000 6.3644485 888 -0 1.8849556 - 121000 6.4398727 888 -0 1.9006636 - 122000 6.5152081 888 -0 1.9163715 - 123000 6.5916482 888 -0 1.9320795 - 124000 6.6694407 888 -0 1.9477874 - 125000 6.7474201 888 -0 1.9634954 - 126000 6.8270768 888 -0 1.9792034 - 127000 6.9060885 888 -0 1.9949113 - 128000 6.9847809 888 -0 2.0106193 - 129000 7.0660497 888 -0 2.0263273 - 130000 7.1468939 888 -0 2.0420352 - 131000 7.2275386 888 -0 2.0577432 - 132000 7.3103515 888 -0 2.0734512 - 133000 7.3904073 888 -0 2.0891591 - 134000 7.4711333 888 -0 2.1048671 - 135000 7.5529594 888 -0 2.120575 - 136000 7.6399017 888 -0 2.136283 - 137000 7.7263891 888 -0 2.151991 - 138000 7.815523 888 -0 2.1676989 - 139000 7.9041642 888 -0 2.1834069 - 140000 7.9950145 888 -0 2.1991149 - 141000 8.0776291 888 -0 2.2148228 - 142000 8.1584715 888 -0 2.2305308 - 143000 8.2409653 888 -0 2.2462387 - 144000 8.326064 888 -0 2.2619467 - 145000 8.4107211 888 -0 2.2776547 - 146000 8.4946153 888 -0 2.2933626 - 147000 8.5784663 888 -0 2.3090706 - 148000 8.6648861 888 -0 2.3247786 - 149000 8.7503472 888 -0 2.3404865 - 150000 8.8378801 888 -0 2.3561945 - 151000 8.9221381 888 -0 2.3719025 - 152000 9.0101516 888 -0 2.3876104 - 153000 9.0982387 888 -0 2.4033184 - 154000 9.1851912 888 -0 2.4190263 - 155000 9.2744741 888 -0 2.4347343 - 156000 9.3697509 888 -0 2.4504423 - 157000 9.4640354 888 -0 2.4661502 - 158000 9.5594845 888 -0 2.4818582 - 159000 9.6572972 888 -0 2.4975662 - 160000 9.7543656 888 -0 2.5132741 - 161000 9.8485073 888 -0 2.5289821 - 162000 9.9446493 888 -0 2.54469 - 163000 10.040013 888 -0 2.560398 - 164000 10.137116 888 -0 2.576106 - 165000 10.23506 888 -0 2.5918139 - 166000 10.335537 888 -0 2.6075219 - 167000 10.436607 888 -0 2.6232299 - 168000 10.537429 888 -0 2.6389378 - 169000 10.642458 888 -0 2.6546458 - 170000 10.74705 1000 -0 2.6703538 - 171000 10.857156 1000 -0 2.6860617 - 172000 10.965939 1000 -0 2.7017697 - 173000 11.076233 1000 -0 2.7174776 - 174000 11.184172 1000 -0 2.7331856 - 175000 11.293846 1000 -0 2.7488936 - 176000 11.402493 1000 -0 2.7646015 - 177000 11.513895 1000 -0 2.7803095 - 178000 11.625438 1000 -0 2.7960175 - 179000 11.738308 1000 -0 2.8117254 - 180000 11.854793 1000 -0 2.8274334 - 181000 11.968344 1000 -0 2.8431414 - 182000 12.082268 1000 -0 2.8588493 - 183000 12.196356 1000 -0 2.8745573 - 184000 12.313359 1000 -0 2.8902652 - 185000 12.429559 1000 -0 2.9059732 - 186000 12.545853 1000 -0 2.9216812 - 187000 12.661447 1000 -0 2.9373891 - 188000 12.777355 1000 -0 2.9530971 - 189000 12.894856 1000 -0 2.9688051 - 190000 13.0103 1000 -0 2.984513 - 191000 13.126221 1000 -0 3.000221 - 192000 13.241507 1000 -0 3.0159289 - 193000 13.356198 1000 -0 3.0316369 - 194000 13.468168 1000 -0 3.0473449 - 195000 13.582232 1000 -0 3.0630528 - 196000 13.700446 1000 -0 3.0787608 - 197000 13.816948 1000 -0 3.0944688 - 198000 13.934106 1000 -0 3.1101767 - 199000 14.053497 1000 -0 3.1258847 - 200000 14.171799 1000 -0 3.1415927 -Loop time of 14.1719 on 4 procs for 200000 steps with 1000 atoms - -Performance: 57614.644 tau/day, 14112.479 timesteps/s, 14.112 Matom-step/s -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.46468 | 0.82686 | 1.2428 | 39.9 | 5.83 -Neigh | 0.010644 | 0.013047 | 0.015567 | 2.0 | 0.09 -Comm | 2.2447 | 2.716 | 3.2525 | 28.2 | 19.16 -Output | 0.0040193 | 0.0057101 | 0.0084742 | 2.2 | 0.04 -Modify | 7.9913 | 8.6193 | 9.394 | 20.9 | 60.82 -Other | | 1.991 | | | 14.05 - -Nlocal: 250 ave 266 max 237 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Nghost: 294 ave 335 max 253 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 960.25 ave 1454 max 492 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 3841 -Ave neighs/atom = 3.841 -Neighbor list builds = 201 -Dangerous builds = 0 -unfix ins -run 200000 -Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule -Per MPI rank memory allocation (min/avg/max) = 11.87 | 11.89 | 11.9 Mbytes - Step CPU Atoms KinEng v_theta - 200000 0 1000 1.0060272 3.1415927 - 201000 0.11023112 1000 1.0117513 3.1573006 - 202000 0.22297119 1000 1.0121624 3.1730086 - 203000 0.33090251 1000 1.0099707 3.1887165 - 204000 0.43921623 1000 1.0099624 3.2044245 - 205000 0.54813391 1000 1.009398 3.2201325 - 206000 0.6597641 1000 0.99686298 3.2358404 - 207000 0.76806828 1000 0.96520673 3.2515484 - 208000 0.88217705 1000 0.96521294 3.2672564 - 209000 0.99810181 1000 0.96501099 3.2829643 - 210000 1.1113988 1000 0.96426624 3.2986723 - 211000 1.2252752 1000 0.9564358 3.3143802 - 212000 1.3381064 1000 0.95482019 3.3300882 - 213000 1.4513852 1000 0.9446233 3.3457962 - 214000 1.5630713 1000 0.92461651 3.3615041 - 215000 1.6785702 1000 0.92106646 3.3772121 - 216000 1.7937182 1000 0.92058667 3.3929201 - 217000 1.9092992 1000 0.91797493 3.408628 - 218000 2.0251567 1000 0.91351081 3.424336 - 219000 2.1419482 1000 0.91991749 3.440044 - 220000 2.258391 1000 0.92943198 3.4557519 - 221000 2.3747328 1000 0.93176684 3.4714599 - 222000 2.4930355 1000 0.92625008 3.4871678 - 223000 2.6111794 1000 0.9216243 3.5028758 - 224000 2.729971 1000 0.92332955 3.5185838 - 225000 2.8489286 1000 0.91963985 3.5342917 - 226000 2.97003 1000 0.91913679 3.5499997 - 227000 3.0874646 1000 0.92381436 3.5657077 - 228000 3.2089543 1000 0.93085242 3.5814156 - 229000 3.3281962 1000 0.92872221 3.5971236 - 230000 3.4476271 1000 0.92536664 3.6128316 - 231000 3.5681706 1000 0.92953138 3.6285395 - 232000 3.6911427 1000 0.93937257 3.6442475 - 233000 3.8115833 1000 0.95916002 3.6599554 - 234000 3.9301977 1000 0.96652709 3.6756634 - 235000 4.0481963 1000 0.96753364 3.6913714 - 236000 4.1684171 1000 0.96096249 3.7070793 - 237000 4.2874672 1000 0.97028893 3.7227873 - 238000 4.4072896 1000 0.95323014 3.7384953 - 239000 4.5292898 1000 0.94143454 3.7542032 - 240000 4.6529563 1000 0.9334569 3.7699112 - 241000 4.7701737 1000 0.93340822 3.7856191 - 242000 4.8891772 1000 0.93517762 3.8013271 - 243000 5.0078759 1000 0.92632745 3.8170351 - 244000 5.1260291 1000 0.91858996 3.832743 - 245000 5.2472736 1000 0.90006015 3.848451 - 246000 5.363907 1000 0.8850116 3.864159 - 247000 5.4838317 1000 0.87807775 3.8798669 - 248000 5.6039445 1000 0.85981326 3.8955749 - 249000 5.7262584 1000 0.85764597 3.9112829 - 250000 5.8488174 1000 0.86748856 3.9269908 - 251000 5.9665578 1000 0.85889952 3.9426988 - 252000 6.084021 1000 0.84476495 3.9584067 - 253000 6.203987 1000 0.84094974 3.9741147 - 254000 6.3221073 1000 0.82638568 3.9898227 - 255000 6.441682 1000 0.81449512 4.0055306 - 256000 6.5625653 1000 0.80130582 4.0212386 - 257000 6.6860772 1000 0.79100139 4.0369466 - 258000 6.8117355 1000 0.78531082 4.0526545 - 259000 6.9379959 1000 0.7678277 4.0683625 - 260000 7.0606907 1000 0.74798797 4.0840704 - 261000 7.1846943 1000 0.73902576 4.0997784 - 262000 7.3084818 1000 0.73326104 4.1154864 - 263000 7.4304296 1000 0.7370234 4.1311943 - 264000 7.5536012 1000 0.73817854 4.1469023 - 265000 7.6792395 1000 0.74675482 4.1626103 - 266000 7.8061753 1000 0.7480056 4.1783182 - 267000 7.9331093 1000 0.748671 4.1940262 - 268000 8.0593048 1000 0.74430146 4.2097342 - 269000 8.1888555 1000 0.73246199 4.2254421 - 270000 8.3184687 1000 0.71666285 4.2411501 - 271000 8.4489277 1000 0.69699332 4.256858 - 272000 8.5822473 1000 0.69724726 4.272566 - 273000 8.7148666 1000 0.69752702 4.288274 - 274000 8.8426159 1000 0.69393439 4.3039819 - 275000 8.9746848 1000 0.67961922 4.3196899 - 276000 9.1020134 1000 0.67808365 4.3353979 - 277000 9.232486 1000 0.66241302 4.3511058 - 278000 9.3607588 1000 0.65559661 4.3668138 - 279000 9.4879578 1000 0.64949975 4.3825218 - 280000 9.6142148 1000 0.65351945 4.3982297 - 281000 9.7437802 1000 0.66566267 4.4139377 - 282000 9.87097 1000 0.68284419 4.4296456 - 283000 9.9975944 1000 0.68906456 4.4453536 - 284000 10.124724 1000 0.69474503 4.4610616 - 285000 10.25369 1000 0.71686298 4.4767695 - 286000 10.38212 1000 0.70966561 4.4924775 - 287000 10.513274 1000 0.70173402 4.5081855 - 288000 10.641359 1000 0.69841037 4.5238934 - 289000 10.765608 1000 0.68947449 4.5396014 - 290000 10.893738 1000 0.68391661 4.5553093 - 291000 11.018982 1000 0.69112115 4.5710173 - 292000 11.146639 1000 0.70208247 4.5867253 - 293000 11.269392 1000 0.70044553 4.6024332 - 294000 11.39243 1000 0.69973655 4.6181412 - 295000 11.517741 1000 0.70719661 4.6338492 - 296000 11.643013 1000 0.69961909 4.6495571 - 297000 11.771064 1000 0.7038606 4.6652651 - 298000 11.899855 1000 0.70651383 4.6809731 - 299000 12.024499 1000 0.72028817 4.696681 - 300000 12.151124 1000 0.72141372 4.712389 - 301000 12.278902 1000 0.73011344 4.7280969 - 302000 12.402615 1000 0.74750506 4.7438049 - 303000 12.524021 1000 0.74362139 4.7595129 - 304000 12.645914 1000 0.73643471 4.7752208 - 305000 12.766721 1000 0.73250587 4.7909288 - 306000 12.945373 1000 0.72450933 4.8066368 - 307000 13.084062 1000 0.71650682 4.8223447 - 308000 13.210593 1000 0.71012044 4.8380527 - 309000 13.339536 1000 0.7045498 4.8537606 - 310000 13.477512 1000 0.69904261 4.8694686 - 311000 13.617832 1000 0.69370407 4.8851766 - 312000 13.802532 1000 0.70012261 4.9008845 - 313000 13.9682 1000 0.69796658 4.9165925 - 314000 14.139079 1000 0.70673901 4.9323005 - 315000 14.290205 1000 0.70285296 4.9480084 - 316000 14.414474 1000 0.69917788 4.9637164 - 317000 14.541743 1000 0.69153454 4.9794244 - 318000 14.672817 1000 0.69630312 4.9951323 - 319000 14.800594 1000 0.70732059 5.0108403 - 320000 14.982014 1000 0.71069744 5.0265482 - 321000 15.126459 1000 0.70982909 5.0422562 - 322000 15.264165 1000 0.70514067 5.0579642 - 323000 15.391036 1000 0.70591206 5.0736721 - 324000 15.518096 1000 0.70992653 5.0893801 - 325000 15.644416 1000 0.70605327 5.1050881 - 326000 15.772686 1000 0.70492617 5.120796 - 327000 15.899812 1000 0.69711977 5.136504 - 328000 16.050906 1000 0.68791974 5.152212 - 329000 16.197987 1000 0.68350425 5.1679199 - 330000 16.346901 1000 0.67886559 5.1836279 - 331000 16.511885 1000 0.6838106 5.1993358 - 332000 16.666556 1000 0.68570448 5.2150438 - 333000 16.820557 1000 0.68347768 5.2307518 - 334000 16.972048 1000 0.67352858 5.2464597 - 335000 17.171176 1000 0.67154375 5.2621677 - 336000 17.380218 1000 0.67050288 5.2778757 - 337000 17.561848 1000 0.66093797 5.2935836 - 338000 17.746525 1000 0.65261747 5.3092916 - 339000 17.926411 1000 0.65084314 5.3249995 - 340000 18.105197 1000 0.65003008 5.3407075 - 341000 18.235972 1000 0.65397536 5.3564155 - 342000 18.389741 1000 0.67129271 5.3721234 - 343000 18.604032 1000 0.68934086 5.3878314 - 344000 18.788879 1000 0.71225704 5.4035394 - 345000 18.935273 1000 0.72645711 5.4192473 - 346000 19.136926 1000 0.73153889 5.4349553 - 347000 19.310095 1000 0.74047453 5.4506633 - 348000 19.476545 1000 0.74508084 5.4663712 - 349000 19.599138 1000 0.74030176 5.4820792 - 350000 19.753114 1000 0.72037009 5.4977871 - 351000 19.893497 1000 0.71009934 5.5134951 - 352000 20.020982 1000 0.69475509 5.5292031 - 353000 20.149857 1000 0.68883962 5.544911 - 354000 20.278476 1000 0.68764856 5.560619 - 355000 20.407747 1000 0.6853423 5.576327 - 356000 20.53591 1000 0.69528948 5.5920349 - 357000 20.668654 1000 0.70787069 5.6077429 - 358000 20.802835 1000 0.70110924 5.6234508 - 359000 20.950394 1000 0.69356484 5.6391588 - 360000 21.076061 1000 0.69727901 5.6548668 - 361000 21.224785 1000 0.69878093 5.6705747 - 362000 21.416947 1000 0.70063124 5.6862827 - 363000 21.632619 1000 0.68842038 5.7019907 - 364000 21.836231 1000 0.68478573 5.7176986 - 365000 21.963636 1000 0.68232032 5.7334066 - 366000 22.092926 1000 0.66971225 5.7491146 - 367000 22.219251 1000 0.67006227 5.7648225 - 368000 22.344723 1000 0.6694355 5.7805305 - 369000 22.470654 1000 0.66622377 5.7962384 - 370000 22.59941 1000 0.66501888 5.8119464 - 371000 22.732869 1000 0.66108622 5.8276544 - 372000 22.859824 1000 0.65989005 5.8433623 - 373000 22.989282 1000 0.65277032 5.8590703 - 374000 23.116089 1000 0.64599939 5.8747783 - 375000 23.243733 1000 0.64279675 5.8904862 - 376000 23.371971 1000 0.64321129 5.9061942 - 377000 23.505382 1000 0.65596736 5.9219022 - 378000 23.638755 1000 0.68055295 5.9376101 - 379000 23.770714 1000 0.71147476 5.9533181 - 380000 23.906376 1000 0.7478441 5.969026 - 381000 24.040685 1000 0.76216879 5.984734 - 382000 24.173446 1000 0.78574658 6.000442 - 383000 24.30114 1000 0.80947952 6.0161499 - 384000 24.426872 1000 0.81514681 6.0318579 - 385000 24.555905 1000 0.81469775 6.0475659 - 386000 24.684891 1000 0.80579609 6.0632738 - 387000 24.811946 1000 0.79952446 6.0789818 - 388000 24.940028 1000 0.78668384 6.0946897 - 389000 25.061479 1000 0.78375511 6.1103977 - 390000 25.18315 1000 0.78124583 6.1261057 - 391000 25.303012 1000 0.77072038 6.1418136 - 392000 25.423275 1000 0.75748297 6.1575216 - 393000 25.542996 1000 0.74703682 6.1732296 - 394000 25.661826 1000 0.74135384 6.1889375 - 395000 25.782254 1000 0.73344196 6.2046455 - 396000 25.903156 1000 0.72305463 6.2203535 - 397000 26.026207 1000 0.71221263 6.2360614 - 398000 26.145498 1000 0.70602241 6.2517694 - 399000 26.266146 1000 0.69822375 6.2674773 - 400000 26.387762 1000 0.69567985 6.2831853 -Loop time of 26.3878 on 4 procs for 200000 steps with 1000 atoms - -Performance: 30942.580 tau/day, 7579.263 timesteps/s, 7.579 Matom-step/s -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.6871 | 2.8172 | 3.925 | 64.8 | 10.68 -Neigh | 0.017325 | 0.021917 | 0.026669 | 3.1 | 0.08 -Comm | 4.7404 | 6.0917 | 7.4409 | 54.5 | 23.09 -Output | 0.0043138 | 0.0065642 | 0.0087622 | 1.9 | 0.02 -Modify | 13.258 | 14.716 | 16.132 | 35.6 | 55.77 -Other | | 2.735 | | | 10.36 - -Nlocal: 250 ave 257 max 241 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Nghost: 387.5 ave 477 max 299 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 1233.5 ave 1523 max 917 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 4934 -Ave neighs/atom = 4.934 -Neighbor list builds = 168 -Dangerous builds = 0 -Total wall time: 0:00:40 diff --git a/examples/granregion/log.27Jun24.granregion.box.g++.1 b/examples/granregion/log.27Jun24.granregion.box.g++.1 new file mode 100644 index 0000000000..63782bb19f --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.box.g++.1 @@ -0,0 +1,482 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pouring spheres into container box + +units lj +atom_style sphere +boundary f f f +dimension 3 +comm_modify vel yes + +region box block -10 10 -10 10 -10 10 units box +create_box 2 box +Created orthogonal box = (-10 -10 -10) to (10 10 10) + 1 by 1 by 1 MPI processor grid + +pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 +pair_coeff * * gran/hooke + +region container block -6 6 -6 6 -6 6 units box +fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 2 all nve/sphere +fix 3 all gravity 1.0 vector 0 0 -1 + +region slab block -2 2 -2 2 -2 2 units box +fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore + +timestep 0.005 + +compute 1 all temp +compute_modify 1 dynamic/dof yes + +compute 2 all temp/sphere +compute_modify 2 dynamic/dof yes + +thermo 100 +thermo_style custom step atoms temp c_1 c_2 press +thermo_modify lost ignore +compute_modify thermo_temp dynamic/dof yes + +#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 48 every 566 steps, 100 by step 1133 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 31 31 31 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke, perpetual + attributes: half, newton on, size + pair build: half/size/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.5861 | 0.5861 | 0.5861 Mbytes + Step Atoms Temp c_1 c_2 Press + 0 0 0 0 0 0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 100 30 0.803783 0.803783 0.39507978 0.0029137134 + 200 30 1.1967995 1.1967995 0.5882574 0.0043383984 + 300 30 1.2814686 1.2814686 0.62987441 0.0046453238 + 400 30 0.82331082 0.82331082 0.41173176 0.0029845017 + 500 30 0.7708462 0.7708462 0.38777784 0.0043831147 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 600 64 0.51564897 0.51564897 0.26631577 0.0040059368 + 700 64 0.57239348 0.57239348 0.29566901 0.0045075987 + 800 64 0.61837087 0.61837087 0.32195387 0.0048123564 + 900 64 0.53061888 0.53061888 0.28564763 0.0055906552 + 1000 64 0.496299 0.496299 0.26801572 0.0061169128 + 1100 64 0.46068308 0.46068308 0.24699057 0.0055717699 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 1200 99 0.39206225 0.39206225 0.21356546 0.0066294211 + 1300 99 0.38624966 0.38624966 0.21345854 0.0049051051 + 1400 99 0.35615284 0.35615284 0.19785725 0.0046170772 + 1500 99 0.31486693 0.31486693 0.17429055 0.0064903432 + 1600 99 0.26369001 0.26369001 0.15095266 0.0045226847 + 1700 100 0.1925923 0.1925923 0.11308104 0.007362313 + 1800 100 0.13724978 0.13724978 0.083276845 0.0058136373 + 1900 100 0.077212636 0.077212636 0.053159386 0.0016509598 + 2000 100 0.065294031 0.065294031 0.04372752 0.0020346467 + 2100 100 0.057431398 0.057431398 0.037977068 0.0012681098 + 2200 100 0.059093045 0.059093045 0.037435193 0.00096610799 + 2300 100 0.03422338 0.03422338 0.025491304 0.00069886052 + 2400 100 0.020558284 0.020558284 0.016163009 0.0017260663 + 2500 100 0.015339709 0.015339709 0.012329236 0.00041308031 + 2600 100 0.012891354 0.012891354 0.009766054 0.00030356722 + 2700 100 0.0092634449 0.0092634449 0.0073580108 0.00077723051 + 2800 100 0.0073925841 0.0073925841 0.0059932218 0.00016466767 + 2900 100 0.0081228267 0.0081228267 0.006281761 0.00013828388 + 3000 100 0.0041833223 0.0041833223 0.0035147096 0.00013160599 + 3100 100 0.0035930775 0.0035930775 0.0030039922 0.00060639771 + 3200 100 0.0030824465 0.0030824465 0.0026541293 0.00047391014 + 3300 100 0.0035087522 0.0035087522 0.0027664508 0.00014080317 + 3400 100 0.0018537868 0.0018537868 0.0017099705 6.3326674e-05 + 3500 100 0.0015371228 0.0015371228 0.0014155433 0.00021612522 + 3600 100 0.001708556 0.001708556 0.0014369892 8.1034202e-05 + 3700 100 0.00095948652 0.00095948652 0.0009788528 3.4694023e-05 + 3800 100 0.00091875668 0.00091875668 0.00086805146 3.9373686e-05 + 3900 100 0.001557068 0.001557068 0.001159526 2.5178607e-05 + 4000 100 0.00062012451 0.00062012451 0.00066806922 5.6680551e-06 + 4100 100 0.00060940771 0.00060940771 0.00065614741 1.0137901e-05 + 4200 100 0.00059538437 0.00059538437 0.00064501521 7.3679744e-06 + 4300 100 0.00052946048 0.00052946048 0.00059353641 5.9225081e-06 + 4400 100 0.00051202281 0.00051202281 0.00057524772 3.6198435e-05 + 4500 100 0.00049986632 0.00049986632 0.00055754521 2.2275519e-05 + 4600 100 0.00048187334 0.00048187334 0.00053988815 2.2015243e-05 + 4700 100 0.00045261491 0.00045261491 0.00050298355 8.9681339e-05 + 4800 100 0.00034965427 0.00034965427 0.0004278781 1.0983535e-05 + 4900 100 0.00033555621 0.00033555621 0.00041435167 2.9266598e-05 + 5000 100 0.00031387148 0.00031387148 0.00039605781 2.5628425e-05 +Loop time of 0.0497806 on 1 procs for 5000 steps with 100 atoms + +Performance: 43390431.056 tau/day, 100440.813 timesteps/s, 10.044 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0052991 | 0.0052991 | 0.0052991 | 0.0 | 10.64 +Neigh | 0.008529 | 0.008529 | 0.008529 | 0.0 | 17.13 +Comm | 0.00050137 | 0.00050137 | 0.00050137 | 0.0 | 1.01 +Output | 0.00028923 | 0.00028923 | 0.00028923 | 0.0 | 0.58 +Modify | 0.033612 | 0.033612 | 0.033612 | 0.0 | 67.52 +Other | | 0.00155 | | | 3.11 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 164 ave 164 max 164 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 164 +Ave neighs/atom = 1.64 +Neighbor list builds = 281 +Dangerous builds = 0 + +region container delete +variable theta equal (step-5000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +WARNING: Region properties for region container changed between runs, resetting its motion (../fix_wall_gran_region.cpp:96) +Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes + Step Atoms Temp c_1 c_2 Press + 5000 100 0.00031387148 0.00031387148 0.00039605781 2.6174978e-05 + 5100 100 0.54537023 0.54537023 0.30042175 0.0087427352 + 5200 100 0.57210852 0.57210852 0.3192468 0.0098134067 + 5300 100 0.7168108 0.7168108 0.38577893 0.011004584 + 5400 100 0.78895524 0.78895524 0.41889428 0.013555713 + 5500 100 0.87797874 0.87797874 0.45689223 0.01565356 + 5600 100 0.95424379 0.95424379 0.48830429 0.014707858 + 5700 100 1.0046012 1.0046012 0.51054927 0.01469179 + 5800 100 1.0371453 1.0371453 0.5262568 0.015576788 + 5900 100 1.0545743 1.0545743 0.5361173 0.01589889 + 6000 100 1.0932949 1.0932949 0.55402214 0.017484573 + 6100 100 1.1148364 1.1148364 0.56241126 0.01721788 + 6200 100 1.1315267 1.1315267 0.57050887 0.017961246 + 6300 100 1.1506124 1.1506124 0.58009471 0.017159062 + 6400 100 1.1663328 1.1663328 0.5876586 0.017935311 + 6500 100 1.1821086 1.1821086 0.59595161 0.018005315 + 6600 100 1.2039397 1.2039397 0.60567524 0.021604662 + 6700 100 1.2269912 1.2269912 0.61770225 0.018907995 + 6800 100 1.2447035 1.2447035 0.6257652 0.020537656 + 6900 100 1.2625323 1.2625323 0.63486698 0.020106131 + 7000 100 1.2617127 1.2617127 0.63318163 0.019670429 + 7100 100 1.260715 1.260715 0.63311254 0.01981063 + 7200 100 1.2790404 1.2790404 0.64079 0.02021891 + 7300 100 1.2760228 1.2760228 0.6395331 0.021749943 + 7400 100 1.2799657 1.2799657 0.64139079 0.020472918 + 7500 100 1.2846472 1.2846472 0.64343078 0.02061003 + 7600 100 1.2883963 1.2883963 0.64491863 0.020748893 + 7700 100 1.2926891 1.2926891 0.6468454 0.02059959 + 7800 100 1.3033563 1.3033563 0.65126208 0.021822102 + 7900 100 1.3025795 1.3025795 0.65069464 0.021213858 + 8000 100 1.3052548 1.3052548 0.65209881 0.021398728 + 8100 100 1.3069801 1.3069801 0.6530457 0.021245966 + 8200 100 1.3092011 1.3092011 0.65438349 0.02122166 + 8300 100 1.3101277 1.3101277 0.65518546 0.021329292 + 8400 100 1.3117013 1.3117013 0.65550345 0.021460379 + 8500 100 1.3144455 1.3144455 0.65685825 0.021604641 + 8600 100 1.3164134 1.3164134 0.65789495 0.021563159 + 8700 100 1.3186879 1.3186879 0.6591421 0.021754259 + 8800 100 1.3216911 1.3216911 0.66041154 0.022161545 + 8900 100 1.3207611 1.3207611 0.65988391 0.021812278 + 9000 100 1.3213163 1.3213163 0.66021107 0.021890934 + 9100 100 1.3224957 1.3224957 0.66088572 0.021825725 + 9200 100 1.3240758 1.3240758 0.66183609 0.021785081 + 9300 100 1.3254189 1.3254189 0.66280087 0.021665121 + 9400 100 1.3325923 1.3325923 0.66627599 0.021935299 + 9500 100 1.3403779 1.3403779 0.66969078 0.022258389 + 9600 100 1.3360821 1.3360821 0.66729084 0.022125375 + 9700 100 1.3364048 1.3364048 0.66733374 0.022084635 + 9800 100 1.3348391 1.3348391 0.66653654 0.021957941 + 9900 100 1.3340902 1.3340902 0.66619851 0.022132442 + 10000 100 1.3341233 1.3341233 0.66625291 0.02242346 +Loop time of 0.170031 on 1 procs for 5000 steps with 100 atoms + +Performance: 12703591.746 tau/day, 29406.462 timesteps/s, 2.941 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.02428 | 0.02428 | 0.02428 | 0.0 | 14.28 +Neigh | 0.02016 | 0.02016 | 0.02016 | 0.0 | 11.86 +Comm | 0.00063308 | 0.00063308 | 0.00063308 | 0.0 | 0.37 +Output | 0.00026926 | 0.00026926 | 0.00026926 | 0.0 | 0.16 +Modify | 0.12295 | 0.12295 | 0.12295 | 0.0 | 72.31 +Other | | 0.001744 | | | 1.03 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 186 ave 186 max 186 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 186 +Ave neighs/atom = 1.86 +Neighbor list builds = 626 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes + Step Atoms Temp c_1 c_2 Press + 10000 100 1.3341233 1.3341233 0.66625291 0.022389629 + 10100 100 0.29934208 0.29934208 0.17559716 0.0080511663 + 10200 100 0.15937333 0.15937333 0.10361049 0.0052770441 + 10300 100 0.083457844 0.083457844 0.067443759 0.0019700613 + 10400 100 0.065692832 0.065692832 0.055653291 0.0018339668 + 10500 100 0.052804438 0.052804438 0.045281034 0.0016027455 + 10600 100 0.04328663 0.04328663 0.037333736 0.0010520803 + 10700 100 0.034758594 0.034758594 0.030913039 0.00098209982 + 10800 100 0.031059386 0.031059386 0.027743119 0.00043771073 + 10900 100 0.025257043 0.025257043 0.023417455 0.00057319686 + 11000 100 0.020661736 0.020661736 0.019736355 0.00027957807 + 11100 100 0.017347891 0.017347891 0.017523904 0.00033806442 + 11200 100 0.013838843 0.013838843 0.013891648 0.0004814668 + 11300 100 0.010848849 0.010848849 0.011429994 0.00017218727 + 11400 100 0.0087243303 0.0087243303 0.0089442702 0.00075858277 + 11500 100 0.0073404505 0.0073404505 0.0074359014 0.00016419055 + 11600 100 0.005593778 0.005593778 0.0059169171 0.00067508582 + 11700 100 0.0051164194 0.0051164194 0.0053270943 8.4490639e-05 + 11800 100 0.00441161 0.00441161 0.0046984183 8.1750645e-05 + 11900 100 0.0040823871 0.0040823871 0.0044273607 0.00057274663 + 12000 100 0.0036457853 0.0036457853 0.0041171254 6.4466313e-05 + 12100 100 0.0034927566 0.0034927566 0.0039732335 0.00010435211 + 12200 100 0.0034030997 0.0034030997 0.0038913895 7.5846038e-05 + 12300 100 0.0032970662 0.0032970662 0.0036879396 8.4270392e-05 + 12400 100 0.0031107627 0.0031107627 0.0034222463 0.00010403492 + 12500 100 0.0029402407 0.0029402407 0.0033029532 3.6385479e-05 + 12600 100 0.0027926657 0.0027926657 0.0031897566 4.143403e-05 + 12700 100 0.0026584426 0.0026584426 0.0030863436 0.00017608636 + 12800 100 0.0020593472 0.0020593472 0.0024174548 2.5484422e-05 + 12900 100 0.0019445876 0.0019445876 0.0023331214 1.3291393e-05 + 13000 100 0.0019356798 0.0019356798 0.0023208275 3.7775631e-05 + 13100 100 0.001917674 0.001917674 0.0023067328 2.3731216e-05 + 13200 100 0.0018402122 0.0018402122 0.0022290175 2.3227838e-05 + 13300 100 0.0017947406 0.0017947406 0.0021839926 5.68555e-05 + 13400 100 0.0016930751 0.0016930751 0.0020981569 3.762312e-05 + 13500 100 0.0016591044 0.0016591044 0.0020636607 2.0531417e-05 + 13600 100 0.0015170608 0.0015170608 0.0019236349 2.87871e-05 + 13700 100 0.0014040099 0.0014040099 0.0017412115 3.7091497e-05 + 13800 100 0.0013892837 0.0013892837 0.0017134626 1.7192386e-05 + 13900 100 0.0013189709 0.0013189709 0.0016364794 0.00022920131 + 14000 100 0.0012610766 0.0012610766 0.0015926858 1.5605822e-05 + 14100 100 0.0010746324 0.0010746324 0.0014018754 1.8598362e-05 + 14200 100 0.0010259837 0.0010259837 0.0013546872 1.7918726e-05 + 14300 100 0.0008919653 0.0008919653 0.0011534101 0.00015490093 + 14400 100 0.00087001531 0.00087001531 0.0011016258 1.0766439e-05 + 14500 100 0.00083846397 0.00083846397 0.0010767041 1.0375992e-05 + 14600 100 0.0008155908 0.0008155908 0.00105642 1.2582086e-05 + 14700 100 0.00080868405 0.00080868405 0.00104978 7.027334e-05 + 14800 100 0.00073613153 0.00073613153 0.00098179118 3.236684e-05 + 14900 100 0.00071371931 0.00071371931 0.00095309072 8.6245124e-06 + 15000 100 0.00070031746 0.00070031746 0.0009423403 2.4693888e-05 +Loop time of 0.0531531 on 1 procs for 5000 steps with 100 atoms + +Performance: 40637346.357 tau/day, 94067.931 timesteps/s, 9.407 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0049693 | 0.0049693 | 0.0049693 | 0.0 | 9.35 +Neigh | 0.0033529 | 0.0033529 | 0.0033529 | 0.0 | 6.31 +Comm | 0.00045859 | 0.00045859 | 0.00045859 | 0.0 | 0.86 +Output | 0.00031163 | 0.00031163 | 0.00031163 | 0.0 | 0.59 +Modify | 0.042417 | 0.042417 | 0.042417 | 0.0 | 79.80 +Other | | 0.001644 | | | 3.09 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 157 ave 157 max 157 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 157 +Ave neighs/atom = 1.57 +Neighbor list builds = 101 +Dangerous builds = 0 + +region container delete +variable theta equal (step-15000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes + Step Atoms Temp c_1 c_2 Press + 15000 100 0.00070031746 0.00070031746 0.0009423403 2.4820402e-05 + 15100 100 1.0378931 1.0378931 0.67940294 0.014665698 + 15200 100 1.0517533 1.0517533 0.69115597 0.01309217 + 15300 100 1.1062671 1.1062671 0.73515555 0.015692859 + 15400 100 1.385963 1.385963 0.89710836 0.022187064 + 15500 100 1.5008849 1.5008849 0.94689573 0.030001316 + 15600 100 1.6919387 1.6919387 1.0471028 0.026806301 + 15700 100 1.8311512 1.8311512 1.1071134 0.024492529 + 15800 100 1.8517819 1.8517819 1.1216762 0.028629961 + 15900 100 1.8895616 1.8895616 1.1177621 0.028934483 + 16000 100 2.0691195 2.0691195 1.1848851 0.032794489 + 16100 100 2.2520282 2.2520282 1.26292 0.030167679 + 16200 100 2.2879859 2.2879859 1.2866695 0.02974115 + 16300 100 2.3679798 2.3679798 1.3150501 0.032771704 + 16400 100 2.3846251 2.3846251 1.3122933 0.029948284 + 16500 100 2.528765 2.528765 1.3886857 0.032511301 + 16600 100 2.5465734 2.5465734 1.4009546 0.033614459 + 16700 100 2.6883939 2.6883939 1.457327 0.039494183 + 16800 100 2.8655546 2.8655546 1.5468292 0.036099395 + 16900 100 2.8919695 2.8919695 1.5768619 0.037384016 + 17000 100 3.0433407 3.0433407 1.6445056 0.037344364 + 17100 100 3.2283804 3.2283804 1.7335616 0.041395151 + 17200 100 3.3098823 3.3098823 1.7794605 0.04616548 + 17300 100 3.3890828 3.3890828 1.8289994 0.050512368 + 17400 100 3.278912 3.278912 1.7770308 0.04270684 + 17500 100 3.3373113 3.3373113 1.7927421 0.056764855 + 17600 100 3.3264731 3.3264731 1.8066541 0.045863538 + 17700 100 3.0707481 3.0707481 1.6881602 0.047285321 + 17800 100 3.0911023 3.0911023 1.7142589 0.040005715 + 17900 100 3.1368 3.1368 1.7314207 0.043475979 + 18000 100 3.1705064 3.1705064 1.7503598 0.042272578 + 18100 100 3.2348301 3.2348301 1.7599183 0.042974559 + 18200 100 3.4676237 3.4676237 1.8675014 0.051937094 + 18300 100 3.460493 3.460493 1.8710624 0.04615202 + 18400 100 3.4132328 3.4132328 1.8379148 0.048316249 + 18500 100 3.6046 3.6046 1.936101 0.046093227 + 18600 100 3.6898847 3.6898847 1.985425 0.048623681 + 18700 100 3.8073645 3.8073645 2.0517694 0.051139644 + 18800 100 3.9453683 3.9453683 2.121645 0.053091211 + 18900 100 3.891796 3.891796 2.1038949 0.047975378 + 19000 100 3.9805517 3.9805517 2.143216 0.052740909 + 19100 100 3.8032187 3.8032187 2.0535533 0.060896481 + 19200 100 3.8956813 3.8956813 2.1023053 0.055995941 + 19300 100 3.8441465 3.8441465 2.0783298 0.055586425 + 19400 100 3.6983054 3.6983054 1.9993476 0.051487825 + 19500 100 3.9082901 3.9082901 2.110386 0.055361137 + 19600 100 3.8183806 3.8183806 2.0521248 0.054637936 + 19700 100 3.9479599 3.9479599 2.123487 0.05654763 + 19800 100 3.7900356 3.7900356 2.0309629 0.055030689 + 19900 100 3.8526352 3.8526352 2.079537 0.052237722 + 20000 100 3.7004965 3.7004965 2.0054313 0.052260073 +Loop time of 0.141466 on 1 procs for 5000 steps with 100 atoms + +Performance: 15268708.811 tau/day, 35344.233 timesteps/s, 3.534 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0092801 | 0.0092801 | 0.0092801 | 0.0 | 6.56 +Neigh | 0.030749 | 0.030749 | 0.030749 | 0.0 | 21.74 +Comm | 0.00076276 | 0.00076276 | 0.00076276 | 0.0 | 0.54 +Output | 0.00026657 | 0.00026657 | 0.00026657 | 0.0 | 0.19 +Modify | 0.098434 | 0.098434 | 0.098434 | 0.0 | 69.58 +Other | | 0.001973 | | | 1.39 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 144 ave 144 max 144 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 144 +Ave neighs/atom = 1.44 +Neighbor list builds = 906 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.837 | 5.837 | 5.837 Mbytes + Step Atoms Temp c_1 c_2 Press + 20000 100 3.7004965 3.7004965 2.0054313 0.051978523 + 20100 100 1.0456682 1.0456682 0.65203589 0.01426764 + 20200 100 0.92132571 0.92132571 0.56692143 0.016160496 + 20300 100 0.9080139 0.9080139 0.54653258 0.011333456 + 20400 100 0.95504442 0.95504442 0.56626124 0.011989567 + 20500 100 0.85373295 0.85373295 0.5162143 0.011906206 + 20600 100 1.0224737 1.0224737 0.59801919 0.012676175 + 20700 100 0.98041767 0.98041767 0.57722359 0.015534239 + 20800 100 0.94580127 0.94580127 0.54452681 0.014648617 + 20900 100 0.92685337 0.92685337 0.52998999 0.012221026 + 21000 100 0.67355263 0.67355263 0.38349088 0.0096954349 + 21100 100 0.30344447 0.30344447 0.20123228 0.0065577613 + 21200 100 0.16818819 0.16818819 0.12097279 0.0042401405 + 21300 100 0.10742131 0.10742131 0.082910182 0.0032814832 + 21400 100 0.096764554 0.096764554 0.071534839 0.0029435039 + 21500 100 0.046970465 0.046970465 0.04129138 0.0017468115 + 21600 100 0.032766377 0.032766377 0.026265793 0.0016491276 + 21700 100 0.022152668 0.022152668 0.019394268 0.00050552315 + 21800 100 0.020778 0.020778 0.017776111 0.00098557239 + 21900 100 0.020778283 0.020778283 0.017641295 0.00074778783 + 22000 100 0.01698488 0.01698488 0.01429695 0.0005628648 + 22100 100 0.01418614 0.01418614 0.012102299 0.00051794337 + 22200 100 0.013346276 0.013346276 0.011394805 0.00032236098 + 22300 100 0.0079928433 0.0079928433 0.0077723623 0.00022112873 + 22400 100 0.0076254375 0.0076254375 0.0073027877 0.00031949798 + 22500 100 0.0069692597 0.0069692597 0.0069664447 0.00021312177 + 22600 100 0.006390305 0.006390305 0.0064208682 0.00041289648 + 22700 100 0.0056975941 0.0056975941 0.0057521988 0.00030399038 + 22800 100 0.0044357329 0.0044357329 0.0045549598 0.00017846882 + 22900 100 0.0036644546 0.0036644546 0.0038064043 0.00023078463 + 23000 100 0.002829538 0.002829538 0.0032135364 0.00022739562 + 23100 100 0.0027443908 0.0027443908 0.0030949164 0.00020554818 + 23200 100 0.0026840272 0.0026840272 0.00304758 0.00016936931 + 23300 100 0.0024070816 0.0024070816 0.0027285777 0.00016201789 + 23400 100 0.0021175586 0.0021175586 0.0023871632 0.00029731473 + 23500 100 0.0020591834 0.0020591834 0.0022740401 0.00015989214 + 23600 100 0.0020569788 0.0020569788 0.0022646534 0.00015753267 + 23700 100 0.0019823585 0.0019823585 0.0021969033 0.00015346211 + 23800 100 0.0021461846 0.0021461846 0.0022696006 0.00025075823 + 23900 100 0.001964677 0.001964677 0.0021583248 0.00014863082 + 24000 100 0.0019474488 0.0019474488 0.0021316684 0.00013004574 + 24100 100 0.0024970295 0.0024970295 0.0023832844 9.8929573e-05 + 24200 100 0.0017561148 0.0017561148 0.0019839926 7.1132622e-05 + 24300 100 0.0016986298 0.0016986298 0.001930582 7.1465912e-05 + 24400 100 0.001571577 0.001571577 0.0018168131 0.00015652173 + 24500 100 0.0015605078 0.0015605078 0.001789223 6.9843415e-05 + 24600 100 0.0018490208 0.0018490208 0.0019049916 5.2092258e-05 + 24700 100 0.0014134222 0.0014134222 0.0016814396 4.4173713e-05 + 24800 100 0.0013062268 0.0013062268 0.001520288 3.6497646e-05 + 24900 100 0.0012718438 0.0012718438 0.0014563564 3.8597512e-05 + 25000 100 0.0012686432 0.0012686432 0.0014211643 4.791856e-05 +Loop time of 0.0562653 on 1 procs for 5000 steps with 100 atoms + +Performance: 38389540.983 tau/day, 88864.678 timesteps/s, 8.886 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0068337 | 0.0068337 | 0.0068337 | 0.0 | 12.15 +Neigh | 0.0087607 | 0.0087607 | 0.0087607 | 0.0 | 15.57 +Comm | 0.00052045 | 0.00052045 | 0.00052045 | 0.0 | 0.92 +Output | 0.00029698 | 0.00029698 | 0.00029698 | 0.0 | 0.53 +Modify | 0.038112 | 0.038112 | 0.038112 | 0.0 | 67.74 +Other | | 0.001742 | | | 3.10 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 150 ave 150 max 150 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 150 +Ave neighs/atom = 1.5 +Neighbor list builds = 267 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/granregion/log.27Jun24.granregion.box.g++.4 b/examples/granregion/log.27Jun24.granregion.box.g++.4 new file mode 100644 index 0000000000..819ce04248 --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.box.g++.4 @@ -0,0 +1,482 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pouring spheres into container box + +units lj +atom_style sphere +boundary f f f +dimension 3 +comm_modify vel yes + +region box block -10 10 -10 10 -10 10 units box +create_box 2 box +Created orthogonal box = (-10 -10 -10) to (10 10 10) + 1 by 2 by 2 MPI processor grid + +pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1 +pair_coeff * * gran/hooke + +region container block -6 6 -6 6 -6 6 units box +fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 2 all nve/sphere +fix 3 all gravity 1.0 vector 0 0 -1 + +region slab block -2 2 -2 2 -2 2 units box +fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore + +timestep 0.005 + +compute 1 all temp +compute_modify 1 dynamic/dof yes + +compute 2 all temp/sphere +compute_modify 2 dynamic/dof yes + +thermo 100 +thermo_style custom step atoms temp c_1 c_2 press +thermo_modify lost ignore +compute_modify thermo_temp dynamic/dof yes + +#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 48 every 566 steps, 100 by step 1133 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 31 31 31 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke, perpetual + attributes: half, newton on, size + pair build: half/size/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 0.4843 | 0.4843 | 0.4843 Mbytes + Step Atoms Temp c_1 c_2 Press + 0 0 0 0 0 0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 100 30 0.803783 0.803783 0.39507978 0.0029137134 + 200 30 1.1967995 1.1967995 0.5882574 0.0043383984 + 300 30 1.2814686 1.2814686 0.62987441 0.0046453238 + 400 30 0.82331082 0.82331082 0.41173176 0.0029845017 + 500 30 0.7708462 0.7708462 0.38777784 0.0043831147 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 600 64 0.51564897 0.51564897 0.26631577 0.0040059368 + 700 64 0.57239348 0.57239348 0.29566901 0.0045075987 + 800 64 0.61837087 0.61837087 0.32195387 0.0048123564 + 900 64 0.53061888 0.53061888 0.28564763 0.0055906552 + 1000 64 0.496299 0.496299 0.26801572 0.0061169128 + 1100 64 0.46068308 0.46068308 0.24699057 0.0055717699 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 1200 99 0.39206225 0.39206225 0.21356546 0.0066294211 + 1300 99 0.38624966 0.38624966 0.21345854 0.0049051051 + 1400 99 0.35615284 0.35615284 0.19785725 0.0046170774 + 1500 99 0.31486691 0.31486691 0.17429054 0.0064903404 + 1600 99 0.26369 0.26369 0.15095263 0.0045226821 + 1700 100 0.19259352 0.19259352 0.11308184 0.0073603886 + 1800 100 0.1372448 0.1372448 0.083273652 0.0058163062 + 1900 100 0.077253038 0.077253038 0.053166156 0.0017440856 + 2000 100 0.065472093 0.065472093 0.04375349 0.0018416047 + 2100 100 0.057213469 0.057213469 0.037773954 0.001226231 + 2200 100 0.058857437 0.058857437 0.0372655 0.00090812381 + 2300 100 0.035066108 0.035066108 0.025934054 0.00072114554 + 2400 100 0.021272125 0.021272125 0.016635107 0.0018506654 + 2500 100 0.015530432 0.015530432 0.012533546 0.0013883971 + 2600 100 0.012603946 0.012603946 0.0096981459 0.00038648118 + 2700 100 0.0097347475 0.0097347475 0.0076016624 0.00057313888 + 2800 100 0.0067081771 0.0067081771 0.0056944431 0.00085080075 + 2900 100 0.0089177981 0.0089177981 0.0065036822 0.00028986539 + 3000 100 0.0057840287 0.0057840287 0.0044989265 0.00016111737 + 3100 100 0.0038909621 0.0038909621 0.0031511938 0.0001708892 + 3200 100 0.0029043214 0.0029043214 0.0025807767 9.2473673e-05 + 3300 100 0.0022769336 0.0022769336 0.0021487157 0.00022312666 + 3400 100 0.0015571397 0.0015571397 0.0016669068 0.0003381372 + 3500 100 0.0015978184 0.0015978184 0.001707772 4.9930818e-05 + 3600 100 0.0023358916 0.0023358916 0.0020709426 9.7687609e-05 + 3700 100 0.0011186736 0.0011186736 0.0012146914 9.3338234e-05 + 3800 100 0.0011657036 0.0011657036 0.0012313764 3.1931251e-05 + 3900 100 0.0014998387 0.0014998387 0.0014015491 2.4226798e-05 + 4000 100 0.0010858335 0.0010858335 0.0010623286 1.6359241e-05 + 4100 100 0.0010464314 0.0010464314 0.0010123557 1.2949588e-05 + 4200 100 0.0010022428 0.0010022428 0.00097338971 1.2402332e-05 + 4300 100 0.00080622372 0.00080622372 0.00084329652 0.00033857037 + 4400 100 0.00073613921 0.00073613921 0.00078373608 1.0103949e-05 + 4500 100 0.00071402196 0.00071402196 0.00076658004 8.8360218e-06 + 4600 100 0.00064851765 0.00064851765 0.00071533461 1.0736438e-05 + 4700 100 0.00061146699 0.00061146699 0.00068274687 4.1341755e-06 + 4800 100 0.00059511472 0.00059511472 0.0006625527 7.3645447e-06 + 4900 100 0.00057700347 0.00057700347 0.0006468562 1.5411897e-05 + 5000 100 0.00056205001 0.00056205001 0.00063592505 7.8813845e-06 +Loop time of 0.0666388 on 4 procs for 5000 steps with 100 atoms + +Performance: 32413524.665 tau/day, 75031.307 timesteps/s, 7.503 Matom-step/s +98.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.001133 | 0.0024206 | 0.0039594 | 2.6 | 3.63 +Neigh | 0.0040192 | 0.0046633 | 0.0052296 | 0.8 | 7.00 +Comm | 0.015155 | 0.021785 | 0.029291 | 4.1 | 32.69 +Output | 0.0012323 | 0.0014638 | 0.0016021 | 0.4 | 2.20 +Modify | 0.0026785 | 0.011483 | 0.021199 | 8.2 | 17.23 +Other | | 0.02482 | | | 37.25 + +Nlocal: 25 ave 53 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 4 ave 8 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 40.5 ave 92 max 0 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 162 +Ave neighs/atom = 1.62 +Neighbor list builds = 288 +Dangerous builds = 0 + +region container delete +variable theta equal (step-5000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1 +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +WARNING: Region properties for region container changed between runs, resetting its motion (../fix_wall_gran_region.cpp:96) +Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes + Step Atoms Temp c_1 c_2 Press + 5000 100 0.00056205001 0.00056205001 0.00063592505 7.871665e-06 + 5100 100 0.59585977 0.59585977 0.32464933 0.0141718 + 5200 100 0.67306764 0.67306764 0.35872096 0.013373672 + 5300 100 0.76065187 0.76065187 0.39925025 0.011460301 + 5400 100 0.87984446 0.87984446 0.45261417 0.013937042 + 5500 100 0.95548319 0.95548319 0.48706892 0.013601658 + 5600 100 0.9993278 0.9993278 0.50830306 0.015663766 + 5700 100 1.0449415 1.0449415 0.52967249 0.016797841 + 5800 100 1.0767598 1.0767598 0.54508699 0.016128855 + 5900 100 1.118688 1.118688 0.56530849 0.016830117 + 6000 100 1.1535698 1.1535698 0.58290663 0.01715335 + 6100 100 1.1753828 1.1753828 0.59419088 0.019273207 + 6200 100 1.1994171 1.1994171 0.60433264 0.018391566 + 6300 100 1.2244707 1.2244707 0.61626199 0.018842556 + 6400 100 1.2507994 1.2507994 0.62829386 0.019538413 + 6500 100 1.2684644 1.2684644 0.63747702 0.020794729 + 6600 100 1.2704726 1.2704726 0.63929889 0.020253985 + 6700 100 1.2737302 1.2737302 0.63970688 0.020858602 + 6800 100 1.287922 1.287922 0.64460894 0.021589773 + 6900 100 1.3028782 1.3028782 0.65197802 0.02135295 + 7000 100 1.306633 1.306633 0.65371741 0.021291182 + 7100 100 1.3161393 1.3161393 0.65785404 0.022554896 + 7200 100 1.3228158 1.3228158 0.6609031 0.021811977 + 7300 100 1.3245632 1.3245632 0.66161966 0.02206776 + 7400 100 1.3266822 1.3266822 0.662738 0.022070761 + 7500 100 1.3265138 1.3265138 0.6624472 0.021944768 + 7600 100 1.3286802 1.3286802 0.66338775 0.0219393 + 7700 100 1.332829 1.332829 0.66547051 0.022142398 + 7800 100 1.3323535 1.3323535 0.66534513 0.022787777 + 7900 100 1.3372424 1.3372424 0.66777556 0.02192759 + 8000 100 1.3396201 1.3396201 0.66910123 0.022439596 + 8100 100 1.3422271 1.3422271 0.67060566 0.023784952 + 8200 100 1.3468062 1.3468062 0.6728991 0.02243345 + 8300 100 1.3439408 1.3439408 0.6717529 0.022312339 + 8400 100 1.3484134 1.3484134 0.67346027 0.022770922 + 8500 100 1.3490032 1.3490032 0.67378177 0.022427863 + 8600 100 1.349789 1.349789 0.67398897 0.022494049 + 8700 100 1.3513512 1.3513512 0.67475613 0.022413559 + 8800 100 1.3535168 1.3535168 0.67589784 0.022356566 + 8900 100 1.3505765 1.3505765 0.67442168 0.022240615 + 9000 100 1.3499918 1.3499918 0.67419831 0.02226049 + 9100 100 1.3518103 1.3518103 0.67489482 0.022399038 + 9200 100 1.3526275 1.3526275 0.67529852 0.022395079 + 9300 100 1.353741 1.353741 0.67585205 0.022471008 + 9400 100 1.3538758 1.3538758 0.67589523 0.022461734 + 9500 100 1.3537199 1.3537199 0.67586527 0.022370169 + 9600 100 1.3539788 1.3539788 0.67602899 0.022400771 + 9700 100 1.3544874 1.3544874 0.67619552 0.022648464 + 9800 100 1.3555422 1.3555422 0.67666186 0.022367319 + 9900 100 1.3560106 1.3560106 0.6768751 0.02236585 + 10000 100 1.3563578 1.3563578 0.6770434 0.022359307 +Loop time of 0.117825 on 4 procs for 5000 steps with 100 atoms + +Performance: 18332213.198 tau/day, 42435.679 timesteps/s, 4.244 Matom-step/s +99.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00088578 | 0.0090104 | 0.017735 | 8.5 | 7.65 +Neigh | 0.0078603 | 0.0087927 | 0.0097327 | 1.0 | 7.46 +Comm | 0.006411 | 0.013582 | 0.022547 | 6.1 | 11.53 +Output | 0.0011273 | 0.0015902 | 0.0019777 | 1.0 | 1.35 +Modify | 0.0095221 | 0.034125 | 0.058989 | 13.2 | 28.96 +Other | | 0.05073 | | | 43.05 + +Nlocal: 25 ave 52 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 3 ave 6 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 48.25 ave 109 max 0 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 193 +Ave neighs/atom = 1.93 +Neighbor list builds = 626 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes + Step Atoms Temp c_1 c_2 Press + 10000 100 1.3563578 1.3563578 0.6770434 0.022433108 + 10100 100 0.32881547 0.32881547 0.18968913 0.0063460187 + 10200 100 0.19880113 0.19880113 0.12812646 0.0074601538 + 10300 100 0.12614062 0.12614062 0.090121373 0.0028337336 + 10400 100 0.088358363 0.088358363 0.067236815 0.0020269846 + 10500 100 0.071199344 0.071199344 0.055567135 0.0016191769 + 10600 100 0.053909616 0.053909616 0.042301996 0.00098643468 + 10700 100 0.039560745 0.039560745 0.032482256 0.00089240864 + 10800 100 0.032130432 0.032130432 0.02705329 0.00058669881 + 10900 100 0.02462494 0.02462494 0.021121496 0.0017376127 + 11000 100 0.020941068 0.020941068 0.017866781 0.00031112553 + 11100 100 0.016775675 0.016775675 0.014620214 0.00026856842 + 11200 100 0.015005732 0.015005732 0.012803923 0.00067036626 + 11300 100 0.012099209 0.012099209 0.010308221 0.00032666902 + 11400 100 0.010559421 0.010559421 0.0090243729 0.00013645685 + 11500 100 0.0093738615 0.0093738615 0.0080176514 0.00098541099 + 11600 100 0.0081900702 0.0081900702 0.0070256953 0.00025935992 + 11700 100 0.0068100165 0.0068100165 0.0058703223 0.00014866816 + 11800 100 0.0060475708 0.0060475708 0.0052518105 0.00017895168 + 11900 100 0.0055607485 0.0055607485 0.0047184164 0.00011358846 + 12000 100 0.0053149064 0.0053149064 0.0045168418 0.00015222428 + 12100 100 0.0050909525 0.0050909525 0.0043196952 6.3000537e-05 + 12200 100 0.0041810842 0.0041810842 0.0036835522 4.6423956e-05 + 12300 100 0.0034305227 0.0034305227 0.0031222649 0.00020251115 + 12400 100 0.0031763077 0.0031763077 0.0028956456 0.00030307787 + 12500 100 0.0027440829 0.0027440829 0.0025087304 0.00010418607 + 12600 100 0.0024581964 0.0024581964 0.0022200229 3.042018e-05 + 12700 100 0.002259527 0.002259527 0.0020708869 4.192368e-05 + 12800 100 0.0019143448 0.0019143448 0.0018088032 4.6200439e-05 + 12900 100 0.0017935964 0.0017935964 0.0017028317 2.2195756e-05 + 13000 100 0.0017286429 0.0017286429 0.0016396753 2.3108871e-05 + 13100 100 0.0017055291 0.0017055291 0.0016122058 2.2444611e-05 + 13200 100 0.0016539275 0.0016539275 0.0015570166 2.0467353e-05 + 13300 100 0.0015777788 0.0015777788 0.0014852505 1.9525012e-05 + 13400 100 0.0015372199 0.0015372199 0.0014497102 2.3203566e-05 + 13500 100 0.0015066638 0.0015066638 0.0014097203 1.8644964e-05 + 13600 100 0.0012290618 0.0012290618 0.0012056216 1.3235643e-05 + 13700 100 0.0011781948 0.0011781948 0.0011685226 3.4312262e-05 + 13800 100 0.0011530136 0.0011530136 0.0011433171 2.8832126e-05 + 13900 100 0.0011085224 0.0011085224 0.0011052764 1.444139e-05 + 14000 100 0.0010656788 0.0010656788 0.0010702461 1.3187775e-05 + 14100 100 0.001029277 0.001029277 0.0010469537 1.2837267e-05 + 14200 100 0.0009750904 0.0009750904 0.0009915384 1.209089e-05 + 14300 100 0.00094893337 0.00094893337 0.00096909301 1.1743051e-05 + 14400 100 0.00087708427 0.00087708427 0.00087575318 1.9027338e-05 + 14500 100 0.00086229913 0.00086229913 0.0008643568 1.0670952e-05 + 14600 100 0.00084206808 0.00084206808 0.0008268172 3.2391722e-05 + 14700 100 0.00077682873 0.00077682873 0.00077186085 9.6132555e-06 + 14800 100 0.00074736908 0.00074736908 0.00074958372 9.2486924e-06 + 14900 100 0.00074456847 0.00074456847 0.00074779946 9.2140349e-06 + 15000 100 0.00073830282 0.00073830282 0.0007426924 9.1364974e-06 +Loop time of 0.0608167 on 4 procs for 5000 steps with 100 atoms + +Performance: 35516589.034 tau/day, 82214.326 timesteps/s, 8.221 Matom-step/s +99.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00059197 | 0.0022122 | 0.0043047 | 3.5 | 3.64 +Neigh | 0.00087477 | 0.0012077 | 0.001588 | 1.0 | 1.99 +Comm | 0.0017826 | 0.010005 | 0.018966 | 8.1 | 16.45 +Output | 0.0010587 | 0.0013365 | 0.0015183 | 0.5 | 2.20 +Modify | 0.00046958 | 0.012924 | 0.027298 | 11.0 | 21.25 +Other | | 0.03313 | | | 54.48 + +Nlocal: 25 ave 53 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 3.75 ave 8 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 39.25 ave 82 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 157 +Ave neighs/atom = 1.57 +Neighbor list builds = 100 +Dangerous builds = 0 + +region container delete +variable theta equal (step-15000)*(4.0*PI/5000) +region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1 +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.609 | 5.672 | 5.735 Mbytes + Step Atoms Temp c_1 c_2 Press + 15000 100 0.00073830282 0.00073830282 0.0007426924 9.1364974e-06 + 15100 100 1.1048281 1.1048281 0.7023727 0.018379275 + 15200 100 1.2022249 1.2022249 0.77748962 0.015662439 + 15300 100 1.2561351 1.2561351 0.82563065 0.01835048 + 15400 100 1.4372446 1.4372446 0.92907923 0.02087065 + 15500 100 1.6414713 1.6414713 1.0284489 0.025654324 + 15600 100 1.7844655 1.7844655 1.0861866 0.025170346 + 15700 100 2.034248 2.034248 1.2017171 0.040341642 + 15800 100 2.1253699 2.1253699 1.2228657 0.029297194 + 15900 100 2.1940232 2.1940232 1.2470589 0.033866758 + 16000 100 2.2624419 2.2624419 1.2828225 0.030063645 + 16100 100 2.3208536 2.3208536 1.3118956 0.0323489 + 16200 100 2.3564971 2.3564971 1.3261173 0.032882494 + 16300 100 2.3956066 2.3956066 1.3260307 0.03292972 + 16400 100 2.5025831 2.5025831 1.3817693 0.031132988 + 16500 100 2.5947914 2.5947914 1.4152657 0.036126782 + 16600 100 2.7688769 2.7688769 1.4975686 0.037497127 + 16700 100 2.812503 2.812503 1.5216659 0.039316167 + 16800 100 2.8977424 2.8977424 1.5599254 0.039996029 + 16900 100 3.045802 3.045802 1.6332888 0.041406156 + 17000 100 3.2195366 3.2195366 1.7247171 0.040023634 + 17100 100 3.2597294 3.2597294 1.7527958 0.04828292 + 17200 100 3.293587 3.293587 1.7693254 0.044001441 + 17300 100 3.1861836 3.1861836 1.7142076 0.049158822 + 17400 100 3.4593561 3.4593561 1.8426619 0.053469673 + 17500 100 3.3813767 3.3813767 1.8079958 0.058776299 + 17600 100 3.5834203 3.5834203 1.9094759 0.053256842 + 17700 100 3.2243306 3.2243306 1.7425111 0.064354789 + 17800 100 3.358228 3.358228 1.8202932 0.046798524 + 17900 100 3.2257908 3.2257908 1.7678964 0.043655204 + 18000 100 3.237732 3.237732 1.7598181 0.050850672 + 18100 100 3.2042441 3.2042441 1.751979 0.045582006 + 18200 100 3.1562775 3.1562775 1.7336068 0.042210739 + 18300 100 3.2630507 3.2630507 1.7925333 0.046412778 + 18400 100 3.4150588 3.4150588 1.8668408 0.044386435 + 18500 100 3.4913198 3.4913198 1.9125495 0.043329829 + 18600 100 3.5290036 3.5290036 1.9184098 0.048302721 + 18700 100 3.4852698 3.4852698 1.8865833 0.059566124 + 18800 100 3.7157551 3.7157551 2.0082235 0.051356305 + 18900 100 3.9504619 3.9504619 2.1377018 0.051553987 + 19000 100 3.9711274 3.9711274 2.1549121 0.051555312 + 19100 100 3.90954 3.90954 2.1135174 0.0548311 + 19200 100 4.0672819 4.0672819 2.1837089 0.064431553 + 19300 100 3.998355 3.998355 2.1572884 0.056830399 + 19400 100 3.9172127 3.9172127 2.1130164 0.051264041 + 19500 100 3.9120291 3.9120291 2.1088399 0.052545115 + 19600 100 3.8613614 3.8613614 2.0752883 0.055466569 + 19700 100 3.8428824 3.8428824 2.0787804 0.05129261 + 19800 100 3.5686751 3.5686751 1.9356553 0.059177256 + 19900 100 3.5573788 3.5573788 1.9430183 0.054618794 + 20000 100 3.5453022 3.5453022 1.9413343 0.047640543 +Loop time of 0.120564 on 4 procs for 5000 steps with 100 atoms + +Performance: 17915781.606 tau/day, 41471.717 timesteps/s, 4.147 Matom-step/s +99.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0022864 | 0.0035398 | 0.0056964 | 2.2 | 2.94 +Neigh | 0.0095136 | 0.011233 | 0.012853 | 1.1 | 9.32 +Comm | 0.043338 | 0.044586 | 0.046388 | 0.6 | 36.98 +Output | 0.0011632 | 0.0012814 | 0.0013677 | 0.2 | 1.06 +Modify | 0.01756 | 0.026391 | 0.03297 | 3.5 | 21.89 +Other | | 0.03353 | | | 27.81 + +Nlocal: 25 ave 36 max 13 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 5 ave 9 max 2 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Neighs: 37.5 ave 53 max 15 min +Histogram: 1 0 0 0 0 1 0 1 0 1 + +Total # of neighbors = 150 +Ave neighs/atom = 1.5 +Neighbor list builds = 913 +Dangerous builds = 0 + +region container delete +region container block -6 6 -6 6 -6 6 units box +run 5000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.734 | 5.735 | 5.735 Mbytes + Step Atoms Temp c_1 c_2 Press + 20000 100 3.5453022 3.5453022 1.9413343 0.047178052 + 20100 100 1.0878587 1.0878587 0.68666704 0.016139979 + 20200 100 1.0230655 1.0230655 0.63593494 0.014642345 + 20300 100 0.94958824 0.94958824 0.59306601 0.011745659 + 20400 100 0.93038108 0.93038108 0.57232527 0.01154829 + 20500 100 0.92183816 0.92183816 0.55466942 0.01212559 + 20600 100 1.0175846 1.0175846 0.59940035 0.013815361 + 20700 100 1.0564615 1.0564615 0.60726745 0.013073711 + 20800 100 0.99967869 0.99967869 0.57665019 0.012450813 + 20900 100 0.97051084 0.97051084 0.5574217 0.015686955 + 21000 100 0.639185 0.639185 0.37441942 0.017594616 + 21100 100 0.24979014 0.24979014 0.17121567 0.0084027295 + 21200 100 0.15147941 0.15147941 0.11124349 0.0030435746 + 21300 100 0.13117502 0.13117502 0.091432638 0.0029110318 + 21400 100 0.11158272 0.11158272 0.076264692 0.0021951204 + 21500 100 0.056660993 0.056660993 0.043503807 0.0010993096 + 21600 100 0.028640836 0.028640836 0.026000267 0.0010440792 + 21700 100 0.025816483 0.025816483 0.021922896 0.00081674646 + 21800 100 0.023929555 0.023929555 0.019936972 0.0010383614 + 21900 100 0.022271339 0.022271339 0.017947505 0.0014630387 + 22000 100 0.019277834 0.019277834 0.015483116 0.00058751407 + 22100 100 0.019997809 0.019997809 0.015919504 0.00064176101 + 22200 100 0.015870543 0.015870543 0.01244838 0.0004205505 + 22300 100 0.011797587 0.011797587 0.0096491363 0.00034907063 + 22400 100 0.010745212 0.010745212 0.008874218 0.00035427537 + 22500 100 0.0082372399 0.0082372399 0.0071217811 0.00028179943 + 22600 100 0.007942576 0.007942576 0.0067248822 0.001507115 + 22700 100 0.0061733667 0.0061733667 0.0053092324 0.00056018554 + 22800 100 0.0058287651 0.0058287651 0.004972189 0.00023807695 + 22900 100 0.0051352339 0.0051352339 0.004324157 0.00020849263 + 23000 100 0.0040107769 0.0040107769 0.0035769703 0.00022626101 + 23100 100 0.0040288854 0.0040288854 0.0034355474 0.00019107621 + 23200 100 0.003277858 0.003277858 0.0030013165 0.00016119888 + 23300 100 0.0033633749 0.0033633749 0.0030188927 0.00014459404 + 23400 100 0.003468042 0.003468042 0.0030079205 0.00013778427 + 23500 100 0.0027616702 0.0027616702 0.0024994596 0.00011834915 + 23600 100 0.0022531303 0.0022531303 0.0021182802 0.0002279623 + 23700 100 0.002067768 0.002067768 0.0019631752 0.00014341503 + 23800 100 0.0020069255 0.0020069255 0.0019209587 0.00010673435 + 23900 100 0.0019630617 0.0019630617 0.0018748221 0.00011856923 + 24000 100 0.0018800646 0.0018800646 0.0018190347 0.00010707562 + 24100 100 0.0018028137 0.0018028137 0.0017067233 0.00010884117 + 24200 100 0.0017278932 0.0017278932 0.0016251004 0.00013664683 + 24300 100 0.0016373288 0.0016373288 0.0015529481 0.00010025414 + 24400 100 0.0019876848 0.0019876848 0.0016912033 0.00011235942 + 24500 100 0.0013677345 0.0013677345 0.0012839488 7.8669645e-05 + 24600 100 0.0012852614 0.0012852614 0.0012065052 0.00010172361 + 24700 100 0.0011145002 0.0011145002 0.0010748344 7.5021689e-05 + 24800 100 0.0012860792 0.0012860792 0.0011429675 5.7939624e-05 + 24900 100 0.00097198499 0.00097198499 0.00096175911 5.443837e-05 + 25000 100 0.00096224466 0.00096224466 0.00095159089 5.4245409e-05 +Loop time of 0.0658283 on 4 procs for 5000 steps with 100 atoms + +Performance: 32812622.584 tau/day, 75955.145 timesteps/s, 7.596 Matom-step/s +99.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00079402 | 0.002735 | 0.0055522 | 3.9 | 4.15 +Neigh | 0.0027088 | 0.003273 | 0.0038077 | 0.9 | 4.97 +Comm | 0.010018 | 0.017119 | 0.024875 | 4.8 | 26.01 +Output | 0.0010937 | 0.0013253 | 0.0015108 | 0.5 | 2.01 +Modify | 0.0012967 | 0.011558 | 0.023237 | 9.5 | 17.56 +Other | | 0.02982 | | | 45.30 + +Nlocal: 25 ave 56 max 0 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 5.5 ave 12 max 0 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 40 ave 101 max 0 min +Histogram: 2 0 0 0 0 1 0 0 0 1 + +Total # of neighbors = 160 +Ave neighs/atom = 1.6 +Neighbor list builds = 275 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/granregion/log.27Jun24.granregion.funnel.g++.1 b/examples/granregion/log.27Jun24.granregion.funnel.g++.1 new file mode 100644 index 0000000000..7c3a4cea3a --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.funnel.g++.1 @@ -0,0 +1,643 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pour particles into cone-shaped funnel, settle them, let them run out bottom + +variable name string funnel_pour + +thermo_modify flush yes +units si +variable PI equal 3.141592653589 +variable seed equal 14314 + +############################################### +# Geometry-related parameters +############################################### + +variable xlo equal 10 +variable xhi equal 40 +variable ylo equal 10 +variable yhi equal 40 +variable zlo equal -20 +variable zhi equal 50 + +variable xc equal 25 +variable yc equal 25 + +variable zconehi equal 50 +variable zconelo equal 10 +variable zcyllo equal 0 +variable radconelo equal 2 +variable radconehi equal 20 + +################################################ +# Particle sizes +################################################ + +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable skin equal ${rhi} +variable skin equal 0.5 + +############################################### +# Granular contact parameters +############################################### + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable density equal 1.0 +variable EYoung equal 10^5 +variable Poisson equal 2.0/7.0 +variable GShear equal ${EYoung}/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+0.285714285714286)) + +variable gravity equal 1.0 + +variable reff equal 0.5*(${rhi}+${rlo}) +variable reff equal 0.5*(0.5+${rlo}) +variable reff equal 0.5*(0.5+0.25) +variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 +variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 +variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 + +## Typical way to set kn, kt, etc.: +variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) +variable kt equal 4.0*${GShear}/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) + +variable a equal (-2.0*log(${coeffRes})/${PI})^2 +variable a equal (-2.0*log(0.1)/${PI})^2 +variable a equal (-2.0*log(0.1)/3.141592653589)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 903.503751814138*0.5 + +variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) + +variable dt equal ${tcol}*0.05 +variable dt equal 0.00210943016014969*0.05 +timestep ${dt} +timestep 0.000105471508007485 + +############################################### +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton off +atom_style sphere + +boundary p p f + +region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 40 ${zlo} ${zhi} +region boxreg block 10 40 10 40 -20 ${zhi} +region boxreg block 10 40 10 40 -20 50 +create_box 1 boxreg +Created orthogonal box = (10 10 -20) to (40 40 50) + 1 by 1 by 1 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 +pair_coeff * * + +neighbor ${skin} multi +neighbor 0.5 multi +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Balancing ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 30, bins = 1 1 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/multi/atomonly/newtoff + stencil: full/multi/3d + bin: multi +WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (../comm_brick.cpp:210) +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +# insertion region for fix/pour + +region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box +region insreg cylinder z 25 ${yc} 10 30 50 side in units box +region insreg cylinder z 25 25 10 30 50 side in units box + +# define cone and cylinder regions - see lammps doc on region command +# note new open options + +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 2 + +region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open +region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 + +region hopreg union 2 conereg cylreg + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + + +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 + +#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:904) +thermo_modify flush yes lost warn + +# Initial run to fill up the cone + +run 20000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 + +@Article{Intveld08, + author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, + title = {Accurate and Efficient Methods for Modeling Colloidal + Mixtures in an Explicit Solvent using Molecular Dynamics}, + journal = {Comput.\ Phys.\ Commut.}, + year = 2008, + volume = 179, + pages = {320--329} +} + +@article{Shire2020, + author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, + title = {{DEM} Simulations of Polydisperse Media: Efficient Contact + Detection Applied to Investigate the Quasi-Static Limit}, + journal = {Computational Particle Mechanics}, + year = {2020} +@article{Monti2022, + author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava, + Ishan and Silbert, Leonardo E. and Grest, Gary S. + and Lechman, Jeremy B.}, + title = {Large-scale frictionless jamming with power-law particle + size distributions}, + journal = {Phys. Rev. E}, + volume = {106} + issue = {3} + year = {2022} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 3000 every 59965 steps, 2000 by step 1 +Per MPI rank memory allocation (min/avg/max) = 6.648 | 6.648 | 6.648 Mbytes + Step CPU Atoms KinEng + 0 0 0 -0 + 1000 0.42422547 2000 -0 + 2000 0.61303447 2000 -0 + 3000 0.80093891 2000 -0 + 4000 0.9870726 2000 -0 + 5000 1.174735 2000 -0 + 6000 1.3615338 2000 -0 + 7000 1.5481574 2000 -0 + 8000 1.7332676 2000 -0 + 9000 1.9202086 2000 -0 + 10000 2.1067651 2000 -0 + 11000 2.2904529 2000 -0 + 12000 2.4750549 2000 -0 + 13000 2.6588335 2000 -0 + 14000 2.8432942 2000 -0 + 15000 3.0276634 2000 -0 + 16000 3.2143893 2000 -0 + 17000 3.3989855 2000 -0 + 18000 3.5835207 2000 -0 + 19000 3.7684773 2000 -0 + 20000 3.9550272 2000 -0 +Loop time of 3.95505 on 1 procs for 20000 steps with 2000 atoms + +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.40709 | 0.40709 | 0.40709 | 0.0 | 10.29 +Neigh | 0.065613 | 0.065613 | 0.065613 | 0.0 | 1.66 +Comm | 0.0076015 | 0.0076015 | 0.0076015 | 0.0 | 0.19 +Output | 0.00041671 | 0.00041671 | 0.00041671 | 0.0 | 0.01 +Modify | 3.3895 | 3.3895 | 3.3895 | 0.0 | 85.70 +Other | | 0.08486 | | | 2.15 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1607 ave 1607 max 1607 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1607 +Ave neighs/atom = 0.8035 +Neighbor list builds = 71 +Dangerous builds = 0 +unfix ins +run 150000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 12.69 | 12.69 | 12.69 Mbytes + Step CPU Atoms KinEng + 20000 0 2000 6652.2957 + 21000 0.18540841 2000 6807.2201 + 22000 0.37080157 2000 6973.9359 + 23000 0.55573123 2000 7142.3648 + 24000 0.74112501 2000 7276.9717 + 25000 0.92686283 2000 7369.4191 + 26000 1.1145958 2000 7497.6526 + 27000 1.3033904 2000 7638.946 + 28000 1.4921406 2000 7780.0339 + 29000 1.6824098 2000 7881.8177 + 30000 1.8751801 2000 7967.2641 + 31000 2.0698118 2000 7994.9273 + 32000 2.2682778 2000 7937.0671 + 33000 2.4695819 2000 7774.0508 + 34000 2.675988 2000 7591.1491 + 35000 2.886376 2000 7357.5176 + 36000 3.102007 2000 7147.2024 + 37000 3.321435 2000 6979.1604 + 38000 3.5426417 2000 6813.2152 + 39000 3.7660203 2000 6660.2701 + 40000 3.998044 2000 6502.8957 + 41000 4.234151 2000 6324.3951 + 42000 4.4731702 2000 6132.7516 + 43000 4.7137403 2000 5913.1841 + 44000 4.9572451 2000 5732.2095 + 45000 5.2042391 2000 5508.8322 + 46000 5.462849 2000 5306.8932 + 47000 5.724072 2000 5152.0521 + 48000 5.987507 2000 5028.2274 + 49000 6.2495317 2000 4896.102 + 50000 6.5151951 2000 4723.5189 + 51000 6.7809368 2000 4583.7526 + 52000 7.0554059 2000 4447.0187 + 53000 7.5371151 2000 4303.2307 + 54000 7.8249388 2000 4168.5251 + 55000 8.1204418 2000 4036.9704 + 56000 8.4176628 2000 3901.1183 + 57000 8.7222873 2000 3716.7071 + 58000 9.0346411 2000 3473.5422 + 59000 9.3526758 2000 3245.1223 + 60000 9.6699173 2000 3039.7845 + 61000 9.9903491 2000 2780.0187 + 62000 10.318591 2000 2577.3345 + 63000 10.65279 2000 2346.2488 + 64000 10.993148 2000 2116.7298 + 65000 11.335466 2000 1903.7828 + 66000 11.686936 2000 1631.1676 + 67000 12.046515 2000 1431.0198 + 68000 12.413611 2000 1212.875 + 69000 12.783883 2000 995.45046 + 70000 13.156707 2000 811.54766 + 71000 13.532628 2000 624.08622 + 72000 13.91241 2000 471.00862 + 73000 14.296186 2000 358.33486 + 74000 14.680961 2000 284.39416 + 75000 15.06644 2000 234.26671 + 76000 15.447805 2000 185.61836 + 77000 15.825601 2000 152.95918 + 78000 16.205661 2000 122.49023 + 79000 16.582292 2000 102.29396 + 80000 16.96433 2000 86.284684 + 81000 17.347289 2000 73.984781 + 82000 17.739993 2000 63.042918 + 83000 18.142078 2000 53.338428 + 84000 18.547853 2000 45.89585 + 85000 18.95343 2000 40.412826 + 86000 19.35904 2000 34.183381 + 87000 19.765916 2000 29.671524 + 88000 20.18651 2000 26.90414 + 89000 20.598969 2000 24.362631 + 90000 21.016445 2000 21.887341 + 91000 21.437072 2000 19.985662 + 92000 21.86331 2000 18.728162 + 93000 22.291217 2000 16.99941 + 94000 22.724102 2000 15.71941 + 95000 23.155367 2000 14.744057 + 96000 23.590722 2000 14.214918 + 97000 24.028273 2000 13.450182 + 98000 24.47017 2000 12.79222 + 99000 24.913929 2000 12.10595 + 100000 25.361256 2000 11.281863 + 101000 25.807117 2000 10.025419 + 102000 26.257292 2000 9.9574468 + 103000 26.70767 2000 9.4078117 + 104000 27.161728 2000 8.9079161 + 105000 27.617856 2000 8.6269302 + 106000 28.069631 2000 8.5512649 + 107000 28.526606 2000 8.4703948 + 108000 28.982832 2000 8.2747542 + 109000 29.441422 2000 8.2895118 + 110000 29.906198 2000 8.1785613 + 111000 30.36715 2000 7.8443234 + 112000 30.829642 2000 7.7436124 + 113000 31.319634 2000 7.8118604 + 114000 31.791602 2000 7.3806177 + 115000 32.260138 2000 7.0857235 + 116000 32.725698 2000 7.1346752 + 117000 33.192963 2000 7.0653751 + 118000 33.661517 2000 6.6314104 + 119000 34.127108 2000 6.2169614 + 120000 34.597123 2000 5.8988829 + 121000 35.064919 2000 5.4197277 + 122000 35.535855 2000 4.6381303 + 123000 36.005284 2000 4.4949206 + 124000 36.47519 2000 4.4261118 + 125000 36.945117 2000 4.4223703 + 126000 37.417732 2000 4.4858898 + 127000 37.888171 2000 4.3312536 + 128000 38.360713 2000 3.7124973 + 129000 38.835798 2000 3.5467396 + 130000 39.311234 2000 3.5104139 + 131000 39.783409 2000 3.5725612 + 132000 40.255871 2000 3.669455 + 133000 40.728998 2000 3.6168912 + 134000 41.203148 2000 3.3598517 + 135000 41.677786 2000 3.3743407 + 136000 42.15241 2000 3.1109764 + 137000 42.627707 2000 3.0720146 + 138000 43.100904 2000 3.1303776 + 139000 43.574775 2000 3.2052806 + 140000 44.050804 2000 2.8958882 + 141000 44.525409 2000 2.9931572 + 142000 44.999822 2000 3.0967832 + 143000 45.476054 2000 3.0576365 + 144000 45.951361 2000 3.2016943 + 145000 46.429655 2000 3.3817709 + 146000 46.905577 2000 3.4527239 + 147000 47.38743 2000 3.5928733 + 148000 47.86409 2000 3.7784682 + 149000 48.342003 2000 3.6587944 + 150000 48.823792 2000 3.7945669 + 151000 49.30105 2000 3.5551557 + 152000 49.780315 2000 3.6248848 + 153000 50.257553 2000 3.7361463 + 154000 50.737624 2000 3.8534319 + 155000 51.218208 2000 4.0101408 + 156000 51.695675 2000 3.7670652 + 157000 52.176961 2000 3.1487676 + 158000 52.657466 2000 2.980076 + 159000 53.134109 2000 3.0350592 + 160000 53.615609 2000 3.125389 + 161000 54.093868 2000 2.7516115 + 162000 54.576681 2000 2.413911 + 163000 55.055496 2000 2.297713 + 164000 55.538174 2000 2.3190806 + 165000 56.020458 2000 2.2868879 + 166000 56.501206 2000 2.1658547 + 167000 56.983465 2000 1.7511071 + 168000 57.466833 2000 1.4112478 + 169000 57.949757 2000 1.3623558 + 170000 58.43349 2000 1.3701579 +Loop time of 58.4335 on 1 procs for 150000 steps with 2000 atoms + +99.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 29.221 | 29.221 | 29.221 | 0.0 | 50.01 +Neigh | 0.57927 | 0.57927 | 0.57927 | 0.0 | 0.99 +Comm | 0.060749 | 0.060749 | 0.060749 | 0.0 | 0.10 +Output | 0.20563 | 0.20563 | 0.20563 | 0.0 | 0.35 +Modify | 27.674 | 27.674 | 27.674 | 0.0 | 47.36 +Other | | 0.6922 | | | 1.18 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 15308 ave 15308 max 15308 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 15308 +Ave neighs/atom = 7.654 +Neighbor list builds = 367 +Dangerous builds = 0 + +# remove "plug" - need to redefine cylinder region & union + +region cylreg delete +region hopreg delete +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 + +region hopreg union 2 cylreg conereg + +unfix hopper3 +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +run 100000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 12.69 | 12.69 | 12.69 Mbytes + Step CPU Atoms KinEng + 170000 0 2000 1.3701579 + 171000 0.48431316 2000 2.3724823 + 172000 0.96523693 2000 3.5881441 + 173000 1.4349569 2000 5.3771633 + 174000 1.902564 2000 7.5896471 + 175000 2.3637344 2000 10.77251 + 176000 2.817277 2000 14.806868 + 177000 3.2682365 2000 19.607624 + 178000 3.7215391 2000 25.426227 + 179000 4.1716711 2000 32.23584 + 180000 4.621872 2000 39.930468 + 181000 5.0676618 2000 47.686304 + 182000 5.5105545 2000 56.506806 + 183000 5.9489081 2000 66.514326 + 184000 6.3843739 2000 77.554644 + 185000 6.8189889 2000 89.224002 + 186000 7.2526358 2000 102.07846 + 187000 7.6807565 2000 116.08141 + 188000 8.1050895 2000 130.97964 + 189000 8.52413 2000 146.77806 + 190000 8.9479211 2000 162.79858 + 191000 9.3652194 2000 179.02052 + 192000 9.780893 2000 196.26683 + 193000 10.192876 2000 214.38928 + 194000 10.606655 2000 232.32068 + 195000 11.018129 2000 251.74644 + 196000 11.424821 2000 272.25231 + 197000 11.833891 2000 294.64075 + 198000 12.237613 2000 318.32895 + 199000 12.640094 2000 342.44005 + 200000 13.045535 2000 368.35469 + 201000 13.445497 2000 395.2465 + 202000 13.85102 2000 422.63599 + 203000 14.254213 2000 450.45248 + 204000 14.654729 2000 479.60812 + 205000 15.057527 2000 510.44155 + 206000 15.456223 2000 543.25751 + 207000 15.849932 2000 577.35928 + 208000 16.240706 2000 612.29718 + 209000 16.629756 2000 647.8951 + 210000 17.019318 2000 683.79409 + 211000 17.40949 2000 720.36556 + 212000 17.802521 2000 759.27331 + 213000 18.192311 2000 798.27302 + 214000 18.582347 2000 837.93849 + 215000 18.970586 2000 877.92945 + 216000 19.362316 2000 919.62532 + 217000 19.755364 2000 962.83509 + 218000 20.146845 2000 1008.5243 + 219000 20.530427 2000 1054.5769 + 220000 20.914645 2000 1103.1843 + 221000 21.296153 2000 1153.0349 + 222000 21.681747 2000 1204.5599 + 223000 22.06794 2000 1257.1367 + 224000 22.45394 2000 1308.6735 +WARNING: Lost atoms: original 2000 current 1999 (../thermo.cpp:499) + 225000 22.843026 1999 1360.1205 + 226000 23.221639 1998 1404.8405 + 227000 23.603256 1996 1448.4869 + 228000 23.985547 1992 1491.8112 + 229000 24.359685 1985 1518.7013 + 230000 24.733284 1971 1507.6699 + 231000 25.100372 1965 1533.5096 + 232000 25.470109 1948 1489.4128 + 233000 25.840892 1933 1477.4536 + 234000 26.207893 1915 1425.8398 + 235000 26.570401 1904 1410.1451 + 236000 26.931189 1892 1401.7595 + 237000 27.28796 1880 1368.893 + 238000 27.642985 1868 1341.8885 + 239000 27.998754 1850 1286.7968 + 240000 28.353974 1833 1219.5123 + 241000 28.709461 1820 1173.3608 + 242000 29.065121 1806 1106.0727 + 243000 29.418519 1788 1035.912 + 244000 29.770812 1779 1021.6147 + 245000 30.11704 1767 969.40032 + 246000 30.457702 1757 939.12022 + 247000 30.800392 1739 840.9396 + 248000 31.141047 1730 822.06575 + 249000 31.483192 1719 762.11057 + 250000 31.831879 1707 708.50308 + 251000 32.176299 1700 692.12647 + 252000 32.520059 1697 694.5812 + 253000 32.884872 1686 652.36951 + 254000 33.229261 1682 662.95256 + 255000 33.557987 1677 637.34619 + 256000 33.891681 1672 630.71277 + 257000 34.230081 1669 641.87365 + 258000 34.571663 1665 635.862 + 259000 34.913723 1664 658.5339 + 260000 35.253805 1662 669.95468 + 261000 35.587547 1660 676.93495 + 262000 35.920661 1657 681.72646 + 263000 36.25079 1655 687.4078 + 264000 36.5838 1651 681.61352 + 265000 36.914146 1647 673.20622 + 266000 37.245414 1644 677.30073 + 267000 37.571588 1641 671.05897 + 268000 37.896337 1639 689.55776 + 269000 38.22279 1637 711.98809 + 270000 38.550831 1633 705.29974 +Loop time of 38.5508 on 1 procs for 100000 steps with 1633 atoms + +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 20.145 | 20.145 | 20.145 | 0.0 | 52.25 +Neigh | 0.42523 | 0.42523 | 0.42523 | 0.0 | 1.10 +Comm | 0.042119 | 0.042119 | 0.042119 | 0.0 | 0.11 +Output | 0.0022978 | 0.0022978 | 0.0022978 | 0.0 | 0.01 +Modify | 17.495 | 17.495 | 17.495 | 0.0 | 45.38 +Other | | 0.4416 | | | 1.15 + +Nlocal: 1633 ave 1633 max 1633 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 11358 ave 11358 max 11358 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 11358 +Ave neighs/atom = 6.955297 +Neighbor list builds = 244 +Dangerous builds = 0 +Total wall time: 0:01:40 diff --git a/examples/granregion/log.27Jun24.granregion.funnel.g++.4 b/examples/granregion/log.27Jun24.granregion.funnel.g++.4 new file mode 100644 index 0000000000..ffd7e011fa --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.funnel.g++.4 @@ -0,0 +1,643 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pour particles into cone-shaped funnel, settle them, let them run out bottom + +variable name string funnel_pour + +thermo_modify flush yes +units si +variable PI equal 3.141592653589 +variable seed equal 14314 + +############################################### +# Geometry-related parameters +############################################### + +variable xlo equal 10 +variable xhi equal 40 +variable ylo equal 10 +variable yhi equal 40 +variable zlo equal -20 +variable zhi equal 50 + +variable xc equal 25 +variable yc equal 25 + +variable zconehi equal 50 +variable zconelo equal 10 +variable zcyllo equal 0 +variable radconelo equal 2 +variable radconehi equal 20 + +################################################ +# Particle sizes +################################################ + +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable skin equal ${rhi} +variable skin equal 0.5 + +############################################### +# Granular contact parameters +############################################### + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable density equal 1.0 +variable EYoung equal 10^5 +variable Poisson equal 2.0/7.0 +variable GShear equal ${EYoung}/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+${Poisson})) +variable GShear equal 100000/(2*(1+0.285714285714286)) + +variable gravity equal 1.0 + +variable reff equal 0.5*(${rhi}+${rlo}) +variable reff equal 0.5*(0.5+${rlo}) +variable reff equal 0.5*(0.5+0.25) +variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*${PI}*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3 +variable meff equal 1*4.0/3.0*3.141592653589*0.375^3 +variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo} +variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25 +variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi} +variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5 + +## Typical way to set kn, kt, etc.: +variable kn equal 4.0*${GShear}/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson})) +variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286)) +variable kt equal 4.0*${GShear}/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-${Poisson}) +variable kt equal 4.0*38888.8888888889/(2-0.285714285714286) + +variable a equal (-2.0*log(${coeffRes})/${PI})^2 +variable a equal (-2.0*log(0.1)/${PI})^2 +variable a equal (-2.0*log(0.1)/3.141592653589)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 903.503751814138*0.5 + +variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0) +variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0) + +variable dt equal ${tcol}*0.05 +variable dt equal 0.00210943016014969*0.05 +timestep ${dt} +timestep 0.000105471508007485 + +############################################### +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton off +atom_style sphere + +boundary p p f + +region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi} +region boxreg block 10 40 10 40 ${zlo} ${zhi} +region boxreg block 10 40 10 40 -20 ${zhi} +region boxreg block 10 40 10 40 -20 50 +create_box 1 boxreg +Created orthogonal box = (10 10 -20) to (40 40 50) + 1 by 1 by 4 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 +pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 +pair_coeff * * + +neighbor ${skin} multi +neighbor 0.5 multi +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Balancing ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 30, bins = 1 1 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton off, size, history + pair build: half/size/multi/atomonly/newtoff + stencil: full/multi/3d + bin: multi +WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (../comm_brick.cpp:210) +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +# insertion region for fix/pour + +region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box +region insreg cylinder z 25 ${yc} 10 30 50 side in units box +region insreg cylinder z 25 25 10 30 50 side in units box + +# define cone and cylinder regions - see lammps doc on region command +# note new open options + +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 2 + +region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open +region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2 +region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2 + +region hopreg union 2 conereg cylreg + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + + +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density} +fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1 + +#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:904) +thermo_modify flush yes lost warn + +# Initial run to fill up the cone + +run 20000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 + +@Article{Intveld08, + author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, + title = {Accurate and Efficient Methods for Modeling Colloidal + Mixtures in an Explicit Solvent using Molecular Dynamics}, + journal = {Comput.\ Phys.\ Commut.}, + year = 2008, + volume = 179, + pages = {320--329} +} + +@article{Shire2020, + author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, + title = {{DEM} Simulations of Polydisperse Media: Efficient Contact + Detection Applied to Investigate the Quasi-Static Limit}, + journal = {Computational Particle Mechanics}, + year = {2020} +@article{Monti2022, + author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava, + Ishan and Silbert, Leonardo E. and Grest, Gary S. + and Lechman, Jeremy B.}, + title = {Large-scale frictionless jamming with power-law particle + size distributions}, + journal = {Phys. Rev. E}, + volume = {106} + issue = {3} + year = {2022} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 3000 every 59965 steps, 2000 by step 1 +Per MPI rank memory allocation (min/avg/max) = 6.049 | 6.049 | 6.049 Mbytes + Step CPU Atoms KinEng + 0 0 0 -0 + 1000 0.44807882 2000 -0 + 2000 0.63550417 2000 -0 + 3000 0.82082211 2000 -0 + 4000 1.0004254 2000 -0 + 5000 1.1738611 2000 -0 + 6000 1.3426033 2000 -0 + 7000 1.5076494 2000 -0 + 8000 1.6673766 2000 -0 + 9000 1.8244007 2000 -0 + 10000 1.9794011 2000 -0 + 11000 2.049584 2000 -0 + 12000 2.1210622 2000 -0 + 13000 2.1917604 2000 -0 + 14000 2.2631006 2000 -0 + 15000 2.3361511 2000 -0 + 16000 2.4131306 2000 -0 + 17000 2.4938482 2000 -0 + 18000 2.5771299 2000 -0 + 19000 2.6633207 2000 -0 + 20000 2.7541527 2000 -0 +Loop time of 2.75417 on 4 procs for 20000 steps with 2000 atoms + +99.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.028725 | 0.079701 | 0.18206 | 21.3 | 2.89 +Neigh | 0.0072627 | 0.013673 | 0.023071 | 5.0 | 0.50 +Comm | 0.084562 | 0.18785 | 0.28115 | 18.6 | 6.82 +Output | 0.00088257 | 0.0016453 | 0.0021961 | 1.2 | 0.06 +Modify | 0.66551 | 1.1062 | 1.9324 | 46.7 | 40.16 +Other | | 1.365 | | | 49.57 + +Nlocal: 500 ave 510 max 493 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Nghost: 154 ave 227 max 79 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Neighs: 415.5 ave 610 max 258 min +Histogram: 1 1 0 0 0 0 1 0 0 1 + +Total # of neighbors = 1662 +Ave neighs/atom = 0.831 +Neighbor list builds = 71 +Dangerous builds = 0 +unfix ins +run 150000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 12.33 | 12.5 | 12.68 Mbytes + Step CPU Atoms KinEng + 20000 0 2000 6652.2957 + 21000 0.064679537 2000 6807.2201 + 22000 0.13180546 2000 6973.9359 + 23000 0.20116485 2000 7142.3648 + 24000 0.27404997 2000 7276.9717 + 25000 0.35093997 2000 7369.4191 + 26000 0.43258785 2000 7497.6526 + 27000 0.51758599 2000 7638.946 + 28000 0.60693744 2000 7780.0339 + 29000 0.7014587 2000 7881.8177 + 30000 0.80119592 2000 7967.2641 + 31000 0.87335402 2000 7994.9273 + 32000 0.95320537 2000 7937.0672 + 33000 1.0398918 2000 7774.0508 + 34000 1.1351184 2000 7591.1511 + 35000 1.2382665 2000 7357.5032 + 36000 1.3492928 2000 7147.3776 + 37000 1.467685 2000 6980.0719 + 38000 1.5926331 2000 6813.0872 + 39000 1.7265338 2000 6657.0693 + 40000 1.8700751 2000 6505.1155 + 41000 1.9833133 2000 6330.2864 + 42000 2.1004898 2000 6147.8022 + 43000 2.2208699 2000 5932.9244 + 44000 2.3442041 2000 5755.296 + 45000 2.4697527 2000 5511.622 + 46000 2.6055398 2000 5332.3171 + 47000 2.7455054 2000 5162.4926 + 48000 2.8851384 2000 5044.5764 + 49000 3.0239861 2000 4901.1141 + 50000 3.1614979 2000 4731.1949 + 51000 3.2810383 2000 4575.418 + 52000 3.4070575 2000 4428.9425 + 53000 3.5378444 2000 4291.7282 + 54000 3.6714875 2000 4154.1885 + 55000 3.8108149 2000 3994.9402 + 56000 3.9546982 2000 3855.5977 + 57000 4.0997167 2000 3672.9504 + 58000 4.2491708 2000 3435.3395 + 59000 4.408196 2000 3200.7379 + 60000 4.5700117 2000 2986.5411 + 61000 4.723306 2000 2747.3628 + 62000 4.878128 2000 2542.0805 + 63000 5.0341944 2000 2336.7687 + 64000 5.1923913 2000 2151.6388 + 65000 5.3556896 2000 1933.6773 + 66000 5.5238885 2000 1699.0747 + 67000 5.6948336 2000 1467.7209 + 68000 5.8690421 2000 1227.3577 + 69000 6.0509636 2000 1016.2766 + 70000 6.2387022 2000 812.90843 + 71000 6.4073364 2000 632.88108 + 72000 6.577617 2000 470.67731 + 73000 6.7470437 2000 360.47748 + 74000 6.9135965 2000 286.10584 + 75000 7.0795553 2000 229.70386 + 76000 7.2433614 2000 179.62654 + 77000 7.4108991 2000 142.40417 + 78000 7.5787629 2000 113.55745 + 79000 7.7455158 2000 93.787669 + 80000 7.9119881 2000 80.646319 + 81000 8.0788298 2000 70.944319 + 82000 8.2481597 2000 59.2275 + 83000 8.4164166 2000 49.633808 + 84000 8.5904585 2000 42.882698 + 85000 8.768017 2000 36.841824 + 86000 8.9516342 2000 31.776681 + 87000 9.1361653 2000 28.25076 + 88000 9.3230302 2000 25.228966 + 89000 9.5111334 2000 22.593627 + 90000 9.7013966 2000 21.15796 + 91000 9.8899455 2000 19.941629 + 92000 10.082329 2000 18.375654 + 93000 10.276769 2000 17.056701 + 94000 10.474742 2000 16.192511 + 95000 10.674727 2000 15.572922 + 96000 10.874807 2000 14.827788 + 97000 11.075291 2000 13.919613 + 98000 11.275072 2000 13.19525 + 99000 11.475537 2000 11.993376 + 100000 11.677999 2000 11.258787 + 101000 11.88024 2000 10.641688 + 102000 12.084353 2000 10.430435 + 103000 12.288658 2000 9.518069 + 104000 12.4935 2000 9.1332086 + 105000 12.70028 2000 9.2151611 + 106000 12.908347 2000 9.0035132 + 107000 13.116082 2000 8.7835861 + 108000 13.324126 2000 8.5124479 + 109000 13.53208 2000 8.2975453 + 110000 13.740687 2000 8.3483043 + 111000 13.948107 2000 8.4658572 + 112000 14.156079 2000 8.4771784 + 113000 14.364341 2000 7.8937975 + 114000 14.574123 2000 7.2472953 + 115000 14.783651 2000 6.5812074 + 116000 14.99421 2000 5.5651566 + 117000 15.204441 2000 5.3015807 + 118000 15.415336 2000 5.0133941 + 119000 15.625609 2000 4.8746036 + 120000 15.836675 2000 4.9133073 + 121000 16.047261 2000 4.3337392 + 122000 16.257951 2000 4.3374836 + 123000 16.468869 2000 4.3721818 + 124000 16.680533 2000 4.3894508 + 125000 16.890783 2000 4.1811774 + 126000 17.103698 2000 4.3011002 + 127000 17.315003 2000 4.442228 + 128000 17.526696 2000 4.6170394 + 129000 17.738415 2000 4.8184318 + 130000 17.952565 2000 4.8442096 + 131000 18.165389 2000 4.9668117 + 132000 18.378094 2000 4.8364562 + 133000 18.592482 2000 4.6658645 + 134000 18.804443 2000 4.5758487 + 135000 19.016578 2000 4.7251949 + 136000 19.230118 2000 4.5846492 + 137000 19.443202 2000 4.7565986 + 138000 19.656431 2000 4.8186623 + 139000 19.867627 2000 4.6571647 + 140000 20.080227 2000 4.0730143 + 141000 20.292696 2000 4.0605542 + 142000 20.503397 2000 4.1457179 + 143000 20.714516 2000 4.3418042 + 144000 20.925902 2000 4.0323813 + 145000 21.139161 2000 3.8064958 + 146000 21.352466 2000 3.1802044 + 147000 21.564201 2000 2.7947641 + 148000 21.772853 2000 2.7384164 + 149000 21.983847 2000 2.7428829 + 150000 22.196524 2000 2.7802186 + 151000 22.408229 2000 2.6703451 + 152000 22.619074 2000 2.3357647 + 153000 22.829739 2000 1.9855305 + 154000 23.039835 2000 1.9442713 + 155000 23.252204 2000 1.7348027 + 156000 23.464375 2000 1.5699942 + 157000 23.677869 2000 1.5224944 + 158000 23.888064 2000 1.4850914 + 159000 24.099703 2000 1.4461048 + 160000 24.312523 2000 1.3759525 + 161000 24.522295 2000 0.83754463 + 162000 24.733904 2000 0.7952922 + 163000 24.944962 2000 0.69670143 + 164000 25.155399 2000 0.66253723 + 165000 25.36618 2000 0.64602969 + 166000 25.576713 2000 0.60229858 + 167000 25.788559 2000 0.5757589 + 168000 25.998455 2000 0.5996023 + 169000 26.209944 2000 0.62130448 + 170000 26.420855 2000 0.63888277 +Loop time of 26.4209 on 4 procs for 150000 steps with 2000 atoms + +97.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.6691 | 8.9481 | 11.368 | 85.5 | 33.87 +Neigh | 0.087705 | 0.14369 | 0.18343 | 9.2 | 0.54 +Comm | 1.9172 | 3.5612 | 4.2565 | 50.7 | 13.48 +Output | 0.0045151 | 0.0090615 | 0.016477 | 4.7 | 0.03 +Modify | 5.4247 | 7.6604 | 9.1464 | 49.8 | 28.99 +Other | | 6.099 | | | 23.08 + +Nlocal: 500 ave 538 max 419 min +Histogram: 1 0 0 0 0 0 0 1 0 2 +Nghost: 445.5 ave 688 max 200 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Neighs: 4500.25 ave 5610 max 3443 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 18001 +Ave neighs/atom = 9.0005 +Neighbor list builds = 362 +Dangerous builds = 0 + +# remove "plug" - need to redefine cylinder region & union + +region cylreg delete +region hopreg delete +region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open +region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2 +region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2 + +region hopreg union 2 cylreg conereg + +unfix hopper3 +fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg +fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg + +run 100000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 12.34 | 12.53 | 12.68 Mbytes + Step CPU Atoms KinEng + 170000 0 2000 0.63888277 + 171000 0.21222344 2000 1.4139245 + 172000 0.42521156 2000 2.2400138 + 173000 0.63924412 2000 3.8034979 + 174000 0.85157975 2000 6.116727 + 175000 1.065247 2000 8.9536458 + 176000 1.2785495 2000 12.74348 + 177000 1.4916668 2000 17.410816 + 178000 1.7042214 2000 22.879174 + 179000 1.9186225 2000 28.966022 + 180000 2.1345716 2000 35.449239 + 181000 2.3486488 2000 42.694882 + 182000 2.5624316 2000 50.913279 + 183000 2.7760261 2000 60.098465 + 184000 2.9883219 2000 70.133474 + 185000 3.2007559 2000 80.950013 + 186000 3.4107595 2000 92.495525 + 187000 3.6204368 2000 104.83034 + 188000 3.8298085 2000 118.04659 + 189000 4.0383423 2000 132.7403 + 190000 4.2477798 2000 148.31955 + 191000 4.4421194 2000 164.26321 + 192000 4.6373112 2000 180.6933 + 193000 4.829991 2000 197.72012 + 194000 5.02323 2000 215.43637 + 195000 5.2162947 2000 234.29738 + 196000 5.4075928 2000 254.03407 + 197000 5.5974162 2000 274.58626 + 198000 5.7869821 2000 296.88915 + 199000 5.976701 2000 320.45001 + 200000 6.1650648 2000 344.75891 + 201000 6.3509022 2000 370.14016 + 202000 6.5363704 2000 395.72827 + 203000 6.7222457 2000 420.42026 + 204000 6.9107246 2000 446.08079 + 205000 7.0996055 2000 473.62963 + 206000 7.2878276 2000 501.05693 + 207000 7.4753237 2000 530.40427 + 208000 7.6643827 2000 560.62015 + 209000 7.8553563 2000 593.00113 + 210000 8.0454619 2000 626.36661 + 211000 8.2342734 2000 661.34861 + 212000 8.4248464 2000 697.41001 + 213000 8.6166264 2000 735.12299 + 214000 8.8061303 2000 773.89126 + 215000 8.9932827 2000 813.83268 + 216000 9.1797117 2000 854.63669 + 217000 9.3642361 2000 896.59089 + 218000 9.5486397 2000 938.70251 + 219000 9.7300675 2000 982.10773 + 220000 9.9142511 2000 1025.2953 + 221000 10.098593 2000 1069.8382 + 222000 10.284654 2000 1115.4449 + 223000 10.47145 2000 1161.6742 + 224000 10.656994 2000 1211.289 + 225000 10.839264 2000 1262.8074 + 226000 11.019273 2000 1316.6353 + 227000 11.198463 2000 1370.7434 +WARNING: Lost atoms: original 2000 current 1991 (../thermo.cpp:499) + 228000 11.377846 1991 1382.0924 + 229000 11.557302 1986 1407.1543 + 230000 11.737106 1975 1415.708 + 231000 11.915389 1968 1430.6498 + 232000 12.095672 1957 1421.0352 + 233000 12.275267 1939 1376.0322 + 234000 12.452526 1925 1350.1292 + 235000 12.629207 1912 1337.0529 + 236000 12.80204 1893 1273.2219 + 237000 12.975817 1879 1207.0473 + 238000 13.152228 1861 1132.0109 + 239000 13.331267 1846 1083.1042 + 240000 13.510046 1826 1004.3265 + 241000 13.67647 1819 989.36186 + 242000 13.842216 1812 983.26132 + 243000 14.006163 1805 985.79932 + 244000 14.168208 1794 936.34844 + 245000 14.331979 1784 889.17423 + 246000 14.495868 1770 846.65018 + 247000 14.662081 1753 751.16306 + 248000 14.830163 1740 709.23095 + 249000 14.999432 1732 687.61586 + 250000 15.166285 1721 638.82967 + 251000 15.331363 1714 618.71543 + 252000 15.493524 1709 611.25444 + 253000 15.651829 1705 606.6846 + 254000 15.809586 1702 601.7236 + 255000 15.966097 1697 575.97244 + 256000 16.12731 1695 577.1712 + 257000 16.292272 1691 576.93668 + 258000 16.460463 1688 586.63687 + 259000 16.628863 1686 581.52487 + 260000 16.797813 1682 566.49544 + 261000 16.95041 1681 586.18628 + 262000 17.101549 1678 582.11927 + 263000 17.251379 1675 589.96041 + 264000 17.403824 1672 577.55581 + 265000 17.556094 1669 570.45998 + 266000 17.710318 1666 574.0576 + 267000 17.865801 1662 578.07385 + 268000 18.019798 1660 587.65705 + 269000 18.177178 1657 584.43358 + 270000 18.332227 1654 591.22601 +Loop time of 18.3323 on 4 procs for 100000 steps with 1654 atoms + +96.2% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.7775 | 6.3596 | 9.2369 | 92.3 | 34.69 +Neigh | 0.088842 | 0.10453 | 0.12331 | 4.2 | 0.57 +Comm | 1.1938 | 2.7006 | 3.3247 | 53.6 | 14.73 +Output | 0.0013814 | 0.0063655 | 0.013334 | 5.5 | 0.03 +Modify | 4.3454 | 4.8952 | 5.3813 | 20.7 | 26.70 +Other | | 4.266 | | | 23.27 + +Nlocal: 413.5 ave 429 max 408 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 408.25 ave 653 max 182 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Neighs: 3486.25 ave 4367 max 2213 min +Histogram: 1 0 0 0 0 1 0 0 1 1 + +Total # of neighbors = 13945 +Ave neighs/atom = 8.4310762 +Neighbor list builds = 227 +Dangerous builds = 0 +Total wall time: 0:00:47 diff --git a/examples/granregion/log.27Jun24.granregion.mixer.g++.1 b/examples/granregion/log.27Jun24.granregion.mixer.g++.1 new file mode 100644 index 0000000000..712e0fa23a --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.mixer.g++.1 @@ -0,0 +1,642 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +variable name string mixer + +thermo_modify flush yes +variable seed equal 14314 + +############################################### +# Particle parameters +################################################ + +variable rlo equal 0.3 +variable rhi equal 0.6 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.3 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.6 +variable skin equal ${rhi} +variable skin equal 0.6 + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable kn equal 10^5 +variable kt equal 0.2*${kn} +variable kt equal 0.2*100000 + +variable gravity equal 1.0 +variable density equal 1.0 + +variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 +variable a equal (-2.0*log(${coeffRes})/PI)^2 +variable a equal (-2.0*log(0.1)/PI)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 806.699778405191*0.5 + +variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) + +variable dt equal ${tcol}*0.02 +variable dt equal 0.00236257621510454*0.02 +timestep ${dt} +timestep 4.72515243020908e-05 + +############################################### + +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton on +atom_style sphere + +boundary p p f + +region boxreg block 0 20 0 20 0 20 +create_box 1 boxreg +Created orthogonal box = (0 0 0) to (20 20 20) + 1 by 1 by 1 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 +pair_coeff * * + +neighbor ${skin} multi +neighbor 0.6 multi +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Balancing ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 20, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/multi/atomonly/newton + stencil: half/multi/3d + bin: multi +WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (../comm_brick.cpp:210) +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +region insreg cylinder z 10 10 8 10 18 side in units box +region cylreg cylinder z 10 10 10 0 20 side in units box + +variable theta equal (step/400000)*2*PI + +region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box +region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box + +region mixer intersect 3 cylreg b1 b2 side in + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + +fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer + +fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 + +#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke v_theta +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:904) +thermo_modify flush yes lost warn + +run 200000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 + +@Article{Intveld08, + author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, + title = {Accurate and Efficient Methods for Modeling Colloidal + Mixtures in an Explicit Solvent using Molecular Dynamics}, + journal = {Comput.\ Phys.\ Commut.}, + year = 2008, + volume = 179, + pages = {320--329} +} + +@article{Shire2020, + author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, + title = {{DEM} Simulations of Polydisperse Media: Efficient Contact + Detection Applied to Investigate the Quasi-Static Limit}, + journal = {Computational Particle Mechanics}, + year = {2020} +@article{Monti2022, + author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava, + Ishan and Silbert, Leonardo E. and Grest, Gary S. + and Lechman, Jeremy B.}, + title = {Large-scale frictionless jamming with power-law particle + size distributions}, + journal = {Phys. Rev. E}, + volume = {106} + issue = {3} + year = {2022} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 444 every 84653 steps, 1000 by step 169307 +Per MPI rank memory allocation (min/avg/max) = 5.861 | 5.861 | 5.861 Mbytes + Step CPU Atoms KinEng v_theta + 0 0 0 -0 0 + 1000 0.081165379 444 -0 0.015707963 + 2000 0.15754332 444 -0 0.031415927 + 3000 0.23012784 444 -0 0.04712389 + 4000 0.30324079 444 -0 0.062831853 + 5000 0.37566627 444 -0 0.078539816 + 6000 0.4478183 444 -0 0.09424778 + 7000 0.52130598 444 -0 0.10995574 + 8000 0.59583276 444 -0 0.12566371 + 9000 0.67333641 444 -0 0.14137167 + 10000 0.75133989 444 -0 0.15707963 + 11000 0.88621821 444 -0 0.1727876 + 12000 0.96223543 444 -0 0.18849556 + 13000 1.0406719 444 -0 0.20420352 + 14000 1.1209824 444 -0 0.21991149 + 15000 1.2017612 444 -0 0.23561945 + 16000 1.2818653 444 -0 0.25132741 + 17000 1.36192 444 -0 0.26703538 + 18000 1.4377702 444 -0 0.28274334 + 19000 1.5144381 444 -0 0.2984513 + 20000 1.5913902 444 -0 0.31415927 + 21000 1.6673472 444 -0 0.32986723 + 22000 1.7434481 444 -0 0.34557519 + 23000 1.8190585 444 -0 0.36128316 + 24000 1.8962389 444 -0 0.37699112 + 25000 1.9736636 444 -0 0.39269908 + 26000 2.0534547 444 -0 0.40840704 + 27000 2.1298466 444 -0 0.42411501 + 28000 2.206882 444 -0 0.43982297 + 29000 2.2836177 444 -0 0.45553093 + 30000 2.4525793 444 -0 0.4712389 + 31000 2.528444 444 -0 0.48694686 + 32000 2.6062516 444 -0 0.50265482 + 33000 2.6838811 444 -0 0.51836279 + 34000 2.7618967 444 -0 0.53407075 + 35000 3.1234167 444 -0 0.54977871 + 36000 3.1992217 444 -0 0.56548668 + 37000 3.2744137 444 -0 0.58119464 + 38000 3.3504088 444 -0 0.5969026 + 39000 3.4259728 444 -0 0.61261057 + 40000 3.5020768 444 -0 0.62831853 + 41000 3.5794542 444 -0 0.64402649 + 42000 3.657433 444 -0 0.65973446 + 43000 3.7353763 444 -0 0.67544242 + 44000 3.8131676 444 -0 0.69115038 + 45000 3.8924163 444 -0 0.70685835 + 46000 3.973914 444 -0 0.72256631 + 47000 4.0525907 444 -0 0.73827427 + 48000 4.131257 444 -0 0.75398224 + 49000 4.2096226 444 -0 0.7696902 + 50000 4.2879179 444 -0 0.78539816 + 51000 4.3673368 444 -0 0.80110613 + 52000 4.4496186 444 -0 0.81681409 + 53000 4.5285675 444 -0 0.83252205 + 54000 4.6132205 444 -0 0.84823002 + 55000 4.6992461 444 -0 0.86393798 + 56000 4.7864008 444 -0 0.87964594 + 57000 4.8715403 444 -0 0.89535391 + 58000 4.9547161 444 -0 0.91106187 + 59000 5.0403186 444 -0 0.92676983 + 60000 5.123722 444 -0 0.9424778 + 61000 5.2068168 444 -0 0.95818576 + 62000 5.2899206 444 -0 0.97389372 + 63000 5.3725203 444 -0 0.98960169 + 64000 5.4561614 444 -0 1.0053096 + 65000 5.5399537 444 -0 1.0210176 + 66000 5.6233183 444 -0 1.0367256 + 67000 5.7075311 444 -0 1.0524335 + 68000 5.7921332 444 -0 1.0681415 + 69000 5.8772289 444 -0 1.0838495 + 70000 5.9626083 444 -0 1.0995574 + 71000 6.0468013 444 -0 1.1152654 + 72000 6.1325358 444 -0 1.1309734 + 73000 6.217391 444 -0 1.1466813 + 74000 6.3029286 444 -0 1.1623893 + 75000 6.3892387 444 -0 1.1780972 + 76000 6.4757637 444 -0 1.1938052 + 77000 6.5633899 444 -0 1.2095132 + 78000 6.6494516 444 -0 1.2252211 + 79000 6.7363426 444 -0 1.2409291 + 80000 6.8243808 444 -0 1.2566371 + 81000 6.9120999 444 -0 1.272345 + 82000 7.0004402 444 -0 1.288053 + 83000 7.0882632 444 -0 1.303761 + 84000 7.176153 444 -0 1.3194689 + 85000 7.2980017 888 -0 1.3351769 + 86000 7.4665034 888 -0 1.3508848 + 87000 7.634481 888 -0 1.3665928 + 88000 7.8021372 888 -0 1.3823008 + 89000 7.9705032 888 -0 1.3980087 + 90000 8.1395213 888 -0 1.4137167 + 91000 8.3093436 888 -0 1.4294247 + 92000 8.4791404 888 -0 1.4451326 + 93000 8.6448257 888 -0 1.4608406 + 94000 8.8096695 888 -0 1.4765485 + 95000 8.9806056 888 -0 1.4922565 + 96000 9.1479017 888 -0 1.5079645 + 97000 9.3159102 888 -0 1.5236724 + 98000 9.4817887 888 -0 1.5393804 + 99000 9.6484134 888 -0 1.5550884 + 100000 9.8145145 888 -0 1.5707963 + 101000 9.9833565 888 -0 1.5865043 + 102000 10.153126 888 -0 1.6022123 + 103000 10.32344 888 -0 1.6179202 + 104000 10.493544 888 -0 1.6336282 + 105000 10.663787 888 -0 1.6493361 + 106000 10.834335 888 -0 1.6650441 + 107000 11.004695 888 -0 1.6807521 + 108000 11.175239 888 -0 1.69646 + 109000 11.350053 888 -0 1.712168 + 110000 11.525953 888 -0 1.727876 + 111000 11.702706 888 -0 1.7435839 + 112000 11.880308 888 -0 1.7592919 + 113000 12.058561 888 -0 1.7749998 + 114000 12.236372 888 -0 1.7907078 + 115000 12.414617 888 -0 1.8064158 + 116000 12.592501 888 -0 1.8221237 + 117000 12.770926 888 -0 1.8378317 + 118000 12.949072 888 -0 1.8535397 + 119000 13.128801 888 -0 1.8692476 + 120000 13.311101 888 -0 1.8849556 + 121000 13.489781 888 -0 1.9006636 + 122000 13.669833 888 -0 1.9163715 + 123000 13.85109 888 -0 1.9320795 + 124000 14.032358 888 -0 1.9477874 + 125000 14.213661 888 -0 1.9634954 + 126000 14.393846 888 -0 1.9792034 + 127000 14.574645 888 -0 1.9949113 + 128000 14.755261 888 -0 2.0106193 + 129000 14.939145 888 -0 2.0263273 + 130000 15.123073 888 -0 2.0420352 + 131000 15.303459 888 -0 2.0577432 + 132000 15.484755 888 -0 2.0734512 + 133000 15.665288 888 -0 2.0891591 + 134000 15.845779 888 -0 2.1048671 + 135000 16.026283 888 -0 2.120575 + 136000 16.20857 888 -0 2.136283 + 137000 16.39054 888 -0 2.151991 + 138000 16.574105 888 -0 2.1676989 + 139000 16.758949 888 -0 2.1834069 + 140000 16.943594 888 -0 2.1991149 + 141000 17.127119 888 -0 2.2148228 + 142000 17.311688 888 -0 2.2305308 + 143000 17.498924 888 -0 2.2462387 + 144000 17.68621 888 -0 2.2619467 + 145000 17.873463 888 -0 2.2776547 + 146000 18.061679 888 -0 2.2933626 + 147000 18.248264 888 -0 2.3090706 + 148000 18.434172 888 -0 2.3247786 + 149000 18.620894 888 -0 2.3404865 + 150000 18.807222 888 -0 2.3561945 + 151000 18.993959 888 -0 2.3719025 + 152000 19.183597 888 -0 2.3876104 + 153000 19.372979 888 -0 2.4033184 + 154000 19.560741 888 -0 2.4190263 + 155000 19.760386 888 -0 2.4347343 + 156000 19.968774 888 -0 2.4504423 + 157000 20.179252 888 -0 2.4661502 + 158000 20.388599 888 -0 2.4818582 + 159000 20.598976 888 -0 2.4975662 + 160000 20.80891 888 -0 2.5132741 + 161000 21.026202 888 -0 2.5289821 + 162000 21.239367 888 -0 2.54469 + 163000 21.452486 888 -0 2.560398 + 164000 21.665343 888 -0 2.576106 + 165000 21.879421 888 -0 2.5918139 + 166000 22.093404 888 -0 2.6075219 + 167000 22.307097 888 -0 2.6232299 + 168000 22.521133 888 -0 2.6389378 + 169000 22.735535 888 -0 2.6546458 + 170000 22.968021 1000 -0 2.6703538 + 171000 23.205371 1000 -0 2.6860617 + 172000 23.44698 1000 -0 2.7017697 + 173000 23.689107 1000 -0 2.7174776 + 174000 23.930244 1000 -0 2.7331856 + 175000 24.168568 1000 -0 2.7488936 + 176000 24.405774 1000 -0 2.7646015 + 177000 24.645769 1000 -0 2.7803095 + 178000 24.886311 1000 -0 2.7960175 + 179000 25.129675 1000 -0 2.8117254 + 180000 25.375354 1000 -0 2.8274334 + 181000 25.620074 1000 -0 2.8431414 + 182000 25.867063 1000 -0 2.8588493 + 183000 26.111737 1000 -0 2.8745573 + 184000 26.356693 1000 -0 2.8902652 + 185000 26.601965 1000 -0 2.9059732 + 186000 26.847594 1000 -0 2.9216812 + 187000 27.09479 1000 -0 2.9373891 + 188000 27.343645 1000 -0 2.9530971 + 189000 27.593252 1000 -0 2.9688051 + 190000 27.84598 1000 -0 2.984513 + 191000 28.097785 1000 -0 3.000221 + 192000 28.347653 1000 -0 3.0159289 + 193000 28.588968 1000 -0 3.0316369 + 194000 28.82728 1000 -0 3.0473449 + 195000 29.066565 1000 -0 3.0630528 + 196000 29.309153 1000 -0 3.0787608 + 197000 29.894236 1000 -0 3.0944688 + 198000 30.138713 1000 -0 3.1101767 + 199000 30.381879 1000 -0 3.1258847 + 200000 30.627512 1000 -0 3.1415927 +Loop time of 30.6275 on 1 procs for 200000 steps with 1000 atoms + +Performance: 26659.225 tau/day, 6530.072 timesteps/s, 6.530 Matom-step/s +97.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.4017 | 2.4017 | 2.4017 | 0.0 | 7.84 +Neigh | 0.038916 | 0.038916 | 0.038916 | 0.0 | 0.13 +Comm | 0.35872 | 0.35872 | 0.35872 | 0.0 | 1.17 +Output | 0.78641 | 0.78641 | 0.78641 | 0.0 | 2.57 +Modify | 26.719 | 26.719 | 26.719 | 0.0 | 87.24 +Other | | 0.3225 | | | 1.05 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 186 ave 186 max 186 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3782 ave 3782 max 3782 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3782 +Ave neighs/atom = 3.782 +Neighbor list builds = 200 +Dangerous builds = 0 +unfix ins +run 200000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 11.89 | 11.89 | 11.89 Mbytes + Step CPU Atoms KinEng v_theta + 200000 0 1000 1.0680935 3.1415927 + 201000 0.23768219 1000 1.0599937 3.1573006 + 202000 0.47603693 1000 1.0366355 3.1730086 + 203000 0.71459797 1000 1.0189286 3.1887165 + 204000 0.95145301 1000 1.001478 3.2044245 + 205000 1.1869146 1000 0.99637635 3.2201325 + 206000 1.4249684 1000 0.99361197 3.2358404 + 207000 1.6635344 1000 0.99529657 3.2515484 + 208000 1.8992251 1000 0.98997171 3.2672564 + 209000 2.1484862 1000 0.97666133 3.2829643 + 210000 2.4012768 1000 0.97683679 3.2986723 + 211000 2.6554877 1000 0.98150752 3.3143802 + 212000 2.9093673 1000 0.97585316 3.3300882 + 213000 3.161481 1000 0.97389688 3.3457962 + 214000 3.4184197 1000 0.96426468 3.3615041 + 215000 3.6711643 1000 0.96552353 3.3772121 + 216000 3.9243061 1000 0.97713174 3.3929201 + 217000 4.1757021 1000 0.97062546 3.408628 + 218000 4.4291788 1000 0.97111212 3.424336 + 219000 4.6819445 1000 0.97645659 3.440044 + 220000 4.9376967 1000 0.98148797 3.4557519 + 221000 5.1883947 1000 0.97386268 3.4714599 + 222000 5.4387287 1000 0.97322415 3.4871678 + 223000 5.6878448 1000 0.95781163 3.5028758 + 224000 5.9358535 1000 0.93919542 3.5185838 + 225000 6.1822635 1000 0.9313702 3.5342917 + 226000 6.4302601 1000 0.92788207 3.5499997 + 227000 6.6795172 1000 0.91026919 3.5657077 + 228000 6.9286832 1000 0.89557479 3.5814156 + 229000 7.1797845 1000 0.89173643 3.5971236 + 230000 7.432965 1000 0.89292723 3.6128316 + 231000 7.6848123 1000 0.89944536 3.6285395 + 232000 7.9361745 1000 0.89319113 3.6442475 + 233000 8.1896078 1000 0.89273543 3.6599554 + 234000 8.4447838 1000 0.87360829 3.6756634 + 235000 8.7028153 1000 0.86841591 3.6913714 + 236000 8.9582068 1000 0.86559907 3.7070793 + 237000 9.2150326 1000 0.86231762 3.7227873 + 238000 9.4701361 1000 0.85170772 3.7384953 + 239000 9.7272256 1000 0.85616849 3.7542032 + 240000 9.985268 1000 0.86809668 3.7699112 + 241000 10.243685 1000 0.88066532 3.7856191 + 242000 10.50579 1000 0.89440189 3.8013271 + 243000 10.768046 1000 0.8939512 3.8170351 + 244000 11.030389 1000 0.8963829 3.832743 + 245000 11.29267 1000 0.88074176 3.848451 + 246000 11.553505 1000 0.8733699 3.864159 + 247000 11.81124 1000 0.86130993 3.8798669 + 248000 12.068927 1000 0.86035503 3.8955749 + 249000 12.326723 1000 0.84878437 3.9112829 + 250000 12.584681 1000 0.83989297 3.9269908 + 251000 12.841147 1000 0.82781463 3.9426988 + 252000 13.101351 1000 0.8142641 3.9584067 + 253000 13.361975 1000 0.80683745 3.9741147 + 254000 13.621901 1000 0.809379 3.9898227 + 255000 13.879382 1000 0.81147846 4.0055306 + 256000 14.136754 1000 0.79574281 4.0212386 + 257000 14.393097 1000 0.78339098 4.0369466 + 258000 14.65084 1000 0.7799887 4.0526545 + 259000 14.909563 1000 0.7848995 4.0683625 + 260000 15.171732 1000 0.78284201 4.0840704 + 261000 15.434923 1000 0.7776263 4.0997784 + 262000 15.699673 1000 0.77405185 4.1154864 + 263000 15.964731 1000 0.78130382 4.1311943 + 264000 16.231068 1000 0.81006815 4.1469023 + 265000 16.494447 1000 0.79467298 4.1626103 + 266000 16.757296 1000 0.78592963 4.1783182 + 267000 17.020773 1000 0.76857233 4.1940262 + 268000 17.281914 1000 0.76483523 4.2097342 + 269000 17.543254 1000 0.76549297 4.2254421 + 270000 17.807266 1000 0.75564385 4.2411501 + 271000 18.083451 1000 0.75445102 4.256858 + 272000 18.34927 1000 0.7514406 4.272566 + 273000 18.6133 1000 0.75170218 4.288274 + 274000 18.874318 1000 0.76454717 4.3039819 + 275000 19.137188 1000 0.75991671 4.3196899 + 276000 19.398218 1000 0.75817752 4.3353979 + 277000 19.65797 1000 0.7621338 4.3511058 + 278000 19.917364 1000 0.77239256 4.3668138 + 279000 20.178778 1000 0.7667469 4.3825218 + 280000 20.441559 1000 0.75761494 4.3982297 + 281000 20.704047 1000 0.74370218 4.4139377 + 282000 20.967325 1000 0.734955 4.4296456 + 283000 21.226371 1000 0.72783614 4.4453536 + 284000 21.485188 1000 0.72349874 4.4610616 + 285000 21.742828 1000 0.71585562 4.4767695 + 286000 22.002099 1000 0.70846101 4.4924775 + 287000 22.262387 1000 0.69307445 4.5081855 + 288000 22.523992 1000 0.68469722 4.5238934 + 289000 22.786885 1000 0.67892956 4.5396014 + 290000 23.050769 1000 0.67872999 4.5553093 + 291000 23.313704 1000 0.6820098 4.5710173 + 292000 23.576713 1000 0.67663229 4.5867253 + 293000 23.828165 1000 0.67477934 4.6024332 + 294000 24.081047 1000 0.67452515 4.6181412 + 295000 24.335392 1000 0.67341495 4.6338492 + 296000 24.590438 1000 0.67888865 4.6495571 + 297000 24.84277 1000 0.68373518 4.6652651 + 298000 25.097993 1000 0.68612329 4.6809731 + 299000 25.355621 1000 0.68169877 4.696681 + 300000 25.612938 1000 0.68602699 4.712389 + 301000 25.866694 1000 0.68485644 4.7280969 + 302000 26.120968 1000 0.68101185 4.7438049 + 303000 26.374411 1000 0.67663031 4.7595129 + 304000 26.628686 1000 0.67771638 4.7752208 + 305000 26.881546 1000 0.67525788 4.7909288 + 306000 27.163762 1000 0.6709689 4.8066368 + 307000 27.421347 1000 0.68328286 4.8223447 + 308000 27.674664 1000 0.70273998 4.8380527 + 309000 27.937573 1000 0.70461978 4.8537606 + 310000 28.206728 1000 0.70307737 4.8694686 + 311000 28.473159 1000 0.70087936 4.8851766 + 312000 28.739452 1000 0.70449303 4.9008845 + 313000 29.001716 1000 0.71030367 4.9165925 + 314000 29.267562 1000 0.71113177 4.9323005 + 315000 29.533541 1000 0.71089537 4.9480084 + 316000 29.798996 1000 0.70713116 4.9637164 + 317000 30.068605 1000 0.71002087 4.9794244 + 318000 30.339303 1000 0.71804737 4.9951323 + 319000 30.609227 1000 0.71925831 5.0108403 + 320000 30.879193 1000 0.72835371 5.0265482 + 321000 31.147328 1000 0.7236586 5.0422562 + 322000 31.413246 1000 0.71432128 5.0579642 + 323000 31.675418 1000 0.70905325 5.0736721 + 324000 31.938939 1000 0.71323674 5.0893801 + 325000 32.20437 1000 0.72466784 5.1050881 + 326000 32.471213 1000 0.72956158 5.120796 + 327000 32.739168 1000 0.74478918 5.136504 + 328000 33.005983 1000 0.74404284 5.152212 + 329000 33.273193 1000 0.74051597 5.1679199 + 330000 33.541489 1000 0.73438585 5.1836279 + 331000 33.805988 1000 0.73023911 5.1993358 + 332000 34.071435 1000 0.7373459 5.2150438 + 333000 34.337809 1000 0.73137848 5.2307518 + 334000 34.602061 1000 0.72917991 5.2464597 + 335000 34.87065 1000 0.72945658 5.2621677 + 336000 35.140112 1000 0.72046325 5.2778757 + 337000 35.411283 1000 0.72224629 5.2935836 + 338000 35.681774 1000 0.72177721 5.3092916 + 339000 35.952034 1000 0.72852277 5.3249995 + 340000 36.220116 1000 0.73244024 5.3407075 + 341000 36.484799 1000 0.74123436 5.3564155 + 342000 36.752429 1000 0.74117339 5.3721234 + 343000 37.019401 1000 0.74360263 5.3878314 + 344000 37.284441 1000 0.74998018 5.4035394 + 345000 37.548209 1000 0.75026985 5.4192473 + 346000 37.812297 1000 0.74415875 5.4349553 + 347000 38.078351 1000 0.73219169 5.4506633 + 348000 38.343692 1000 0.72316753 5.4663712 + 349000 38.60829 1000 0.71747804 5.4820792 + 350000 38.873334 1000 0.72055215 5.4977871 + 351000 39.135591 1000 0.71525775 5.5134951 + 352000 39.397948 1000 0.7157435 5.5292031 + 353000 39.65874 1000 0.71883293 5.544911 + 354000 39.921649 1000 0.72106381 5.560619 + 355000 40.184118 1000 0.7126019 5.576327 + 356000 40.44828 1000 0.70018005 5.5920349 + 357000 40.711808 1000 0.6948238 5.6077429 + 358000 40.974553 1000 0.70261087 5.6234508 + 359000 41.240667 1000 0.70651692 5.6391588 + 360000 41.508869 1000 0.71812614 5.6548668 + 361000 41.775889 1000 0.72247116 5.6705747 + 362000 42.044747 1000 0.73675936 5.6862827 + 363000 42.311154 1000 0.75136966 5.7019907 + 364000 42.577458 1000 0.75745313 5.7176986 + 365000 42.846131 1000 0.7541109 5.7334066 + 366000 43.113639 1000 0.75340643 5.7491146 + 367000 43.3804 1000 0.74817232 5.7648225 + 368000 43.644839 1000 0.73555712 5.7805305 + 369000 43.907875 1000 0.72911144 5.7962384 + 370000 44.173474 1000 0.72223387 5.8119464 + 371000 44.435762 1000 0.72012879 5.8276544 + 372000 44.698339 1000 0.72050435 5.8433623 + 373000 44.96325 1000 0.72789287 5.8590703 + 374000 45.228536 1000 0.74234609 5.8747783 + 375000 45.49447 1000 0.74808952 5.8904862 + 376000 45.76007 1000 0.74096035 5.9061942 + 377000 46.027203 1000 0.74052775 5.9219022 + 378000 46.294627 1000 0.74206885 5.9376101 + 379000 46.567974 1000 0.74385723 5.9533181 + 380000 46.837323 1000 0.74901717 5.969026 + 381000 47.104723 1000 0.760668 5.984734 + 382000 47.37249 1000 0.76622105 6.000442 + 383000 47.642871 1000 0.77784236 6.0161499 + 384000 47.913238 1000 0.78443266 6.0318579 + 385000 48.179637 1000 0.77604024 6.0475659 + 386000 48.444304 1000 0.76126822 6.0632738 + 387000 48.708424 1000 0.74932674 6.0789818 + 388000 48.972518 1000 0.7394025 6.0946897 + 389000 49.236663 1000 0.73446106 6.1103977 + 390000 49.502321 1000 0.73226431 6.1261057 + 391000 49.772781 1000 0.72676072 6.1418136 + 392000 50.047483 1000 0.7283395 6.1575216 + 393000 50.308297 1000 0.7289238 6.1732296 + 394000 50.564792 1000 0.72479408 6.1889375 + 395000 50.819957 1000 0.71014812 6.2046455 + 396000 51.078032 1000 0.70351995 6.2203535 + 397000 51.336319 1000 0.70221306 6.2360614 + 398000 51.593057 1000 0.70748482 6.2517694 + 399000 51.853527 1000 0.7046252 6.2674773 + 400000 52.1092 1000 0.70581734 6.2831853 +Loop time of 52.1092 on 1 procs for 200000 steps with 1000 atoms + +Performance: 15669.134 tau/day, 3838.093 timesteps/s, 3.838 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.7952 | 7.7952 | 7.7952 | 0.0 | 14.96 +Neigh | 0.062504 | 0.062504 | 0.062504 | 0.0 | 0.12 +Comm | 1.0937 | 1.0937 | 1.0937 | 0.0 | 2.10 +Output | 0.0038447 | 0.0038447 | 0.0038447 | 0.0 | 0.01 +Modify | 42.69 | 42.69 | 42.69 | 0.0 | 81.92 +Other | | 0.4642 | | | 0.89 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 285 ave 285 max 285 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 5094 ave 5094 max 5094 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 5094 +Ave neighs/atom = 5.094 +Neighbor list builds = 158 +Dangerous builds = 0 +Total wall time: 0:01:22 diff --git a/examples/granregion/log.27Jun24.granregion.mixer.g++.4 b/examples/granregion/log.27Jun24.granregion.mixer.g++.4 new file mode 100644 index 0000000000..f67f111bac --- /dev/null +++ b/examples/granregion/log.27Jun24.granregion.mixer.g++.4 @@ -0,0 +1,642 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +variable name string mixer + +thermo_modify flush yes +variable seed equal 14314 + +############################################### +# Particle parameters +################################################ + +variable rlo equal 0.3 +variable rhi equal 0.6 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.3 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.6 +variable skin equal ${rhi} +variable skin equal 0.6 + +variable coeffRes equal 0.1 +variable coeffFric equal 0.5 + +variable kn equal 10^5 +variable kt equal 0.2*${kn} +variable kt equal 0.2*100000 + +variable gravity equal 1.0 +variable density equal 1.0 + +variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo} +variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3 +variable a equal (-2.0*log(${coeffRes})/PI)^2 +variable a equal (-2.0*log(0.1)/PI)^2 +variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a)) +variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351)) +variable gamma_t equal ${gamma_n}*0.5 +variable gamma_t equal 806.699778405191*0.5 + +variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0) +variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0) + +variable dt equal ${tcol}*0.02 +variable dt equal 0.00236257621510454*0.02 +timestep ${dt} +timestep 4.72515243020908e-05 + +############################################### + +variable dumpfreq equal 1000 +variable logfreq equal 1000 + +newton on +atom_style sphere + +boundary p p f + +region boxreg block 0 20 0 20 0 20 +create_box 1 boxreg +Created orthogonal box = (0 0 0) to (20 20 20) + 1 by 2 by 2 MPI processor grid + +pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 +pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 +pair_coeff * * + +neighbor ${skin} multi +neighbor 0.6 multi +thermo ${logfreq} +thermo 1000 + +comm_style brick +comm_modify mode multi group all vel yes +balance 1.1 shift xyz 20 1.1 +Balancing ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 20, bins = 1 1 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/multi/atomonly/newton + stencil: half/multi/3d + bin: multi +WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (../comm_brick.cpp:210) +fix bal all balance 10000 1.1 shift xyz 20 1.01 + +####################### Options specific to pouring ######################### + +region insreg cylinder z 10 10 8 10 18 side in units box +region cylreg cylinder z 10 10 10 0 20 side in units box + +variable theta equal (step/400000)*2*PI + +region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box +region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box + +region mixer intersect 3 cylreg b1 b2 side in + +fix grav all gravity ${gravity} vector 0 0 -1 +fix grav all gravity 1 vector 0 0 -1 +fix 1 all nve/sphere + +fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer +fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer + +fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density} +fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1 + +#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z + +#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0 +#dump_modify 2 pad 6 + +thermo_style custom step cpu atoms ke v_theta +WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:904) +thermo_modify flush yes lost warn + +run 200000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2 + +@Article{Intveld08, + author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest}, + title = {Accurate and Efficient Methods for Modeling Colloidal + Mixtures in an Explicit Solvent using Molecular Dynamics}, + journal = {Comput.\ Phys.\ Commut.}, + year = 2008, + volume = 179, + pages = {320--329} +} + +@article{Shire2020, + author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin}, + title = {{DEM} Simulations of Polydisperse Media: Efficient Contact + Detection Applied to Investigate the Quasi-Static Limit}, + journal = {Computational Particle Mechanics}, + year = {2020} +@article{Monti2022, + author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava, + Ishan and Silbert, Leonardo E. and Grest, Gary S. + and Lechman, Jeremy B.}, + title = {Large-scale frictionless jamming with power-law particle + size distributions}, + journal = {Phys. Rev. E}, + volume = {106} + issue = {3} + year = {2022} +} + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 444 every 84653 steps, 1000 by step 169307 +Per MPI rank memory allocation (min/avg/max) = 5.816 | 5.816 | 5.816 Mbytes + Step CPU Atoms KinEng v_theta + 0 0 0 -0 0 + 1000 0.088111932 444 -0 0.015707963 + 2000 0.14514013 444 -0 0.031415927 + 3000 0.19901283 444 -0 0.04712389 + 4000 0.25271154 444 -0 0.062831853 + 5000 0.30627277 444 -0 0.078539816 + 6000 0.35966654 444 -0 0.09424778 + 7000 0.41280835 444 -0 0.10995574 + 8000 0.46584491 444 -0 0.12566371 + 9000 0.51843618 444 -0 0.14137167 + 10000 0.57151612 444 -0 0.15707963 + 11000 0.61192936 444 -0 0.1727876 + 12000 0.65265862 444 -0 0.18849556 + 13000 0.69377116 444 -0 0.20420352 + 14000 0.73526123 444 -0 0.21991149 + 15000 0.77783987 444 -0 0.23561945 + 16000 0.82128542 444 -0 0.25132741 + 17000 0.86603751 444 -0 0.26703538 + 18000 0.90981059 444 -0 0.28274334 + 19000 0.95383173 444 -0 0.2984513 + 20000 0.99782061 444 -0 0.31415927 + 21000 1.0370303 444 -0 0.32986723 + 22000 1.0764103 444 -0 0.34557519 + 23000 1.1154891 444 -0 0.36128316 + 24000 1.1549694 444 -0 0.37699112 + 25000 1.1953727 444 -0 0.39269908 + 26000 1.2364474 444 -0 0.40840704 + 27000 1.2777508 444 -0 0.42411501 + 28000 1.3195763 444 -0 0.43982297 + 29000 1.3618971 444 -0 0.45553093 + 30000 1.404607 444 -0 0.4712389 + 31000 1.4428952 444 -0 0.48694686 + 32000 1.4818254 444 -0 0.50265482 + 33000 1.5205701 444 -0 0.51836279 + 34000 1.559401 444 -0 0.53407075 + 35000 1.5987318 444 -0 0.54977871 + 36000 1.6379014 444 -0 0.56548668 + 37000 1.6781504 444 -0 0.58119464 + 38000 1.7190533 444 -0 0.5969026 + 39000 1.7604269 444 -0 0.61261057 + 40000 1.8019216 444 -0 0.62831853 + 41000 1.8402535 444 -0 0.64402649 + 42000 1.8791646 444 -0 0.65973446 + 43000 1.9188237 444 -0 0.67544242 + 44000 1.9584939 444 -0 0.69115038 + 45000 1.9992043 444 -0 0.70685835 + 46000 2.04024 444 -0 0.72256631 + 47000 2.0814641 444 -0 0.73827427 + 48000 2.123407 444 -0 0.75398224 + 49000 2.165223 444 -0 0.7696902 + 50000 2.2074047 444 -0 0.78539816 + 51000 2.2456301 444 -0 0.80110613 + 52000 2.2839661 444 -0 0.81681409 + 53000 2.3227369 444 -0 0.83252205 + 54000 2.3618801 444 -0 0.84823002 + 55000 2.401451 444 -0 0.86393798 + 56000 2.4414565 444 -0 0.87964594 + 57000 2.4813918 444 -0 0.89535391 + 58000 2.5221831 444 -0 0.91106187 + 59000 2.5637488 444 -0 0.92676983 + 60000 2.6055953 444 -0 0.9424778 + 61000 2.6456326 444 -0 0.95818576 + 62000 2.6857299 444 -0 0.97389372 + 63000 2.7259082 444 -0 0.98960169 + 64000 2.7665767 444 -0 1.0053096 + 65000 2.8082755 444 -0 1.0210176 + 66000 2.8503373 444 -0 1.0367256 + 67000 2.8938769 444 -0 1.0524335 + 68000 2.9373604 444 -0 1.0681415 + 69000 2.9810674 444 -0 1.0838495 + 70000 3.0246587 444 -0 1.0995574 + 71000 3.0655215 444 -0 1.1152654 + 72000 3.1075971 444 -0 1.1309734 + 73000 3.1497688 444 -0 1.1466813 + 74000 3.1915941 444 -0 1.1623893 + 75000 3.2352454 444 -0 1.1780972 + 76000 3.2799164 444 -0 1.1938052 + 77000 3.3245184 444 -0 1.2095132 + 78000 3.3693626 444 -0 1.2252211 + 79000 3.4144403 444 -0 1.2409291 + 80000 3.4609593 444 -0 1.2566371 + 81000 3.5037956 444 -0 1.272345 + 82000 3.5460391 444 -0 1.288053 + 83000 3.5890988 444 -0 1.303761 + 84000 3.6329781 444 -0 1.3194689 + 85000 3.6969324 888 -0 1.3351769 + 86000 3.7764618 888 -0 1.3508848 + 87000 3.855693 888 -0 1.3665928 + 88000 3.9341142 888 -0 1.3823008 + 89000 4.0125134 888 -0 1.3980087 + 90000 4.0915705 888 -0 1.4137167 + 91000 4.1526623 888 -0 1.4294247 + 92000 4.2142478 888 -0 1.4451326 + 93000 4.2776631 888 -0 1.4608406 + 94000 4.3413071 888 -0 1.4765485 + 95000 4.4047448 888 -0 1.4922565 + 96000 4.4682904 888 -0 1.5079645 + 97000 4.5328349 888 -0 1.5236724 + 98000 4.5968674 888 -0 1.5393804 + 99000 4.6612212 888 -0 1.5550884 + 100000 4.7263166 888 -0 1.5707963 + 101000 4.7899218 888 -0 1.5865043 + 102000 4.8548615 888 -0 1.6022123 + 103000 4.9201477 888 -0 1.6179202 + 104000 4.9848694 888 -0 1.6336282 + 105000 5.0511867 888 -0 1.6493361 + 106000 5.1167808 888 -0 1.6650441 + 107000 5.1831053 888 -0 1.6807521 + 108000 5.250398 888 -0 1.69646 + 109000 5.3169814 888 -0 1.712168 + 110000 5.3857277 888 -0 1.727876 + 111000 5.4527691 888 -0 1.7435839 + 112000 5.5214505 888 -0 1.7592919 + 113000 5.5892604 888 -0 1.7749998 + 114000 5.6579089 888 -0 1.7907078 + 115000 5.7279007 888 -0 1.8064158 + 116000 5.7971602 888 -0 1.8221237 + 117000 5.867895 888 -0 1.8378317 + 118000 5.9400645 888 -0 1.8535397 + 119000 6.0117635 888 -0 1.8692476 + 120000 6.0851132 888 -0 1.8849556 + 121000 6.1539323 888 -0 1.9006636 + 122000 6.2231605 888 -0 1.9163715 + 123000 6.2930557 888 -0 1.9320795 + 124000 6.3632912 888 -0 1.9477874 + 125000 6.4336358 888 -0 1.9634954 + 126000 6.5042786 888 -0 1.9792034 + 127000 6.5747889 888 -0 1.9949113 + 128000 6.6452984 888 -0 2.0106193 + 129000 6.7169482 888 -0 2.0263273 + 130000 6.7865487 888 -0 2.0420352 + 131000 6.8576956 888 -0 2.0577432 + 132000 6.9296299 888 -0 2.0734512 + 133000 7.0024987 888 -0 2.0891591 + 134000 7.0753126 888 -0 2.1048671 + 135000 7.1492322 888 -0 2.120575 + 136000 7.2243825 888 -0 2.136283 + 137000 7.3005224 888 -0 2.151991 + 138000 7.378849 888 -0 2.1676989 + 139000 7.4574391 888 -0 2.1834069 + 140000 7.5370788 888 -0 2.1991149 + 141000 7.6104683 888 -0 2.2148228 + 142000 7.6840599 888 -0 2.2305308 + 143000 7.7594508 888 -0 2.2462387 + 144000 7.8338839 888 -0 2.2619467 + 145000 7.9104471 888 -0 2.2776547 + 146000 7.9862744 888 -0 2.2933626 + 147000 8.0621903 888 -0 2.3090706 + 148000 8.1403104 888 -0 2.3247786 + 149000 8.2192751 888 -0 2.3404865 + 150000 8.2988877 888 -0 2.3561945 + 151000 8.3771585 888 -0 2.3719025 + 152000 8.4559615 888 -0 2.3876104 + 153000 8.5340116 888 -0 2.4033184 + 154000 8.612764 888 -0 2.4190263 + 155000 8.6925848 888 -0 2.4347343 + 156000 8.7739307 888 -0 2.4504423 + 157000 8.8541471 888 -0 2.4661502 + 158000 8.9371669 888 -0 2.4818582 + 159000 9.0204947 888 -0 2.4975662 + 160000 9.1037153 888 -0 2.5132741 + 161000 9.1860231 888 -0 2.5289821 + 162000 9.2695251 888 -0 2.54469 + 163000 9.3537318 888 -0 2.560398 + 164000 9.4396954 888 -0 2.576106 + 165000 9.5265215 888 -0 2.5918139 + 166000 9.6140047 888 -0 2.6075219 + 167000 9.7019854 888 -0 2.6232299 + 168000 9.7918781 888 -0 2.6389378 + 169000 9.8831043 888 -0 2.6546458 + 170000 9.9785874 1000 -0 2.6703538 + 171000 10.073548 1000 -0 2.6860617 + 172000 10.164183 1000 -0 2.7017697 + 173000 10.256327 1000 -0 2.7174776 + 174000 10.353455 1000 -0 2.7331856 + 175000 10.451392 1000 -0 2.7488936 + 176000 10.549792 1000 -0 2.7646015 + 177000 10.648615 1000 -0 2.7803095 + 178000 10.747357 1000 -0 2.7960175 + 179000 10.84476 1000 -0 2.8117254 + 180000 10.942242 1000 -0 2.8274334 + 181000 11.040635 1000 -0 2.8431414 + 182000 11.139273 1000 -0 2.8588493 + 183000 11.239382 1000 -0 2.8745573 + 184000 11.339673 1000 -0 2.8902652 + 185000 11.441311 1000 -0 2.9059732 + 186000 11.543812 1000 -0 2.9216812 + 187000 11.64542 1000 -0 2.9373891 + 188000 11.74731 1000 -0 2.9530971 + 189000 11.850149 1000 -0 2.9688051 + 190000 11.952154 1000 -0 2.984513 + 191000 12.055857 1000 -0 3.000221 + 192000 12.158418 1000 -0 3.0159289 + 193000 12.261926 1000 -0 3.0316369 + 194000 12.364315 1000 -0 3.0473449 + 195000 12.466776 1000 -0 3.0630528 + 196000 12.568419 1000 -0 3.0787608 + 197000 12.670258 1000 -0 3.0944688 + 198000 12.771091 1000 -0 3.1101767 + 199000 12.873654 1000 -0 3.1258847 + 200000 12.976411 1000 -0 3.1415927 +Loop time of 12.9764 on 4 procs for 200000 steps with 1000 atoms + +Performance: 62922.248 tau/day, 15412.556 timesteps/s, 15.413 Matom-step/s +99.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.35493 | 0.65797 | 0.98979 | 36.8 | 5.07 +Neigh | 0.0084865 | 0.011137 | 0.013852 | 2.4 | 0.09 +Comm | 3.7509 | 4.2375 | 4.7882 | 23.1 | 32.66 +Output | 0.0027947 | 0.0036594 | 0.0042822 | 0.9 | 0.03 +Modify | 5.6694 | 6.3746 | 7.0279 | 24.5 | 49.12 +Other | | 1.692 | | | 13.04 + +Nlocal: 250 ave 260 max 242 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Nghost: 279.25 ave 325 max 232 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Neighs: 939.75 ave 1397 max 509 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 3759 +Ave neighs/atom = 3.759 +Neighbor list builds = 201 +Dangerous builds = 0 +unfix ins +run 200000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 11.87 | 11.88 | 11.89 Mbytes + Step CPU Atoms KinEng v_theta + 200000 0 1000 1.0071568 3.1415927 + 201000 0.093433184 1000 1.0036239 3.1573006 + 202000 0.18902203 1000 0.99846844 3.1730086 + 203000 0.28432792 1000 0.98236169 3.1887165 + 204000 0.38011419 1000 0.98625572 3.2044245 + 205000 0.47468558 1000 0.9893407 3.2201325 + 206000 0.56918796 1000 1.0012123 3.2358404 + 207000 0.66393867 1000 1.0231892 3.2515484 + 208000 0.75739212 1000 1.0265912 3.2672564 + 209000 0.85184147 1000 1.0190202 3.2829643 + 210000 0.94643219 1000 1.0267754 3.2986723 + 211000 1.0419472 1000 1.0186847 3.3143802 + 212000 1.1365263 1000 1.0159848 3.3300882 + 213000 1.232359 1000 0.99326329 3.3457962 + 214000 1.3262519 1000 0.97263135 3.3615041 + 215000 1.4200243 1000 0.97246409 3.3772121 + 216000 1.5161944 1000 0.96000626 3.3929201 + 217000 1.6118944 1000 0.95730432 3.408628 + 218000 1.7110719 1000 0.95605591 3.424336 + 219000 1.8103017 1000 0.94983 3.440044 + 220000 1.9104019 1000 0.95291888 3.4557519 + 221000 2.0104337 1000 0.93612997 3.4714599 + 222000 2.1116636 1000 0.93414081 3.4871678 + 223000 2.2119333 1000 0.93321246 3.5028758 + 224000 2.3141 1000 0.93026943 3.5185838 + 225000 2.4159209 1000 0.930478 3.5342917 + 226000 2.5183511 1000 0.92909096 3.5499997 + 227000 2.6187905 1000 0.92308495 3.5657077 + 228000 2.7162318 1000 0.91075986 3.5814156 + 229000 2.8156901 1000 0.9006662 3.5971236 + 230000 2.9175496 1000 0.88869212 3.6128316 + 231000 3.0178436 1000 0.8877611 3.6285395 + 232000 3.1199496 1000 0.89409636 3.6442475 + 233000 3.2221471 1000 0.90866091 3.6599554 + 234000 3.3254883 1000 0.90454601 3.6756634 + 235000 3.4290048 1000 0.89408327 3.6913714 + 236000 3.5311688 1000 0.8881044 3.7070793 + 237000 3.6334192 1000 0.89322168 3.7227873 + 238000 3.7368611 1000 0.89018045 3.7384953 + 239000 3.8423369 1000 0.88771268 3.7542032 + 240000 3.9476493 1000 0.88957717 3.7699112 + 241000 4.0539657 1000 0.89362036 3.7856191 + 242000 4.16111 1000 0.90967472 3.8013271 + 243000 4.2703542 1000 0.91366381 3.8170351 + 244000 4.3773387 1000 0.9150959 3.832743 + 245000 4.4845495 1000 0.92725789 3.848451 + 246000 4.5930315 1000 0.93024722 3.864159 + 247000 4.7046291 1000 0.93297974 3.8798669 + 248000 4.8170945 1000 0.94755869 3.8955749 + 249000 4.9268016 1000 0.94761679 3.9112829 + 250000 5.0368647 1000 0.92701064 3.9269908 + 251000 5.1471839 1000 0.91365252 3.9426988 + 252000 5.2579805 1000 0.90918381 3.9584067 + 253000 5.3685628 1000 0.90612685 3.9741147 + 254000 5.4809889 1000 0.90352142 3.9898227 + 255000 5.5948165 1000 0.90421567 4.0055306 + 256000 5.7098724 1000 0.90024688 4.0212386 + 257000 5.8267005 1000 0.88540341 4.0369466 + 258000 5.9410582 1000 0.87890423 4.0526545 + 259000 6.0566794 1000 0.86833748 4.0683625 + 260000 6.1707105 1000 0.85465694 4.0840704 + 261000 6.2863098 1000 0.83941242 4.0997784 + 262000 6.4015542 1000 0.81790404 4.1154864 + 263000 6.5166913 1000 0.82284562 4.1311943 + 264000 6.6306328 1000 0.80961447 4.1469023 + 265000 6.7436467 1000 0.80567073 4.1626103 + 266000 6.855163 1000 0.79577448 4.1783182 + 267000 6.9684761 1000 0.78489106 4.1940262 + 268000 7.0840143 1000 0.77348757 4.2097342 + 269000 7.1995596 1000 0.76606696 4.2254421 + 270000 7.3149459 1000 0.7649744 4.2411501 + 271000 7.4296104 1000 0.76050309 4.256858 + 272000 7.545919 1000 0.75378759 4.272566 + 273000 7.6616623 1000 0.75633811 4.288274 + 274000 7.7787912 1000 0.75703106 4.3039819 + 275000 7.8956703 1000 0.75227453 4.3196899 + 276000 8.0137649 1000 0.76003902 4.3353979 + 277000 8.1334933 1000 0.76274661 4.3511058 + 278000 8.2489616 1000 0.75888482 4.3668138 + 279000 8.3645369 1000 0.75071875 4.3825218 + 280000 8.4781847 1000 0.75454927 4.3982297 + 281000 8.5925071 1000 0.75617824 4.4139377 + 282000 8.7079255 1000 0.75230835 4.4296456 + 283000 8.8225434 1000 0.75417571 4.4453536 + 284000 8.9358224 1000 0.74559345 4.4610616 + 285000 9.0494588 1000 0.73274661 4.4767695 + 286000 9.1624226 1000 0.72385193 4.4924775 + 287000 9.2738683 1000 0.72398899 4.5081855 + 288000 9.3858476 1000 0.72009027 4.5238934 + 289000 9.496472 1000 0.72026686 4.5396014 + 290000 9.6064673 1000 0.72330145 4.5553093 + 291000 9.7157088 1000 0.71630656 4.5710173 + 292000 9.8251432 1000 0.71089192 4.5867253 + 293000 9.9340203 1000 0.70584923 4.6024332 + 294000 10.041427 1000 0.71350398 4.6181412 + 295000 10.150066 1000 0.72781836 4.6338492 + 296000 10.258912 1000 0.72285512 4.6495571 + 297000 10.368299 1000 0.71649517 4.6652651 + 298000 10.480058 1000 0.71132209 4.6809731 + 299000 10.592962 1000 0.73602072 4.696681 + 300000 10.706549 1000 0.74400837 4.712389 + 301000 10.818871 1000 0.76618562 4.7280969 + 302000 10.930873 1000 0.77476041 4.7438049 + 303000 11.040635 1000 0.77124283 4.7595129 + 304000 11.150729 1000 0.7625748 4.7752208 + 305000 11.260184 1000 0.74979361 4.7909288 + 306000 11.36913 1000 0.74515733 4.8066368 + 307000 11.477137 1000 0.74302741 4.8223447 + 308000 11.584107 1000 0.73732959 4.8380527 + 309000 11.692852 1000 0.73368237 4.8537606 + 310000 11.800777 1000 0.72374292 4.8694686 + 311000 11.906901 1000 0.72107784 4.8851766 + 312000 12.015001 1000 0.72944426 4.9008845 + 313000 12.122634 1000 0.73958637 4.9165925 + 314000 12.231473 1000 0.75160847 4.9323005 + 315000 12.343728 1000 0.74419683 4.9480084 + 316000 12.455114 1000 0.74652593 4.9637164 + 317000 12.564048 1000 0.74933482 4.9794244 + 318000 12.672355 1000 0.74200509 4.9951323 + 319000 12.778931 1000 0.7346024 5.0108403 + 320000 12.886067 1000 0.72806145 5.0265482 + 321000 12.993743 1000 0.72147888 5.0422562 + 322000 13.101955 1000 0.71460041 5.0579642 + 323000 13.212177 1000 0.70255075 5.0736721 + 324000 13.322528 1000 0.70640327 5.0893801 + 325000 13.435038 1000 0.70643428 5.1050881 + 326000 13.545443 1000 0.69751794 5.120796 + 327000 13.657538 1000 0.69035108 5.136504 + 328000 13.770475 1000 0.68068243 5.152212 + 329000 13.883136 1000 0.69123492 5.1679199 + 330000 13.995043 1000 0.70326515 5.1836279 + 331000 14.109604 1000 0.70551726 5.1993358 + 332000 14.222995 1000 0.70514444 5.2150438 + 333000 14.336604 1000 0.71102045 5.2307518 + 334000 14.44933 1000 0.71336747 5.2464597 + 335000 14.56056 1000 0.70816388 5.2621677 + 336000 14.67143 1000 0.69502472 5.2778757 + 337000 14.783295 1000 0.69314289 5.2935836 + 338000 14.893816 1000 0.68565794 5.3092916 + 339000 15.005631 1000 0.67268053 5.3249995 + 340000 15.119406 1000 0.68313196 5.3407075 + 341000 15.233786 1000 0.68782815 5.3564155 + 342000 15.349691 1000 0.6989326 5.3721234 + 343000 15.466599 1000 0.694926 5.3878314 + 344000 15.583585 1000 0.7006474 5.4035394 + 345000 15.702299 1000 0.70783177 5.4192473 + 346000 15.819367 1000 0.71334276 5.4349553 + 347000 15.935892 1000 0.72917419 5.4506633 + 348000 16.051074 1000 0.74315705 5.4663712 + 349000 16.165316 1000 0.76731311 5.4820792 + 350000 16.281794 1000 0.79761434 5.4977871 + 351000 16.397615 1000 0.80447724 5.5134951 + 352000 16.514271 1000 0.80118728 5.5292031 + 353000 16.632427 1000 0.77990459 5.544911 + 354000 16.750052 1000 0.76453299 5.560619 + 355000 16.868875 1000 0.76538392 5.576327 + 356000 16.985762 1000 0.76310698 5.5920349 + 357000 17.103471 1000 0.75897095 5.6077429 + 358000 17.223037 1000 0.75071115 5.6234508 + 359000 17.340073 1000 0.74034801 5.6391588 + 360000 17.457867 1000 0.72671924 5.6548668 + 361000 17.57503 1000 0.72111017 5.6705747 + 362000 17.69138 1000 0.71875181 5.6862827 + 363000 17.808661 1000 0.71469706 5.7019907 + 364000 17.925895 1000 0.70470493 5.7176986 + 365000 18.042976 1000 0.70863047 5.7334066 + 366000 18.162079 1000 0.70850561 5.7491146 + 367000 18.283911 1000 0.71413452 5.7648225 + 368000 18.407692 1000 0.71314184 5.7805305 + 369000 18.53068 1000 0.71309549 5.7962384 + 370000 18.652767 1000 0.71132937 5.8119464 + 371000 18.772131 1000 0.70788039 5.8276544 + 372000 18.892439 1000 0.71780071 5.8433623 + 373000 19.012886 1000 0.72352571 5.8590703 + 374000 19.132857 1000 0.71723739 5.8747783 + 375000 19.25312 1000 0.71556941 5.8904862 + 376000 19.372783 1000 0.70935312 5.9061942 + 377000 19.493215 1000 0.71551157 5.9219022 + 378000 19.614604 1000 0.7235163 5.9376101 + 379000 19.735704 1000 0.73896421 5.9533181 + 380000 19.856219 1000 0.74906169 5.969026 + 381000 19.974782 1000 0.75303336 5.984734 + 382000 20.093831 1000 0.75359492 6.000442 + 383000 20.213075 1000 0.75579354 6.0161499 + 384000 20.334366 1000 0.75178368 6.0318579 + 385000 20.455027 1000 0.74412159 6.0475659 + 386000 20.574847 1000 0.7360955 6.0632738 + 387000 20.691183 1000 0.73461103 6.0789818 + 388000 20.80664 1000 0.72496617 6.0946897 + 389000 20.92229 1000 0.7219047 6.1103977 + 390000 21.037387 1000 0.71837013 6.1261057 + 391000 21.152412 1000 0.71495923 6.1418136 + 392000 21.267451 1000 0.71436707 6.1575216 + 393000 21.382024 1000 0.71447834 6.1732296 + 394000 21.496952 1000 0.71334298 6.1889375 + 395000 21.611699 1000 0.71510229 6.2046455 + 396000 21.726328 1000 0.7121714 6.2203535 + 397000 21.840614 1000 0.70818894 6.2360614 + 398000 21.955122 1000 0.70059455 6.2517694 + 399000 22.068714 1000 0.69960089 6.2674773 + 400000 22.182962 1000 0.70261998 6.2831853 +Loop time of 22.183 on 4 procs for 200000 steps with 1000 atoms + +Performance: 36807.772 tau/day, 9015.918 timesteps/s, 9.016 Matom-step/s +95.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1609 | 2.0592 | 2.957 | 61.9 | 9.28 +Neigh | 0.013526 | 0.018287 | 0.022861 | 3.3 | 0.08 +Comm | 7.707 | 8.9501 | 10.214 | 41.1 | 40.35 +Output | 0.0027437 | 0.0039021 | 0.0045769 | 1.1 | 0.02 +Modify | 7.9431 | 9.4082 | 10.711 | 40.5 | 42.41 +Other | | 1.743 | | | 7.86 + +Nlocal: 250 ave 258 max 241 min +Histogram: 1 0 0 0 1 0 0 1 0 1 +Nghost: 412 ave 492 max 332 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 1258.5 ave 1588 max 953 min +Histogram: 2 0 0 0 0 0 0 0 1 1 + +Total # of neighbors = 5034 +Ave neighs/atom = 5.034 +Neighbor list builds = 159 +Dangerous builds = 0 +Total wall time: 0:00:35 diff --git a/examples/granular/log.28Mar23.pour.drum.g++.1 b/examples/granular/log.27Jun24.pour.drum.g++.1 similarity index 75% rename from examples/granular/log.28Mar23.pour.drum.g++.1 rename to examples/granular/log.27Jun24.pour.drum.g++.1 index 4d6744101a..b634481bb3 100644 --- a/examples/granular/log.28Mar23.pour.drum.g++.1 +++ b/examples/granular/log.27Jun24.pour.drum.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (28 Mar 2023 - Development) +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) # pour two types of particles (cohesive and non-cohesive) into cylinder # 'turn' cylinder by changing direction of gravity, then rotate it. # This simulates a rotating drum powder characterization experiment. @@ -92,13 +92,11 @@ fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 ${dhi} de fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 9396 every 490 steps, 2000 by step 1 fix ins2 all pour 2000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 9396 every 490 steps, 2000 by step 1 comm_modify vel yes @@ -126,6 +124,8 @@ dynamic group delgroup defined run 2000 Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 9396 every 2449 steps, 2000 by step 1 +Particle insertion: 9396 every 2449 steps, 2000 by step 1 Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -135,7 +135,7 @@ Neighbor list info ... 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair granular, perpetual attributes: half, newton on, size, history - pair build: half/size/bin/newton + pair build: half/size/bin/atomonly/newton stencil: half/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 15.95 | 15.95 | 15.95 Mbytes @@ -161,20 +161,20 @@ Per MPI rank memory allocation (min/avg/max) = 15.95 | 15.95 | 15.95 Mbytes 1800 4000 -0 0 1900 4000 -0 0 2000 4000 -0 0 -Loop time of 2.86367 on 1 procs for 2000 steps with 4000 atoms +Loop time of 2.46916 on 1 procs for 2000 steps with 4000 atoms -Performance: 60342.153 tau/day, 698.405 timesteps/s, 2.794 Matom-step/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 69983.324 tau/day, 809.992 timesteps/s, 3.240 Matom-step/s +99.5% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.36474 | 0.36474 | 0.36474 | 0.0 | 12.74 -Neigh | 1.0694 | 1.0694 | 1.0694 | 0.0 | 37.35 -Comm | 0.043549 | 0.043549 | 0.043549 | 0.0 | 1.52 -Output | 0.00054587 | 0.00054587 | 0.00054587 | 0.0 | 0.02 -Modify | 1.3281 | 1.3281 | 1.3281 | 0.0 | 46.38 -Other | | 0.05731 | | | 2.00 +Pair | 0.32379 | 0.32379 | 0.32379 | 0.0 | 13.11 +Neigh | 0.98775 | 0.98775 | 0.98775 | 0.0 | 40.00 +Comm | 0.03762 | 0.03762 | 0.03762 | 0.0 | 1.52 +Output | 0.0004273 | 0.0004273 | 0.0004273 | 0.0 | 0.02 +Modify | 1.0824 | 1.0824 | 1.0824 | 0.0 | 43.84 +Other | | 0.03719 | | | 1.51 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -213,60 +213,60 @@ Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule Per MPI rank memory allocation (min/avg/max) = 22.3 | 22.3 | 22.3 Mbytes Step Atoms KinEng v_theta 2000 4000 59.748184 0 - 2100 4000 47.337202 0.031415927 - 2200 4000 33.303567 0.062831853 - 2300 4000 24.246806 0.09424778 - 2400 4000 17.165844 0.12566371 - 2500 4000 18.415922 0.15707963 - 2600 4000 17.3084 0.18849556 - 2700 4000 15.985202 0.21991149 - 2800 4000 14.084599 0.25132741 - 2900 4000 11.526622 0.28274334 - 3000 4000 8.9364793 0.31415927 - 3100 4000 6.844209 0.34557519 - 3200 4000 5.8243926 0.37699112 - 3300 4000 5.5616671 0.40840704 - 3400 4000 5.7219459 0.43982297 - 3500 4000 6.2482952 0.4712389 - 3600 4000 6.396804 0.50265482 - 3700 4000 6.6017236 0.53407075 - 3800 4000 6.684913 0.56548668 - 3900 4000 6.5988588 0.5969026 - 4000 4000 6.4839456 0.62831853 - 4100 4000 6.104233 0.65973446 - 4200 4000 5.6021757 0.69115038 - 4300 4000 4.9670639 0.72256631 - 4400 4000 4.3298233 0.75398224 - 4500 4000 3.8833884 0.78539816 - 4600 4000 3.4626401 0.81681409 - 4700 4000 3.0367615 0.84823002 - 4800 4000 2.762543 0.87964594 - 4900 4000 2.5627778 0.91106187 - 5000 4000 2.4007014 0.9424778 -Loop time of 9.68472 on 1 procs for 3000 steps with 4000 atoms + 2100 4000 47.350194 0.031415927 + 2200 4000 33.365489 0.062831853 + 2300 4000 24.167007 0.09424778 + 2400 4000 17.169385 0.12566371 + 2500 4000 18.361204 0.15707963 + 2600 4000 17.259574 0.18849556 + 2700 4000 16.022776 0.21991149 + 2800 4000 14.177071 0.25132741 + 2900 4000 11.594949 0.28274334 + 3000 4000 8.8305692 0.31415927 + 3100 4000 6.777187 0.34557519 + 3200 4000 5.7660641 0.37699112 + 3300 4000 5.6477598 0.40840704 + 3400 4000 5.7778867 0.43982297 + 3500 4000 6.1873342 0.4712389 + 3600 4000 6.2232869 0.50265482 + 3700 4000 6.3635239 0.53407075 + 3800 4000 6.523255 0.56548668 + 3900 4000 6.5008528 0.5969026 + 4000 4000 6.2394922 0.62831853 + 4100 4000 5.9742801 0.65973446 + 4200 4000 5.3949422 0.69115038 + 4300 4000 4.9123859 0.72256631 + 4400 4000 4.3863176 0.75398224 + 4500 4000 3.8729959 0.78539816 + 4600 4000 3.4734137 0.81681409 + 4700 4000 3.0478845 0.84823002 + 4800 4000 2.8232582 0.87964594 + 4900 4000 2.6314234 0.91106187 + 5000 4000 2.429883 0.9424778 +Loop time of 8.26731 on 1 procs for 3000 steps with 4000 atoms -Performance: 26763.820 tau/day, 309.766 timesteps/s, 1.239 Matom-step/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 31352.411 tau/day, 362.875 timesteps/s, 1.452 Matom-step/s +99.7% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.2753 | 3.2753 | 3.2753 | 0.0 | 33.82 -Neigh | 2.2272 | 2.2272 | 2.2272 | 0.0 | 23.00 -Comm | 0.068198 | 0.068198 | 0.068198 | 0.0 | 0.70 -Output | 0.0008788 | 0.0008788 | 0.0008788 | 0.0 | 0.01 -Modify | 4.0327 | 4.0327 | 4.0327 | 0.0 | 41.64 -Other | | 0.08047 | | | 0.83 +Pair | 2.9751 | 2.9751 | 2.9751 | 0.0 | 35.99 +Neigh | 2.0918 | 2.0918 | 2.0918 | 0.0 | 25.30 +Comm | 0.059511 | 0.059511 | 0.059511 | 0.0 | 0.72 +Output | 0.0007014 | 0.0007014 | 0.0007014 | 0.0 | 0.01 +Modify | 3.0819 | 3.0819 | 3.0819 | 0.0 | 37.28 +Other | | 0.05826 | | | 0.70 Nlocal: 4000 ave 4000 max 4000 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 364 ave 364 max 364 min +Nghost: 353 ave 353 max 353 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 12973 ave 12973 max 12973 min +Neighs: 12970 ave 12970 max 12970 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 12973 -Ave neighs/atom = 3.24325 -Neighbor list builds = 1274 +Total # of neighbors = 12970 +Ave neighs/atom = 3.2425 +Neighbor list builds = 1236 Dangerous builds = 130 -Total wall time: 0:00:12 +Total wall time: 0:00:10 diff --git a/examples/granular/log.28Mar23.pour.drum.g++.4 b/examples/granular/log.27Jun24.pour.drum.g++.4 similarity index 89% rename from examples/granular/log.28Mar23.pour.drum.g++.4 rename to examples/granular/log.27Jun24.pour.drum.g++.4 index 059e6b848f..b4d8176283 100644 --- a/examples/granular/log.28Mar23.pour.drum.g++.4 +++ b/examples/granular/log.27Jun24.pour.drum.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (28 Mar 2023 - Development) +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) # pour two types of particles (cohesive and non-cohesive) into cylinder # 'turn' cylinder by changing direction of gravity, then rotate it. # This simulates a rotating drum powder characterization experiment. @@ -92,13 +92,11 @@ fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 ${dhi} de fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} fix ins1 all pour 2000 1 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 9396 every 490 steps, 2000 by step 1 fix ins2 all pour 2000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} fix ins2 all pour 2000 2 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 9396 every 490 steps, 2000 by step 1 comm_modify vel yes @@ -126,6 +124,8 @@ dynamic group delgroup defined run 2000 Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 9396 every 2449 steps, 2000 by step 1 +Particle insertion: 9396 every 2449 steps, 2000 by step 1 Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -135,7 +135,7 @@ Neighbor list info ... 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair granular, perpetual attributes: half, newton on, size, history - pair build: half/size/bin/newton + pair build: half/size/bin/atomonly/newton stencil: half/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 15.26 | 15.26 | 15.26 Mbytes @@ -161,20 +161,20 @@ Per MPI rank memory allocation (min/avg/max) = 15.26 | 15.26 | 15.26 Mbytes 1800 4000 -0 0 1900 4000 -0 0 2000 4000 -0 0 -Loop time of 0.748557 on 4 procs for 2000 steps with 4000 atoms +Loop time of 0.717368 on 4 procs for 2000 steps with 4000 atoms -Performance: 230844.044 tau/day, 2671.806 timesteps/s, 10.687 Matom-step/s -97.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 240880.647 tau/day, 2787.970 timesteps/s, 11.152 Matom-step/s +99.6% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.06941 | 0.071981 | 0.074417 | 0.7 | 9.62 -Neigh | 0.16177 | 0.16555 | 0.17093 | 0.8 | 22.12 -Comm | 0.090638 | 0.10803 | 0.12219 | 4.1 | 14.43 -Output | 0.00028818 | 0.00034597 | 0.0004604 | 0.0 | 0.05 -Modify | 0.36474 | 0.3754 | 0.38959 | 1.7 | 50.15 -Other | | 0.02725 | | | 3.64 +Pair | 0.066314 | 0.069313 | 0.072824 | 0.9 | 9.66 +Neigh | 0.17091 | 0.17659 | 0.18316 | 1.2 | 24.62 +Comm | 0.090794 | 0.10277 | 0.11691 | 3.3 | 14.33 +Output | 0.00026021 | 0.00028548 | 0.00031629 | 0.0 | 0.04 +Modify | 0.33724 | 0.3471 | 0.35578 | 1.1 | 48.39 +Other | | 0.02131 | | | 2.97 Nlocal: 1000 ave 1011 max 989 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -243,20 +243,20 @@ Per MPI rank memory allocation (min/avg/max) = 21.56 | 21.56 | 21.56 Mbytes 4800 4000 2.6544181 0.87964594 4900 4000 2.4465164 0.91106187 5000 4000 2.2332401 0.9424778 -Loop time of 2.5078 on 4 procs for 3000 steps with 4000 atoms +Loop time of 2.47988 on 4 procs for 3000 steps with 4000 atoms -Performance: 103357.584 tau/day, 1196.268 timesteps/s, 4.785 Matom-step/s -98.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 104520.996 tau/day, 1209.734 timesteps/s, 4.839 Matom-step/s +99.2% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.54095 | 0.71709 | 0.87542 | 14.0 | 28.59 -Neigh | 0.36061 | 0.42976 | 0.50378 | 7.7 | 17.14 -Comm | 0.17653 | 0.42898 | 0.69006 | 27.8 | 17.11 -Output | 0.00074969 | 0.0013183 | 0.0019347 | 1.2 | 0.05 -Modify | 0.70535 | 0.80409 | 0.91217 | 8.2 | 32.06 -Other | | 0.1266 | | | 5.05 +Pair | 0.51755 | 0.69165 | 0.84951 | 14.2 | 27.89 +Neigh | 0.37557 | 0.44168 | 0.51371 | 7.4 | 17.81 +Comm | 0.17182 | 0.42275 | 0.67979 | 27.7 | 17.05 +Output | 0.00061419 | 0.0013055 | 0.0020239 | 1.4 | 0.05 +Modify | 0.69708 | 0.79942 | 0.90438 | 8.2 | 32.24 +Other | | 0.1231 | | | 4.96 Nlocal: 1000 ave 1311 max 689 min Histogram: 2 0 0 0 0 0 0 0 0 2 diff --git a/examples/granular/log.28Mar23.pour.flatwall.g++.1 b/examples/granular/log.27Jun24.pour.flatwall.g++.1 similarity index 58% rename from examples/granular/log.28Mar23.pour.flatwall.g++.1 rename to examples/granular/log.27Jun24.pour.flatwall.g++.1 index 0879b2ae13..e9c79f57d4 100644 --- a/examples/granular/log.28Mar23.pour.flatwall.g++.1 +++ b/examples/granular/log.27Jun24.pour.flatwall.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (28 Mar 2023 - Development) +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) # pour two types of particles (cohesive and non-cohesive) on flat wall variable name string pour_two_types @@ -70,13 +70,11 @@ fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 ${dhi} d fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens ${dens} ${dens} fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens 1 ${dens} fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens 1 1 -Particle insertion: 562 every 346 steps, 1500 by step 693 fix ins2 all pour 1500 2 3123 region insreg2 diam range ${dlo} ${dhi} dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 ${dhi} dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens 1 ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens 1 1 -Particle insertion: 562 every 346 steps, 1500 by step 693 neighbor ${skin} bin neighbor 0.15 bin @@ -94,6 +92,8 @@ timestep 0.001 run 5000 Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 562 every 1732 steps, 1500 by step 3465 +Particle insertion: 562 every 1732 steps, 1500 by step 3465 Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -103,93 +103,91 @@ Neighbor list info ... 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair granular, perpetual attributes: half, newton on, size, history - pair build: half/size/bin/newton + pair build: half/size/bin/atomonly/newton stencil: half/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 15.24 | 15.24 | 15.24 Mbytes Step Atoms KinEng 0 0 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) 100 926 -0 200 926 -0 300 926 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 400 1498 -0 - 500 1498 -0 - 600 1498 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 700 2275 -0 - 800 2275 -0 - 900 2275 -0 - 1000 2275 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 1100 2954 -0 - 1200 2954 -0 - 1300 2954 -0 - 1400 3000 -0 - 1500 3000 -0 - 1600 3000 -0 - 1700 3000 -0 - 1800 3000 -0 - 1900 3000 -0 - 2000 3000 -0 - 2100 3000 -0 - 2200 3000 -0 - 2300 3000 -0 - 2400 3000 -0 - 2500 3000 -0 - 2600 3000 -0 - 2700 3000 -0 - 2800 3000 -0 - 2900 3000 -0 - 3000 3000 -0 - 3100 3000 -0 - 3200 3000 -0 - 3300 3000 -0 - 3400 3000 -0 - 3500 3000 -0 - 3600 3000 -0 - 3700 3000 -0 - 3800 3000 -0 - 3900 3000 -0 - 4000 3000 -0 - 4100 3000 -0 - 4200 3000 -0 - 4300 3000 -0 - 4400 3000 -0 - 4500 3000 -0 - 4600 3000 -0 - 4700 3000 -0 - 4800 3000 -0 - 4900 3000 -0 - 5000 3000 -0 -Loop time of 10.8677 on 1 procs for 5000 steps with 3000 atoms + 400 926 -0 + 500 926 -0 + 600 926 -0 + 700 926 -0 + 800 926 -0 + 900 926 -0 + 1000 926 -0 + 1100 926 -0 + 1200 926 -0 + 1300 926 -0 + 1400 926 -0 + 1500 926 -0 + 1600 926 -0 + 1700 926 -0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 1800 1882 -0 + 1900 1882 -0 + 2000 1882 -0 + 2100 1882 -0 + 2200 1882 -0 + 2300 1882 -0 + 2400 1882 -0 + 2500 1882 -0 + 2600 1882 -0 + 2700 1882 -0 + 2800 1882 -0 + 2900 1882 -0 + 3000 1882 -0 + 3100 1882 -0 + 3200 1882 -0 + 3300 1882 -0 + 3400 1882 -0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 3500 2849 -0 + 3600 2849 -0 + 3700 2849 -0 + 3800 2849 -0 + 3900 2849 -0 + 4000 2849 -0 + 4100 2849 -0 + 4200 2849 -0 + 4300 2849 -0 + 4400 2849 -0 + 4500 2849 -0 + 4600 2849 -0 + 4700 2849 -0 + 4800 2849 -0 + 4900 2849 -0 + 5000 2849 -0 +Loop time of 5.10849 on 1 procs for 5000 steps with 2849 atoms -Performance: 39750.725 tau/day, 460.078 timesteps/s, 1.380 Matom-step/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 84565.099 tau/day, 978.763 timesteps/s, 2.788 Matom-step/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 8.0086 | 8.0086 | 8.0086 | 0.0 | 73.69 -Neigh | 1.3537 | 1.3537 | 1.3537 | 0.0 | 12.46 -Comm | 0.063133 | 0.063133 | 0.063133 | 0.0 | 0.58 -Output | 0.0010708 | 0.0010708 | 0.0010708 | 0.0 | 0.01 -Modify | 1.3723 | 1.3723 | 1.3723 | 0.0 | 12.63 -Other | | 0.06891 | | | 0.63 +Pair | 3.4951 | 3.4951 | 3.4951 | 0.0 | 68.42 +Neigh | 0.84792 | 0.84792 | 0.84792 | 0.0 | 16.60 +Comm | 0.03348 | 0.03348 | 0.03348 | 0.0 | 0.66 +Output | 0.00063957 | 0.00063957 | 0.00063957 | 0.0 | 0.01 +Modify | 0.69872 | 0.69872 | 0.69872 | 0.0 | 13.68 +Other | | 0.03268 | | | 0.64 -Nlocal: 3000 ave 3000 max 3000 min +Nlocal: 2849 ave 2849 max 2849 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 477 ave 477 max 477 min +Nghost: 325 ave 325 max 325 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 16725 ave 16725 max 16725 min +Neighs: 12243 ave 12243 max 12243 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 16725 -Ave neighs/atom = 5.575 -Neighbor list builds = 1109 +Total # of neighbors = 12243 +Ave neighs/atom = 4.2972973 +Neighbor list builds = 1275 Dangerous builds = 0 -Total wall time: 0:00:10 +Total wall time: 0:00:05 diff --git a/examples/granular/log.28Mar23.pour.flatwall.g++.4 b/examples/granular/log.27Jun24.pour.flatwall.g++.4 similarity index 57% rename from examples/granular/log.28Mar23.pour.flatwall.g++.4 rename to examples/granular/log.27Jun24.pour.flatwall.g++.4 index fd49a05b6c..613be3fb99 100644 --- a/examples/granular/log.28Mar23.pour.flatwall.g++.4 +++ b/examples/granular/log.27Jun24.pour.flatwall.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (28 Mar 2023 - Development) +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) # pour two types of particles (cohesive and non-cohesive) on flat wall variable name string pour_two_types @@ -70,13 +70,11 @@ fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 ${dhi} d fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens ${dens} ${dens} fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens 1 ${dens} fix ins1 all pour 1500 1 3123 region insreg1 diam range 0.5 1 dens 1 1 -Particle insertion: 562 every 346 steps, 1500 by step 693 fix ins2 all pour 1500 2 3123 region insreg2 diam range ${dlo} ${dhi} dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 ${dhi} dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens ${dens} ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens 1 ${dens} fix ins2 all pour 1500 2 3123 region insreg2 diam range 0.5 1 dens 1 1 -Particle insertion: 562 every 346 steps, 1500 by step 693 neighbor ${skin} bin neighbor 0.15 bin @@ -94,6 +92,8 @@ timestep 0.001 run 5000 Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 562 every 1732 steps, 1500 by step 3465 +Particle insertion: 562 every 1732 steps, 1500 by step 3465 Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -103,93 +103,91 @@ Neighbor list info ... 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair granular, perpetual attributes: half, newton on, size, history - pair build: half/size/bin/newton + pair build: half/size/bin/atomonly/newton stencil: half/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 15.03 | 15.03 | 15.03 Mbytes Step Atoms KinEng 0 0 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) 100 926 -0 200 926 -0 300 926 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 400 1498 -0 - 500 1498 -0 - 600 1498 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 700 2275 -0 - 800 2275 -0 - 900 2275 -0 - 1000 2275 -0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 1100 2954 -0 - 1200 2954 -0 - 1300 2954 -0 - 1400 3000 -0 - 1500 3000 -0 - 1600 3000 -0 - 1700 3000 -0 - 1800 3000 -0 - 1900 3000 -0 - 2000 3000 -0 - 2100 3000 -0 - 2200 3000 -0 - 2300 3000 -0 - 2400 3000 -0 - 2500 3000 -0 - 2600 3000 -0 - 2700 3000 -0 - 2800 3000 -0 - 2900 3000 -0 - 3000 3000 -0 - 3100 3000 -0 - 3200 3000 -0 - 3300 3000 -0 - 3400 3000 -0 - 3500 3000 -0 - 3600 3000 -0 - 3700 3000 -0 - 3800 3000 -0 - 3900 3000 -0 - 4000 3000 -0 - 4100 3000 -0 - 4200 3000 -0 - 4300 3000 -0 - 4400 3000 -0 - 4500 3000 -0 - 4600 3000 -0 - 4700 3000 -0 - 4800 3000 -0 - 4900 3000 -0 - 5000 3000 -0 -Loop time of 4.13223 on 4 procs for 5000 steps with 3000 atoms + 400 926 -0 + 500 926 -0 + 600 926 -0 + 700 926 -0 + 800 926 -0 + 900 926 -0 + 1000 926 -0 + 1100 926 -0 + 1200 926 -0 + 1300 926 -0 + 1400 926 -0 + 1500 926 -0 + 1600 926 -0 + 1700 926 -0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 1800 1882 -0 + 1900 1882 -0 + 2000 1882 -0 + 2100 1882 -0 + 2200 1882 -0 + 2300 1882 -0 + 2400 1882 -0 + 2500 1882 -0 + 2600 1882 -0 + 2700 1882 -0 + 2800 1882 -0 + 2900 1882 -0 + 3000 1882 -0 + 3100 1882 -0 + 3200 1882 -0 + 3300 1882 -0 + 3400 1882 -0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 3500 2849 -0 + 3600 2849 -0 + 3700 2849 -0 + 3800 2849 -0 + 3900 2849 -0 + 4000 2849 -0 + 4100 2849 -0 + 4200 2849 -0 + 4300 2849 -0 + 4400 2849 -0 + 4500 2849 -0 + 4600 2849 -0 + 4700 2849 -0 + 4800 2849 -0 + 4900 2849 -0 + 5000 2849 -0 +Loop time of 2.29763 on 4 procs for 5000 steps with 2849 atoms -Performance: 104544.144 tau/day, 1210.002 timesteps/s, 3.630 Matom-step/s -98.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 188019.846 tau/day, 2176.156 timesteps/s, 6.200 Matom-step/s +99.3% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.85927 | 1.7572 | 2.6929 | 62.8 | 42.52 -Neigh | 0.19818 | 0.26863 | 0.34064 | 11.8 | 6.50 -Comm | 0.2647 | 1.3123 | 2.3283 | 79.9 | 31.76 -Output | 0.00061316 | 0.00082693 | 0.0011984 | 0.0 | 0.02 -Modify | 0.69024 | 0.74011 | 0.783 | 3.9 | 17.91 -Other | | 0.05316 | | | 1.29 +Pair | 0.38295 | 0.832 | 1.3838 | 49.2 | 36.21 +Neigh | 0.13581 | 0.1818 | 0.24052 | 10.9 | 7.91 +Comm | 0.21418 | 0.83972 | 1.3498 | 56.1 | 36.55 +Output | 0.00049029 | 0.00061201 | 0.00074711 | 0.0 | 0.03 +Modify | 0.37843 | 0.41232 | 0.44468 | 4.0 | 17.95 +Other | | 0.03117 | | | 1.36 -Nlocal: 750 ave 1038 max 458 min +Nlocal: 712.25 ave 891 max 538 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 456.75 ave 516 max 411 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Neighs: 4186.25 ave 6316 max 1939 min +Nghost: 420.25 ave 451 max 381 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Neighs: 3050.75 ave 4663 max 1564 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Total # of neighbors = 16745 -Ave neighs/atom = 5.5816667 -Neighbor list builds = 1116 +Total # of neighbors = 12203 +Ave neighs/atom = 4.2832573 +Neighbor list builds = 1282 Dangerous builds = 0 -Total wall time: 0:00:04 +Total wall time: 0:00:02 diff --git a/examples/granular/log.27Jun24.pour.heat.g++.1 b/examples/granular/log.27Jun24.pour.heat.g++.1 new file mode 100644 index 0000000000..d09a9666ab --- /dev/null +++ b/examples/granular/log.27Jun24.pour.heat.g++.1 @@ -0,0 +1,1167 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pour one types of particles into cylinder and oscillate +# temperature of the bottom plate + +variable name string heat_plate + +atom_style sphere +units lj + +############################################### +# Geometry-related parameters +############################################### + +variable boxx equal 10 +variable boxy equal 10 +variable boxz equal 50 + +variable drum_rad equal ${boxx}*0.5 +variable drum_rad equal 10*0.5 +variable drum_height equal 30 + +variable xc equal 0.5*${boxx} +variable xc equal 0.5*10 +variable yc equal 0.5*${boxx} +variable yc equal 0.5*10 +variable zc equal 0.5*${boxz} +variable zc equal 0.5*50 + +############################################### +# Particle-related parameters +############################################### +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable cyl_rad_inner equal ${drum_rad}-1.1*${rhi} +variable cyl_rad_inner equal 5-1.1*${rhi} +variable cyl_rad_inner equal 5-1.1*0.5 + +variable dens equal 1.0 + +variable skin equal 0.4*${rhi} +variable skin equal 0.4*0.5 + +############# +processors * * 1 +region boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz} +region boxreg block 0 10 0 ${boxy} 0 ${boxz} +region boxreg block 0 10 0 10 0 ${boxz} +region boxreg block 0 10 0 10 0 50 +create_box 2 boxreg +Created orthogonal box = (0 0 0) to (10 10 50) + 1 by 1 by 1 MPI processor grid +change_box all boundary p p f +Changing box ... + +pair_style granular +pair_coeff * * hertz/material 1e5 0.2 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 + +region curved_wall cylinder z ${xc} ${yc} ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 ${yc} ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 5 ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 5 5 0 ${drum_height} side in +region curved_wall cylinder z 5 5 5 0 30 side in +region bottom_wall plane ${xc} ${yc} 0 0 0 1 side in +region bottom_wall plane 5 ${yc} 0 0 0 1 side in +region bottom_wall plane 5 5 0 0 0 1 side in + +region insreg cylinder z ${xc} ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 5 ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 5 4.45 ${drum_height} ${boxz} +region insreg cylinder z 5 5 4.45 30 ${boxz} +region insreg cylinder z 5 5 4.45 30 50 + +fix 0 all property/atom temperature heatflow +WARNING: Fix property/atom mol, charge, rmass, temperature, or heatflow w/out ghost communication (../fix_property_atom.cpp:205) +fix 1 all balance 100 1.0 shift xy 5 1.1 +fix 2 all nve/sphere +fix 3 all heat/flow constant 1.0 +fix grav all gravity 10 vector 0 0 -1 +fix ins1 all pour 1000 1 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 1 +fix ins2 all pour 1000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 1 + +comm_modify vel yes + +neighbor ${skin} bin +neighbor 0.2 bin +neigh_modify delay 0 every 1 check yes + +variable oscillate equal 1.0*sin(step*0.0001) + +fix 4 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region curved_wall +fix 5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 region bottom_wall temperature v_oscillate + +thermo_style custom step atoms ke pxx pyy pzz +thermo_modify lost warn +thermo 100 + +timestep 0.001 + +compute 1 all property/atom temperature heatflow +#dump 1 all custom 1000 ${name}.dump id type radius mass x y z c_1[*] + +run 100000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 594 every 2000 steps, 1000 by step 2001 +Particle insertion: 594 every 2000 steps, 1000 by step 2001 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.2 + ghost atom cutoff = 1.2 + binsize = 0.6, bins = 17 17 84 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair granular, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.944 | 5.944 | 5.944 Mbytes + Step Atoms KinEng Pxx Pyy Pzz + 0 0 -0 0 0 0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 100 536 -0 0 0 7.4220499 + 200 536 -0 0 0 10.753096 + 300 536 -0 0 0 13.500241 + 400 536 -0 0 0 18.036636 + 500 536 -0 0 0 21.669269 + 600 536 -0 0 0 25.794277 + 700 536 -0 0.036728411 0.03359373 24.224864 + 800 536 -0 0.21062609 0.26430303 25.376901 + 900 536 -0 0.26668829 0.20265866 25.658924 + 1000 536 -0 0.39065235 0.60669031 26.763499 + 1100 536 -0 0.69933284 0.71982789 26.225375 + 1200 536 -0 0.41577691 0.42256255 24.911833 + 1300 536 -0 0.34365998 0.63004232 25.749448 + 1400 536 -0 0.91213774 1.2145317 22.920251 + 1500 536 -0 0.54726452 0.897705 22.553668 + 1600 536 -0 0.91615466 0.77555664 21.525841 + 1700 536 -0 1.0051938 0.97676595 20.94176 + 1800 536 -0 1.1478423 1.1773124 20.249603 + 1900 536 -0 1.0337276 0.96821449 21.000233 + 2000 536 -0 1.2071746 1.0543682 19.716919 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 2100 1056 -0 1.6914999 2.1024908 23.300848 + 2200 1056 -0 1.0763038 0.99766028 21.476739 + 2300 1056 -0 1.0060348 1.0881501 22.393655 + 2400 1056 -0 1.8382425 1.8651087 22.523726 + 2500 1056 -0 1.6019099 1.7458938 21.9726 + 2600 1056 -0 2.5819875 2.2467378 20.799104 + 2700 1056 -0 1.3032965 1.3540011 19.306465 + 2800 1056 -0 1.2873026 1.3465203 21.080743 + 2900 1056 -0 2.4437283 2.4546684 21.251491 + 3000 1056 -0 1.6351054 1.7271037 20.721292 + 3100 1056 -0 1.7478858 1.8072961 21.19535 + 3200 1056 -0 2.2476927 2.1239368 21.826835 + 3300 1056 -0 2.3489303 2.4565817 22.530916 + 3400 1056 -0 2.0282765 2.0592858 21.499588 + 3500 1056 -0 2.7289638 2.6145138 22.75168 + 3600 1056 -0 2.4031598 2.3984781 22.577541 + 3700 1056 -0 2.3814822 2.5489609 23.583342 + 3800 1056 -0 2.7238397 2.9213797 22.611132 + 3900 1056 -0 3.2886764 3.3331076 22.231541 + 4000 1056 -0 3.629641 3.5650404 21.326329 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 4100 1550 -0 3.6581253 3.6091037 22.567266 + 4200 1550 -0 3.1703325 3.1201394 21.762369 + 4300 1550 -0 2.7416796 2.6035668 22.903128 + 4400 1550 -0 3.0699015 3.1431528 23.999622 + 4500 1550 -0 3.6196014 3.7017313 24.544985 + 4600 1550 -0 3.6441931 3.6848323 23.75274 + 4700 1550 -0 3.5151562 3.6568247 23.317229 + 4800 1550 -0 4.8761024 4.5587136 22.977859 + 4900 1550 -0 4.3005341 4.4190368 21.679238 + 5000 1550 -0 3.9301352 4.1732564 19.921555 + 5100 1550 -0 3.3296487 3.5432155 19.471996 + 5200 1550 -0 4.0072218 4.1491206 21.012391 + 5300 1550 -0 3.7957463 3.9084427 20.787641 + 5400 1550 -0 3.8598485 3.5535159 20.482895 + 5500 1550 -0 4.4197873 4.6219011 21.727572 + 5600 1550 -0 4.5302978 4.2812429 22.689942 + 5700 1550 -0 4.2916308 4.4059403 21.521813 + 5800 1550 -0 4.6164726 4.480437 21.070154 + 5900 1550 -0 4.675308 4.6550469 20.897123 + 6000 1550 -0 5.0539642 4.979992 20.23696 + 6100 2000 -0 4.9990276 5.1035338 23.26111 + 6200 2000 -0 4.6119285 4.5511599 21.934549 + 6300 2000 -0 5.0774825 4.8160391 23.631839 + 6400 2000 -0 5.7737139 5.9626596 26.069644 + 6500 2000 -0 5.3892569 5.5231249 23.023259 + 6600 2000 -0 5.3886344 5.4872107 21.971442 + 6700 2000 -0 5.7449615 5.8255033 21.783299 + 6800 2000 -0 6.0646923 5.9799121 22.245498 + 6900 2000 -0 5.0057778 4.9285257 20.655013 + 7000 2000 -0 4.6019464 4.8168115 21.333938 + 7100 2000 -0 5.408486 5.4825597 23.456271 + 7200 2000 -0 6.5726796 6.5613098 24.838022 + 7300 2000 -0 6.6530583 6.6594714 21.901974 + 7400 2000 -0 6.5197299 6.5144643 19.805667 + 7500 2000 -0 5.5386627 5.7635754 19.372649 + 7600 2000 -0 5.9167463 6.0747035 19.465497 + 7700 2000 -0 5.5273234 5.6764922 20.063724 + 7800 2000 -0 5.2941089 5.6583351 19.399821 + 7900 2000 -0 6.2127566 6.2730591 20.811689 + 8000 2000 -0 6.2586957 6.3917413 21.181183 + 8100 2000 -0 7.6888419 7.4612645 19.004971 + 8200 2000 -0 6.6978099 6.9641603 15.525389 + 8300 2000 -0 6.2921869 6.4062074 10.845374 + 8400 2000 -0 6.0119354 6.1316484 7.8511123 + 8500 2000 -0 5.1806588 5.303647 6.311854 + 8600 2000 -0 4.6944864 4.7229744 4.9041607 + 8700 2000 -0 4.5019064 4.5329727 4.6795368 + 8800 2000 -0 4.6403273 4.679531 5.3583029 + 8900 2000 -0 4.7461483 4.7714283 5.5728241 + 9000 2000 -0 4.6875927 4.7228285 5.2516801 + 9100 2000 -0 4.6506598 4.6723208 5.1753237 + 9200 2000 -0 4.7038993 4.7334071 5.3953721 + 9300 2000 -0 4.7007404 4.7526162 5.3789411 + 9400 2000 -0 4.6837243 4.7134602 5.2741541 + 9500 2000 -0 4.6941099 4.7190018 5.3740553 + 9600 2000 -0 4.7077487 4.7347507 5.3845442 + 9700 2000 -0 4.6786958 4.7023309 5.2672484 + 9800 2000 -0 4.6894331 4.7131781 5.3005024 + 9900 2000 -0 4.6994526 4.7274671 5.361834 + 10000 2000 -0 4.7030651 4.7237065 5.3238507 + 10100 2000 -0 4.7090801 4.7309366 5.3340736 + 10200 2000 -0 4.7042425 4.725825 5.3426828 + 10300 2000 -0 4.704067 4.7214451 5.3090602 + 10400 2000 -0 4.7061515 4.7336504 5.3149709 + 10500 2000 -0 4.709502 4.7327221 5.354315 + 10600 2000 -0 4.7100093 4.7299141 5.3339651 + 10700 2000 -0 4.7023375 4.721219 5.2924765 + 10800 2000 -0 4.7097181 4.7280991 5.3407703 + 10900 2000 -0 4.7072132 4.7241735 5.3226943 + 11000 2000 -0 4.7008964 4.7225721 5.3067345 + 11100 2000 -0 4.7062982 4.72604 5.3241206 + 11200 2000 -0 4.7078072 4.7273662 5.3241052 + 11300 2000 -0 4.7047129 4.7246072 5.3017292 + 11400 2000 -0 4.7070437 4.7248132 5.3266213 + 11500 2000 -0 4.7074544 4.7270548 5.3233484 + 11600 2000 -0 4.7065379 4.7229341 5.305733 + 11700 2000 -0 4.7084526 4.7254471 5.3166146 + 11800 2000 -0 4.710842 4.7266522 5.3226719 + 11900 2000 -0 4.7102149 4.7269278 5.3085626 + 12000 2000 -0 4.7095586 4.7264181 5.3141177 + 12100 2000 -0 4.711148 4.7283138 5.322567 + 12200 2000 -0 4.709444 4.7258315 5.3087624 + 12300 2000 -0 4.7102522 4.7261502 5.3144278 + 12400 2000 -0 4.7110708 4.7260929 5.3252994 + 12500 2000 -0 4.7096024 4.7256316 5.3116866 + 12600 2000 -0 4.7094944 4.7255543 5.3128415 + 12700 2000 -0 4.7108484 4.7262459 5.3210272 + 12800 2000 -0 4.7107443 4.726967 5.3162115 + 12900 2000 -0 4.7103715 4.7272747 5.3161831 + 13000 2000 -0 4.7111615 4.7274234 5.3195144 + 13100 2000 -0 4.7107115 4.7270934 5.3171955 + 13200 2000 -0 4.7105058 4.7266866 5.3152255 + 13300 2000 -0 4.7111528 4.727238 5.3191341 + 13400 2000 -0 4.7104746 4.7260372 5.3167924 + 13500 2000 -0 4.7099999 4.7255337 5.3124374 + 13600 2000 -0 4.7107353 4.7265814 5.3186421 + 13700 2000 -0 4.7109478 4.7264837 5.3177188 + 13800 2000 -0 4.7100596 4.7258467 5.3139152 + 13900 2000 -0 4.7107621 4.7264007 5.3169692 + 14000 2000 -0 4.7107395 4.7265627 5.3182922 + 14100 2000 -0 4.7103907 4.7260697 5.3143929 + 14200 2000 -0 4.7105034 4.7263416 5.3165362 + 14300 2000 -0 4.7108127 4.7264373 5.3180601 + 14400 2000 -0 4.7103102 4.7261005 5.3149927 + 14500 2000 -0 4.7104753 4.7262846 5.3162597 + 14600 2000 -0 4.710704 4.7264748 5.3177725 + 14700 2000 -0 4.7103244 4.7262026 5.3155505 + 14800 2000 -0 4.7103678 4.7261949 5.3160753 + 14900 2000 -0 4.7105271 4.7263478 5.3173896 + 15000 2000 -0 4.7102922 4.7262017 5.315962 + 15100 2000 -0 4.7102725 4.726208 5.3159691 + 15200 2000 -0 4.7104136 4.7263526 5.3171242 + 15300 2000 -0 4.710264 4.7261979 5.3162196 + 15400 2000 -0 4.7101849 4.7261344 5.315894 + 15500 2000 -0 4.7103291 4.7262597 5.3168688 + 15600 2000 -0 4.710259 4.726233 5.3163792 + 15700 2000 -0 4.7101934 4.7261818 5.315928 + 15800 2000 -0 4.7103083 4.7262548 5.3166994 + 15900 2000 -0 4.7102736 4.7262088 5.3164432 + 16000 2000 -0 4.7102205 4.7261479 5.3159781 + 16100 2000 -0 4.7103292 4.7262465 5.3165618 + 16200 2000 -0 4.7103529 4.7262663 5.3165089 + 16300 2000 -0 4.7103166 4.7262103 5.3160762 + 16400 2000 -0 4.7104019 4.726244 5.3164669 + 16500 2000 -0 4.710446 4.726252 5.3165153 + 16600 2000 -0 4.7104341 4.7262253 5.3161457 + 16700 2000 -0 4.7105191 4.7262831 5.3164131 + 16800 2000 -0 4.7105753 4.7263084 5.3165176 + 16900 2000 -0 4.7105631 4.7262594 5.3162034 + 17000 2000 -0 4.7106131 4.7262665 5.3163428 + 17100 2000 -0 4.7106604 4.7262905 5.3164636 + 17200 2000 -0 4.7106547 4.7262781 5.3162311 + 17300 2000 -0 4.7106852 4.7262949 5.3162973 + 17400 2000 -0 4.7107163 4.7263038 5.3164158 + 17500 2000 -0 4.7106985 4.7262671 5.3162357 + 17600 2000 -0 4.7107075 4.7262644 5.3162458 + 17700 2000 -0 4.710735 4.72629 5.3163664 + 17800 2000 -0 4.7107256 4.7262866 5.3162536 + 17900 2000 -0 4.710726 4.7262831 5.3162384 + 18000 2000 -0 4.7107392 4.7262854 5.3163383 + 18100 2000 -0 4.7107256 4.7262696 5.3162644 + 18200 2000 -0 4.7107194 4.7262707 5.3162396 + 18300 2000 -0 4.7107304 4.7262929 5.3163322 + 18400 2000 -0 4.7107138 4.7262906 5.3162972 + 18500 2000 -0 4.7106926 4.7262783 5.3162615 + 18600 2000 -0 4.7106787 4.7262738 5.3163258 + 18700 2000 -0 4.7106515 4.7262672 5.3163085 + 18800 2000 -0 4.7106197 4.7262643 5.3162732 + 18900 2000 -0 4.7105961 4.7262691 5.3163197 + 19000 2000 -0 4.7105612 4.7262576 5.316309 + 19100 2000 -0 4.7105201 4.7262362 5.3162634 + 19200 2000 -0 4.7104918 4.7262275 5.3162855 + 19300 2000 -0 4.7104649 4.7262324 5.3162818 + 19400 2000 -0 4.7104396 4.7262192 5.3162447 + 19500 2000 -0 4.7104236 4.7262151 5.3162575 + 19600 2000 -0 4.7104091 4.7262051 5.3162561 + 19700 2000 -0 4.7103951 4.7261932 5.3162232 + 19800 2000 -0 4.7103936 4.7261935 5.3162311 + 19900 2000 -0 4.7103982 4.7261999 5.3162407 + 20000 2000 -0 4.7104029 4.7262015 5.3162218 + 20100 2000 -0 4.7104142 4.726202 5.3162267 + 20200 2000 -0 4.7104309 4.7262027 5.3162368 + 20300 2000 -0 4.7104504 4.7262057 5.3162258 + 20400 2000 -0 4.7104786 4.7262187 5.3162333 + 20500 2000 -0 4.7105134 4.7262302 5.3162478 + 20600 2000 -0 4.7105482 4.7262372 5.3162423 + 20700 2000 -0 4.7105864 4.7262404 5.3162515 + 20800 2000 -0 4.7106261 4.7262471 5.3162596 + 20900 2000 -0 4.7106689 4.7262579 5.316255 + 21000 2000 -0 4.7107034 4.7262671 5.3162507 + 21100 2000 -0 4.7107384 4.7262744 5.3162497 + 21200 2000 -0 4.7107672 4.7262748 5.3162382 + 21300 2000 -0 4.7107906 4.7262732 5.3162256 + 21400 2000 -0 4.7108106 4.7262742 5.3162189 + 21500 2000 -0 4.7108265 4.7262767 5.3162088 + 21600 2000 -0 4.7108382 4.7262821 5.3161979 + 21700 2000 -0 4.7108471 4.7262761 5.3161924 + 21800 2000 -0 4.7108526 4.7262726 5.3161843 + 21900 2000 -0 4.7108564 4.7262706 5.3161772 + 22000 2000 -0 4.7108602 4.7262724 5.316177 + 22100 2000 -0 4.7108625 4.7262751 5.3161775 + 22200 2000 -0 4.7108622 4.7262758 5.3161772 + 22300 2000 -0 4.7108596 4.7262749 5.3161806 + 22400 2000 -0 4.7108543 4.726274 5.3161846 + 22500 2000 -0 4.7108459 4.7262746 5.3161884 + 22600 2000 -0 4.7108343 4.7262762 5.3161948 + 22700 2000 -0 4.7108179 4.7262758 5.3162001 + 22800 2000 -0 4.7107957 4.7262716 5.3162015 + 22900 2000 -0 4.710769 4.7262654 5.3162017 + 23000 2000 -0 4.7107389 4.726259 5.3162004 + 23100 2000 -0 4.7107066 4.7262529 5.3161958 + 23200 2000 -0 4.7106737 4.726246 5.3161897 + 23300 2000 -0 4.7106415 4.7262372 5.3161816 + 23400 2000 -0 4.7106114 4.7262271 5.3161708 + 23500 2000 -0 4.7105855 4.7262183 5.31616 + 23600 2000 -0 4.7105648 4.7262119 5.3161507 + 23700 2000 -0 4.7105493 4.7262074 5.3161415 + 23800 2000 -0 4.7105388 4.7262036 5.3161333 + 23900 2000 -0 4.7105332 4.7262001 5.3161266 + 24000 2000 -0 4.7105324 4.726198 5.3161208 + 24100 2000 -0 4.7105379 4.7261987 5.3161176 + 24200 2000 -0 4.7105467 4.7262021 5.3161163 + 24300 2000 -0 4.7105614 4.7262068 5.3161163 + 24400 2000 -0 4.7105809 4.7262121 5.3161172 + 24500 2000 -0 4.7106056 4.7262183 5.3161194 + 24600 2000 -0 4.7106355 4.7262261 5.3161222 + 24700 2000 -0 4.7106703 4.7262357 5.3161253 + 24800 2000 -0 4.7107088 4.7262461 5.3161282 + 24900 2000 -0 4.7107493 4.7262556 5.3161293 + 25000 2000 -0 4.7107901 4.7262637 5.3161281 + 25100 2000 -0 4.7108296 4.7262709 5.3161249 + 25200 2000 -0 4.7108664 4.7262775 5.3161194 + 25300 2000 -0 4.7108991 4.7262828 5.3161118 + 25400 2000 -0 4.7109269 4.7262863 5.3161024 + 25500 2000 -0 4.7109494 4.7262877 5.3160916 + 25600 2000 -0 4.7109671 4.7262877 5.3160803 + 25700 2000 -0 4.7109809 4.7262876 5.3160696 + 25800 2000 -0 4.7109916 4.7262876 5.3160602 + 25900 2000 -0 4.7109995 4.7262877 5.3160521 + 26000 2000 -0 4.7110054 4.7262875 5.3160457 + 26100 2000 -0 4.7110094 4.7262874 5.3160411 + 26200 2000 -0 4.7110117 4.7262882 5.3160388 + 26300 2000 -0 4.7110127 4.7262891 5.3160382 + 26400 2000 -0 4.7110121 4.7262905 5.31604 + 26500 2000 -0 4.711009 4.7262915 5.316043 + 26600 2000 -0 4.7110027 4.7262919 5.3160469 + 26700 2000 -0 4.7109927 4.7262915 5.3160515 + 26800 2000 -0 4.7109782 4.7262906 5.3160561 + 26900 2000 -0 4.710959 4.7262886 5.3160598 + 27000 2000 -0 4.7109348 4.7262851 5.316062 + 27100 2000 -0 4.7109061 4.7262796 5.3160619 + 27200 2000 -0 4.7108739 4.7262724 5.3160591 + 27300 2000 -0 4.7108401 4.7262642 5.316054 + 27400 2000 -0 4.7108063 4.7262557 5.316047 + 27500 2000 -0 4.7107742 4.7262471 5.3160385 + 27600 2000 -0 4.7107453 4.7262385 5.3160291 + 27700 2000 -0 4.7107206 4.7262304 5.3160195 + 27800 2000 -0 4.7107008 4.7262235 5.3160103 + 27900 2000 -0 4.7106863 4.7262182 5.3160023 + 28000 2000 -0 4.710677 4.7262146 5.3159957 + 28100 2000 -0 4.7106727 4.7262125 5.3159906 + 28200 2000 -0 4.7106733 4.7262119 5.3159871 + 28300 2000 -0 4.7106787 4.7262128 5.3159853 + 28400 2000 -0 4.7106892 4.7262156 5.3159852 + 28500 2000 -0 4.7107048 4.7262212 5.3159867 + 28600 2000 -0 4.7107257 4.7262261 5.3159896 + 28700 2000 -0 4.7107517 4.7262335 5.3159932 + 28800 2000 -0 4.7107826 4.7262417 5.3159971 + 28900 2000 -0 4.7108219 4.7262521 5.3160015 + 29000 2000 -0 4.7108561 4.7262597 5.3160038 + 29100 2000 -0 4.7108958 4.7262689 5.3160052 + 29200 2000 -0 4.7109361 4.7262771 5.3160045 + 29300 2000 -0 4.7109728 4.7262838 5.3160011 + 29400 2000 -0 4.7110067 4.7262889 5.3159955 + 29500 2000 -0 4.711036 4.7262925 5.3159877 + 29600 2000 -0 4.7110603 4.7262948 5.3159785 + 29700 2000 -0 4.7110799 4.7262957 5.3159685 + 29800 2000 -0 4.7110949 4.7262956 5.3159584 + 29900 2000 -0 4.7111061 4.7262949 5.3159489 + 30000 2000 -0 4.7111143 4.7262941 5.3159407 + 30100 2000 -0 4.7111193 4.7262933 5.3159341 + 30200 2000 -0 4.7111243 4.7262932 5.3159294 + 30300 2000 -0 4.7111269 4.7262935 5.3159266 + 30400 2000 -0 4.711128 4.7262936 5.3159258 + 30500 2000 -0 4.7111275 4.7262944 5.3159269 + 30600 2000 -0 4.711125 4.7262955 5.3159298 + 30700 2000 -0 4.7111199 4.7262965 5.3159342 + 30800 2000 -0 4.7111114 4.726297 5.3159393 + 30900 2000 -0 4.7110988 4.7262967 5.3159447 + 31000 2000 -0 4.7110815 4.7262952 5.3159497 + 31100 2000 -0 4.7110595 4.7262923 5.3159535 + 31200 2000 -0 4.7110323 4.726288 5.3159553 + 31300 2000 -0 4.7110013 4.726282 5.3159549 + 31400 2000 -0 4.7109675 4.7262747 5.3159519 + 31500 2000 -0 4.7109327 4.7262663 5.3159466 + 31600 2000 -0 4.7108986 4.7262575 5.3159394 + 31700 2000 -0 4.710867 4.7262487 5.315931 + 31800 2000 -0 4.7108391 4.7262405 5.3159221 + 31900 2000 -0 4.7108159 4.7262331 5.3159133 + 32000 2000 -0 4.7107977 4.726227 5.3159052 + 32100 2000 -0 4.710785 4.7262223 5.3158983 + 32200 2000 -0 4.710777 4.7262191 5.3158927 + 32300 2000 -0 4.7107748 4.7262178 5.3158888 + 32400 2000 -0 4.7107773 4.7262181 5.3158866 + 32500 2000 -0 4.7107837 4.7262199 5.3158861 + 32600 2000 -0 4.7107949 4.7262234 5.3158872 + 32700 2000 -0 4.710812 4.7262285 5.3158898 + 32800 2000 -0 4.7108346 4.7262358 5.3158935 + 32900 2000 -0 4.7108627 4.7262432 5.3158979 + 33000 2000 -0 4.7108948 4.7262519 5.3159023 + 33100 2000 -0 4.7109317 4.7262609 5.3159063 + 33200 2000 -0 4.7109705 4.7262703 5.3159091 + 33300 2000 -0 4.7110099 4.7262791 5.3159101 + 33400 2000 -0 4.7110481 4.7262867 5.3159088 + 33500 2000 -0 4.7110833 4.726293 5.3159051 + 33600 2000 -0 4.7111146 4.7262976 5.3158989 + 33700 2000 -0 4.7111412 4.7263004 5.3158909 + 33800 2000 -0 4.7111628 4.7263019 5.3158816 + 33900 2000 -0 4.7111797 4.7263023 5.3158719 + 34000 2000 -0 4.7111926 4.7263021 5.3158624 + 34100 2000 -0 4.7112021 4.7263014 5.3158538 + 34200 2000 -0 4.7112089 4.7263006 5.3158466 + 34300 2000 -0 4.7112136 4.7263001 5.3158411 + 34400 2000 -0 4.7112166 4.7262999 5.3158375 + 34500 2000 -0 4.7112182 4.7263002 5.3158359 + 34600 2000 -0 4.7112183 4.7263009 5.3158363 + 34700 2000 -0 4.7112167 4.7263019 5.3158385 + 34800 2000 -0 4.7112128 4.726303 5.3158423 + 34900 2000 -0 4.711206 4.7263038 5.3158473 + 35000 2000 -0 4.7111956 4.7263041 5.315853 + 35100 2000 -0 4.7111808 4.7263035 5.3158586 + 35200 2000 -0 4.7111612 4.7263016 5.3158636 + 35300 2000 -0 4.7111367 4.7262982 5.315867 + 35400 2000 -0 4.7111076 4.7262939 5.3158682 + 35500 2000 -0 4.711075 4.7262874 5.3158674 + 35600 2000 -0 4.7110402 4.726279 5.3158635 + 35700 2000 -0 4.7110052 4.7262704 5.3158577 + 35800 2000 -0 4.7109715 4.7262616 5.3158502 + 35900 2000 -0 4.7109409 4.726253 5.3158418 + 36000 2000 -0 4.7109144 4.7262451 5.3158331 + 36100 2000 -0 4.7108927 4.7262382 5.3158248 + 36200 2000 -0 4.7108762 4.7262327 5.3158173 + 36300 2000 -0 4.7108649 4.7262287 5.3158111 + 36400 2000 -0 4.7108587 4.7262271 5.3158065 + 36500 2000 -0 4.7108574 4.7262255 5.3158035 + 36600 2000 -0 4.710861 4.7262264 5.3158022 + 36700 2000 -0 4.7108696 4.726229 5.3158026 + 36800 2000 -0 4.7108832 4.7262332 5.3158045 + 36900 2000 -0 4.7109021 4.7262389 5.3158078 + 37000 2000 -0 4.7109262 4.726246 5.315812 + 37100 2000 -0 4.7109553 4.7262543 5.3158168 + 37200 2000 -0 4.7109889 4.7262632 5.3158214 + 37300 2000 -0 4.7110258 4.7262726 5.3158253 + 37400 2000 -0 4.7110646 4.7262817 5.3158277 + 37500 2000 -0 4.7111043 4.7262909 5.3158284 + 37600 2000 -0 4.7111414 4.7262979 5.3158264 + 37700 2000 -0 4.7111756 4.7263035 5.315822 + 37800 2000 -0 4.7112054 4.7263076 5.3158153 + 37900 2000 -0 4.7112301 4.7263101 5.3158068 + 38000 2000 -0 4.7112498 4.7263113 5.3157976 + 38100 2000 -0 4.711265 4.7263115 5.3157881 + 38200 2000 -0 4.7112763 4.726311 5.315779 + 38300 2000 -0 4.7112845 4.7263104 5.3157711 + 38400 2000 -0 4.7112902 4.7263097 5.3157647 + 38500 2000 -0 4.7112939 4.7263093 5.31576 + 38600 2000 -0 4.7112962 4.7263094 5.3157573 + 38700 2000 -0 4.711297 4.7263099 5.3157567 + 38800 2000 -0 4.7112963 4.7263107 5.3157579 + 38900 2000 -0 4.7112937 4.7263118 5.315761 + 39000 2000 -0 4.7112886 4.7263129 5.3157655 + 39100 2000 -0 4.7112804 4.7263136 5.3157709 + 39200 2000 -0 4.7112682 4.7263137 5.3157769 + 39300 2000 -0 4.7112515 4.7263127 5.3157826 + 39400 2000 -0 4.71123 4.7263103 5.3157872 + 39500 2000 -0 4.7112035 4.7263063 5.31579 + 39600 2000 -0 4.7111728 4.7263008 5.3157907 + 39700 2000 -0 4.711139 4.7262939 5.3157887 + 39800 2000 -0 4.7111037 4.7262859 5.3157844 + 39900 2000 -0 4.7110687 4.7262772 5.3157781 + 40000 2000 -0 4.7110358 4.7262685 5.3157704 + 40100 2000 -0 4.7110064 4.7262601 5.3157619 + 40200 2000 -0 4.7109813 4.7262525 5.3157535 + 40300 2000 -0 4.7109613 4.7262462 5.3157456 + 40400 2000 -0 4.7109465 4.7262412 5.3157387 + 40500 2000 -0 4.7109368 4.7262378 5.3157332 + 40600 2000 -0 4.7109321 4.726236 5.3157293 + 40700 2000 -0 4.7109324 4.7262358 5.315727 + 40800 2000 -0 4.7109375 4.7262374 5.3157264 + 40900 2000 -0 4.7109477 4.7262406 5.3157276 + 41000 2000 -0 4.7109629 4.7262454 5.3157302 + 41100 2000 -0 4.7109834 4.7262517 5.3157339 + 41200 2000 -0 4.7110092 4.7262592 5.3157386 + 41300 2000 -0 4.7110397 4.7262678 5.3157435 + 41400 2000 -0 4.7110744 4.726277 5.3157481 + 41500 2000 -0 4.711112 4.7262863 5.3157517 + 41600 2000 -0 4.7111509 4.7262953 5.3157536 + 41700 2000 -0 4.7111892 4.7263034 5.3157532 + 41800 2000 -0 4.7112253 4.7263101 5.3157504 + 41900 2000 -0 4.7112578 4.7263153 5.3157453 + 42000 2000 -0 4.7112856 4.7263188 5.315738 + 42100 2000 -0 4.7113084 4.7263209 5.3157294 + 42200 2000 -0 4.7113263 4.7263217 5.31572 + 42300 2000 -0 4.7113399 4.7263217 5.3157107 + 42400 2000 -0 4.7113499 4.7263212 5.3157021 + 42500 2000 -0 4.7113569 4.7263205 5.3156948 + 42600 2000 -0 4.7113617 4.7263199 5.3156891 + 42700 2000 -0 4.7113648 4.7263197 5.3156852 + 42800 2000 -0 4.7113664 4.7263199 5.3156833 + 42900 2000 -0 4.7113666 4.7263206 5.3156835 + 43000 2000 -0 4.7113652 4.7263216 5.3156855 + 43100 2000 -0 4.7113616 4.7263228 5.3156891 + 43200 2000 -0 4.7113555 4.7263238 5.3156942 + 43300 2000 -0 4.7113458 4.7263244 5.3157 + 43400 2000 -0 4.7113321 4.7263241 5.315706 + 43500 2000 -0 4.7113137 4.7263227 5.3157116 + 43600 2000 -0 4.7112903 4.7263199 5.3157158 + 43700 2000 -0 4.7112621 4.7263155 5.3157181 + 43800 2000 -0 4.7112301 4.7263095 5.315718 + 43900 2000 -0 4.7111955 4.7263022 5.3157154 + 44000 2000 -0 4.71116 4.7262939 5.3157104 + 44100 2000 -0 4.7111254 4.7262852 5.3157037 + 44200 2000 -0 4.7110933 4.7262765 5.3156958 + 44300 2000 -0 4.7110651 4.7262684 5.3156873 + 44400 2000 -0 4.7110416 4.7262613 5.3156791 + 44500 2000 -0 4.7110231 4.7262554 5.3156716 + 44600 2000 -0 4.7110098 4.7262509 5.3156652 + 44700 2000 -0 4.7110017 4.726248 5.3156603 + 44800 2000 -0 4.7109984 4.7262468 5.315657 + 44900 2000 -0 4.7110001 4.7262473 5.3156554 + 45000 2000 -0 4.7110067 4.7262494 5.3156555 + 45100 2000 -0 4.7110184 4.7262532 5.3156573 + 45200 2000 -0 4.7110351 4.7262585 5.3156604 + 45300 2000 -0 4.7110572 4.7262652 5.3156645 + 45400 2000 -0 4.7110844 4.7262732 5.3156695 + 45500 2000 -0 4.7111163 4.726282 5.3156745 + 45600 2000 -0 4.7111519 4.7262913 5.3156789 + 45700 2000 -0 4.7111899 4.7263006 5.3156821 + 45800 2000 -0 4.7112287 4.7263093 5.3156834 + 45900 2000 -0 4.7112664 4.7263171 5.3156824 + 46000 2000 -0 4.7113014 4.7263234 5.315679 + 46100 2000 -0 4.7113323 4.726328 5.3156732 + 46200 2000 -0 4.7113584 4.7263312 5.3156655 + 46300 2000 -0 4.7113795 4.7263328 5.3156566 + 46400 2000 -0 4.7113959 4.7263333 5.3156473 + 46500 2000 -0 4.7114081 4.7263331 5.3156382 + 46600 2000 -0 4.711417 4.7263325 5.3156301 + 46700 2000 -0 4.7114231 4.7263319 5.3156233 + 46800 2000 -0 4.7114273 4.7263314 5.3156182 + 46900 2000 -0 4.7114297 4.7263314 5.3156151 + 47000 2000 -0 4.7114308 4.7263317 5.3156139 + 47100 2000 -0 4.7114304 4.7263325 5.3156147 + 47200 2000 -0 4.7114283 4.7263336 5.3156173 + 47300 2000 -0 4.7114239 4.7263348 5.3156216 + 47400 2000 -0 4.7114167 4.7263358 5.315627 + 47500 2000 -0 4.7114058 4.7263362 5.315633 + 47600 2000 -0 4.7113906 4.7263358 5.3156392 + 47700 2000 -0 4.7113705 4.7263338 5.3156444 + 47800 2000 -0 4.7113455 4.7263306 5.3156482 + 47900 2000 -0 4.711316 4.7263257 5.3156499 + 48000 2000 -0 4.711284 4.7263196 5.3156491 + 48100 2000 -0 4.7112478 4.7263117 5.3156458 + 48200 2000 -0 4.7112122 4.7263033 5.3156404 + 48300 2000 -0 4.7111781 4.7262945 5.3156333 + 48400 2000 -0 4.711147 4.726286 5.3156252 + 48500 2000 -0 4.71112 4.7262782 5.3156168 + 48600 2000 -0 4.7110979 4.7262714 5.3156088 + 48700 2000 -0 4.7110808 4.7262659 5.3156017 + 48800 2000 -0 4.711069 4.7262619 5.3155958 + 48900 2000 -0 4.7110622 4.7262595 5.3155915 + 49000 2000 -0 4.7110603 4.7262589 5.3155887 + 49100 2000 -0 4.7110634 4.7262598 5.3155877 + 49200 2000 -0 4.7110713 4.7262625 5.3155884 + 49300 2000 -0 4.7110844 4.7262667 5.3155906 + 49400 2000 -0 4.7111026 4.7262725 5.3155941 + 49500 2000 -0 4.711126 4.7262796 5.3155987 + 49600 2000 -0 4.7111545 4.7262879 5.3156038 + 49700 2000 -0 4.7111875 4.7262969 5.3156087 + 49800 2000 -0 4.7112239 4.7263063 5.3156129 + 49900 2000 -0 4.7112622 4.7263155 5.3156158 + 50000 2000 -0 4.7113008 4.726324 5.3156165 + 50100 2000 -0 4.7113377 4.7263314 5.3156149 + 50200 2000 -0 4.7113716 4.7263373 5.3156108 + 50300 2000 -0 4.7114011 4.7263415 5.3156045 + 50400 2000 -0 4.7114257 4.7263442 5.3155964 + 50500 2000 -0 4.7114453 4.7263455 5.3155874 + 50600 2000 -0 4.7114604 4.7263458 5.3155782 + 50700 2000 -0 4.7114715 4.7263454 5.3155694 + 50800 2000 -0 4.7114794 4.7263448 5.3155616 + 50900 2000 -0 4.7114848 4.7263442 5.3155554 + 51000 2000 -0 4.7114884 4.7263439 5.3155509 + 51100 2000 -0 4.7114904 4.726344 5.3155483 + 51200 2000 -0 4.7114909 4.7263445 5.3155478 + 51300 2000 -0 4.71149 4.7263454 5.3155492 + 51400 2000 -0 4.7114873 4.7263466 5.3155523 + 51500 2000 -0 4.7114821 4.7263478 5.315557 + 51600 2000 -0 4.7114739 4.7263487 5.3155627 + 51700 2000 -0 4.7114618 4.7263489 5.3155689 + 51800 2000 -0 4.7114452 4.7263481 5.3155749 + 51900 2000 -0 4.7114238 4.7263459 5.31558 + 52000 2000 -0 4.7113974 4.7263422 5.3155833 + 52100 2000 -0 4.7113667 4.7263369 5.3155844 + 52200 2000 -0 4.7113328 4.7263302 5.315583 + 52300 2000 -0 4.7112973 4.7263223 5.3155792 + 52400 2000 -0 4.7112619 4.7263138 5.3155733 + 52500 2000 -0 4.7112284 4.7263051 5.3155659 + 52600 2000 -0 4.7111982 4.7262967 5.3155577 + 52700 2000 -0 4.7111724 4.7262891 5.3155495 + 52800 2000 -0 4.7111515 4.7262827 5.3155417 + 52900 2000 -0 4.7111358 4.7262776 5.3155349 + 53000 2000 -0 4.7111253 4.7262741 5.3155295 + 53100 2000 -0 4.7111197 4.7262722 5.3155256 + 53200 2000 -0 4.7111191 4.726272 5.3155234 + 53300 2000 -0 4.7111233 4.7262734 5.3155228 + 53400 2000 -0 4.7111325 4.7262764 5.315524 + 53500 2000 -0 4.7111468 4.7262811 5.3155267 + 53600 2000 -0 4.7111665 4.7262869 5.3155307 + 53700 2000 -0 4.711191 4.7262947 5.3155354 + 53800 2000 -0 4.7112206 4.7263032 5.3155405 + 53900 2000 -0 4.7112545 4.7263124 5.3155454 + 54000 2000 -0 4.7112915 4.7263219 5.3155494 + 54100 2000 -0 4.71133 4.726331 5.3155517 + 54200 2000 -0 4.7113682 4.7263393 5.315552 + 54300 2000 -0 4.7114045 4.7263463 5.3155498 + 54400 2000 -0 4.7114372 4.7263518 5.3155451 + 54500 2000 -0 4.7114654 4.7263556 5.3155384 + 54600 2000 -0 4.7114887 4.7263579 5.3155301 + 54700 2000 -0 4.711507 4.726359 5.315521 + 54800 2000 -0 4.7115209 4.7263593 5.3155118 + 54900 2000 -0 4.7115311 4.7263587 5.3155033 + 55000 2000 -0 4.7115383 4.726358 5.3154959 + 55100 2000 -0 4.7115431 4.7263575 5.3154901 + 55200 2000 -0 4.7115462 4.7263573 5.3154862 + 55300 2000 -0 4.7115477 4.7263575 5.3154841 + 55400 2000 -0 4.7115479 4.7263581 5.3154841 + 55500 2000 -0 4.7115465 4.7263592 5.315486 + 55600 2000 -0 4.7115432 4.7263604 5.3154896 + 55700 2000 -0 4.7115373 4.7263616 5.3154947 + 55800 2000 -0 4.7115281 4.7263624 5.3155006 + 55900 2000 -0 4.7115149 4.7263624 5.3155069 + 56000 2000 -0 4.7114971 4.7263613 5.3155128 + 56100 2000 -0 4.7114744 4.7263589 5.3155175 + 56200 2000 -0 4.711447 4.7263548 5.3155205 + 56300 2000 -0 4.7114152 4.7263493 5.3155209 + 56400 2000 -0 4.7113807 4.7263423 5.315519 + 56500 2000 -0 4.711345 4.7263343 5.3155148 + 56600 2000 -0 4.7113099 4.7263257 5.3155083 + 56700 2000 -0 4.7112769 4.726317 5.3155008 + 56800 2000 -0 4.7112477 4.7263089 5.3154926 + 56900 2000 -0 4.7112229 4.7263016 5.3154844 + 57000 2000 -0 4.7112032 4.7262955 5.3154769 + 57100 2000 -0 4.7111887 4.7262908 5.3154705 + 57200 2000 -0 4.7111792 4.7262877 5.3154654 + 57300 2000 -0 4.7111748 4.7262862 5.3154619 + 57400 2000 -0 4.7111752 4.7262864 5.3154602 + 57500 2000 -0 4.7111806 4.7262883 5.315461 + 57600 2000 -0 4.711191 4.7262917 5.3154625 + 57700 2000 -0 4.7112065 4.7262968 5.3154658 + 57800 2000 -0 4.7112271 4.7263034 5.3154698 + 57900 2000 -0 4.7112529 4.7263111 5.3154746 + 58000 2000 -0 4.7112835 4.7263199 5.3154801 + 58100 2000 -0 4.7113181 4.7263292 5.3154848 + 58200 2000 -0 4.7113555 4.7263387 5.3154884 + 58300 2000 -0 4.7113941 4.7263477 5.3154905 + 58400 2000 -0 4.7114319 4.7263558 5.3154902 + 58500 2000 -0 4.7114674 4.7263625 5.3154874 + 58600 2000 -0 4.7114992 4.7263677 5.3154824 + 58700 2000 -0 4.7115262 4.7263712 5.3154753 + 58800 2000 -0 4.7115483 4.7263732 5.3154666 + 58900 2000 -0 4.7115656 4.7263742 5.3154576 + 59000 2000 -0 4.7115785 4.7263741 5.3154486 + 59100 2000 -0 4.7115886 4.7263741 5.3154403 + 59200 2000 -0 4.7115944 4.726373 5.3154332 + 59300 2000 -0 4.7115987 4.7263726 5.3154279 + 59400 2000 -0 4.7116014 4.7263725 5.3154243 + 59500 2000 -0 4.7116026 4.7263729 5.3154228 + 59600 2000 -0 4.7116024 4.7263737 5.3154233 + 59700 2000 -0 4.7116006 4.7263748 5.3154255 + 59800 2000 -0 4.7115967 4.7263761 5.3154295 + 59900 2000 -0 4.7115901 4.7263772 5.3154349 + 60000 2000 -0 4.7115801 4.7263779 5.3154409 + 60100 2000 -0 4.7115659 4.7263778 5.3154472 + 60200 2000 -0 4.7115471 4.7263764 5.315453 + 60300 2000 -0 4.7115233 4.7263737 5.3154574 + 60400 2000 -0 4.7114947 4.7263693 5.3154599 + 60500 2000 -0 4.7114623 4.7263635 5.31546 + 60600 2000 -0 4.7114273 4.7263565 5.3154576 + 60700 2000 -0 4.7113916 4.7263481 5.3154528 + 60800 2000 -0 4.7113567 4.7263394 5.3154463 + 60900 2000 -0 4.7113244 4.7263309 5.3154385 + 61000 2000 -0 4.7112959 4.7263229 5.3154303 + 61100 2000 -0 4.7112722 4.7263158 5.3154223 + 61200 2000 -0 4.7112535 4.72631 5.315415 + 61300 2000 -0 4.71124 4.7263057 5.3154088 + 61400 2000 -0 4.7112315 4.7263029 5.3154041 + 61500 2000 -0 4.711228 4.7263017 5.315401 + 61600 2000 -0 4.7112293 4.7263023 5.3153996 + 61700 2000 -0 4.7112355 4.7263045 5.3153999 + 61800 2000 -0 4.7112468 4.7263085 5.3154018 + 61900 2000 -0 4.7112631 4.7263138 5.3154051 + 62000 2000 -0 4.7112847 4.7263205 5.3154094 + 62100 2000 -0 4.7113115 4.726329 5.3154147 + 62200 2000 -0 4.7113429 4.7263379 5.3154198 + 62300 2000 -0 4.7113781 4.726347 5.3154245 + 62400 2000 -0 4.7114158 4.7263563 5.315428 + 62500 2000 -0 4.7114544 4.7263652 5.3154296 + 62600 2000 -0 4.7114918 4.726373 5.3154289 + 62700 2000 -0 4.7115267 4.7263795 5.3154257 + 62800 2000 -0 4.7115575 4.7263843 5.3154202 + 62900 2000 -0 4.7115836 4.7263876 5.3154128 + 63000 2000 -0 4.7116046 4.7263894 5.3154041 + 63100 2000 -0 4.711621 4.72639 5.315395 + 63200 2000 -0 4.7116331 4.7263899 5.315386 + 63300 2000 -0 4.7116418 4.7263894 5.315378 + 63400 2000 -0 4.7116478 4.7263889 5.3153713 + 63500 2000 -0 4.7116518 4.7263885 5.3153663 + 63600 2000 -0 4.7116541 4.7263885 5.3153631 + 63700 2000 -0 4.711655 4.7263889 5.315362 + 63800 2000 -0 4.7116545 4.7263898 5.3153629 + 63900 2000 -0 4.7116523 4.726391 5.3153655 + 64000 2000 -0 4.711648 4.7263923 5.3153698 + 64100 2000 -0 4.7116408 4.7263934 5.3153754 + 64200 2000 -0 4.71163 4.726394 5.3153816 + 64300 2000 -0 4.711615 4.7263937 5.3153879 + 64400 2000 -0 4.7115953 4.7263922 5.3153935 + 64500 2000 -0 4.7115705 4.7263891 5.3153977 + 64600 2000 -0 4.7115412 4.7263845 5.3153998 + 64700 2000 -0 4.7115082 4.7263784 5.3153995 + 64800 2000 -0 4.7114729 4.726371 5.3153966 + 64900 2000 -0 4.7114371 4.7263627 5.3153915 + 65000 2000 -0 4.7114025 4.7263541 5.3153848 + 65100 2000 -0 4.7113708 4.7263456 5.3153769 + 65200 2000 -0 4.7113431 4.7263378 5.3153687 + 65300 2000 -0 4.7113201 4.7263309 5.3153608 + 65400 2000 -0 4.7113023 4.7263254 5.3153537 + 65500 2000 -0 4.7112896 4.7263213 5.3153478 + 65600 2000 -0 4.711282 4.7263188 5.3153434 + 65700 2000 -0 4.7112792 4.726318 5.3153406 + 65800 2000 -0 4.7112814 4.7263188 5.3153395 + 65900 2000 -0 4.7112884 4.7263213 5.3153401 + 66000 2000 -0 4.7113004 4.7263254 5.3153423 + 66100 2000 -0 4.7113176 4.7263311 5.3153458 + 66200 2000 -0 4.71134 4.7263381 5.3153504 + 66300 2000 -0 4.7113676 4.7263463 5.3153556 + 66400 2000 -0 4.7113996 4.7263553 5.3153608 + 66500 2000 -0 4.7114353 4.7263648 5.3153654 + 66600 2000 -0 4.7114733 4.7263742 5.3153687 + 66700 2000 -0 4.7115117 4.7263829 5.3153699 + 66800 2000 -0 4.7115488 4.7263906 5.3153689 + 66900 2000 -0 4.711583 4.7263968 5.3153653 + 67000 2000 -0 4.7116131 4.7264014 5.3153595 + 67100 2000 -0 4.7116383 4.7264044 5.3153518 + 67200 2000 -0 4.7116585 4.726406 5.3153431 + 67300 2000 -0 4.7116741 4.7264065 5.315334 + 67400 2000 -0 4.7116856 4.7264063 5.3153251 + 67500 2000 -0 4.7116938 4.7264058 5.3153173 + 67600 2000 -0 4.7116994 4.7264052 5.3153109 + 67700 2000 -0 4.711703 4.7264049 5.3153062 + 67800 2000 -0 4.7117052 4.7264052 5.3153034 + 67900 2000 -0 4.7117057 4.7264056 5.3153026 + 68000 2000 -0 4.711705 4.7264065 5.3153038 + 68100 2000 -0 4.7117024 4.7264077 5.3153067 + 68200 2000 -0 4.7116977 4.726409 5.3153113 + 68300 2000 -0 4.71169 4.7264101 5.315317 + 68400 2000 -0 4.7116786 4.7264106 5.3153233 + 68500 2000 -0 4.7116629 4.7264101 5.3153296 + 68600 2000 -0 4.7116424 4.7264084 5.3153351 + 68700 2000 -0 4.7116169 4.7264052 5.315339 + 68800 2000 -0 4.7115869 4.7264004 5.3153408 + 68900 2000 -0 4.7115534 4.726394 5.3153401 + 69000 2000 -0 4.7115179 4.7263865 5.3153369 + 69100 2000 -0 4.7114821 4.7263781 5.3153316 + 69200 2000 -0 4.7114479 4.7263695 5.3153247 + 69300 2000 -0 4.7114166 4.7263611 5.3153167 + 69400 2000 -0 4.7113895 4.7263534 5.3153086 + 69500 2000 -0 4.7113673 4.7263467 5.3153008 + 69600 2000 -0 4.7113501 4.7263414 5.3152938 + 69700 2000 -0 4.7113382 4.7263375 5.3152882 + 69800 2000 -0 4.7113312 4.7263353 5.315284 + 69900 2000 -0 4.7113291 4.7263347 5.3152815 + 70000 2000 -0 4.7113319 4.7263358 5.3152806 + 70100 2000 -0 4.7113396 4.7263385 5.3152815 + 70200 2000 -0 4.7113523 4.7263428 5.315284 + 70300 2000 -0 4.7113701 4.7263487 5.3152876 + 70400 2000 -0 4.7113932 4.7263559 5.3152924 + 70500 2000 -0 4.7114213 4.7263643 5.3152977 + 70600 2000 -0 4.7114539 4.7263734 5.3153028 + 70700 2000 -0 4.7114899 4.7263829 5.3153073 + 70800 2000 -0 4.711528 4.7263922 5.3153104 + 70900 2000 -0 4.7115663 4.7264009 5.3153114 + 71000 2000 -0 4.7116031 4.7264084 5.31531 + 71100 2000 -0 4.7116368 4.7264144 5.3153062 + 71200 2000 -0 4.7116662 4.7264187 5.3153001 + 71300 2000 -0 4.7116908 4.7264215 5.3152923 + 71400 2000 -0 4.7117103 4.726423 5.3152835 + 71500 2000 -0 4.7117253 4.7264234 5.3152743 + 71600 2000 -0 4.7117363 4.7264232 5.3152656 + 71700 2000 -0 4.7117441 4.7264226 5.315258 + 71800 2000 -0 4.7117494 4.7264221 5.3152518 + 71900 2000 -0 4.7117527 4.7264218 5.3152473 + 72000 2000 -0 4.7117546 4.726422 5.3152448 + 72100 2000 -0 4.711755 4.7264226 5.3152443 + 72200 2000 -0 4.711754 4.7264236 5.3152457 + 72300 2000 -0 4.7117512 4.7264249 5.3152489 + 72400 2000 -0 4.7117461 4.7264262 5.3152537 + 72500 2000 -0 4.711738 4.7264272 5.3152595 + 72600 2000 -0 4.7117262 4.7264276 5.3152659 + 72700 2000 -0 4.7117099 4.726427 5.3152721 + 72800 2000 -0 4.7116887 4.7264251 5.3152775 + 72900 2000 -0 4.7116626 4.7264217 5.3152812 + 73000 2000 -0 4.7116322 4.7264167 5.3152828 + 73100 2000 -0 4.7115983 4.7264103 5.3152818 + 73200 2000 -0 4.7115627 4.7264026 5.3152784 + 73300 2000 -0 4.711527 4.7263942 5.3152729 + 73400 2000 -0 4.7114929 4.7263856 5.3152658 + 73500 2000 -0 4.7114621 4.7263772 5.3152578 + 73600 2000 -0 4.7114355 4.7263696 5.3152497 + 73700 2000 -0 4.7114138 4.7263631 5.315242 + 73800 2000 -0 4.7113972 4.726358 5.3152352 + 73900 2000 -0 4.7113858 4.7263543 5.3152297 + 74000 2000 -0 4.7113794 4.7263522 5.3152258 + 74100 2000 -0 4.7113778 4.7263519 5.3152235 + 74200 2000 -0 4.711381 4.7263531 5.3152228 + 74300 2000 -0 4.7113892 4.726356 5.3152239 + 74400 2000 -0 4.7114024 4.7263605 5.3152265 + 74500 2000 -0 4.7114207 4.7263666 5.3152303 + 74600 2000 -0 4.7114443 4.7263739 5.3152352 + 74700 2000 -0 4.7114729 4.7263824 5.3152405 + 74800 2000 -0 4.7115059 4.7263916 5.3152457 + 74900 2000 -0 4.7115422 4.7264011 5.31525 + 75000 2000 -0 4.7115803 4.7264104 5.315253 + 75100 2000 -0 4.7116185 4.7264193 5.3152538 + 75200 2000 -0 4.7116548 4.7264265 5.3152525 + 75300 2000 -0 4.7116882 4.7264323 5.3152482 + 75400 2000 -0 4.7117172 4.7264365 5.3152419 + 75500 2000 -0 4.7117411 4.7264392 5.315234 + 75600 2000 -0 4.7117602 4.7264405 5.3152251 + 75700 2000 -0 4.7117747 4.7264409 5.315216 + 75800 2000 -0 4.7117853 4.7264406 5.3152074 + 75900 2000 -0 4.7117928 4.72644 5.3151999 + 76000 2000 -0 4.7117978 4.7264395 5.3151939 + 76100 2000 -0 4.711801 4.7264393 5.3151896 + 76200 2000 -0 4.7118027 4.7264395 5.3151873 + 76300 2000 -0 4.711803 4.7264401 5.315187 + 76400 2000 -0 4.7118019 4.7264412 5.3151886 + 76500 2000 -0 4.7117989 4.7264425 5.315192 + 76600 2000 -0 4.7117935 4.7264438 5.3151969 + 76700 2000 -0 4.7117851 4.7264448 5.3152028 + 76800 2000 -0 4.7117728 4.7264451 5.3152092 + 76900 2000 -0 4.7117561 4.7264445 5.3152155 + 77000 2000 -0 4.7117345 4.7264425 5.3152208 + 77100 2000 -0 4.711708 4.726439 5.3152243 + 77200 2000 -0 4.7116772 4.7264338 5.3152257 + 77300 2000 -0 4.7116431 4.7264273 5.3152246 + 77400 2000 -0 4.7116073 4.7264195 5.315221 + 77500 2000 -0 4.7115717 4.7264111 5.3152153 + 77600 2000 -0 4.7115378 4.7264025 5.3152082 + 77700 2000 -0 4.7115073 4.7263942 5.3152002 + 77800 2000 -0 4.711481 4.7263867 5.3151921 + 77900 2000 -0 4.7114597 4.7263803 5.3151844 + 78000 2000 -0 4.7114436 4.7263752 5.3151778 + 78100 2000 -0 4.7114325 4.7263717 5.3151724 + 78200 2000 -0 4.7114265 4.7263698 5.3151686 + 78300 2000 -0 4.7114252 4.7263695 5.3151664 + 78400 2000 -0 4.7114288 4.7263709 5.3151659 + 78500 2000 -0 4.7114373 4.726374 5.3151672 + 78600 2000 -0 4.7114509 4.7263786 5.3151699 + 78700 2000 -0 4.7114696 4.7263847 5.3151738 + 78800 2000 -0 4.7114935 4.7263922 5.3151788 + 78900 2000 -0 4.7115224 4.7264007 5.3151842 + 79000 2000 -0 4.7115556 4.72641 5.3151893 + 79100 2000 -0 4.711592 4.7264195 5.3151936 + 79200 2000 -0 4.7116302 4.7264287 5.3151964 + 79300 2000 -0 4.7116683 4.7264372 5.3151971 + 79400 2000 -0 4.7117047 4.7264451 5.3151953 + 79500 2000 -0 4.7117376 4.7264503 5.3151911 + 79600 2000 -0 4.7117662 4.7264544 5.3151847 + 79700 2000 -0 4.7117898 4.7264569 5.3151768 + 79800 2000 -0 4.7118085 4.7264582 5.3151679 + 79900 2000 -0 4.7118227 4.7264585 5.3151588 + 80000 2000 -0 4.7118331 4.7264582 5.3151503 + 80100 2000 -0 4.7118403 4.7264576 5.3151429 + 80200 2000 -0 4.7118452 4.7264571 5.3151369 + 80300 2000 -0 4.7118483 4.7264569 5.3151328 + 80400 2000 -0 4.7118498 4.7264572 5.3151307 + 80500 2000 -0 4.71185 4.7264578 5.3151305 + 80600 2000 -0 4.7118487 4.7264589 5.3151322 + 80700 2000 -0 4.7118456 4.7264602 5.3151357 + 80800 2000 -0 4.7118401 4.7264616 5.3151407 + 80900 2000 -0 4.7118314 4.7264626 5.3151467 + 81000 2000 -0 4.7118189 4.7264629 5.3151532 + 81100 2000 -0 4.7118019 4.7264622 5.3151594 + 81200 2000 -0 4.7117801 4.7264601 5.3151646 + 81300 2000 -0 4.7117533 4.7264565 5.3151681 + 81400 2000 -0 4.7117222 4.7264513 5.3151694 + 81500 2000 -0 4.711688 4.7264446 5.3151682 + 81600 2000 -0 4.7116526 4.7264373 5.3151642 + 81700 2000 -0 4.7116166 4.7264285 5.3151589 + 81800 2000 -0 4.7115828 4.7264198 5.3151514 + 81900 2000 -0 4.7115524 4.7264116 5.3151435 + 82000 2000 -0 4.7115264 4.7264041 5.3151355 + 82100 2000 -0 4.7115053 4.7263978 5.3151278 + 82200 2000 -0 4.7114894 4.7263928 5.3151212 + 82300 2000 -0 4.7114786 4.7263894 5.315116 + 82400 2000 -0 4.7114728 4.7263875 5.3151123 + 82500 2000 -0 4.7114717 4.7263874 5.3151102 + 82600 2000 -0 4.7114755 4.7263888 5.3151098 + 82700 2000 -0 4.7114842 4.726392 5.3151111 + 82800 2000 -0 4.7114979 4.7263967 5.3151139 + 82900 2000 -0 4.7115168 4.7264029 5.315118 + 83000 2000 -0 4.7115409 4.7264104 5.3151229 + 83100 2000 -0 4.71157 4.7264189 5.3151283 + 83200 2000 -0 4.7116033 4.7264282 5.3151335 + 83300 2000 -0 4.7116398 4.7264377 5.3151378 + 83400 2000 -0 4.711678 4.726447 5.3151405 + 83500 2000 -0 4.7117161 4.7264555 5.3151411 + 83600 2000 -0 4.7117523 4.7264627 5.3151393 + 83700 2000 -0 4.7117851 4.7264684 5.315135 + 83800 2000 -0 4.7118134 4.7264724 5.3151286 + 83900 2000 -0 4.7118369 4.7264749 5.3151206 + 84000 2000 -0 4.7118553 4.7264762 5.3151117 + 84100 2000 -0 4.7118694 4.7264764 5.3151026 + 84200 2000 -0 4.7118796 4.7264761 5.3150941 + 84300 2000 -0 4.7118867 4.7264755 5.3150868 + 84400 2000 -0 4.7118915 4.7264751 5.3150809 + 84500 2000 -0 4.7118945 4.7264749 5.3150769 + 84600 2000 -0 4.711896 4.7264751 5.3150748 + 84700 2000 -0 4.7118961 4.7264758 5.3150747 + 84800 2000 -0 4.7118948 4.7264769 5.3150765 + 84900 2000 -0 4.7118916 4.7264783 5.3150801 + 85000 2000 -0 4.711886 4.7264796 5.3150851 + 85100 2000 -0 4.7118772 4.7264806 5.3150912 + 85200 2000 -0 4.7118646 4.7264809 5.3150977 + 85300 2000 -0 4.7118475 4.7264802 5.3151039 + 85400 2000 -0 4.7118254 4.7264781 5.3151091 + 85500 2000 -0 4.7117985 4.7264744 5.3151126 + 85600 2000 -0 4.7117674 4.7264692 5.3151138 + 85700 2000 -0 4.7117331 4.7264625 5.3151125 + 85800 2000 -0 4.7116972 4.7264548 5.3151088 + 85900 2000 -0 4.7116616 4.7264463 5.315103 + 86000 2000 -0 4.7116279 4.7264377 5.3150958 + 86100 2000 -0 4.7115976 4.7264295 5.3150878 + 86200 2000 -0 4.7115716 4.7264221 5.3150798 + 86300 2000 -0 4.7115507 4.7264158 5.3150722 + 86400 2000 -0 4.7115348 4.7264108 5.3150657 + 86500 2000 -0 4.7115241 4.7264074 5.3150604 + 86600 2000 -0 4.7115183 4.7264056 5.3150568 + 86700 2000 -0 4.7115173 4.7264055 5.3150547 + 86800 2000 -0 4.7115211 4.726407 5.3150543 + 86900 2000 -0 4.7115299 4.7264101 5.3150557 + 87000 2000 -0 4.7115436 4.7264149 5.3150586 + 87100 2000 -0 4.7115626 4.7264211 5.3150626 + 87200 2000 -0 4.7115867 4.7264286 5.3150676 + 87300 2000 -0 4.7116158 4.7264372 5.3150731 + 87400 2000 -0 4.7116491 4.7264465 5.3150782 + 87500 2000 -0 4.7116856 4.726456 5.3150825 + 87600 2000 -0 4.7117238 4.7264653 5.3150853 + 87700 2000 -0 4.7117618 4.7264737 5.3150859 + 87800 2000 -0 4.7117979 4.7264809 5.315084 + 87900 2000 -0 4.7118307 4.7264866 5.3150798 + 88000 2000 -0 4.711859 4.7264907 5.3150733 + 88100 2000 -0 4.7118824 4.7264932 5.3150653 + 88200 2000 -0 4.7119008 4.7264944 5.3150564 + 88300 2000 -0 4.7119148 4.7264947 5.3150474 + 88400 2000 -0 4.711925 4.7264943 5.3150389 + 88500 2000 -0 4.7119321 4.7264938 5.3150316 + 88600 2000 -0 4.7119368 4.7264933 5.3150257 + 88700 2000 -0 4.7119398 4.7264931 5.3150217 + 88800 2000 -0 4.7119412 4.7264934 5.3150196 + 88900 2000 -0 4.7119414 4.7264941 5.3150196 + 89000 2000 -0 4.71194 4.7264952 5.3150214 + 89100 2000 -0 4.7119368 4.7264965 5.315025 + 89200 2000 -0 4.7119312 4.7264979 5.31503 + 89300 2000 -0 4.7119225 4.7264989 5.3150361 + 89400 2000 -0 4.7119099 4.7264992 5.3150426 + 89500 2000 -0 4.7118928 4.7264985 5.3150489 + 89600 2000 -0 4.7118708 4.7264964 5.3150541 + 89700 2000 -0 4.7118439 4.7264928 5.3150576 + 89800 2000 -0 4.7118127 4.7264876 5.3150589 + 89900 2000 -0 4.7117784 4.726481 5.3150576 + 90000 2000 -0 4.7117426 4.7264732 5.315054 + 90100 2000 -0 4.7117069 4.7264647 5.3150482 + 90200 2000 -0 4.7116732 4.7264562 5.315041 + 90300 2000 -0 4.7116428 4.7264479 5.3150331 + 90400 2000 -0 4.7116168 4.7264405 5.315025 + 90500 2000 -0 4.7115958 4.7264342 5.3150175 + 90600 2000 -0 4.7115798 4.7264292 5.3150109 + 90700 2000 -0 4.711569 4.7264258 5.3150057 + 90800 2000 -0 4.7115631 4.726424 5.315002 + 90900 2000 -0 4.711562 4.7264238 5.3149999 + 91000 2000 -0 4.7115658 4.7264253 5.3149995 + 91100 2000 -0 4.7115744 4.7264284 5.3150009 + 91200 2000 -0 4.711588 4.7264331 5.3150037 + 91300 2000 -0 4.7116068 4.7264393 5.3150078 + 91400 2000 -0 4.7116299 4.7264468 5.3150128 + 91500 2000 -0 4.7116598 4.7264554 5.3150182 + 91600 2000 -0 4.711693 4.7264647 5.3150234 + 91700 2000 -0 4.7117294 4.7264742 5.3150278 + 91800 2000 -0 4.7117675 4.7264835 5.3150306 + 91900 2000 -0 4.7118056 4.726492 5.3150313 + 92000 2000 -0 4.7118418 4.7264992 5.3150295 + 92100 2000 -0 4.7118746 4.726505 5.3150253 + 92200 2000 -0 4.711903 4.7265091 5.3150189 + 92300 2000 -0 4.7119265 4.7265116 5.3150109 + 92400 2000 -0 4.711945 4.7265129 5.3150021 + 92500 2000 -0 4.7119591 4.7265131 5.3149931 + 92600 2000 -0 4.7119693 4.7265128 5.3149846 + 92700 2000 -0 4.7119765 4.7265123 5.3149772 + 92800 2000 -0 4.7119813 4.7265118 5.3149713 + 92900 2000 -0 4.7119842 4.7265116 5.3149673 + 93000 2000 -0 4.7119858 4.7265118 5.3149651 + 93100 2000 -0 4.7119859 4.7265125 5.314965 + 93200 2000 -0 4.7119846 4.7265136 5.3149668 + 93300 2000 -0 4.7119815 4.726515 5.3149703 + 93400 2000 -0 4.711976 4.7265163 5.3149754 + 93500 2000 -0 4.7119674 4.7265174 5.3149814 + 93600 2000 -0 4.7119549 4.7265177 5.3149879 + 93700 2000 -0 4.711938 4.7265171 5.3149942 + 93800 2000 -0 4.7119162 4.7265151 5.3149996 + 93900 2000 -0 4.7118894 4.7265116 5.3150031 + 94000 2000 -0 4.7118584 4.7265064 5.3150045 + 94100 2000 -0 4.7118242 4.7264998 5.3150034 + 94200 2000 -0 4.7117884 4.7264921 5.3149998 + 94300 2000 -0 4.7117526 4.7264837 5.3149942 + 94400 2000 -0 4.7117188 4.7264751 5.3149871 + 94500 2000 -0 4.7116882 4.7264669 5.3149791 + 94600 2000 -0 4.711662 4.7264594 5.3149711 + 94700 2000 -0 4.7116407 4.726453 5.3149635 + 94800 2000 -0 4.7116246 4.726448 5.3149569 + 94900 2000 -0 4.7116135 4.7264445 5.3149516 + 95000 2000 -0 4.7116074 4.7264426 5.3149479 + 95100 2000 -0 4.711606 4.7264424 5.3149458 + 95200 2000 -0 4.7116095 4.7264438 5.3149452 + 95300 2000 -0 4.7116179 4.7264469 5.3149466 + 95400 2000 -0 4.7116312 4.7264515 5.3149494 + 95500 2000 -0 4.7116497 4.7264576 5.3149533 + 95600 2000 -0 4.7116734 4.7264651 5.3149583 + 95700 2000 -0 4.7117021 4.7264736 5.3149638 + 95800 2000 -0 4.7117351 4.7264829 5.314969 + 95900 2000 -0 4.7117714 4.7264924 5.3149734 + 96000 2000 -0 4.7118094 4.7265017 5.3149763 + 96100 2000 -0 4.7118475 4.7265103 5.3149771 + 96200 2000 -0 4.7118839 4.7265176 5.3149755 + 96300 2000 -0 4.711917 4.7265235 5.3149714 + 96400 2000 -0 4.7119457 4.7265277 5.3149651 + 96500 2000 -0 4.7119694 4.7265303 5.3149572 + 96600 2000 -0 4.7119882 4.7265316 5.3149483 + 96700 2000 -0 4.7120026 4.726532 5.3149393 + 96800 2000 -0 4.712013 4.7265317 5.3149307 + 96900 2000 -0 4.7120203 4.7265311 5.3149232 + 97000 2000 -0 4.7120253 4.7265307 5.3149172 + 97100 2000 -0 4.7120283 4.7265304 5.314913 + 97200 2000 -0 4.71203 4.7265306 5.3149107 + 97300 2000 -0 4.7120303 4.7265313 5.3149105 + 97400 2000 -0 4.7120291 4.7265324 5.3149121 + 97500 2000 -0 4.7120261 4.7265338 5.3149155 + 97600 2000 -0 4.7120208 4.7265351 5.3149204 + 97700 2000 -0 4.7120125 4.7265362 5.3149264 + 97800 2000 -0 4.7120003 4.7265367 5.3149329 + 97900 2000 -0 4.7119838 4.7265361 5.3149392 + 98000 2000 -0 4.7119623 4.7265342 5.3149446 + 98100 2000 -0 4.711936 4.7265308 5.3149483 + 98200 2000 -0 4.7119052 4.7265258 5.3149499 + 98300 2000 -0 4.7118712 4.7265194 5.3149489 + 98400 2000 -0 4.7118355 4.7265117 5.3149454 + 98500 2000 -0 4.7117997 4.7265033 5.3149399 + 98600 2000 -0 4.7117657 4.7264948 5.3149329 + 98700 2000 -0 4.7117349 4.7264865 5.3149249 + 98800 2000 -0 4.7117083 4.7264789 5.3149168 + 98900 2000 -0 4.7116867 4.7264725 5.3149092 + 99000 2000 -0 4.7116701 4.7264674 5.3149024 + 99100 2000 -0 4.7116587 4.7264638 5.314897 + 99200 2000 -0 4.7116522 4.7264618 5.3148931 + 99300 2000 -0 4.7116505 4.7264615 5.3148909 + 99400 2000 -0 4.7116535 4.7264628 5.3148901 + 99500 2000 -0 4.7116615 4.7264657 5.3148914 + 99600 2000 -0 4.7116745 4.7264702 5.314894 + 99700 2000 -0 4.7116925 4.7264763 5.3148978 + 99800 2000 -0 4.7117158 4.7264836 5.3149028 + 99900 2000 -0 4.7117441 4.7264921 5.3149082 + 100000 2000 -0 4.7117767 4.7265013 5.3149134 +Loop time of 81.8199 on 1 procs for 100000 steps with 2000 atoms + +Performance: 105597.755 tau/day, 1222.196 timesteps/s, 2.444 Matom-step/s +99.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 60.627 | 60.627 | 60.627 | 0.0 | 74.10 +Neigh | 3.677 | 3.677 | 3.677 | 0.0 | 4.49 +Comm | 1.2623 | 1.2623 | 1.2623 | 0.0 | 1.54 +Output | 0.022348 | 0.022348 | 0.022348 | 0.0 | 0.03 +Modify | 15.673 | 15.673 | 15.673 | 0.0 | 19.15 +Other | | 0.5582 | | | 0.68 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 520 ave 520 max 520 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9693 ave 9693 max 9693 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9693 +Ave neighs/atom = 4.8465 +Neighbor list builds = 5282 +Dangerous builds = 0 + +Total wall time: 0:01:21 diff --git a/examples/granular/log.27Jun24.pour.heat.g++.4 b/examples/granular/log.27Jun24.pour.heat.g++.4 new file mode 100644 index 0000000000..774ce25b45 --- /dev/null +++ b/examples/granular/log.27Jun24.pour.heat.g++.4 @@ -0,0 +1,1167 @@ +LAMMPS (27 Jun 2024 - Development - patch_27Jun2024-930-g7036930360) +# pour one types of particles into cylinder and oscillate +# temperature of the bottom plate + +variable name string heat_plate + +atom_style sphere +units lj + +############################################### +# Geometry-related parameters +############################################### + +variable boxx equal 10 +variable boxy equal 10 +variable boxz equal 50 + +variable drum_rad equal ${boxx}*0.5 +variable drum_rad equal 10*0.5 +variable drum_height equal 30 + +variable xc equal 0.5*${boxx} +variable xc equal 0.5*10 +variable yc equal 0.5*${boxx} +variable yc equal 0.5*10 +variable zc equal 0.5*${boxz} +variable zc equal 0.5*50 + +############################################### +# Particle-related parameters +############################################### +variable rlo equal 0.25 +variable rhi equal 0.5 +variable dlo equal 2.0*${rlo} +variable dlo equal 2.0*0.25 +variable dhi equal 2.0*${rhi} +variable dhi equal 2.0*0.5 + +variable cyl_rad_inner equal ${drum_rad}-1.1*${rhi} +variable cyl_rad_inner equal 5-1.1*${rhi} +variable cyl_rad_inner equal 5-1.1*0.5 + +variable dens equal 1.0 + +variable skin equal 0.4*${rhi} +variable skin equal 0.4*0.5 + +############# +processors * * 1 +region boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz} +region boxreg block 0 10 0 ${boxy} 0 ${boxz} +region boxreg block 0 10 0 10 0 ${boxz} +region boxreg block 0 10 0 10 0 50 +create_box 2 boxreg +Created orthogonal box = (0 0 0) to (10 10 50) + 2 by 2 by 1 MPI processor grid +change_box all boundary p p f +Changing box ... + +pair_style granular +pair_coeff * * hertz/material 1e5 0.2 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 + +region curved_wall cylinder z ${xc} ${yc} ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 ${yc} ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 5 ${drum_rad} 0 ${drum_height} side in +region curved_wall cylinder z 5 5 5 0 ${drum_height} side in +region curved_wall cylinder z 5 5 5 0 30 side in +region bottom_wall plane ${xc} ${yc} 0 0 0 1 side in +region bottom_wall plane 5 ${yc} 0 0 0 1 side in +region bottom_wall plane 5 5 0 0 0 1 side in + +region insreg cylinder z ${xc} ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 5 ${cyl_rad_inner} ${drum_height} ${boxz} +region insreg cylinder z 5 5 4.45 ${drum_height} ${boxz} +region insreg cylinder z 5 5 4.45 30 ${boxz} +region insreg cylinder z 5 5 4.45 30 50 + +fix 0 all property/atom temperature heatflow +WARNING: Fix property/atom mol, charge, rmass, temperature, or heatflow w/out ghost communication (../fix_property_atom.cpp:205) +fix 1 all balance 100 1.0 shift xy 5 1.1 +fix 2 all nve/sphere +fix 3 all heat/flow constant 1.0 +fix grav all gravity 10 vector 0 0 -1 +fix ins1 all pour 1000 1 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} +fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 1 +fix ins2 all pour 1000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} +fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 1 + +comm_modify vel yes + +neighbor ${skin} bin +neighbor 0.2 bin +neigh_modify delay 0 every 1 check yes + +variable oscillate equal 1.0*sin(step*0.0001) + +fix 4 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region curved_wall +fix 5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 region bottom_wall temperature v_oscillate + +thermo_style custom step atoms ke pxx pyy pzz +thermo_modify lost warn +thermo 100 + +timestep 0.001 + +compute 1 all property/atom temperature heatflow +#dump 1 all custom 1000 ${name}.dump id type radius mass x y z c_1[*] + +run 100000 +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +Particle insertion: 594 every 2000 steps, 1000 by step 2001 +Particle insertion: 594 every 2000 steps, 1000 by step 2001 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.2 + ghost atom cutoff = 1.2 + binsize = 0.6, bins = 17 17 84 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair granular, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.847 | 5.847 | 5.847 Mbytes + Step Atoms KinEng Pxx Pyy Pzz + 0 0 -0 0 0 0 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 100 536 -0 0 0 7.4220499 + 200 536 -0 0 0 10.753096 + 300 536 -0 0 0 13.500241 + 400 536 -0 0 0 18.036636 + 500 536 -0 0 0 21.669269 + 600 536 -0 0 0 25.794277 + 700 536 -0 0.036728411 0.03359373 24.224864 + 800 536 -0 0.21062609 0.26430303 25.376901 + 900 536 -0 0.26668829 0.20265866 25.658924 + 1000 536 -0 0.39065236 0.60669027 26.763499 + 1100 536 -0 0.69932743 0.71983266 26.225376 + 1200 536 -0 0.4157436 0.42293535 24.911805 + 1300 536 -0 0.33921032 0.63682235 25.754584 + 1400 536 -0 0.93464611 1.3237441 22.865702 + 1500 536 -0 0.80924985 0.74657727 22.757239 + 1600 536 -0 0.92054828 1.2190322 21.876875 + 1700 536 -0 0.94536064 0.98360513 21.289703 + 1800 536 -0 1.1330092 1.1237788 19.551747 + 1900 536 -0 1.0761391 0.85000786 21.250696 + 2000 536 -0 1.638585 1.2861506 20.207604 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 2100 1056 -0 1.5408671 1.5842743 23.291514 + 2200 1056 -0 1.0229197 1.0843624 21.353081 + 2300 1056 -0 1.0065987 0.91432567 22.38512 + 2400 1056 -0 1.7739939 1.7072525 22.725414 + 2500 1056 -0 1.7824503 1.4988478 22.162721 + 2600 1056 -0 1.9954304 2.2158613 20.155076 + 2700 1056 -0 1.2178088 1.1725726 19.457213 + 2800 1056 -0 1.2801853 1.564228 21.186628 + 2900 1056 -0 2.2349618 2.2264187 21.089537 + 3000 1056 -0 1.6864183 1.7538789 20.996558 + 3100 1056 -0 1.8954776 1.8910819 21.206904 + 3200 1056 -0 2.4766394 2.2529193 21.570887 + 3300 1056 -0 2.637015 2.7086712 22.395582 + 3400 1056 -0 1.9106499 1.8935966 22.199401 + 3500 1056 -0 2.5964912 2.5031185 23.039192 + 3600 1056 -0 2.5085435 2.146064 23.068971 + 3700 1056 -0 2.474989 2.4439976 23.419341 + 3800 1056 -0 2.8205404 2.8384851 22.875541 + 3900 1056 -0 3.2026873 3.2416559 22.208749 + 4000 1056 -0 3.6740735 3.5414156 20.915706 +WARNING: Fewer insertions than requested (../fix_pour.cpp:688) + 4100 1550 -0 3.3900757 3.1941323 22.320541 + 4200 1550 -0 3.2075343 3.5119664 22.534143 + 4300 1550 -0 2.4392667 2.3822515 22.0926 + 4400 1550 -0 3.0764489 2.9398635 24.354151 + 4500 1550 -0 3.259183 3.5214347 24.893647 + 4600 1550 -0 3.5868594 3.8241085 24.02662 + 4700 1550 -0 3.7598172 3.6876335 23.416143 + 4800 1550 -0 4.3919175 4.3391781 23.364196 + 4900 1550 -0 4.1572977 4.2215608 21.635388 + 5000 1550 -0 4.0761296 4.188579 20.033325 + 5100 1550 -0 3.8154497 3.981279 20.388815 + 5200 1550 -0 3.9260972 4.0299312 20.63532 + 5300 1550 -0 4.2435745 4.078322 21.129107 + 5400 1550 -0 3.9751622 4.0698369 20.548446 + 5500 1550 -0 4.3205962 4.695632 22.227101 + 5600 1550 -0 4.421366 4.5508427 22.518481 + 5700 1550 -0 4.645671 4.6922949 22.26108 + 5800 1550 -0 4.5325637 4.8296896 20.65521 + 5900 1550 -0 4.5731936 4.7659352 21.121215 + 6000 1550 -0 5.025558 5.6764226 20.612446 + 6100 2000 -0 5.1141082 5.1792324 23.4753 + 6200 2000 -0 4.6074549 4.5071521 22.552763 + 6300 2000 -0 4.6027236 4.7950174 23.868552 + 6400 2000 -0 5.8144758 5.8327319 25.11257 + 6500 2000 -0 5.5493039 6.0635467 23.557583 + 6600 2000 -0 5.5998872 5.6560452 21.26534 + 6700 2000 -0 5.9389457 6.1453813 21.958412 + 6800 2000 -0 5.845436 5.873492 21.472648 + 6900 2000 -0 4.8412624 5.2517991 20.494437 + 7000 2000 -0 4.9740892 4.8591061 21.683587 + 7100 2000 -0 5.3541491 5.6752241 23.079795 + 7200 2000 -0 6.3336598 6.6065982 24.308419 + 7300 2000 -0 6.8446705 7.2038888 22.05424 + 7400 2000 -0 6.4914858 6.2180246 19.453356 + 7500 2000 -0 5.4149656 5.7102678 18.863244 + 7600 2000 -0 5.993974 6.2246875 19.667177 + 7700 2000 -0 5.537945 5.9323433 19.772405 + 7800 2000 -0 5.7127076 5.8380692 19.832586 + 7900 2000 -0 6.5871321 7.0177488 21.789376 + 8000 2000 -0 6.2137806 6.6033352 20.811253 + 8100 2000 -0 7.1080679 7.3941206 17.955335 + 8200 2000 -0 7.0800533 7.342142 16.453027 + 8300 2000 -0 6.5261643 6.55105 10.850028 + 8400 2000 -0 6.0030928 6.3845533 7.7697694 + 8500 2000 -0 5.0954238 5.3124028 6.0378477 + 8600 2000 -0 4.4754476 4.7000196 4.3612521 + 8700 2000 -0 4.3020147 4.5021521 4.4690397 + 8800 2000 -0 4.4873827 4.69778 5.2301336 + 8900 2000 -0 4.5883165 4.8009762 5.4052655 + 9000 2000 -0 4.5299541 4.7588365 5.0717778 + 9100 2000 -0 4.4945799 4.7007233 5.0130628 + 9200 2000 -0 4.5452328 4.7491068 5.193421 + 9300 2000 -0 4.5650117 4.7725276 5.2488941 + 9400 2000 -0 4.5339484 4.7427922 5.10824 + 9500 2000 -0 4.5481358 4.7481803 5.1461805 + 9600 2000 -0 4.5594081 4.7553659 5.167207 + 9700 2000 -0 4.5461404 4.7447755 5.1378673 + 9800 2000 -0 4.551382 4.7439466 5.1230299 + 9900 2000 -0 4.5595502 4.7519517 5.1534248 + 10000 2000 -0 4.5505972 4.7535015 5.1484322 + 10100 2000 -0 4.5446672 4.7456694 5.1147458 + 10200 2000 -0 4.5465723 4.7557117 5.1340175 + 10300 2000 -0 4.5613445 4.7614239 5.1891701 + 10400 2000 -0 4.5540675 4.7576778 5.1186327 + 10500 2000 -0 4.54856 4.7548567 5.1138378 + 10600 2000 -0 4.5548107 4.7594241 5.1504753 + 10700 2000 -0 4.5539257 4.7602468 5.1376936 + 10800 2000 -0 4.552303 4.7563453 5.1209018 + 10900 2000 -0 4.5517918 4.7561582 5.1370229 + 11000 2000 -0 4.5514768 4.7584287 5.1401486 + 11100 2000 -0 4.5574235 4.7608246 5.1362577 + 11200 2000 -0 4.5580159 4.7570238 5.1432545 + 11300 2000 -0 4.5556152 4.7575052 5.1377947 + 11400 2000 -0 4.5546802 4.7546306 5.1278356 + 11500 2000 -0 4.5598313 4.7579194 5.1423919 + 11600 2000 -0 4.5583005 4.7587261 5.140483 + 11700 2000 -0 4.5570835 4.7551895 5.127872 + 11800 2000 -0 4.5581869 4.7582328 5.1377674 + 11900 2000 -0 4.5593636 4.7587566 5.1404685 + 12000 2000 -0 4.5573698 4.7579101 5.1329191 + 12100 2000 -0 4.5582368 4.756673 5.1352718 + 12200 2000 -0 4.5585613 4.7596169 5.1390805 + 12300 2000 -0 4.5593695 4.7586533 5.1337432 + 12400 2000 -0 4.5579537 4.7578185 5.1361814 + 12500 2000 -0 4.5591056 4.7585352 5.1354954 + 12600 2000 -0 4.5586966 4.7582228 5.1357892 + 12700 2000 -0 4.5588441 4.7585485 5.1360059 + 12800 2000 -0 4.5592438 4.7584161 5.1358659 + 12900 2000 -0 4.5586433 4.758533 5.1361218 + 13000 2000 -0 4.5589082 4.7582874 5.1350323 + 13100 2000 -0 4.5587192 4.7583613 5.1358044 + 13200 2000 -0 4.5589043 4.7584529 5.1362351 + 13300 2000 -0 4.5587139 4.7582979 5.1352256 + 13400 2000 -0 4.5587857 4.7583136 5.1356179 + 13500 2000 -0 4.558887 4.7584681 5.1361406 + 13600 2000 -0 4.5587601 4.7583028 5.1354655 + 13700 2000 -0 4.5587896 4.758308 5.1354983 + 13800 2000 -0 4.5588669 4.7584309 5.1360373 + 13900 2000 -0 4.5588217 4.7583325 5.1356349 + 14000 2000 -0 4.5587771 4.7583083 5.1354199 + 14100 2000 -0 4.5588654 4.7583948 5.1359843 + 14200 2000 -0 4.5588354 4.7583448 5.135626 + 14300 2000 -0 4.5588118 4.7583178 5.1354937 + 14400 2000 -0 4.5588496 4.7583829 5.1358985 + 14500 2000 -0 4.5588393 4.7583337 5.1356081 + 14600 2000 -0 4.5588417 4.7583536 5.1355849 + 14700 2000 -0 4.5588545 4.7583671 5.1358084 + 14800 2000 -0 4.5588414 4.7583316 5.1356228 + 14900 2000 -0 4.5588496 4.7583499 5.1356135 + 15000 2000 -0 4.5588668 4.7583608 5.1357615 + 15100 2000 -0 4.5588535 4.7583347 5.1356379 + 15200 2000 -0 4.5588525 4.7583499 5.1356253 + 15300 2000 -0 4.5588741 4.7583534 5.1357225 + 15400 2000 -0 4.5588659 4.7583452 5.1356571 + 15500 2000 -0 4.5588622 4.7583461 5.13563 + 15600 2000 -0 4.5588751 4.7583474 5.1356903 + 15700 2000 -0 4.5588779 4.7583529 5.1356746 + 15800 2000 -0 4.5588728 4.7583461 5.1356359 + 15900 2000 -0 4.5588783 4.7583458 5.1356695 + 16000 2000 -0 4.5588863 4.7583519 5.135681 + 16100 2000 -0 4.5588834 4.7583477 5.1356416 + 16200 2000 -0 4.5588849 4.7583458 5.1356536 + 16300 2000 -0 4.558892 4.7583525 5.1356782 + 16400 2000 -0 4.5588908 4.7583478 5.1356467 + 16500 2000 -0 4.5588939 4.7583451 5.1356442 + 16600 2000 -0 4.5588994 4.7583525 5.1356716 + 16700 2000 -0 4.5588969 4.7583484 5.135651 + 16800 2000 -0 4.5589 4.7583449 5.1356366 + 16900 2000 -0 4.5589074 4.7583517 5.135664 + 17000 2000 -0 4.5589058 4.7583494 5.1356548 + 17100 2000 -0 4.558905 4.7583452 5.1356325 + 17200 2000 -0 4.5589124 4.7583504 5.1356537 + 17300 2000 -0 4.5589148 4.7583506 5.1356558 + 17400 2000 -0 4.5589127 4.758346 5.1356338 + 17500 2000 -0 4.5589167 4.7583488 5.1356435 + 17600 2000 -0 4.5589213 4.7583512 5.1356525 + 17700 2000 -0 4.5589209 4.7583478 5.1356366 + 17800 2000 -0 4.5589224 4.7583477 5.1356363 + 17900 2000 -0 4.5589269 4.7583505 5.1356469 + 18000 2000 -0 4.5589283 4.7583496 5.1356381 + 18100 2000 -0 4.5589286 4.758348 5.1356319 + 18200 2000 -0 4.5589323 4.7583497 5.1356406 + 18300 2000 -0 4.5589357 4.7583521 5.1356382 + 18400 2000 -0 4.5589353 4.7583487 5.1356293 + 18500 2000 -0 4.5589377 4.7583496 5.1356344 + 18600 2000 -0 4.5589402 4.7583502 5.1356361 + 18700 2000 -0 4.5589414 4.7583489 5.1356282 + 18800 2000 -0 4.5589436 4.7583496 5.1356294 + 18900 2000 -0 4.5589458 4.7583507 5.135633 + 19000 2000 -0 4.5589469 4.7583496 5.1356267 + 19100 2000 -0 4.5589492 4.7583496 5.1356252 + 19200 2000 -0 4.5589518 4.7583508 5.1356295 + 19300 2000 -0 4.5589526 4.7583502 5.1356253 + 19400 2000 -0 4.5589542 4.7583498 5.1356216 + 19500 2000 -0 4.558957 4.7583509 5.1356253 + 19600 2000 -0 4.5589587 4.7583508 5.1356237 + 19700 2000 -0 4.5589596 4.7583502 5.1356191 + 19800 2000 -0 4.5589618 4.758351 5.135621 + 19900 2000 -0 4.558964 4.7583513 5.1356211 + 20000 2000 -0 4.5589652 4.7583507 5.1356171 + 20100 2000 -0 4.5589696 4.7583549 5.1356171 + 20200 2000 -0 4.5589685 4.7583518 5.1356175 + 20300 2000 -0 4.5589703 4.7583512 5.1356148 + 20400 2000 -0 4.5589721 4.7583513 5.1356142 + 20500 2000 -0 4.558974 4.7583517 5.1356147 + 20600 2000 -0 4.5589754 4.7583518 5.1356126 + 20700 2000 -0 4.558977 4.7583519 5.1356115 + 20800 2000 -0 4.5589787 4.7583522 5.1356115 + 20900 2000 -0 4.5589801 4.7583528 5.1356108 + 21000 2000 -0 4.5589819 4.7583522 5.1356087 + 21100 2000 -0 4.5589835 4.7583526 5.1356083 + 21200 2000 -0 4.558986 4.7583523 5.1356078 + 21300 2000 -0 4.5589867 4.7583526 5.1356061 + 21400 2000 -0 4.5589883 4.7583529 5.1356056 + 21500 2000 -0 4.5589898 4.7583531 5.1356048 + 21600 2000 -0 4.5589912 4.7583532 5.1356034 + 21700 2000 -0 4.5589928 4.7583534 5.1356027 + 21800 2000 -0 4.5589944 4.7583536 5.1356021 + 21900 2000 -0 4.5589958 4.7583537 5.1356009 + 22000 2000 -0 4.5589972 4.7583538 5.1355999 + 22100 2000 -0 4.5589988 4.758354 5.1355993 + 22200 2000 -0 4.5590003 4.7583542 5.1355984 + 22300 2000 -0 4.5590018 4.7583543 5.1355973 + 22400 2000 -0 4.5590032 4.7583545 5.1355966 + 22500 2000 -0 4.5590047 4.7583547 5.1355957 + 22600 2000 -0 4.5590061 4.7583548 5.1355947 + 22700 2000 -0 4.5590076 4.758355 5.1355939 + 22800 2000 -0 4.559009 4.7583551 5.1355931 + 22900 2000 -0 4.5590104 4.7583553 5.1355921 + 23000 2000 -0 4.5590118 4.7583555 5.1355913 + 23100 2000 -0 4.5590132 4.7583556 5.1355905 + 23200 2000 -0 4.5590146 4.7583558 5.1355896 + 23300 2000 -0 4.559016 4.758356 5.1355887 + 23400 2000 -0 4.5590174 4.7583562 5.1355878 + 23500 2000 -0 4.5590187 4.7583563 5.135587 + 23600 2000 -0 4.5590201 4.7583565 5.1355861 + 23700 2000 -0 4.5590215 4.7583567 5.1355853 + 23800 2000 -0 4.5590228 4.7583569 5.1355844 + 23900 2000 -0 4.5590241 4.7583571 5.1355836 + 24000 2000 -0 4.5590255 4.7583572 5.1355827 + 24100 2000 -0 4.5590269 4.7583574 5.1355819 + 24200 2000 -0 4.5590282 4.7583576 5.135581 + 24300 2000 -0 4.5590295 4.7583578 5.1355802 + 24400 2000 -0 4.5590308 4.758358 5.1355794 + 24500 2000 -0 4.5590321 4.7583581 5.1355785 + 24600 2000 -0 4.5590334 4.7583583 5.1355777 + 24700 2000 -0 4.5590347 4.7583585 5.1355769 + 24800 2000 -0 4.559036 4.7583587 5.135576 + 24900 2000 -0 4.5590373 4.7583589 5.1355752 + 25000 2000 -0 4.5590386 4.7583591 5.1355744 + 25100 2000 -0 4.5590398 4.7583593 5.1355735 + 25200 2000 -0 4.5590411 4.7583595 5.1355727 + 25300 2000 -0 4.5590424 4.7583598 5.1355719 + 25400 2000 -0 4.5590436 4.7583598 5.1355711 + 25500 2000 -0 4.5590449 4.75836 5.1355702 + 25600 2000 -0 4.5590461 4.7583602 5.1355694 + 25700 2000 -0 4.5590474 4.7583604 5.1355686 + 25800 2000 -0 4.5590486 4.7583606 5.1355678 + 25900 2000 -0 4.5590501 4.7583608 5.135567 + 26000 2000 -0 4.559051 4.758361 5.1355662 + 26100 2000 -0 4.5590523 4.7583612 5.1355654 + 26200 2000 -0 4.5590539 4.7583614 5.1355646 + 26300 2000 -0 4.5590548 4.7583616 5.1355638 + 26400 2000 -0 4.559056 4.7583618 5.1355629 + 26500 2000 -0 4.5590572 4.758362 5.1355621 + 26600 2000 -0 4.5590584 4.7583622 5.1355613 + 26700 2000 -0 4.5590596 4.7583624 5.1355605 + 26800 2000 -0 4.5590608 4.7583626 5.1355597 + 26900 2000 -0 4.559062 4.7583628 5.1355589 + 27000 2000 -0 4.5590632 4.758363 5.1355581 + 27100 2000 -0 4.5590643 4.7583632 5.1355573 + 27200 2000 -0 4.5590655 4.7583634 5.1355565 + 27300 2000 -0 4.5590667 4.7583636 5.1355557 + 27400 2000 -0 4.5590679 4.7583638 5.1355549 + 27500 2000 -0 4.5590691 4.758364 5.1355541 + 27600 2000 -0 4.5590702 4.7583642 5.1355533 + 27700 2000 -0 4.5590714 4.7583644 5.1355525 + 27800 2000 -0 4.5590726 4.7583646 5.1355517 + 27900 2000 -0 4.5590737 4.7583648 5.1355509 + 28000 2000 -0 4.5590749 4.7583651 5.1355501 + 28100 2000 -0 4.559076 4.7583653 5.1355493 + 28200 2000 -0 4.5590772 4.7583655 5.1355485 + 28300 2000 -0 4.5590783 4.7583657 5.1355478 + 28400 2000 -0 4.5590795 4.7583659 5.135547 + 28500 2000 -0 4.5590806 4.7583661 5.1355462 + 28600 2000 -0 4.5590818 4.7583663 5.1355454 + 28700 2000 -0 4.5590829 4.7583665 5.1355446 + 28800 2000 -0 4.559084 4.7583667 5.1355438 + 28900 2000 -0 4.5590852 4.7583669 5.135543 + 29000 2000 -0 4.5590863 4.7583671 5.1355423 + 29100 2000 -0 4.5590874 4.7583673 5.1355415 + 29200 2000 -0 4.5590886 4.7583676 5.1355407 + 29300 2000 -0 4.5590897 4.7583678 5.1355399 + 29400 2000 -0 4.5590908 4.758368 5.1355391 + 29500 2000 -0 4.5590919 4.7583682 5.1355383 + 29600 2000 -0 4.559093 4.7583684 5.1355376 + 29700 2000 -0 4.5590942 4.7583686 5.1355368 + 29800 2000 -0 4.5590953 4.7583688 5.135536 + 29900 2000 -0 4.5590964 4.758369 5.1355352 + 30000 2000 -0 4.5590975 4.7583693 5.1355345 + 30100 2000 -0 4.5590986 4.7583695 5.1355337 + 30200 2000 -0 4.5590997 4.7583697 5.1355329 + 30300 2000 -0 4.5591008 4.7583699 5.1355321 + 30400 2000 -0 4.559102 4.7583701 5.1355315 + 30500 2000 -0 4.559103 4.7583703 5.1355306 + 30600 2000 -0 4.5591041 4.7583705 5.1355298 + 30700 2000 -0 4.5591052 4.7583708 5.135529 + 30800 2000 -0 4.5591063 4.758371 5.1355283 + 30900 2000 -0 4.5591074 4.7583712 5.1355275 + 31000 2000 -0 4.5591097 4.7583717 5.1355264 + 31100 2000 -0 4.5591096 4.7583716 5.1355259 + 31200 2000 -0 4.5591106 4.7583719 5.1355252 + 31300 2000 -0 4.5591117 4.7583721 5.1355244 + 31400 2000 -0 4.5591128 4.7583723 5.1355236 + 31500 2000 -0 4.5591139 4.7583725 5.1355229 + 31600 2000 -0 4.559115 4.7583727 5.1355221 + 31700 2000 -0 4.5591161 4.7583729 5.1355213 + 31800 2000 -0 4.5591171 4.7583731 5.1355206 + 31900 2000 -0 4.5591182 4.7583734 5.1355198 + 32000 2000 -0 4.5591193 4.7583736 5.135519 + 32100 2000 -0 4.5591204 4.7583738 5.1355183 + 32200 2000 -0 4.5591214 4.758374 5.1355175 + 32300 2000 -0 4.5591225 4.7583742 5.1355167 + 32400 2000 -0 4.5591236 4.7583745 5.135516 + 32500 2000 -0 4.5591246 4.7583747 5.1355152 + 32600 2000 -0 4.5591257 4.7583749 5.1355144 + 32700 2000 -0 4.5591268 4.7583751 5.1355137 + 32800 2000 -0 4.5591278 4.7583753 5.1355129 + 32900 2000 -0 4.5591289 4.7583755 5.1355122 + 33000 2000 -0 4.55913 4.7583758 5.1355114 + 33100 2000 -0 4.559131 4.758376 5.1355106 + 33200 2000 -0 4.5591321 4.7583762 5.1355099 + 33300 2000 -0 4.5591331 4.7583764 5.1355091 + 33400 2000 -0 4.5591342 4.7583766 5.1355084 + 33500 2000 -0 4.5591353 4.7583769 5.1355076 + 33600 2000 -0 4.5591363 4.7583771 5.1355068 + 33700 2000 -0 4.5591374 4.7583773 5.1355061 + 33800 2000 -0 4.5591384 4.7583775 5.1355053 + 33900 2000 -0 4.5591395 4.7583778 5.1355046 + 34000 2000 -0 4.5591405 4.758378 5.1355038 + 34100 2000 -0 4.5591416 4.7583782 5.135503 + 34200 2000 -0 4.5591426 4.7583784 5.1355023 + 34300 2000 -0 4.5591437 4.7583786 5.1355015 + 34400 2000 -0 4.5591447 4.7583789 5.1355008 + 34500 2000 -0 4.5591458 4.7583791 5.1355 + 34600 2000 -0 4.5591468 4.7583793 5.1354993 + 34700 2000 -0 4.5591479 4.7583795 5.1354985 + 34800 2000 -0 4.5591489 4.7583797 5.1354977 + 34900 2000 -0 4.5591499 4.75838 5.135497 + 35000 2000 -0 4.559151 4.7583802 5.1354962 + 35100 2000 -0 4.559152 4.7583804 5.1354955 + 35200 2000 -0 4.5591531 4.7583806 5.1354947 + 35300 2000 -0 4.5591541 4.7583809 5.135494 + 35400 2000 -0 4.5591551 4.7583811 5.1354932 + 35500 2000 -0 4.5591562 4.7583813 5.1354925 + 35600 2000 -0 4.5591572 4.7583815 5.1354917 + 35700 2000 -0 4.5591583 4.7583817 5.135491 + 35800 2000 -0 4.5591593 4.758382 5.1354902 + 35900 2000 -0 4.5591603 4.7583822 5.1354895 + 36000 2000 -0 4.5591614 4.7583824 5.1354887 + 36100 2000 -0 4.5591624 4.7583826 5.135488 + 36200 2000 -0 4.5591634 4.7583829 5.1354872 + 36300 2000 -0 4.5591645 4.7583831 5.1354864 + 36400 2000 -0 4.5591655 4.7583833 5.1354857 + 36500 2000 -0 4.5591665 4.7583835 5.1354849 + 36600 2000 -0 4.5591676 4.7583838 5.1354842 + 36700 2000 -0 4.5591686 4.758384 5.1354834 + 36800 2000 -0 4.5591696 4.7583842 5.1354827 + 36900 2000 -0 4.5591707 4.7583844 5.1354819 + 37000 2000 -0 4.5591717 4.7583846 5.1354812 + 37100 2000 -0 4.5591727 4.7583849 5.1354804 + 37200 2000 -0 4.5591738 4.7583851 5.1354797 + 37300 2000 -0 4.5591748 4.7583853 5.1354789 + 37400 2000 -0 4.5591758 4.7583855 5.1354782 + 37500 2000 -0 4.5591768 4.7583858 5.1354774 + 37600 2000 -0 4.5591779 4.758386 5.1354767 + 37700 2000 -0 4.5591789 4.7583862 5.135476 + 37800 2000 -0 4.5591799 4.7583864 5.1354752 + 37900 2000 -0 4.5591809 4.7583867 5.1354745 + 38000 2000 -0 4.559182 4.7583869 5.1354737 + 38100 2000 -0 4.559183 4.7583871 5.135473 + 38200 2000 -0 4.559184 4.7583873 5.1354722 + 38300 2000 -0 4.559185 4.7583876 5.1354715 + 38400 2000 -0 4.5591861 4.7583878 5.1354707 + 38500 2000 -0 4.5591871 4.758388 5.13547 + 38600 2000 -0 4.5591881 4.7583882 5.1354692 + 38700 2000 -0 4.5591892 4.7583896 5.1354694 + 38800 2000 -0 4.55919 4.7583887 5.1354684 + 38900 2000 -0 4.5591912 4.7583888 5.1354681 + 39000 2000 -0 4.5591922 4.7583891 5.1354676 + 39100 2000 -0 4.559194 4.7583899 5.1354667 + 39200 2000 -0 4.5591943 4.7583895 5.1354657 + 39300 2000 -0 4.5591953 4.7583898 5.1354653 + 39400 2000 -0 4.5591963 4.75839 5.1354643 + 39500 2000 -0 4.5591973 4.7583901 5.1354635 + 39600 2000 -0 4.5591984 4.7583904 5.135463 + 39700 2000 -0 4.5591994 4.7583906 5.1354621 + 39800 2000 -0 4.5592004 4.7583908 5.1354613 + 39900 2000 -0 4.5592014 4.7583911 5.1354607 + 40000 2000 -0 4.5592024 4.7583913 5.1354599 + 40100 2000 -0 4.5592034 4.7583915 5.1354591 + 40200 2000 -0 4.5592045 4.7583917 5.1354584 + 40300 2000 -0 4.5592055 4.758392 5.1354577 + 40400 2000 -0 4.5592065 4.7583922 5.1354569 + 40500 2000 -0 4.5592075 4.7583924 5.1354562 + 40600 2000 -0 4.5592088 4.758394 5.1354553 + 40700 2000 -0 4.5592095 4.7583927 5.1354547 + 40800 2000 -0 4.5592106 4.7583931 5.1354539 + 40900 2000 -0 4.5592116 4.7583933 5.1354532 + 41000 2000 -0 4.5592126 4.7583935 5.1354525 + 41100 2000 -0 4.5592136 4.7583938 5.1354517 + 41200 2000 -0 4.5592146 4.758394 5.135451 + 41300 2000 -0 4.5592156 4.7583942 5.1354502 + 41400 2000 -0 4.5592166 4.7583944 5.1354495 + 41500 2000 -0 4.5592176 4.7583949 5.1354489 + 41600 2000 -0 4.5592186 4.758395 5.135448 + 41700 2000 -0 4.5592197 4.7583951 5.1354473 + 41800 2000 -0 4.5592207 4.7583953 5.1354465 + 41900 2000 -0 4.5592217 4.7583956 5.1354458 + 42000 2000 -0 4.5592227 4.7583958 5.135445 + 42100 2000 -0 4.5592237 4.758396 5.1354443 + 42200 2000 -0 4.5592247 4.7583962 5.1354436 + 42300 2000 -0 4.5592257 4.7583965 5.1354428 + 42400 2000 -0 4.5592267 4.7583967 5.1354421 + 42500 2000 -0 4.5592277 4.7583969 5.1354413 + 42600 2000 -0 4.5592287 4.7583971 5.1354406 + 42700 2000 -0 4.5592298 4.7583974 5.1354399 + 42800 2000 -0 4.5592308 4.7583976 5.1354391 + 42900 2000 -0 4.5592318 4.7583978 5.1354384 + 43000 2000 -0 4.5592328 4.7583981 5.1354376 + 43100 2000 -0 4.5592338 4.7583983 5.1354369 + 43200 2000 -0 4.5592348 4.7583985 5.1354361 + 43300 2000 -0 4.5592358 4.7583987 5.1354354 + 43400 2000 -0 4.5592368 4.758399 5.1354347 + 43500 2000 -0 4.5592378 4.7583992 5.1354339 + 43600 2000 -0 4.5592388 4.7583994 5.1354332 + 43700 2000 -0 4.5592398 4.7583996 5.1354324 + 43800 2000 -0 4.5592408 4.7583999 5.1354317 + 43900 2000 -0 4.5592418 4.7584001 5.135431 + 44000 2000 -0 4.5592428 4.7584003 5.1354302 + 44100 2000 -0 4.5592438 4.7584006 5.1354295 + 44200 2000 -0 4.5592448 4.7584008 5.1354287 + 44300 2000 -0 4.5592459 4.758401 5.135428 + 44400 2000 -0 4.5592469 4.7584012 5.1354273 + 44500 2000 -0 4.5592479 4.7584015 5.1354265 + 44600 2000 -0 4.5592489 4.7584017 5.1354258 + 44700 2000 -0 4.5592499 4.7584019 5.135425 + 44800 2000 -0 4.5592509 4.7584022 5.1354243 + 44900 2000 -0 4.5592519 4.7584024 5.1354236 + 45000 2000 -0 4.5592529 4.7584026 5.1354228 + 45100 2000 -0 4.5592539 4.7584028 5.1354221 + 45200 2000 -0 4.5592549 4.7584031 5.1354213 + 45300 2000 -0 4.5592559 4.7584033 5.1354206 + 45400 2000 -0 4.5592569 4.7584035 5.1354199 + 45500 2000 -0 4.5592581 4.7584038 5.1354192 + 45600 2000 -0 4.5592589 4.758404 5.1354184 + 45700 2000 -0 4.5592599 4.7584042 5.1354177 + 45800 2000 -0 4.5592609 4.7584044 5.1354169 + 45900 2000 -0 4.5592619 4.7584047 5.1354162 + 46000 2000 -0 4.5592629 4.7584049 5.1354155 + 46100 2000 -0 4.5592639 4.7584051 5.1354147 + 46200 2000 -0 4.5592649 4.7584053 5.135414 + 46300 2000 -0 4.5592659 4.7584056 5.1354132 + 46400 2000 -0 4.5592669 4.7584058 5.1354125 + 46500 2000 -0 4.5592679 4.758406 5.1354117 + 46600 2000 -0 4.5592689 4.7584063 5.135411 + 46700 2000 -0 4.5592699 4.7584065 5.1354103 + 46800 2000 -0 4.5592709 4.7584067 5.1354095 + 46900 2000 -0 4.5592719 4.758407 5.1354088 + 47000 2000 -0 4.5592729 4.7584072 5.1354081 + 47100 2000 -0 4.5592739 4.7584074 5.1354073 + 47200 2000 -0 4.5592749 4.7584076 5.1354066 + 47300 2000 -0 4.5592759 4.7584079 5.1354058 + 47400 2000 -0 4.5592769 4.7584081 5.1354051 + 47500 2000 -0 4.5592779 4.7584083 5.1354044 + 47600 2000 -0 4.5592789 4.7584086 5.1354036 + 47700 2000 -0 4.5592799 4.7584088 5.1354029 + 47800 2000 -0 4.5592809 4.758409 5.1354022 + 47900 2000 -0 4.5592819 4.7584092 5.1354014 + 48000 2000 -0 4.5592829 4.7584095 5.1354007 + 48100 2000 -0 4.5592839 4.7584097 5.1353999 + 48200 2000 -0 4.5592849 4.7584099 5.1353992 + 48300 2000 -0 4.5592859 4.7584102 5.1353985 + 48400 2000 -0 4.5592869 4.7584104 5.1353977 + 48500 2000 -0 4.5592879 4.7584106 5.135397 + 48600 2000 -0 4.5592889 4.7584109 5.1353963 + 48700 2000 -0 4.5592898 4.7584111 5.1353955 + 48800 2000 -0 4.5592908 4.7584113 5.1353948 + 48900 2000 -0 4.5592918 4.7584115 5.1353941 + 49000 2000 -0 4.5592928 4.7584118 5.1353933 + 49100 2000 -0 4.5592938 4.758412 5.1353926 + 49200 2000 -0 4.5592948 4.7584122 5.1353919 + 49300 2000 -0 4.5592958 4.7584125 5.1353911 + 49400 2000 -0 4.5592968 4.7584127 5.1353904 + 49500 2000 -0 4.5592978 4.7584129 5.1353896 + 49600 2000 -0 4.5592988 4.7584131 5.1353889 + 49700 2000 -0 4.5592998 4.7584134 5.1353882 + 49800 2000 -0 4.5593008 4.7584136 5.1353874 + 49900 2000 -0 4.5593018 4.7584138 5.1353867 + 50000 2000 -0 4.5593028 4.7584141 5.135386 + 50100 2000 -0 4.5593038 4.7584143 5.1353852 + 50200 2000 -0 4.5593048 4.7584145 5.1353845 + 50300 2000 -0 4.5593058 4.7584148 5.1353838 + 50400 2000 -0 4.5593068 4.758415 5.135383 + 50500 2000 -0 4.5593078 4.7584152 5.1353823 + 50600 2000 -0 4.5593088 4.7584154 5.1353816 + 50700 2000 -0 4.5593098 4.7584157 5.1353808 + 50800 2000 -0 4.5593107 4.7584159 5.1353801 + 50900 2000 -0 4.5593117 4.7584161 5.1353794 + 51000 2000 -0 4.5593127 4.7584164 5.1353786 + 51100 2000 -0 4.5593136 4.7584166 5.1353781 + 51200 2000 -0 4.5593145 4.7584168 5.1353775 + 51300 2000 -0 4.5593154 4.758417 5.135377 + 51400 2000 -0 4.5593163 4.7584172 5.1353764 + 51500 2000 -0 4.5593171 4.7584174 5.1353759 + 51600 2000 -0 4.559318 4.7584176 5.1353753 + 51700 2000 -0 4.5593189 4.7584178 5.1353748 + 51800 2000 -0 4.5593198 4.7584179 5.1353742 + 51900 2000 -0 4.5593207 4.7584181 5.1353737 + 52000 2000 -0 4.5593215 4.7584183 5.1353731 + 52100 2000 -0 4.5593224 4.7584185 5.1353726 + 52200 2000 -0 4.5593233 4.7584187 5.135372 + 52300 2000 -0 4.5593256 4.7584188 5.135372 + 52400 2000 -0 4.5593256 4.7584188 5.1353719 + 52500 2000 -0 4.5593267 4.758419 5.1353709 + 52600 2000 -0 4.5593275 4.7584193 5.1353708 + 52700 2000 -0 4.5593284 4.7584195 5.1353701 + 52800 2000 -0 4.5593293 4.7584196 5.1353693 + 52900 2000 -0 4.5593302 4.7584198 5.135369 + 53000 2000 -0 4.5593311 4.7584201 5.1353685 + 53100 2000 -0 4.5593319 4.7584202 5.1353677 + 53200 2000 -0 4.5593328 4.7584204 5.1353673 + 53300 2000 -0 4.5593337 4.7584207 5.1353668 + 53400 2000 -0 4.5593346 4.7584208 5.1353661 + 53500 2000 -0 4.5593355 4.758421 5.1353656 + 53600 2000 -0 4.5593364 4.7584212 5.1353651 + 53700 2000 -0 4.5593372 4.7584214 5.1353645 + 53800 2000 -0 4.5593381 4.7584216 5.1353639 + 53900 2000 -0 4.559339 4.7584218 5.1353635 + 54000 2000 -0 4.5593399 4.758422 5.1353628 + 54100 2000 -0 4.5593408 4.7584227 5.1353622 + 54200 2000 -0 4.5593415 4.7584224 5.1353605 + 54300 2000 -0 4.5593425 4.7584228 5.1353606 + 54400 2000 -0 4.5593433 4.7584229 5.1353594 + 54500 2000 -0 4.5593442 4.7584231 5.1353589 + 54600 2000 -0 4.5593451 4.7584234 5.1353588 + 54700 2000 -0 4.559346 4.7584235 5.1353579 + 54800 2000 -0 4.5593468 4.7584237 5.1353572 + 54900 2000 -0 4.5593477 4.7584239 5.1353571 + 55000 2000 -0 4.5593486 4.7584241 5.1353563 + 55100 2000 -0 4.5593495 4.7584243 5.1353556 + 55200 2000 -0 4.5593504 4.7584245 5.1353553 + 55300 2000 -0 4.5593512 4.7584247 5.1353547 + 55400 2000 -0 4.5593521 4.7584249 5.135354 + 55500 2000 -0 4.559353 4.7584251 5.1353536 + 55600 2000 -0 4.5593539 4.7584253 5.1353531 + 55700 2000 -0 4.5593547 4.7584255 5.1353524 + 55800 2000 -0 4.5593556 4.7584257 5.1353519 + 55900 2000 -0 4.5593565 4.7584259 5.1353514 + 56000 2000 -0 4.5593574 4.7584261 5.1353508 + 56100 2000 -0 4.5593582 4.7584263 5.1353503 + 56200 2000 -0 4.5593591 4.7584265 5.1353498 + 56300 2000 -0 4.55936 4.7584267 5.1353491 + 56400 2000 -0 4.5593609 4.7584269 5.1353486 + 56500 2000 -0 4.5593618 4.7584271 5.1353481 + 56600 2000 -0 4.5593626 4.7584273 5.1353475 + 56700 2000 -0 4.5593635 4.7584275 5.135347 + 56800 2000 -0 4.5593644 4.7584277 5.1353464 + 56900 2000 -0 4.5593653 4.7584279 5.1353459 + 57000 2000 -0 4.5593661 4.7584281 5.1353453 + 57100 2000 -0 4.559367 4.7584283 5.1353448 + 57200 2000 -0 4.5593679 4.7584285 5.1353442 + 57300 2000 -0 4.5593688 4.7584287 5.1353437 + 57400 2000 -0 4.5593697 4.7584289 5.1353431 + 57500 2000 -0 4.5593705 4.7584291 5.1353426 + 57600 2000 -0 4.5593714 4.7584293 5.135342 + 57700 2000 -0 4.5593723 4.7584296 5.1353415 + 57800 2000 -0 4.5593732 4.7584297 5.1353409 + 57900 2000 -0 4.559374 4.7584299 5.1353404 + 58000 2000 -0 4.5593749 4.7584301 5.1353398 + 58100 2000 -0 4.5593758 4.7584303 5.1353393 + 58200 2000 -0 4.5593767 4.7584305 5.1353387 + 58300 2000 -0 4.5593775 4.7584307 5.1353382 + 58400 2000 -0 4.5593784 4.7584309 5.1353376 + 58500 2000 -0 4.5593793 4.7584311 5.1353371 + 58600 2000 -0 4.5593802 4.7584313 5.1353365 + 58700 2000 -0 4.559381 4.7584315 5.135336 + 58800 2000 -0 4.5593819 4.7584317 5.1353355 + 58900 2000 -0 4.5593828 4.7584319 5.1353349 + 59000 2000 -0 4.5593837 4.7584321 5.1353344 + 59100 2000 -0 4.5593845 4.7584323 5.1353338 + 59200 2000 -0 4.5593854 4.7584325 5.1353333 + 59300 2000 -0 4.5593863 4.7584327 5.1353327 + 59400 2000 -0 4.5593872 4.7584329 5.1353322 + 59500 2000 -0 4.559388 4.7584331 5.1353316 + 59600 2000 -0 4.5593889 4.7584333 5.1353311 + 59700 2000 -0 4.5593898 4.7584335 5.1353305 + 59800 2000 -0 4.5593907 4.7584337 5.13533 + 59900 2000 -0 4.5593915 4.7584339 5.1353294 + 60000 2000 -0 4.5593924 4.7584341 5.1353289 + 60100 2000 -0 4.5593933 4.7584343 5.1353283 + 60200 2000 -0 4.5593942 4.7584345 5.1353278 + 60300 2000 -0 4.559395 4.7584347 5.1353272 + 60400 2000 -0 4.5593959 4.7584349 5.1353267 + 60500 2000 -0 4.5593968 4.7584351 5.1353261 + 60600 2000 -0 4.5593977 4.7584353 5.1353256 + 60700 2000 -0 4.5593985 4.7584354 5.1353251 + 60800 2000 -0 4.5593994 4.7584356 5.1353245 + 60900 2000 -0 4.5594003 4.7584358 5.135324 + 61000 2000 -0 4.5594012 4.758436 5.1353234 + 61100 2000 -0 4.559402 4.7584362 5.1353229 + 61200 2000 -0 4.5594029 4.7584364 5.1353223 + 61300 2000 -0 4.5594038 4.7584366 5.1353218 + 61400 2000 -0 4.5594047 4.7584368 5.1353212 + 61500 2000 -0 4.5594055 4.758437 5.1353207 + 61600 2000 -0 4.5594064 4.7584372 5.1353201 + 61700 2000 -0 4.5594073 4.7584374 5.1353196 + 61800 2000 -0 4.5594082 4.7584376 5.135319 + 61900 2000 -0 4.559409 4.7584378 5.1353185 + 62000 2000 -0 4.5594099 4.758438 5.135318 + 62100 2000 -0 4.5594108 4.7584382 5.1353174 + 62200 2000 -0 4.5594116 4.7584384 5.1353169 + 62300 2000 -0 4.5594125 4.7584389 5.1353166 + 62400 2000 -0 4.5594135 4.7584387 5.1353162 + 62500 2000 -0 4.5594143 4.758439 5.1353156 + 62600 2000 -0 4.5594152 4.7584392 5.1353151 + 62700 2000 -0 4.5594161 4.7584394 5.1353146 + 62800 2000 -0 4.559417 4.7584396 5.135314 + 62900 2000 -0 4.5594178 4.7584398 5.1353135 + 63000 2000 -0 4.5594187 4.75844 5.1353129 + 63100 2000 -0 4.5594196 4.7584402 5.1353124 + 63200 2000 -0 4.5594204 4.7584404 5.1353119 + 63300 2000 -0 4.5594213 4.7584406 5.1353113 + 63400 2000 -0 4.5594222 4.7584408 5.1353107 + 63500 2000 -0 4.5594231 4.758441 5.1353102 + 63600 2000 -0 4.5594239 4.7584412 5.1353097 + 63700 2000 -0 4.5594248 4.7584414 5.1353091 + 63800 2000 -0 4.5594257 4.7584416 5.1353086 + 63900 2000 -0 4.5594265 4.7584418 5.135308 + 64000 2000 -0 4.5594274 4.758442 5.1353075 + 64100 2000 -0 4.5594283 4.7584422 5.1353069 + 64200 2000 -0 4.5594292 4.7584424 5.1353064 + 64300 2000 -0 4.55943 4.7584426 5.1353059 + 64400 2000 -0 4.5594309 4.7584428 5.1353053 + 64500 2000 -0 4.5594318 4.758443 5.1353048 + 64600 2000 -0 4.5594327 4.7584432 5.1353042 + 64700 2000 -0 4.5594335 4.7584434 5.1353037 + 64800 2000 -0 4.5594344 4.7584436 5.1353031 + 64900 2000 -0 4.5594353 4.7584438 5.1353026 + 65000 2000 -0 4.5594361 4.758444 5.135302 + 65100 2000 -0 4.559437 4.7584442 5.1353015 + 65200 2000 -0 4.5594379 4.7584444 5.135301 + 65300 2000 -0 4.5594388 4.7584446 5.1353004 + 65400 2000 -0 4.5594396 4.7584448 5.1352999 + 65500 2000 -0 4.5594405 4.758445 5.1352993 + 65600 2000 -0 4.5594414 4.7584452 5.1352988 + 65700 2000 -0 4.5594422 4.7584454 5.1352982 + 65800 2000 -0 4.5594431 4.7584456 5.1352977 + 65900 2000 -0 4.559444 4.7584458 5.1352972 + 66000 2000 -0 4.5594449 4.758446 5.1352966 + 66100 2000 -0 4.5594457 4.7584462 5.1352961 + 66200 2000 -0 4.5594466 4.7584464 5.1352955 + 66300 2000 -0 4.5594475 4.7584466 5.135295 + 66400 2000 -0 4.5594483 4.7584468 5.1352944 + 66500 2000 -0 4.5594492 4.758447 5.1352939 + 66600 2000 -0 4.5594501 4.7584472 5.1352933 + 66700 2000 -0 4.5594509 4.7584474 5.1352928 + 66800 2000 -0 4.5594518 4.7584476 5.1352923 + 66900 2000 -0 4.5594527 4.7584478 5.1352917 + 67000 2000 -0 4.5594536 4.758448 5.1352912 + 67100 2000 -0 4.5594544 4.7584482 5.1352906 + 67200 2000 -0 4.5594553 4.7584484 5.1352901 + 67300 2000 -0 4.5594562 4.7584486 5.1352896 + 67400 2000 -0 4.559457 4.7584488 5.135289 + 67500 2000 -0 4.5594579 4.758449 5.1352885 + 67600 2000 -0 4.5594588 4.7584492 5.1352879 + 67700 2000 -0 4.5594596 4.7584494 5.1352874 + 67800 2000 -0 4.5594605 4.7584496 5.1352868 + 67900 2000 -0 4.5594614 4.7584498 5.1352863 + 68000 2000 -0 4.5594623 4.75845 5.1352858 + 68100 2000 -0 4.5594631 4.7584502 5.1352852 + 68200 2000 -0 4.559464 4.7584504 5.1352847 + 68300 2000 -0 4.5594649 4.7584506 5.1352841 + 68400 2000 -0 4.5594657 4.7584508 5.1352836 + 68500 2000 -0 4.5594666 4.758451 5.135283 + 68600 2000 -0 4.5594675 4.7584512 5.1352825 + 68700 2000 -0 4.5594683 4.7584514 5.135282 + 68800 2000 -0 4.5594692 4.7584515 5.1352814 + 68900 2000 -0 4.5594701 4.7584517 5.1352809 + 69000 2000 -0 4.5594709 4.7584519 5.1352803 + 69100 2000 -0 4.5594718 4.7584521 5.1352798 + 69200 2000 -0 4.5594727 4.7584523 5.1352793 + 69300 2000 -0 4.5594736 4.7584525 5.1352787 + 69400 2000 -0 4.5594744 4.7584527 5.1352782 + 69500 2000 -0 4.5594753 4.7584529 5.1352776 + 69600 2000 -0 4.5594762 4.7584531 5.1352771 + 69700 2000 -0 4.559477 4.7584533 5.1352766 + 69800 2000 -0 4.5594779 4.7584535 5.135276 + 69900 2000 -0 4.5594788 4.7584537 5.1352755 + 70000 2000 -0 4.5594796 4.7584539 5.1352749 + 70100 2000 -0 4.5594805 4.7584541 5.1352744 + 70200 2000 -0 4.5594814 4.7584543 5.1352738 + 70300 2000 -0 4.5594822 4.7584545 5.1352733 + 70400 2000 -0 4.5594831 4.7584547 5.1352728 + 70500 2000 -0 4.559484 4.7584549 5.1352722 + 70600 2000 -0 4.5594848 4.7584551 5.1352717 + 70700 2000 -0 4.5594857 4.7584553 5.1352711 + 70800 2000 -0 4.5594866 4.7584555 5.1352706 + 70900 2000 -0 4.5594874 4.7584557 5.1352701 + 71000 2000 -0 4.5594883 4.7584559 5.1352695 + 71100 2000 -0 4.5594892 4.7584561 5.135269 + 71200 2000 -0 4.5594901 4.7584563 5.1352684 + 71300 2000 -0 4.5594909 4.7584565 5.1352679 + 71400 2000 -0 4.5594918 4.7584567 5.1352674 + 71500 2000 -0 4.5594927 4.7584569 5.1352668 + 71600 2000 -0 4.5594935 4.7584571 5.1352663 + 71700 2000 -0 4.5594944 4.7584573 5.1352657 + 71800 2000 -0 4.5594953 4.7584575 5.1352652 + 71900 2000 -0 4.5594961 4.7584577 5.1352647 + 72000 2000 -0 4.559497 4.7584579 5.1352641 + 72100 2000 -0 4.5594979 4.7584581 5.1352636 + 72200 2000 -0 4.5594987 4.7584583 5.135263 + 72300 2000 -0 4.5594996 4.7584585 5.1352625 + 72400 2000 -0 4.5595005 4.7584587 5.135262 + 72500 2000 -0 4.5595013 4.7584589 5.1352614 + 72600 2000 -0 4.5595022 4.7584591 5.1352609 + 72700 2000 -0 4.5595031 4.7584593 5.1352604 + 72800 2000 -0 4.5595039 4.7584595 5.1352598 + 72900 2000 -0 4.5595048 4.7584597 5.1352593 + 73000 2000 -0 4.5595057 4.7584599 5.1352587 + 73100 2000 -0 4.5595065 4.7584601 5.1352582 + 73200 2000 -0 4.5595074 4.7584603 5.1352577 + 73300 2000 -0 4.5595083 4.7584605 5.1352571 + 73400 2000 -0 4.5595091 4.7584607 5.1352566 + 73500 2000 -0 4.55951 4.7584609 5.135256 + 73600 2000 -0 4.5595109 4.7584611 5.1352555 + 73700 2000 -0 4.5595117 4.7584613 5.135255 + 73800 2000 -0 4.5595126 4.7584615 5.1352544 + 73900 2000 -0 4.5595135 4.7584617 5.1352539 + 74000 2000 -0 4.5595143 4.7584619 5.1352534 + 74100 2000 -0 4.5595152 4.7584621 5.1352528 + 74200 2000 -0 4.5595161 4.7584623 5.1352523 + 74300 2000 -0 4.559517 4.7584627 5.1352518 + 74400 2000 -0 4.5595178 4.7584626 5.1352512 + 74500 2000 -0 4.5595187 4.7584629 5.1352507 + 74600 2000 -0 4.5595195 4.7584631 5.1352501 + 74700 2000 -0 4.5595204 4.7584633 5.1352496 + 74800 2000 -0 4.5595213 4.7584635 5.135249 + 74900 2000 -0 4.5595221 4.7584637 5.1352485 + 75000 2000 -0 4.559523 4.7584639 5.135248 + 75100 2000 -0 4.5595239 4.7584641 5.1352474 + 75200 2000 -0 4.5595247 4.7584643 5.1352469 + 75300 2000 -0 4.5595256 4.7584645 5.1352464 + 75400 2000 -0 4.5595265 4.7584647 5.1352458 + 75500 2000 -0 4.5595273 4.7584649 5.1352453 + 75600 2000 -0 4.5595282 4.758465 5.1352447 + 75700 2000 -0 4.5595291 4.7584652 5.1352442 + 75800 2000 -0 4.5595299 4.7584654 5.1352437 + 75900 2000 -0 4.5595308 4.7584656 5.1352431 + 76000 2000 -0 4.5595318 4.7584659 5.1352426 + 76100 2000 -0 4.5595325 4.758466 5.1352421 + 76200 2000 -0 4.5595334 4.7584662 5.1352415 + 76300 2000 -0 4.5595342 4.7584664 5.135241 + 76400 2000 -0 4.5595351 4.7584666 5.1352405 + 76500 2000 -0 4.559536 4.7584668 5.1352399 + 76600 2000 -0 4.5595368 4.758467 5.1352394 + 76700 2000 -0 4.5595377 4.7584672 5.1352388 + 76800 2000 -0 4.5595386 4.7584674 5.1352383 + 76900 2000 -0 4.5595394 4.7584676 5.1352378 + 77000 2000 -0 4.5595403 4.7584678 5.1352372 + 77100 2000 -0 4.5595412 4.758468 5.1352367 + 77200 2000 -0 4.559542 4.7584682 5.1352362 + 77300 2000 -0 4.5595429 4.7584684 5.1352356 + 77400 2000 -0 4.5595438 4.7584686 5.1352351 + 77500 2000 -0 4.5595446 4.7584688 5.1352346 + 77600 2000 -0 4.5595455 4.758469 5.135234 + 77700 2000 -0 4.5595464 4.7584692 5.1352335 + 77800 2000 -0 4.5595472 4.7584694 5.1352329 + 77900 2000 -0 4.5595481 4.7584696 5.1352324 + 78000 2000 -0 4.5595489 4.7584698 5.1352319 + 78100 2000 -0 4.5595498 4.75847 5.1352313 + 78200 2000 -0 4.5595507 4.7584702 5.1352308 + 78300 2000 -0 4.5595515 4.7584704 5.1352303 + 78400 2000 -0 4.5595524 4.7584706 5.1352297 + 78500 2000 -0 4.5595533 4.7584708 5.1352292 + 78600 2000 -0 4.5595541 4.758471 5.1352287 + 78700 2000 -0 4.559555 4.7584712 5.1352281 + 78800 2000 -0 4.5595559 4.7584714 5.1352276 + 78900 2000 -0 4.5595567 4.7584716 5.1352271 + 79000 2000 -0 4.5595576 4.7584718 5.1352265 + 79100 2000 -0 4.5595584 4.758472 5.135226 + 79200 2000 -0 4.5595593 4.7584722 5.1352255 + 79300 2000 -0 4.5595602 4.7584724 5.1352249 + 79400 2000 -0 4.559561 4.7584726 5.1352244 + 79500 2000 -0 4.5595619 4.7584728 5.1352239 + 79600 2000 -0 4.5595628 4.758473 5.1352233 + 79700 2000 -0 4.5595636 4.7584732 5.1352228 + 79800 2000 -0 4.5595645 4.7584734 5.1352222 + 79900 2000 -0 4.5595654 4.7584736 5.1352217 + 80000 2000 -0 4.5595662 4.7584738 5.1352212 + 80100 2000 -0 4.5595671 4.758474 5.1352206 + 80200 2000 -0 4.5595679 4.7584742 5.1352201 + 80300 2000 -0 4.5595688 4.7584744 5.1352196 + 80400 2000 -0 4.5595697 4.7584746 5.135219 + 80500 2000 -0 4.5595705 4.7584748 5.1352185 + 80600 2000 -0 4.5595714 4.758475 5.135218 + 80700 2000 -0 4.5595723 4.7584752 5.1352174 + 80800 2000 -0 4.5595731 4.7584753 5.1352169 + 80900 2000 -0 4.559574 4.7584755 5.1352164 + 81000 2000 -0 4.5595748 4.7584757 5.1352158 + 81100 2000 -0 4.5595757 4.7584759 5.1352153 + 81200 2000 -0 4.5595766 4.7584761 5.1352148 + 81300 2000 -0 4.5595774 4.7584763 5.1352142 + 81400 2000 -0 4.5595783 4.7584765 5.1352137 + 81500 2000 -0 4.5595792 4.7584767 5.1352132 + 81600 2000 -0 4.55958 4.7584769 5.1352126 + 81700 2000 -0 4.5595809 4.7584771 5.1352121 + 81800 2000 -0 4.5595817 4.7584773 5.1352116 + 81900 2000 -0 4.5595826 4.7584775 5.135211 + 82000 2000 -0 4.5595835 4.7584777 5.1352105 + 82100 2000 -0 4.5595843 4.7584779 5.13521 + 82200 2000 -0 4.5595852 4.7584781 5.1352094 + 82300 2000 -0 4.559586 4.7584783 5.1352089 + 82400 2000 -0 4.5595869 4.7584785 5.1352084 + 82500 2000 -0 4.5595878 4.7584787 5.1352078 + 82600 2000 -0 4.5595886 4.7584789 5.1352073 + 82700 2000 -0 4.5595895 4.7584791 5.1352068 + 82800 2000 -0 4.5595904 4.7584793 5.1352062 + 82900 2000 -0 4.5595912 4.7584795 5.1352057 + 83000 2000 -0 4.5595921 4.7584797 5.1352052 + 83100 2000 -0 4.5595929 4.7584799 5.1352046 + 83200 2000 -0 4.5595938 4.7584801 5.1352041 + 83300 2000 -0 4.5595947 4.7584803 5.1352036 + 83400 2000 -0 4.5595959 4.7584805 5.135203 + 83500 2000 -0 4.5595964 4.7584807 5.1352026 + 83600 2000 -0 4.5595972 4.7584809 5.1352019 + 83700 2000 -0 4.5595981 4.7584811 5.1352015 + 83800 2000 -0 4.559599 4.7584813 5.135201 + 83900 2000 -0 4.5595998 4.7584815 5.1352003 + 84000 2000 -0 4.5596007 4.7584817 5.1351999 + 84100 2000 -0 4.5596016 4.7584819 5.1351994 + 84200 2000 -0 4.5596024 4.7584821 5.1351988 + 84300 2000 -0 4.5596033 4.7584823 5.1351982 + 84400 2000 -0 4.5596041 4.7584825 5.1351978 + 84500 2000 -0 4.559605 4.7584827 5.1351972 + 84600 2000 -0 4.5596058 4.7584829 5.1351966 + 84700 2000 -0 4.5596067 4.7584831 5.1351962 + 84800 2000 -0 4.5596076 4.7584833 5.1351956 + 84900 2000 -0 4.5596084 4.7584835 5.1351951 + 85000 2000 -0 4.5596093 4.7584837 5.1351946 + 85100 2000 -0 4.5596101 4.7584839 5.135194 + 85200 2000 -0 4.559611 4.7584841 5.1351935 + 85300 2000 -0 4.5596119 4.7584843 5.135193 + 85400 2000 -0 4.5596127 4.7584845 5.1351924 + 85500 2000 -0 4.5596136 4.7584847 5.1351919 + 85600 2000 -0 4.5596144 4.7584848 5.1351914 + 85700 2000 -0 4.5596153 4.758485 5.1351908 + 85800 2000 -0 4.5596162 4.7584852 5.1351903 + 85900 2000 -0 4.559617 4.7584854 5.1351898 + 86000 2000 -0 4.5596179 4.7584856 5.1351892 + 86100 2000 -0 4.5596187 4.7584858 5.1351887 + 86200 2000 -0 4.5596196 4.758486 5.1351882 + 86300 2000 -0 4.5596205 4.7584862 5.1351876 + 86400 2000 -0 4.5596213 4.7584864 5.1351871 + 86500 2000 -0 4.5596222 4.7584866 5.1351866 + 86600 2000 -0 4.559623 4.7584868 5.1351861 + 86700 2000 -0 4.5596239 4.758487 5.1351855 + 86800 2000 -0 4.5596248 4.7584872 5.135185 + 86900 2000 -0 4.5596256 4.7584874 5.1351845 + 87000 2000 -0 4.5596265 4.7584876 5.1351839 + 87100 2000 -0 4.5596273 4.7584878 5.1351834 + 87200 2000 -0 4.5596282 4.758488 5.1351829 + 87300 2000 -0 4.5596291 4.7584882 5.1351823 + 87400 2000 -0 4.5596299 4.7584884 5.1351818 + 87500 2000 -0 4.5596308 4.7584886 5.1351813 + 87600 2000 -0 4.5596316 4.7584888 5.1351808 + 87700 2000 -0 4.5596325 4.758489 5.1351802 + 87800 2000 -0 4.5596333 4.7584892 5.1351797 + 87900 2000 -0 4.5596342 4.7584894 5.1351792 + 88000 2000 -0 4.5596351 4.7584896 5.1351786 + 88100 2000 -0 4.5596359 4.7584898 5.1351781 + 88200 2000 -0 4.5596368 4.75849 5.1351776 + 88300 2000 -0 4.5596376 4.7584902 5.135177 + 88400 2000 -0 4.5596385 4.7584904 5.1351765 + 88500 2000 -0 4.5596394 4.7584906 5.135176 + 88600 2000 -0 4.5596402 4.7584908 5.1351755 + 88700 2000 -0 4.5596411 4.758491 5.1351749 + 88800 2000 -0 4.5596419 4.7584912 5.1351744 + 88900 2000 -0 4.5596428 4.7584914 5.1351739 + 89000 2000 -0 4.5596436 4.7584916 5.1351733 + 89100 2000 -0 4.5596445 4.7584918 5.1351728 + 89200 2000 -0 4.5596454 4.758492 5.1351723 + 89300 2000 -0 4.5596462 4.7584922 5.1351718 + 89400 2000 -0 4.5596471 4.7584924 5.1351712 + 89500 2000 -0 4.5596479 4.7584926 5.1351707 + 89600 2000 -0 4.5596488 4.7584928 5.1351702 + 89700 2000 -0 4.5596496 4.758493 5.1351696 + 89800 2000 -0 4.5596505 4.7584932 5.1351691 + 89900 2000 -0 4.5596514 4.7584934 5.1351686 + 90000 2000 -0 4.5596522 4.7584936 5.1351681 + 90100 2000 -0 4.5596531 4.7584937 5.1351675 + 90200 2000 -0 4.5596539 4.7584939 5.135167 + 90300 2000 -0 4.5596548 4.7584941 5.1351665 + 90400 2000 -0 4.5596556 4.7584943 5.135166 + 90500 2000 -0 4.5596565 4.7584945 5.1351654 + 90600 2000 -0 4.5596574 4.7584947 5.1351649 + 90700 2000 -0 4.5596582 4.7584949 5.1351644 + 90800 2000 -0 4.5596591 4.7584951 5.1351638 + 90900 2000 -0 4.5596599 4.7584953 5.1351633 + 91000 2000 -0 4.5596608 4.7584955 5.1351628 + 91100 2000 -0 4.5596616 4.7584957 5.1351623 + 91200 2000 -0 4.5596625 4.7584959 5.1351617 + 91300 2000 -0 4.5596633 4.7584961 5.1351612 + 91400 2000 -0 4.5596642 4.7584963 5.1351607 + 91500 2000 -0 4.5596651 4.7584965 5.1351602 + 91600 2000 -0 4.5596659 4.7584967 5.1351596 + 91700 2000 -0 4.5596668 4.7584969 5.1351591 + 91800 2000 -0 4.5596676 4.7584971 5.1351586 + 91900 2000 -0 4.5596685 4.7584973 5.135158 + 92000 2000 -0 4.5596693 4.7584975 5.1351575 + 92100 2000 -0 4.5596702 4.7584977 5.135157 + 92200 2000 -0 4.5596711 4.7584979 5.1351565 + 92300 2000 -0 4.5596719 4.7584981 5.1351559 + 92400 2000 -0 4.5596728 4.7584983 5.1351554 + 92500 2000 -0 4.5596736 4.7584985 5.1351549 + 92600 2000 -0 4.5596745 4.7584987 5.1351544 + 92700 2000 -0 4.5596753 4.7584989 5.1351538 + 92800 2000 -0 4.5596762 4.7584991 5.1351533 + 92900 2000 -0 4.5596772 4.7584992 5.1351528 + 93000 2000 -0 4.5596781 4.7584993 5.1351523 + 93100 2000 -0 4.5596791 4.7584995 5.1351517 + 93200 2000 -0 4.55968 4.7584997 5.1351512 + 93300 2000 -0 4.559681 4.7584998 5.1351507 + 93400 2000 -0 4.5596819 4.7584999 5.1351502 + 93500 2000 -0 4.5596829 4.7585 5.1351496 + 93600 2000 -0 4.5596838 4.7585002 5.1351491 + 93700 2000 -0 4.5596848 4.7585003 5.1351486 + 93800 2000 -0 4.5596858 4.7585005 5.1351481 + 93900 2000 -0 4.5596867 4.7585006 5.1351476 + 94000 2000 -0 4.5596877 4.7585007 5.135147 + 94100 2000 -0 4.5596886 4.7585009 5.1351465 + 94200 2000 -0 4.5596896 4.758501 5.135146 + 94300 2000 -0 4.5596907 4.7585015 5.1351456 + 94400 2000 -0 4.5596915 4.7585013 5.1351449 + 94500 2000 -0 4.5596924 4.7585015 5.1351445 + 94600 2000 -0 4.5596934 4.7585016 5.1351439 + 94700 2000 -0 4.5596943 4.7585017 5.1351434 + 94800 2000 -0 4.5596953 4.7585019 5.1351429 + 94900 2000 -0 4.5596962 4.758502 5.1351423 + 95000 2000 -0 4.5596972 4.7585021 5.1351418 + 95100 2000 -0 4.5596981 4.7585023 5.1351413 + 95200 2000 -0 4.5596991 4.7585024 5.1351408 + 95300 2000 -0 4.5597 4.7585026 5.1351402 + 95400 2000 -0 4.559701 4.7585027 5.1351397 + 95500 2000 -0 4.559702 4.7585028 5.1351392 + 95600 2000 -0 4.5597029 4.758503 5.1351387 + 95700 2000 -0 4.5597039 4.7585031 5.1351382 + 95800 2000 -0 4.5597048 4.7585033 5.1351377 + 95900 2000 -0 4.5597058 4.7585034 5.1351371 + 96000 2000 -0 4.5597067 4.7585035 5.1351366 + 96100 2000 -0 4.5597077 4.7585037 5.1351361 + 96200 2000 -0 4.5597086 4.7585038 5.1351356 + 96300 2000 -0 4.5597096 4.758504 5.1351351 + 96400 2000 -0 4.5597105 4.7585041 5.1351345 + 96500 2000 -0 4.5597115 4.7585042 5.135134 + 96600 2000 -0 4.5597124 4.7585044 5.1351335 + 96700 2000 -0 4.5597134 4.7585045 5.135133 + 96800 2000 -0 4.5597143 4.7585047 5.1351325 + 96900 2000 -0 4.5597153 4.7585048 5.1351319 + 97000 2000 -0 4.5597162 4.7585049 5.1351314 + 97100 2000 -0 4.5597172 4.7585051 5.1351309 + 97200 2000 -0 4.5597181 4.7585052 5.1351304 + 97300 2000 -0 4.5597191 4.7585054 5.1351299 + 97400 2000 -0 4.5597201 4.7585055 5.1351293 + 97500 2000 -0 4.559721 4.7585056 5.1351288 + 97600 2000 -0 4.559722 4.7585058 5.1351283 + 97700 2000 -0 4.5597229 4.7585059 5.1351278 + 97800 2000 -0 4.5597239 4.7585061 5.1351273 + 97900 2000 -0 4.5597248 4.7585062 5.1351267 + 98000 2000 -0 4.5597258 4.7585063 5.1351262 + 98100 2000 -0 4.5597267 4.7585065 5.1351257 + 98200 2000 -0 4.5597277 4.7585066 5.1351252 + 98300 2000 -0 4.5597286 4.7585068 5.1351247 + 98400 2000 -0 4.5597296 4.7585069 5.1351241 + 98500 2000 -0 4.5597305 4.758507 5.1351236 + 98600 2000 -0 4.5597315 4.7585072 5.1351231 + 98700 2000 -0 4.5597324 4.7585073 5.1351226 + 98800 2000 -0 4.5597334 4.7585075 5.1351221 + 98900 2000 -0 4.5597343 4.7585076 5.1351215 + 99000 2000 -0 4.5597353 4.7585077 5.135121 + 99100 2000 -0 4.5597362 4.7585079 5.1351205 + 99200 2000 -0 4.5597372 4.758508 5.13512 + 99300 2000 -0 4.5597381 4.7585082 5.1351195 + 99400 2000 -0 4.5597391 4.7585083 5.1351189 + 99500 2000 -0 4.55974 4.7585084 5.1351184 + 99600 2000 -0 4.559741 4.7585086 5.1351179 + 99700 2000 -0 4.5597419 4.7585087 5.1351174 + 99800 2000 -0 4.5597429 4.7585089 5.1351169 + 99900 2000 -0 4.5597438 4.758509 5.1351164 + 100000 2000 -0 4.5597448 4.7585091 5.1351158 +Loop time of 28.5137 on 4 procs for 100000 steps with 2000 atoms + +Performance: 303012.391 tau/day, 3507.088 timesteps/s, 7.014 Matom-step/s +98.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 13.673 | 14.898 | 16.176 | 28.4 | 52.25 +Neigh | 0.73867 | 0.77521 | 0.81583 | 4.0 | 2.72 +Comm | 4.3336 | 5.8757 | 7.3155 | 50.3 | 20.61 +Output | 0.020967 | 0.022222 | 0.025301 | 1.2 | 0.08 +Modify | 6.3623 | 6.5284 | 6.7446 | 5.7 | 22.90 +Other | | 0.4143 | | | 1.45 + +Nlocal: 500 ave 502 max 498 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 548.5 ave 556 max 542 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Neighs: 2427.25 ave 2528 max 2355 min +Histogram: 2 0 0 0 0 1 0 0 0 1 + +Total # of neighbors = 9709 +Ave neighs/atom = 4.8545 +Neighbor list builds = 5271 +Dangerous builds = 0 + +Total wall time: 0:00:29 diff --git a/examples/granular/log.28Mar23.pour.heat.g++.1 b/examples/granular/log.28Mar23.pour.heat.g++.1 deleted file mode 100644 index 9ee7612e45..0000000000 --- a/examples/granular/log.28Mar23.pour.heat.g++.1 +++ /dev/null @@ -1,1168 +0,0 @@ -LAMMPS (28 Mar 2023 - Development) -# pour one types of particles into cylinder and oscillate -# temperature of the bottom plate - -variable name string heat_plate - -atom_style sphere -units lj - -############################################### -# Geometry-related parameters -############################################### - -variable boxx equal 10 -variable boxy equal 10 -variable boxz equal 50 - -variable drum_rad equal ${boxx}*0.5 -variable drum_rad equal 10*0.5 -variable drum_height equal 30 - -variable xc equal 0.5*${boxx} -variable xc equal 0.5*10 -variable yc equal 0.5*${boxx} -variable yc equal 0.5*10 -variable zc equal 0.5*${boxz} -variable zc equal 0.5*50 - -############################################### -# Particle-related parameters -############################################### -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable cyl_rad_inner equal ${drum_rad}-1.1*${rhi} -variable cyl_rad_inner equal 5-1.1*${rhi} -variable cyl_rad_inner equal 5-1.1*0.5 - -variable dens equal 1.0 - -variable skin equal 0.4*${rhi} -variable skin equal 0.4*0.5 - -############# -processors * * 1 -region boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz} -region boxreg block 0 10 0 ${boxy} 0 ${boxz} -region boxreg block 0 10 0 10 0 ${boxz} -region boxreg block 0 10 0 10 0 50 -create_box 2 boxreg -Created orthogonal box = (0 0 0) to (10 10 50) - 1 by 1 by 1 MPI processor grid -change_box all boundary p p f -Changing box ... - -pair_style granular -pair_coeff * * hertz/material 1e5 0.2 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 - -region curved_wall cylinder z ${xc} ${yc} ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 ${yc} ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 5 ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 5 5 0 ${drum_height} side in -region curved_wall cylinder z 5 5 5 0 30 side in -region bottom_wall plane ${xc} ${yc} 0 0 0 1 side in -region bottom_wall plane 5 ${yc} 0 0 0 1 side in -region bottom_wall plane 5 5 0 0 0 1 side in - -region insreg cylinder z ${xc} ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 5 ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 5 4.45 ${drum_height} ${boxz} -region insreg cylinder z 5 5 4.45 30 ${boxz} -region insreg cylinder z 5 5 4.45 30 50 - -fix 0 all property/atom temperature heatflow -WARNING: Fix property/atom mol, charge, rmass, temperature, or heatflow w/out ghost communication (../fix_property_atom.cpp:194) -fix 1 all balance 100 1.0 shift xy 5 1.1 -fix 2 all nve/sphere -fix 3 all heat/flow constant 1.0 -fix grav all gravity 10 vector 0 0 -1 -fix ins1 all pour 1000 1 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 594 every 400 steps, 1000 by step 401 -fix ins2 all pour 1000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 594 every 400 steps, 1000 by step 401 - -comm_modify vel yes - -neighbor ${skin} bin -neighbor 0.2 bin -neigh_modify delay 0 every 1 check yes - -variable oscillate equal 1.0*sin(step*0.0001) - -fix 4 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region curved_wall -fix 5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 region bottom_wall temperature v_oscillate - -thermo_style custom step atoms ke pxx pyy pzz -thermo_modify lost warn -thermo 100 - -timestep 0.001 - -dump 1 all custom 1000 ${name}.dump id type radius mass x y z temperature heatflow -dump 1 all custom 1000 heat_plate.dump id type radius mass x y z temperature heatflow - -run 100000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.2 - ghost atom cutoff = 1.2 - binsize = 0.6, bins = 17 17 84 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair granular, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.944 | 5.944 | 5.944 Mbytes - Step Atoms KinEng Pxx Pyy Pzz - 0 0 -0 0 0 0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 100 536 -0 0 0 7.4220499 - 200 536 -0 0 0 10.753096 - 300 536 -0 0 0 13.500241 - 400 536 -0 0 0 18.036636 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 500 903 -0 0 0 25.955524 - 600 903 -0 0 0 32.116907 - 700 903 -0 0.03620165 0.033499977 32.179357 - 800 903 -0 0.2106713 0.26431108 36.206318 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 900 1265 -0 0.2667335 0.20266671 44.177757 - 1000 1265 -0 0.51829264 0.67739216 49.904079 - 1100 1265 -0 0.87526847 0.66040207 53.13465 - 1200 1265 -0 0.7989492 0.81976513 54.277194 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 1300 1618 -0 1.0736038 1.2317728 60.921948 - 1400 1618 -0 3.6835952 3.1929764 60.725834 - 1500 1618 -0 2.756994 2.611876 61.575807 - 1600 1618 -0 3.3981246 3.253067 61.920098 - 1700 2000 -0 3.8273855 3.6731016 68.643557 - 1800 2000 -0 4.7528855 4.4495018 69.914035 - 1900 2000 -0 5.1197897 5.3612522 76.341875 - 2000 2000 -0 7.4609619 7.3959134 76.619654 - 2100 2000 -0 6.8808532 7.6237902 73.684129 - 2200 2000 -0 10.034925 9.4881564 72.897703 - 2300 2000 -0 10.110575 10.379096 70.330499 - 2400 2000 -0 12.458237 12.285825 68.726515 - 2500 2000 -0 11.081771 11.120864 59.216898 - 2600 2000 -0 11.441977 11.532286 57.698842 - 2700 2000 -0 12.285359 11.905254 56.086117 - 2800 2000 -0 13.392058 13.168532 54.678918 - 2900 2000 -0 12.439277 12.212282 49.214122 - 3000 2000 -0 11.12664 11.09865 43.35763 - 3100 2000 -0 12.899283 12.735645 45.72121 - 3200 2000 -0 13.397802 12.892421 40.82795 - 3300 2000 -0 11.935141 11.858897 33.412627 - 3400 2000 -0 12.005889 11.539848 29.290034 - 3500 2000 -0 13.311405 13.11741 27.54997 - 3600 2000 -0 11.985219 11.954031 21.79518 - 3700 2000 -0 10.728636 9.800667 14.497682 - 3800 2000 -0 10.082744 9.6420894 12.241554 - 3900 2000 -0 9.6227604 9.1331298 10.31104 - 4000 2000 -0 8.9197423 8.5118438 7.6564098 - 4100 2000 -0 8.224539 7.765121 6.4246439 - 4200 2000 -0 7.8352874 7.3855212 5.9657978 - 4300 2000 -0 7.84891 7.3973377 6.2217099 - 4400 2000 -0 7.9743441 7.5242803 6.7082653 - 4500 2000 -0 7.9906412 7.5831386 6.7093176 - 4600 2000 -0 7.9382395 7.4929459 6.4150432 - 4700 2000 -0 7.9318996 7.4971722 6.4746841 - 4800 2000 -0 7.9685751 7.5471868 6.6574514 - 4900 2000 -0 7.9524289 7.516294 6.5660525 - 5000 2000 -0 7.9378811 7.5115542 6.5001617 - 5100 2000 -0 7.9266301 7.5073503 6.5253548 - 5200 2000 -0 7.9434374 7.5177496 6.5845847 - 5300 2000 -0 7.9305032 7.5191693 6.5372085 - 5400 2000 -0 7.9402877 7.5254309 6.5520449 - 5500 2000 -0 7.9427052 7.5280949 6.5557961 - 5600 2000 -0 7.9391493 7.5233972 6.5331874 - 5700 2000 -0 7.9399937 7.5202519 6.543535 - 5800 2000 -0 7.9398529 7.5228566 6.54443 - 5900 2000 -0 7.9410688 7.5260002 6.5435973 - 6000 2000 -0 7.941019 7.5216292 6.5431831 - 6100 2000 -0 7.9390808 7.5219254 6.5415317 - 6200 2000 -0 7.9481596 7.5395611 6.5622388 - 6300 2000 -0 7.9490652 7.5315638 6.5562056 - 6400 2000 -0 7.9427506 7.5243388 6.5431344 - 6500 2000 -0 7.9452629 7.5265503 6.5495796 - 6600 2000 -0 7.9458414 7.5249099 6.5533876 - 6700 2000 -0 7.94418 7.525769 6.5394106 - 6800 2000 -0 7.943729 7.5287032 6.5405826 - 6900 2000 -0 7.947609 7.5300725 6.5559575 - 7000 2000 -0 7.9443102 7.5257838 6.5463817 - 7100 2000 -0 7.9441301 7.5276861 6.5381619 - 7200 2000 -0 7.9454486 7.5282359 6.5456825 - 7300 2000 -0 7.945263 7.5286763 6.5512798 - 7400 2000 -0 7.9420874 7.527752 6.5445142 - 7500 2000 -0 7.9441062 7.5272938 6.5441649 - 7600 2000 -0 7.9457317 7.528108 6.5503985 - 7700 2000 -0 7.9440802 7.5278111 6.5470895 - 7800 2000 -0 7.9431937 7.5265385 6.541355 - 7900 2000 -0 7.9443162 7.5279484 6.5500105 - 8000 2000 -0 7.9494361 7.5285053 6.5534428 - 8100 2000 -0 7.946984 7.5263991 6.5455634 - 8200 2000 -0 7.9484464 7.5274982 6.5494966 - 8300 2000 -0 7.9481535 7.5274655 6.5501241 - 8400 2000 -0 7.9479539 7.5273074 6.5488317 - 8500 2000 -0 7.9485734 7.5277795 6.5512236 - 8600 2000 -0 7.9479221 7.528244 6.5500855 - 8700 2000 -0 7.9478183 7.5276603 6.5489063 - 8800 2000 -0 7.948203 7.5284835 6.5517141 - 8900 2000 -0 7.9485476 7.5282914 6.5523536 - 9000 2000 -0 7.9480852 7.527842 6.5485105 - 9100 2000 -0 7.9503303 7.5292996 6.5521516 - 9200 2000 -0 7.9484069 7.5284723 6.5532887 - 9300 2000 -0 7.9477781 7.5273643 6.5479285 - 9400 2000 -0 7.9480058 7.5281007 6.5494258 - 9500 2000 -0 7.9502363 7.5292831 6.5551525 - 9600 2000 -0 7.9491036 7.5284568 6.5495709 - 9700 2000 -0 7.9486046 7.5277883 6.5479749 - 9800 2000 -0 7.949523 7.5288246 6.5522055 - 9900 2000 -0 7.9494267 7.5284447 6.5514459 - 10000 2000 -0 7.9488016 7.5280346 6.5482727 - 10100 2000 -0 7.9490863 7.5283793 6.5508377 - 10200 2000 -0 7.9494738 7.5286559 6.5521934 - 10300 2000 -0 7.94897 7.5280769 6.5494088 - 10400 2000 -0 7.9491066 7.52825 6.5501939 - 10500 2000 -0 7.9493209 7.5285384 6.5519118 - 10600 2000 -0 7.9491644 7.5282301 6.5502712 - 10700 2000 -0 7.9491801 7.5281441 6.5499963 - 10800 2000 -0 7.9493282 7.5284381 6.5515091 - 10900 2000 -0 7.9492367 7.5283402 6.5507061 - 11000 2000 -0 7.9491668 7.5282029 6.5500415 - 11100 2000 -0 7.9493582 7.5283461 6.5510357 - 11200 2000 -0 7.949305 7.5283898 6.55098 - 11300 2000 -0 7.9491619 7.5282773 6.5501609 - 11400 2000 -0 7.9492854 7.5283288 6.5506804 - 11500 2000 -0 7.9493516 7.5283815 6.5509932 - 11600 2000 -0 7.9492185 7.5283196 6.5504137 - 11700 2000 -0 7.9492341 7.5283288 6.5505111 - 11800 2000 -0 7.9493062 7.5283673 6.5508542 - 11900 2000 -0 7.9492738 7.5283272 6.5506104 - 12000 2000 -0 7.9492546 7.5283062 6.5505492 - 12100 2000 -0 7.9492631 7.5283416 6.5507445 - 12200 2000 -0 7.9492627 7.5283173 6.5506804 - 12300 2000 -0 7.9492692 7.5282802 6.5506371 - 12400 2000 -0 7.9492646 7.5282953 6.550753 - 12500 2000 -0 7.9492316 7.5282905 6.5507057 - 12600 2000 -0 7.9492342 7.5282624 6.5506826 - 12700 2000 -0 7.9492517 7.5282775 6.5507828 - 12800 2000 -0 7.9492092 7.5282666 6.5507381 - 12900 2000 -0 7.9491704 7.528266 6.550672 - 13000 2000 -0 7.9491743 7.5282771 6.550743 - 13100 2000 -0 7.9491605 7.5282824 6.5507079 - 13200 2000 -0 7.9491217 7.5282926 6.5506177 - 13300 2000 -0 7.9491063 7.5283202 6.5506443 - 13400 2000 -0 7.949103 7.5283325 6.5506231 - 13500 2000 -0 7.9490907 7.5283364 6.5505438 - 13600 2000 -0 7.9490835 7.5283584 6.5505599 - 13700 2000 -0 7.9490777 7.5283759 6.5505599 - 13800 2000 -0 7.9490712 7.5283756 6.5504932 - 13900 2000 -0 7.9490785 7.5283817 6.5505065 - 14000 2000 -0 7.9490815 7.5283933 6.5505387 - 14100 2000 -0 7.9490684 7.528393 6.5504862 - 14200 2000 -0 7.9490688 7.5283905 6.5504794 - 14300 2000 -0 7.9490814 7.5283907 6.5505315 - 14400 2000 -0 7.9490755 7.5283879 6.5505125 - 14500 2000 -0 7.949065 7.5283808 6.5504867 - 14600 2000 -0 7.9490721 7.5283768 6.5505326 - 14700 2000 -0 7.9490774 7.5283658 6.5505527 - 14800 2000 -0 7.9490719 7.5283503 6.5505371 - 14900 2000 -0 7.9490734 7.5283397 6.5505695 - 15000 2000 -0 7.9490832 7.5283255 6.5506123 - 15100 2000 -0 7.9490922 7.5283034 6.5506235 - 15200 2000 -0 7.9491032 7.5282854 6.550654 - 15300 2000 -0 7.9491184 7.5282713 6.5507005 - 15400 2000 -0 7.9491364 7.5282536 6.5507233 - 15500 2000 -0 7.9491577 7.5282382 6.5507454 - 15600 2000 -0 7.949183 7.5282317 6.550776 - 15700 2000 -0 7.9491951 7.5282268 6.5507835 - 15800 2000 -0 7.9492105 7.5282249 6.5507815 - 15900 2000 -0 7.9492261 7.5282273 6.5507862 - 16000 2000 -0 7.949236 7.5282329 6.5507802 - 16100 2000 -0 7.9492433 7.5282403 6.5507646 - 16200 2000 -0 7.9492443 7.5282461 6.5507548 - 16300 2000 -0 7.9492487 7.528255 6.5507491 - 16400 2000 -0 7.9492492 7.5282612 6.5507372 - 16500 2000 -0 7.9492486 7.5282664 6.5507287 - 16600 2000 -0 7.9492482 7.5282702 6.5507259 - 16700 2000 -0 7.9492484 7.528271 6.550724 - 16800 2000 -0 7.949248 7.5282702 6.550724 - 16900 2000 -0 7.9492465 7.5282682 6.5507268 - 17000 2000 -0 7.9492458 7.5282638 6.550732 - 17100 2000 -0 7.9492503 7.5282577 6.5507415 - 17200 2000 -0 7.949245 7.528249 6.5507522 - 17300 2000 -0 7.949242 7.5282399 6.5507633 - 17400 2000 -0 7.9492423 7.5282314 6.5507781 - 17500 2000 -0 7.9492337 7.5282196 6.5507929 - 17600 2000 -0 7.9492257 7.5282097 6.5508056 - 17700 2000 -0 7.9492144 7.528202 6.5508153 - 17800 2000 -0 7.9492005 7.5281972 6.5508223 - 17900 2000 -0 7.9491836 7.5281958 6.5508215 - 18000 2000 -0 7.949164 7.5281986 6.550812 - 18100 2000 -0 7.949143 7.5282062 6.5507959 - 18200 2000 -0 7.9491222 7.5282177 6.550773 - 18300 2000 -0 7.9491032 7.5282315 6.5507447 - 18400 2000 -0 7.9490869 7.5282471 6.5507157 - 18500 2000 -0 7.9490738 7.5282631 6.5506876 - 18600 2000 -0 7.9490639 7.5282782 6.5506612 - 18700 2000 -0 7.9490575 7.5282917 6.5506397 - 18800 2000 -0 7.9490536 7.5283031 6.5506231 - 18900 2000 -0 7.9490511 7.5283122 6.5506095 - 19000 2000 -0 7.9490498 7.528319 6.5505999 - 19100 2000 -0 7.9490494 7.5283236 6.5505947 - 19200 2000 -0 7.9490504 7.5283266 6.5505913 - 19300 2000 -0 7.9490487 7.5283271 6.5505908 - 19400 2000 -0 7.9490481 7.5283251 6.5505927 - 19500 2000 -0 7.9490469 7.5283215 6.550597 - 19600 2000 -0 7.949046 7.5283161 6.5506036 - 19700 2000 -0 7.9490455 7.5283086 6.5506131 - 19800 2000 -0 7.9490454 7.5282989 6.5506262 - 19900 2000 -0 7.9490466 7.528287 6.550643 - 20000 2000 -0 7.9490497 7.5282729 6.5506641 - 20100 2000 -0 7.9490553 7.5282568 6.5506893 - 20200 2000 -0 7.949064 7.5282394 6.5507187 - 20300 2000 -0 7.9490762 7.5282213 6.5507507 - 20400 2000 -0 7.949092 7.5282037 6.5507836 - 20500 2000 -0 7.94911 7.5281878 6.5508144 - 20600 2000 -0 7.9491297 7.5281748 6.5508407 - 20700 2000 -0 7.9491494 7.5281658 6.5508604 - 20800 2000 -0 7.9491678 7.528161 6.5508721 - 20900 2000 -0 7.9491837 7.5281604 6.5508761 - 21000 2000 -0 7.9491965 7.5281634 6.5508735 - 21100 2000 -0 7.949206 7.5281691 6.5508664 - 21200 2000 -0 7.9492125 7.5281763 6.5508566 - 21300 2000 -0 7.9492165 7.5281841 6.5508459 - 21400 2000 -0 7.9492186 7.5281916 6.5508355 - 21500 2000 -0 7.9492193 7.5281981 6.5508266 - 21600 2000 -0 7.9492209 7.5282042 6.5508206 - 21700 2000 -0 7.9492183 7.5282068 6.5508151 - 21800 2000 -0 7.9492181 7.5282082 6.550813 - 21900 2000 -0 7.9492172 7.5282078 6.5508133 - 22000 2000 -0 7.9492165 7.5282053 6.5508164 - 22100 2000 -0 7.949216 7.5282009 6.5508221 - 22200 2000 -0 7.9492152 7.5281947 6.5508303 - 22300 2000 -0 7.9492139 7.5281868 6.5508407 - 22400 2000 -0 7.9492119 7.5281776 6.5508533 - 22500 2000 -0 7.9492085 7.5281675 6.5508672 - 22600 2000 -0 7.9492032 7.5281571 6.5508813 - 22700 2000 -0 7.9491954 7.5281475 6.5508947 - 22800 2000 -0 7.9491847 7.5281397 6.5509055 - 22900 2000 -0 7.9491707 7.5281345 6.5509114 - 23000 2000 -0 7.9491537 7.5281331 6.5509109 - 23100 2000 -0 7.9491342 7.528136 6.5509027 - 23200 2000 -0 7.9491134 7.5281433 6.5508866 - 23300 2000 -0 7.9490926 7.5281544 6.5508637 - 23400 2000 -0 7.9490734 7.5281684 6.5508363 - 23500 2000 -0 7.9490569 7.528184 6.550807 - 23600 2000 -0 7.9490436 7.5281999 6.5507785 - 23700 2000 -0 7.9490338 7.5282151 6.5507528 - 23800 2000 -0 7.9490271 7.5282287 6.550731 - 23900 2000 -0 7.9490229 7.5282402 6.5507135 - 24000 2000 -0 7.949022 7.5282475 6.5507052 - 24100 2000 -0 7.9490192 7.5282571 6.5506903 - 24200 2000 -0 7.9490187 7.5282612 6.5506857 - 24300 2000 -0 7.9490182 7.5282637 6.5506814 - 24400 2000 -0 7.9490176 7.5282644 6.5506802 - 24500 2000 -0 7.9490169 7.5282632 6.5506827 - 24600 2000 -0 7.9490162 7.52826 6.5506869 - 24700 2000 -0 7.949015 7.5282547 6.5506925 - 24800 2000 -0 7.9490143 7.5282475 6.5507019 - 24900 2000 -0 7.9490142 7.5282382 6.5507152 - 25000 2000 -0 7.949015 7.5282266 6.5507309 - 25100 2000 -0 7.9490178 7.5282127 6.5507512 - 25200 2000 -0 7.9490231 7.5281971 6.5507767 - 25300 2000 -0 7.9490313 7.5281798 6.5508053 - 25400 2000 -0 7.949043 7.5281617 6.5508367 - 25500 2000 -0 7.9490581 7.5281441 6.5508697 - 25600 2000 -0 7.949076 7.5281281 6.5509009 - 25700 2000 -0 7.9490959 7.528112 6.550928 - 25800 2000 -0 7.9491161 7.5281041 6.5509477 - 25900 2000 -0 7.9491345 7.5280996 6.5509612 - 26000 2000 -0 7.9491506 7.5280986 6.5509657 - 26100 2000 -0 7.9491638 7.5281011 6.5509636 - 26200 2000 -0 7.949174 7.5281064 6.5509573 - 26300 2000 -0 7.949181 7.5281134 6.5509475 - 26400 2000 -0 7.9491854 7.5281211 6.5509367 - 26500 2000 -0 7.9491879 7.5281286 6.5509264 - 26600 2000 -0 7.9491889 7.5281353 6.5509172 - 26700 2000 -0 7.9491886 7.5281409 6.5509104 - 26800 2000 -0 7.9491886 7.5281441 6.5509048 - 26900 2000 -0 7.9491879 7.5281458 6.5509024 - 27000 2000 -0 7.9491875 7.5281457 6.5509025 - 27100 2000 -0 7.949187 7.5281435 6.5509052 - 27200 2000 -0 7.9491866 7.5281393 6.5509102 - 27300 2000 -0 7.9491861 7.5281333 6.5509181 - 27400 2000 -0 7.9491851 7.5281257 6.5509283 - 27500 2000 -0 7.9491834 7.5281166 6.5509402 - 27600 2000 -0 7.9491805 7.5281065 6.550954 - 27700 2000 -0 7.9491758 7.5280961 6.5509683 - 27800 2000 -0 7.9491687 7.5280862 6.5509818 - 27900 2000 -0 7.9491588 7.5280779 6.5509931 - 28000 2000 -0 7.9491457 7.5280721 6.5510002 - 28100 2000 -0 7.9491294 7.5280699 6.551001 - 28200 2000 -0 7.9491105 7.5280718 6.5509942 - 28300 2000 -0 7.9490901 7.5280782 6.5509797 - 28400 2000 -0 7.9490695 7.5280885 6.550958 - 28500 2000 -0 7.9490501 7.5281019 6.5509312 - 28600 2000 -0 7.9490332 7.5281172 6.5509022 - 28700 2000 -0 7.9490195 7.5281331 6.5508735 - 28800 2000 -0 7.9490075 7.528149 6.5508475 - 28900 2000 -0 7.9490015 7.528163 6.5508246 - 29000 2000 -0 7.9489976 7.5281742 6.5508062 - 29100 2000 -0 7.9489952 7.5281837 6.5507921 - 29200 2000 -0 7.948994 7.5281911 6.550782 - 29300 2000 -0 7.9489934 7.5281962 6.5507753 - 29400 2000 -0 7.9489932 7.5281992 6.5507715 - 29500 2000 -0 7.9489929 7.5282002 6.5507702 - 29600 2000 -0 7.9489925 7.5281992 6.5507714 - 29700 2000 -0 7.9489918 7.5281964 6.5507748 - 29800 2000 -0 7.948991 7.5281916 6.5507805 - 29900 2000 -0 7.9489903 7.5281848 6.5507891 - 30000 2000 -0 7.9489901 7.5281759 6.5508007 - 30100 2000 -0 7.9489909 7.5281648 6.5508159 - 30200 2000 -0 7.9489933 7.5281515 6.5508353 - 30300 2000 -0 7.948998 7.5281362 6.550859 - 30400 2000 -0 7.9490056 7.5281192 6.5508868 - 30500 2000 -0 7.9490165 7.5281012 6.5509178 - 30600 2000 -0 7.9490309 7.5280833 6.5509503 - 30700 2000 -0 7.9490483 7.5280667 6.5509821 - 30800 2000 -0 7.9490676 7.5280525 6.5510103 - 30900 2000 -0 7.9490876 7.5280418 6.5510325 - 31000 2000 -0 7.9491067 7.5280353 6.5510472 - 31100 2000 -0 7.9491237 7.5280331 6.551054 - 31200 2000 -0 7.9491378 7.5280348 6.5510539 - 31300 2000 -0 7.9491487 7.5280394 6.5510483 - 31400 2000 -0 7.9491564 7.5280461 6.5510392 - 31500 2000 -0 7.9491615 7.5280537 6.5510287 - 31600 2000 -0 7.9491644 7.5280614 6.551018 - 31700 2000 -0 7.9491657 7.5280683 6.5510084 - 31800 2000 -0 7.949166 7.528074 6.5510005 - 31900 2000 -0 7.9491658 7.5280781 6.5509948 - 32000 2000 -0 7.9491652 7.5280804 6.5509914 - 32100 2000 -0 7.949165 7.5280809 6.5509907 - 32200 2000 -0 7.9491641 7.5280793 6.5509925 - 32300 2000 -0 7.9491637 7.5280757 6.5509969 - 32400 2000 -0 7.9491632 7.5280703 6.5510038 - 32500 2000 -0 7.9491625 7.5280632 6.5510132 - 32600 2000 -0 7.9491611 7.5280545 6.5510247 - 32700 2000 -0 7.9491587 7.5280447 6.5510379 - 32800 2000 -0 7.9491546 7.5280344 6.551052 - 32900 2000 -0 7.9491484 7.5280242 6.5510659 - 33000 2000 -0 7.9491395 7.5280153 6.5510781 - 33100 2000 -0 7.9491275 7.5280085 6.5510867 - 33200 2000 -0 7.9491123 7.528005 6.5510898 - 33300 2000 -0 7.9490942 7.5280055 6.5510857 - 33400 2000 -0 7.9490743 7.5280104 6.5510737 - 33500 2000 -0 7.9490536 7.5280195 6.5510543 - 33600 2000 -0 7.9490337 7.5280319 6.5510291 - 33700 2000 -0 7.9490159 7.5280467 6.5510006 - 33800 2000 -0 7.9490011 7.5280624 6.5509715 - 33900 2000 -0 7.9489897 7.528078 6.5509442 - 34000 2000 -0 7.9489816 7.5280924 6.5509203 - 34100 2000 -0 7.9489763 7.528105 6.5509004 - 34200 2000 -0 7.9489732 7.5281155 6.5508849 - 34300 2000 -0 7.9489717 7.5281236 6.5508735 - 34400 2000 -0 7.948971 7.5281295 6.5508656 - 34500 2000 -0 7.9489707 7.5281332 6.5508608 - 34600 2000 -0 7.9489705 7.5281349 6.5508586 - 34700 2000 -0 7.9489701 7.5281347 6.5508588 - 34800 2000 -0 7.9489695 7.5281326 6.5508613 - 34900 2000 -0 7.9489672 7.5281294 6.5508657 - 35000 2000 -0 7.9489679 7.5281227 6.5508731 - 35100 2000 -0 7.9489674 7.5281145 6.5508833 - 35200 2000 -0 7.9489677 7.5281044 6.5508973 - 35300 2000 -0 7.9489695 7.5280919 6.550915 - 35400 2000 -0 7.948973 7.5280774 6.5509365 - 35500 2000 -0 7.9489794 7.5280611 6.5509628 - 35600 2000 -0 7.9489889 7.5280435 6.5509926 - 35700 2000 -0 7.9490018 7.5280255 6.5510245 - 35800 2000 -0 7.949018 7.5280082 6.5510567 - 35900 2000 -0 7.9490366 7.5279929 6.5510867 - 36000 2000 -0 7.9490564 7.5279807 6.5511115 - 36100 2000 -0 7.949076 7.5279725 6.5511293 - 36200 2000 -0 7.949094 7.5279685 6.5511394 - 36300 2000 -0 7.9491093 7.5279687 6.5511419 - 36400 2000 -0 7.9491215 7.5279722 6.5511382 - 36500 2000 -0 7.9491305 7.5279782 6.5511304 - 36600 2000 -0 7.9491366 7.5279855 6.5511203 - 36700 2000 -0 7.9491403 7.5279933 6.5511095 - 36800 2000 -0 7.9491422 7.5280006 6.5510994 - 36900 2000 -0 7.9491429 7.5280069 6.5510907 - 37000 2000 -0 7.9491428 7.5280118 6.551084 - 37100 2000 -0 7.9491423 7.5280149 6.5510796 - 37200 2000 -0 7.9491417 7.5280162 6.5510777 - 37300 2000 -0 7.9491412 7.5280155 6.5510784 - 37400 2000 -0 7.9491407 7.5280129 6.5510816 - 37500 2000 -0 7.9491403 7.5280083 6.5510874 - 37600 2000 -0 7.9491397 7.528002 6.5510957 - 37700 2000 -0 7.9491387 7.527994 6.5511062 - 37800 2000 -0 7.9491368 7.5279847 6.5511187 - 37900 2000 -0 7.9491337 7.5279745 6.5511324 - 38000 2000 -0 7.9491286 7.5279642 6.5511466 - 38100 2000 -0 7.9491211 7.5279546 6.5511598 - 38200 2000 -0 7.9491106 7.5279467 6.5511704 - 38300 2000 -0 7.9490969 7.5279415 6.5511764 - 38400 2000 -0 7.9490802 7.52794 6.5511759 - 38500 2000 -0 7.9490611 7.5279428 6.5511678 - 38600 2000 -0 7.9490407 7.5279499 6.5511519 - 38700 2000 -0 7.9490203 7.5279608 6.5511293 - 38800 2000 -0 7.9490014 7.5279745 6.5511022 - 38900 2000 -0 7.9489851 7.5279899 6.5510732 - 39000 2000 -0 7.9489721 7.5280057 6.5510448 - 39100 2000 -0 7.9489624 7.5280208 6.5510192 - 39200 2000 -0 7.9489558 7.5280344 6.5509973 - 39300 2000 -0 7.9489516 7.528046 6.5509797 - 39400 2000 -0 7.9489493 7.5280554 6.5509663 - 39500 2000 -0 7.9489481 7.5280625 6.5509567 - 39600 2000 -0 7.9489476 7.5280674 6.5509503 - 39700 2000 -0 7.9489475 7.5280702 6.5509463 - 39800 2000 -0 7.9489472 7.5280711 6.5509448 - 39900 2000 -0 7.9489468 7.5280701 6.5509455 - 40000 2000 -0 7.9489461 7.5280673 6.5509484 - 40100 2000 -0 7.9489453 7.5280625 6.5509538 - 40200 2000 -0 7.9489445 7.5280556 6.5509619 - 40300 2000 -0 7.9489443 7.5280466 6.550973 - 40400 2000 -0 7.948945 7.5280353 6.5509879 - 40500 2000 -0 7.9489474 7.5280219 6.5510068 - 40600 2000 -0 7.9489521 7.5280065 6.5510299 - 40700 2000 -0 7.9489597 7.5279895 6.5510571 - 40800 2000 -0 7.9489706 7.5279716 6.5510876 - 40900 2000 -0 7.9489848 7.5279537 6.5511196 - 41000 2000 -0 7.9490019 7.5279372 6.5511508 - 41100 2000 -0 7.949021 7.5279231 6.5511783 - 41200 2000 -0 7.9490405 7.5279137 6.5512001 - 41300 2000 -0 7.9490593 7.5279062 6.551214 - 41400 2000 -0 7.9490759 7.527904 6.5512202 - 41500 2000 -0 7.9490897 7.5279058 6.5512195 - 41600 2000 -0 7.9491004 7.5279105 6.5512136 - 41700 2000 -0 7.9491078 7.5279171 6.5512042 - 41800 2000 -0 7.9491126 7.5279247 6.5511933 - 41900 2000 -0 7.9491153 7.5279324 6.5511823 - 42000 2000 -0 7.9491164 7.5279393 6.5511724 - 42100 2000 -0 7.9491165 7.527945 6.5511641 - 42200 2000 -0 7.949116 7.5279491 6.5511581 - 42300 2000 -0 7.9491153 7.5279515 6.5511543 - 42400 2000 -0 7.9491145 7.5279519 6.5511532 - 42500 2000 -0 7.9491138 7.5279504 6.5511545 - 42600 2000 -0 7.9491132 7.527947 6.5511584 - 42700 2000 -0 7.9491125 7.5279417 6.5511649 - 42800 2000 -0 7.9491115 7.5279347 6.5511737 - 42900 2000 -0 7.9491099 7.5279262 6.5511847 - 43000 2000 -0 7.9491074 7.5279165 6.5511975 - 43100 2000 -0 7.9491033 7.5279061 6.5512112 - 43200 2000 -0 7.9490971 7.5278959 6.5512249 - 43300 2000 -0 7.9490883 7.5278868 6.5512371 - 43400 2000 -0 7.9490764 7.5278798 6.5512459 - 43500 2000 -0 7.9490614 7.5278759 6.5512494 - 43600 2000 -0 7.9490435 7.5278759 6.5512459 - 43700 2000 -0 7.9490235 7.5278802 6.5512346 - 43800 2000 -0 7.9490027 7.5278887 6.5512158 - 43900 2000 -0 7.9489825 7.5279007 6.551191 - 44000 2000 -0 7.9489642 7.5279152 6.5511627 - 44100 2000 -0 7.9489489 7.5279308 6.5511334 - 44200 2000 -0 7.9489368 7.5279464 6.5511056 - 44300 2000 -0 7.9489281 7.5279609 6.5510809 - 44400 2000 -0 7.9489222 7.5279737 6.5510603 - 44500 2000 -0 7.9489186 7.5279844 6.551044 - 44600 2000 -0 7.9489166 7.5279929 6.5510317 - 44700 2000 -0 7.9489156 7.527999 6.551023 - 44800 2000 -0 7.948915 7.5280031 6.5510175 - 44900 2000 -0 7.9489146 7.5280051 6.5510146 - 45000 2000 -0 7.948914 7.5280052 6.5510141 - 45100 2000 -0 7.9489131 7.5280035 6.5510158 - 45200 2000 -0 7.948912 7.5279999 6.5510197 - 45300 2000 -0 7.9489109 7.5279944 6.5510261 - 45400 2000 -0 7.94891 7.5279869 6.5510353 - 45500 2000 -0 7.9489098 7.5279772 6.5510478 - 45600 2000 -0 7.9489107 7.5279654 6.551064 - 45700 2000 -0 7.9489134 7.5279514 6.5510843 - 45800 2000 -0 7.9489186 7.5279356 6.5511089 - 45900 2000 -0 7.9489269 7.5279183 6.5511373 - 46000 2000 -0 7.9489386 7.5279003 6.5511685 - 46100 2000 -0 7.9489535 7.5278828 6.5512004 - 46200 2000 -0 7.9489712 7.5278669 6.5512307 - 46300 2000 -0 7.9489904 7.5278538 6.5512567 - 46400 2000 -0 7.9490097 7.5278445 6.5512762 - 46500 2000 -0 7.9490278 7.5278394 6.551288 - 46600 2000 -0 7.9490435 7.5278384 6.5512921 - 46700 2000 -0 7.9490563 7.5278411 6.5512897 - 46800 2000 -0 7.9490658 7.5278464 6.5512826 - 46900 2000 -0 7.9490723 7.5278535 6.5512727 - 47000 2000 -0 7.9490763 7.5278612 6.5512617 - 47100 2000 -0 7.9490784 7.5278687 6.5512509 - 47200 2000 -0 7.949079 7.5278753 6.5512414 - 47300 2000 -0 7.9490788 7.5278807 6.5512337 - 47400 2000 -0 7.9490781 7.5278843 6.5512283 - 47500 2000 -0 7.9490772 7.5278862 6.5512252 - 47600 2000 -0 7.9490763 7.5278863 6.5512251 - 47700 2000 -0 7.9490756 7.5278844 6.5512274 - 47800 2000 -0 7.9490749 7.5278805 6.5512317 - 47900 2000 -0 7.9490741 7.5278748 6.5512387 - 48000 2000 -0 7.949073 7.5278674 6.5512483 - 48100 2000 -0 7.9490713 7.5278586 6.5512597 - 48200 2000 -0 7.9490684 7.5278487 6.5512726 - 48300 2000 -0 7.949064 7.5278383 6.5512866 - 48400 2000 -0 7.9490573 7.5278282 6.5513001 - 48500 2000 -0 7.9490478 7.5278194 6.5513115 - 48600 2000 -0 7.9490353 7.5278129 6.5513193 - 48700 2000 -0 7.9490196 7.5278097 6.5513215 - 48800 2000 -0 7.9490012 7.5278105 6.5513163 - 48900 2000 -0 7.948981 7.5278157 6.5513034 - 49000 2000 -0 7.9489603 7.527825 6.5512834 - 49100 2000 -0 7.9489405 7.5278375 6.5512576 - 49200 2000 -0 7.9489228 7.5278522 6.5512289 - 49300 2000 -0 7.9489081 7.5278678 6.5512 - 49400 2000 -0 7.9488969 7.5278831 6.5511728 - 49500 2000 -0 7.9488888 7.5278972 6.551149 - 49600 2000 -0 7.9488835 7.5279095 6.5511293 - 49700 2000 -0 7.9488803 7.5279197 6.5511139 - 49800 2000 -0 7.9488785 7.5279275 6.5511024 - 49900 2000 -0 7.9488776 7.5279332 6.5510945 - 50000 2000 -0 7.9488771 7.5279368 6.5510895 - 50100 2000 -0 7.9488767 7.5279384 6.5510871 - 50200 2000 -0 7.948876 7.5279381 6.551087 - 50300 2000 -0 7.9488752 7.5279359 6.5510891 - 50400 2000 -0 7.9488741 7.527932 6.5510934 - 50500 2000 -0 7.948873 7.5279261 6.5511002 - 50600 2000 -0 7.9488722 7.5279182 6.5511099 - 50700 2000 -0 7.9488721 7.5279081 6.5511229 - 50800 2000 -0 7.9488732 7.5278959 6.5511396 - 50900 2000 -0 7.9488763 7.5278816 6.5511605 - 51000 2000 -0 7.9488819 7.5278655 6.5511857 - 51100 2000 -0 7.9488907 7.527848 6.5512145 - 51200 2000 -0 7.9489028 7.52783 6.5512458 - 51300 2000 -0 7.9489182 7.5278126 6.5512776 - 51400 2000 -0 7.9489361 7.527797 6.5513073 - 51500 2000 -0 7.9489553 7.5277844 6.5513324 - 51600 2000 -0 7.9489746 7.5277755 6.5513508 - 51700 2000 -0 7.9489924 7.527771 6.5513615 - 51800 2000 -0 7.9490076 7.5277705 6.5513647 - 51900 2000 -0 7.9490195 7.5277737 6.5513615 - 52000 2000 -0 7.9490283 7.5277794 6.5513539 - 52100 2000 -0 7.949034 7.5277866 6.5513439 - 52200 2000 -0 7.949037 7.5277943 6.551333 - 52300 2000 -0 7.9490382 7.5278017 6.5513225 - 52400 2000 -0 7.9490381 7.5278081 6.5513134 - 52500 2000 -0 7.9490372 7.5278132 6.5513061 - 52600 2000 -0 7.9490358 7.5278167 6.5513011 - 52700 2000 -0 7.9490343 7.5278183 6.5512985 - 52800 2000 -0 7.9490329 7.5278181 6.5512989 - 52900 2000 -0 7.9490315 7.527816 6.5513015 - 53000 2000 -0 7.9490302 7.5278118 6.5513062 - 53100 2000 -0 7.9490288 7.5278059 6.5513136 - 53200 2000 -0 7.9490279 7.5277975 6.5513237 - 53300 2000 -0 7.9490241 7.5277891 6.5513356 - 53400 2000 -0 7.9490211 7.5277793 6.5513482 - 53500 2000 -0 7.949016 7.527769 6.5513626 - 53600 2000 -0 7.9490084 7.527759 6.5513764 - 53700 2000 -0 7.948998 7.5277502 6.5513874 - 53800 2000 -0 7.9489846 7.5277439 6.5513952 - 53900 2000 -0 7.9489681 7.527741 6.5513973 - 54000 2000 -0 7.9489489 7.5277421 6.5513917 - 54100 2000 -0 7.9489279 7.5277475 6.5513784 - 54200 2000 -0 7.9489066 7.527757 6.5513584 - 54300 2000 -0 7.9488862 7.5277697 6.5513326 - 54400 2000 -0 7.948868 7.5277844 6.5513039 - 54500 2000 -0 7.9488529 7.5278 6.5512754 - 54600 2000 -0 7.9488411 7.5278152 6.5512487 - 54700 2000 -0 7.9488325 7.5278292 6.5512253 - 54800 2000 -0 7.9488266 7.5278414 6.5512062 - 54900 2000 -0 7.9488228 7.5278514 6.5511912 - 55000 2000 -0 7.9488204 7.5278592 6.5511801 - 55100 2000 -0 7.9488188 7.5278647 6.5511725 - 55200 2000 -0 7.9488176 7.5278682 6.5511679 - 55300 2000 -0 7.9488165 7.5278697 6.5511657 - 55400 2000 -0 7.9488151 7.5278693 6.5511659 - 55500 2000 -0 7.9488136 7.5278672 6.5511683 - 55600 2000 -0 7.9488118 7.5278632 6.5511728 - 55700 2000 -0 7.94881 7.5278573 6.5511798 - 55800 2000 -0 7.9488085 7.5278494 6.5511897 - 55900 2000 -0 7.9488076 7.5278393 6.5512028 - 56000 2000 -0 7.9488081 7.5278272 6.5512196 - 56100 2000 -0 7.9488104 7.5278129 6.5512407 - 56200 2000 -0 7.9488153 7.5277968 6.5512659 - 56300 2000 -0 7.9488233 7.5277793 6.5512948 - 56400 2000 -0 7.9488347 7.5277613 6.5513262 - 56500 2000 -0 7.9488493 7.527744 6.5513581 - 56600 2000 -0 7.9488664 7.5277283 6.5513879 - 56700 2000 -0 7.9488849 7.5277157 6.5514132 - 56800 2000 -0 7.9489034 7.5277068 6.5514318 - 56900 2000 -0 7.9489205 7.5277022 6.5514428 - 57000 2000 -0 7.9489351 7.5277016 6.5514462 - 57100 2000 -0 7.9489467 7.5277046 6.5514434 - 57200 2000 -0 7.9489551 7.5277101 6.5514361 - 57300 2000 -0 7.9489606 7.5277172 6.5514261 - 57400 2000 -0 7.9489636 7.5277248 6.5514153 - 57500 2000 -0 7.9489647 7.5277322 6.5514049 - 57600 2000 -0 7.9489645 7.5277387 6.5513957 - 57700 2000 -0 7.9489634 7.5277438 6.5513885 - 57800 2000 -0 7.9489619 7.5277473 6.5513834 - 57900 2000 -0 7.9489603 7.527749 6.5513807 - 58000 2000 -0 7.9489587 7.5277489 6.551381 - 58100 2000 -0 7.9489572 7.5277469 6.5513835 - 58200 2000 -0 7.9489558 7.5277428 6.5513881 - 58300 2000 -0 7.9489543 7.527737 6.5513954 - 58400 2000 -0 7.9489526 7.5277295 6.5514052 - 58500 2000 -0 7.9489538 7.5277215 6.551417 - 58600 2000 -0 7.948947 7.5277103 6.5514298 - 58700 2000 -0 7.9489424 7.5276998 6.551444 - 58800 2000 -0 7.9489357 7.5276895 6.5514576 - 58900 2000 -0 7.9489261 7.5276803 6.5514692 - 59000 2000 -0 7.9489135 7.5276736 6.5514773 - 59100 2000 -0 7.9488978 7.5276701 6.5514798 - 59200 2000 -0 7.9488794 7.5276706 6.551475 - 59300 2000 -0 7.9488592 7.5276754 6.5514625 - 59400 2000 -0 7.9488384 7.5276843 6.5514429 - 59500 2000 -0 7.9488184 7.5276965 6.5514176 - 59600 2000 -0 7.9488006 7.5277108 6.5513894 - 59700 2000 -0 7.9487858 7.5277262 6.5513607 - 59800 2000 -0 7.9487742 7.5277411 6.5513338 - 59900 2000 -0 7.9487658 7.527755 6.5513102 - 60000 2000 -0 7.9487603 7.5277672 6.5512907 - 60100 2000 -0 7.9487569 7.5277771 6.5512753 - 60200 2000 -0 7.9487549 7.5277849 6.5512639 - 60300 2000 -0 7.9487538 7.5277905 6.551256 - 60400 2000 -0 7.9487531 7.5277939 6.551251 - 60500 2000 -0 7.9487525 7.5277954 6.5512486 - 60600 2000 -0 7.9487517 7.5277951 6.5512485 - 60700 2000 -0 7.9487507 7.5277929 6.5512505 - 60800 2000 -0 7.9487495 7.527789 6.5512547 - 60900 2000 -0 7.9487482 7.5277831 6.5512613 - 61000 2000 -0 7.9487471 7.5277753 6.5512707 - 61100 2000 -0 7.9487466 7.5277654 6.5512832 - 61200 2000 -0 7.9487474 7.5277534 6.5512994 - 61300 2000 -0 7.9487499 7.5277392 6.5513196 - 61400 2000 -0 7.9487549 7.5277231 6.551344 - 61500 2000 -0 7.9487629 7.5277057 6.5513722 - 61600 2000 -0 7.9487743 7.5276875 6.5514032 - 61700 2000 -0 7.9487889 7.5276698 6.5514349 - 61800 2000 -0 7.9488062 7.5276536 6.5514651 - 61900 2000 -0 7.9488251 7.5276402 6.5514912 - 62000 2000 -0 7.9488442 7.5276305 6.5515108 - 62100 2000 -0 7.9488621 7.5276249 6.5515229 - 62200 2000 -0 7.9488777 7.5276235 6.5515275 - 62300 2000 -0 7.9488903 7.5276257 6.5515255 - 62400 2000 -0 7.9488998 7.5276306 6.5515188 - 62500 2000 -0 7.9489063 7.5276373 6.5515091 - 62600 2000 -0 7.9489103 7.5276446 6.5514983 - 62700 2000 -0 7.9489123 7.5276519 6.5514876 - 62800 2000 -0 7.9489128 7.5276583 6.5514781 - 62900 2000 -0 7.9489125 7.5276635 6.5514704 - 63000 2000 -0 7.9489117 7.5276671 6.5514648 - 63100 2000 -0 7.9489107 7.5276689 6.5514616 - 63200 2000 -0 7.9489097 7.527669 6.5514611 - 63300 2000 -0 7.9489089 7.5276672 6.5514631 - 63400 2000 -0 7.9489086 7.5276637 6.5514673 - 63500 2000 -0 7.9489073 7.5276575 6.5514739 - 63600 2000 -0 7.9489063 7.5276501 6.551483 - 63700 2000 -0 7.9489046 7.5276413 6.5514942 - 63800 2000 -0 7.948902 7.5276313 6.5515069 - 63900 2000 -0 7.9488979 7.5276207 6.5515208 - 64000 2000 -0 7.9488918 7.5276102 6.5515346 - 64100 2000 -0 7.9488831 7.5276008 6.5515467 - 64200 2000 -0 7.9488713 7.5275934 6.5515557 - 64300 2000 -0 7.9488564 7.5275891 6.5515596 - 64400 2000 -0 7.9488387 7.5275886 6.5515566 - 64500 2000 -0 7.948819 7.5275923 6.551546 - 64600 2000 -0 7.9487983 7.5276002 6.551528 - 64700 2000 -0 7.9487782 7.5276117 6.5515039 - 64800 2000 -0 7.9487598 7.5276255 6.5514762 - 64900 2000 -0 7.9487443 7.5276407 6.5514474 - 65000 2000 -0 7.9487321 7.5276559 6.5514199 - 65100 2000 -0 7.9487231 7.5276701 6.5513954 - 65200 2000 -0 7.948717 7.5276826 6.5513748 - 65300 2000 -0 7.9487132 7.5276931 6.5513585 - 65400 2000 -0 7.948711 7.5277014 6.5513461 - 65500 2000 -0 7.9487098 7.5277075 6.5513372 - 65600 2000 -0 7.9487092 7.5277115 6.5513315 - 65700 2000 -0 7.9487086 7.5277135 6.5513284 - 65800 2000 -0 7.948708 7.5277137 6.5513277 - 65900 2000 -0 7.9487071 7.527712 6.5513291 - 66000 2000 -0 7.948706 7.5277085 6.5513326 - 66100 2000 -0 7.9487047 7.5277032 6.5513384 - 66200 2000 -0 7.9487036 7.527696 6.5513467 - 66300 2000 -0 7.9487029 7.5276867 6.5513582 - 66400 2000 -0 7.9487033 7.5276753 6.5513731 - 66500 2000 -0 7.9487052 7.5276618 6.551392 - 66600 2000 -0 7.9487093 7.5276463 6.5514151 - 66700 2000 -0 7.9487163 7.5276292 6.5514421 - 66800 2000 -0 7.9487266 7.5276112 6.5514722 - 66900 2000 -0 7.9487402 7.5275932 6.5515039 - 67000 2000 -0 7.9487567 7.5275765 6.5515348 - 67100 2000 -0 7.9487752 7.5275621 6.5515623 - 67200 2000 -0 7.9487943 7.5275511 6.5515841 - 67300 2000 -0 7.9488127 7.5275442 6.5515986 - 67400 2000 -0 7.9488291 7.5275415 6.5516055 - 67500 2000 -0 7.9488435 7.5275438 6.5516054 - 67600 2000 -0 7.9488528 7.5275468 6.5515999 - 67700 2000 -0 7.9488606 7.5275528 6.5515912 - 67800 2000 -0 7.9488653 7.52756 6.5515805 - 67900 2000 -0 7.9488678 7.5275674 6.5515696 - 68000 2000 -0 7.9488689 7.5275741 6.5515598 - 68100 2000 -0 7.9488688 7.5275798 6.5515513 - 68200 2000 -0 7.9488681 7.5275839 6.5515449 - 68300 2000 -0 7.9488671 7.5275863 6.5515409 - 68400 2000 -0 7.9488661 7.527587 6.5515394 - 68500 2000 -0 7.9488652 7.5275857 6.5515407 - 68600 2000 -0 7.9488645 7.5275825 6.551544 - 68700 2000 -0 7.9488637 7.5275774 6.5515497 - 68800 2000 -0 7.9488629 7.5275707 6.5515579 - 68900 2000 -0 7.9488616 7.5275623 6.5515684 - 69000 2000 -0 7.9488595 7.5275526 6.5515805 - 69100 2000 -0 7.9488561 7.5275422 6.551594 - 69200 2000 -0 7.9488509 7.5275315 6.5516081 - 69300 2000 -0 7.9488433 7.5275215 6.551621 - 69400 2000 -0 7.9488328 7.5275132 6.5516314 - 69500 2000 -0 7.9488192 7.5275075 6.5516376 - 69600 2000 -0 7.9488027 7.5275054 6.5516375 - 69700 2000 -0 7.9487837 7.5275074 6.5516299 - 69800 2000 -0 7.9487633 7.5275136 6.5516148 - 69900 2000 -0 7.9487429 7.5275237 6.551593 - 70000 2000 -0 7.9487238 7.5275367 6.5515664 - 70100 2000 -0 7.9487071 7.5275514 6.5515379 - 70200 2000 -0 7.9486936 7.5275666 6.5515098 - 70300 2000 -0 7.9486834 7.5275813 6.551484 - 70400 2000 -0 7.9486763 7.5275945 6.5514618 - 70500 2000 -0 7.9486716 7.5276059 6.5514438 - 70600 2000 -0 7.9486689 7.5276151 6.5514298 - 70700 2000 -0 7.9486674 7.527622 6.5514196 - 70800 2000 -0 7.9486667 7.5276269 6.5514127 - 70900 2000 -0 7.9486661 7.5276297 6.5514086 - 71000 2000 -0 7.9486656 7.5276306 6.5514069 - 71100 2000 -0 7.9486648 7.5276297 6.5514073 - 71200 2000 -0 7.9486638 7.527627 6.5514099 - 71300 2000 -0 7.9486626 7.5276226 6.5514146 - 71400 2000 -0 7.9486614 7.5276163 6.5514217 - 71500 2000 -0 7.9486605 7.527608 6.5514317 - 71600 2000 -0 7.9486603 7.5275976 6.5514449 - 71700 2000 -0 7.9486614 7.5275851 6.5514619 - 71800 2000 -0 7.9486644 7.5275705 6.5514829 - 71900 2000 -0 7.94867 7.5275542 6.5515081 - 72000 2000 -0 7.9486787 7.5275366 6.5515368 - 72100 2000 -0 7.9486908 7.5275189 6.551568 - 72200 2000 -0 7.9487059 7.5275011 6.5515994 - 72300 2000 -0 7.9487235 7.5274855 6.5516286 - 72400 2000 -0 7.9487426 7.5274729 6.5516533 - 72500 2000 -0 7.9487614 7.527464 6.5516713 - 72600 2000 -0 7.9487788 7.5274593 6.5516817 - 72700 2000 -0 7.9487938 7.5274587 6.5516848 - 72800 2000 -0 7.9488058 7.5274616 6.5516817 - 72900 2000 -0 7.9488146 7.5274669 6.5516742 - 73000 2000 -0 7.9488205 7.5274738 6.5516642 - 73100 2000 -0 7.9488269 7.5274812 6.5516534 - 73200 2000 -0 7.9488257 7.5274883 6.5516429 - 73300 2000 -0 7.9488261 7.5274945 6.5516336 - 73400 2000 -0 7.9488256 7.5274994 6.5516262 - 73500 2000 -0 7.9488248 7.5275027 6.551621 - 73600 2000 -0 7.9488238 7.5275043 6.5516181 - 73700 2000 -0 7.9488228 7.5275041 6.551618 - 73800 2000 -0 7.948822 7.527502 6.5516204 - 73900 2000 -0 7.9488212 7.5274979 6.5516247 - 74000 2000 -0 7.9488205 7.527492 6.5516315 - 74100 2000 -0 7.9488195 7.5274845 6.551641 - 74200 2000 -0 7.9488179 7.5274755 6.5516522 - 74300 2000 -0 7.9488153 7.5274655 6.551665 - 74400 2000 -0 7.9488112 7.5274549 6.5516789 - 74500 2000 -0 7.9488049 7.5274445 6.5516926 - 74600 2000 -0 7.9487961 7.5274352 6.5517045 - 74700 2000 -0 7.9487842 7.527428 6.5517132 - 74800 2000 -0 7.9487693 7.5274239 6.5517167 - 74900 2000 -0 7.9487516 7.5274236 6.5517132 - 75000 2000 -0 7.9487319 7.5274276 6.5517022 - 75100 2000 -0 7.9487114 7.5274356 6.551684 - 75200 2000 -0 7.9486914 7.5274472 6.5516598 - 75300 2000 -0 7.9486734 7.5274611 6.5516321 - 75400 2000 -0 7.9486581 7.5274761 6.5516036 - 75500 2000 -0 7.9486462 7.5274912 6.5515764 - 75600 2000 -0 7.9486374 7.5275053 6.5515521 - 75700 2000 -0 7.9486315 7.5275177 6.5515319 - 75800 2000 -0 7.9486278 7.5275281 6.5515157 - 75900 2000 -0 7.9486258 7.5275363 6.5515035 - 76000 2000 -0 7.9486247 7.5275423 6.5514948 - 76100 2000 -0 7.9486241 7.5275463 6.5514892 - 76200 2000 -0 7.9486236 7.5275483 6.5514861 - 76300 2000 -0 7.948623 7.5275484 6.5514853 - 76400 2000 -0 7.9486222 7.5275468 6.5514867 - 76500 2000 -0 7.9486211 7.5275435 6.5514901 - 76600 2000 -0 7.9486198 7.5275383 6.5514957 - 76700 2000 -0 7.9486187 7.5275312 6.5515039 - 76800 2000 -0 7.948618 7.5275222 6.551515 - 76900 2000 -0 7.9486182 7.527511 6.5515295 - 77000 2000 -0 7.9486199 7.5274977 6.551548 - 77100 2000 -0 7.9486238 7.5274825 6.5515706 - 77200 2000 -0 7.9486305 7.5274656 6.5515971 - 77300 2000 -0 7.9486405 7.5274478 6.5516268 - 77400 2000 -0 7.9486537 7.5274299 6.5516582 - 77500 2000 -0 7.9486699 7.527413 6.551689 - 77600 2000 -0 7.9486881 7.5273985 6.5517168 - 77700 2000 -0 7.9487072 7.5273872 6.5517391 - 77800 2000 -0 7.9487256 7.5273799 6.5517543 - 77900 2000 -0 7.9487421 7.5273768 6.5517619 - 78000 2000 -0 7.948756 7.5273776 6.5517625 - 78100 2000 -0 7.9487668 7.5273814 6.5517576 - 78200 2000 -0 7.9487745 7.5273874 6.551749 - 78300 2000 -0 7.9487795 7.5273946 6.5517385 - 78400 2000 -0 7.9487822 7.527402 6.5517276 - 78500 2000 -0 7.9487834 7.5274089 6.5517175 - 78600 2000 -0 7.9487834 7.5274147 6.5517089 - 78700 2000 -0 7.9487828 7.5274191 6.5517022 - 78800 2000 -0 7.9487818 7.5274218 6.5516978 - 78900 2000 -0 7.9487808 7.5274228 6.5516958 - 79000 2000 -0 7.9487799 7.5274219 6.5516967 - 79100 2000 -0 7.9487792 7.5274192 6.5516996 - 79200 2000 -0 7.9487784 7.5274145 6.5517047 - 79300 2000 -0 7.9487776 7.5274081 6.5517124 - 79400 2000 -0 7.9487765 7.5274002 6.5517225 - 79500 2000 -0 7.9487747 7.5273908 6.5517341 - 79600 2000 -0 7.9487717 7.5273805 6.5517474 - 79700 2000 -0 7.948767 7.52737 6.5517614 - 79800 2000 -0 7.9487601 7.5273598 6.5517746 - 79900 2000 -0 7.9487504 7.527351 6.5517858 - 80000 2000 -0 7.9487377 7.5273446 6.5517931 - 80100 2000 -0 7.9487219 7.5273416 6.5517947 - 80200 2000 -0 7.9487036 7.5273426 6.551789 - 80300 2000 -0 7.9486836 7.5273478 6.5517759 - 80400 2000 -0 7.9486632 7.5273569 6.5517558 - 80500 2000 -0 7.9486437 7.5273692 6.5517304 - 80600 2000 -0 7.9486265 7.5273836 6.5517023 - 80700 2000 -0 7.9486122 7.5273987 6.5516741 - 80800 2000 -0 7.9486012 7.5274136 6.5516477 - 80900 2000 -0 7.9485934 7.5274272 6.5516246 - 81000 2000 -0 7.9485882 7.5274391 6.5516056 - 81100 2000 -0 7.9485859 7.5274494 6.5515908 - 81200 2000 -0 7.9485834 7.5274563 6.5515794 - 81300 2000 -0 7.9485825 7.5274618 6.5515718 - 81400 2000 -0 7.948582 7.5274652 6.5515669 - 81500 2000 -0 7.9485815 7.5274667 6.5515644 - 81600 2000 -0 7.9485809 7.5274664 6.5515643 - 81700 2000 -0 7.94858 7.5274644 6.5515662 - 81800 2000 -0 7.9485788 7.5274606 6.55157 - 81900 2000 -0 7.9485776 7.527455 6.5515762 - 82000 2000 -0 7.9485765 7.5274475 6.5515851 - 82100 2000 -0 7.9485759 7.527438 6.5515969 - 82200 2000 -0 7.9485764 7.5274264 6.5516123 - 82300 2000 -0 7.9485786 7.5274127 6.5516316 - 82400 2000 -0 7.9485831 7.5273971 6.551655 - 82500 2000 -0 7.9485904 7.52738 6.5516822 - 82600 2000 -0 7.948601 7.5273621 6.5517124 - 82700 2000 -0 7.9486149 7.5273443 6.5517438 - 82800 2000 -0 7.9486316 7.5273279 6.5517741 - 82900 2000 -0 7.9486501 7.527314 6.5518008 - 83000 2000 -0 7.948669 7.5273036 6.5518216 - 83100 2000 -0 7.9486871 7.5272973 6.5518351 - 83200 2000 -0 7.9487031 7.527295 6.5518411 - 83300 2000 -0 7.9487163 7.5272965 6.5518404 - 83400 2000 -0 7.9487263 7.5273009 6.5518346 - 83500 2000 -0 7.9487334 7.5273073 6.5518255 - 83600 2000 -0 7.9487379 7.5273145 6.5518149 - 83700 2000 -0 7.9487402 7.5273219 6.5518041 - 83800 2000 -0 7.9487411 7.5273286 6.5517942 - 83900 2000 -0 7.948741 7.5273342 6.551786 - 84000 2000 -0 7.9487402 7.5273383 6.5517797 - 84100 2000 -0 7.9487392 7.5273407 6.5517757 - 84200 2000 -0 7.9487383 7.5273413 6.5517743 - 84300 2000 -0 7.9487374 7.5273402 6.5517756 - 84400 2000 -0 7.9487366 7.5273371 6.5517789 - 84500 2000 -0 7.9487359 7.5273321 6.5517843 - 84600 2000 -0 7.9487351 7.5273255 6.5517925 - 84700 2000 -0 7.948734 7.5273173 6.5518029 - 84800 2000 -0 7.948732 7.5273078 6.5518148 - 84900 2000 -0 7.9487288 7.5272974 6.5518282 - 85000 2000 -0 7.9487239 7.5272869 6.5518422 - 85100 2000 -0 7.9487166 7.5272769 6.5518552 - 85200 2000 -0 7.9487066 7.5272684 6.5518659 - 85300 2000 -0 7.9486935 7.5272625 6.5518726 - 85400 2000 -0 7.9486774 7.52726 6.5518732 - 85500 2000 -0 7.9486588 7.5272615 6.5518665 - 85600 2000 -0 7.9486387 7.5272673 6.5518525 - 85700 2000 -0 7.9486184 7.5272769 6.5518316 - 85800 2000 -0 7.9485993 7.5272895 6.5518058 - 85900 2000 -0 7.9485825 7.527304 6.5517777 - 86000 2000 -0 7.9485687 7.5273192 6.5517496 - 86100 2000 -0 7.9485582 7.5273338 6.5517237 - 86200 2000 -0 7.9485508 7.5273473 6.5517012 - 86300 2000 -0 7.9485459 7.5273589 6.5516828 - 86400 2000 -0 7.948543 7.5273683 6.5516683 - 86500 2000 -0 7.9485415 7.5273756 6.5516577 - 86600 2000 -0 7.9485407 7.5273808 6.5516504 - 86700 2000 -0 7.9485402 7.527384 6.5516458 - 86800 2000 -0 7.9485398 7.5273853 6.5516437 - 86900 2000 -0 7.9485391 7.5273848 6.5516437 - 87000 2000 -0 7.9485382 7.5273826 6.5516457 - 87100 2000 -0 7.948537 7.5273787 6.5516498 - 87200 2000 -0 7.9485358 7.527373 6.5516562 - 87300 2000 -0 7.9485347 7.5273654 6.5516652 - 87400 2000 -0 7.9485342 7.5273557 6.5516772 - 87500 2000 -0 7.9485348 7.527344 6.5516928 - 87600 2000 -0 7.9485371 7.5273302 6.5517124 - 87700 2000 -0 7.9485417 7.5273145 6.551736 - 87800 2000 -0 7.9485492 7.5272974 6.5517634 - 87900 2000 -0 7.9485605 7.5272797 6.5517928 - 88000 2000 -0 7.9485752 7.5272622 6.5518233 - 88100 2000 -0 7.9485926 7.5272462 6.5518526 - 88200 2000 -0 7.9486117 7.5272327 6.5518779 - 88300 2000 -0 7.9486313 7.5272227 6.5518973 - 88400 2000 -0 7.9486498 7.5272169 6.5519096 - 88500 2000 -0 7.9486663 7.5272151 6.5519142 - 88600 2000 -0 7.9486799 7.5272169 6.5519123 - 88700 2000 -0 7.9486904 7.5272216 6.5519055 - 88800 2000 -0 7.9486979 7.5272282 6.5518954 - 88900 2000 -0 7.9487028 7.5272357 6.5518839 - 89000 2000 -0 7.9487057 7.5272433 6.5518724 - 89100 2000 -0 7.9487072 7.5272501 6.5518617 - 89200 2000 -0 7.9487076 7.5272558 6.5518526 - 89300 2000 -0 7.9487074 7.5272601 6.5518456 - 89400 2000 -0 7.9487071 7.5272626 6.5518409 - 89500 2000 -0 7.9487067 7.5272635 6.5518386 - 89600 2000 -0 7.9487065 7.5272625 6.5518391 - 89700 2000 -0 7.9487063 7.5272596 6.5518416 - 89800 2000 -0 7.9487063 7.5272548 6.5518462 - 89900 2000 -0 7.9487061 7.5272484 6.5518535 - 90000 2000 -0 7.9487056 7.5272404 6.551863 - 90100 2000 -0 7.9487043 7.5272311 6.551874 - 90200 2000 -0 7.9487018 7.527221 6.5518866 - 90300 2000 -0 7.9486975 7.5272106 6.5518997 - 90400 2000 -0 7.948691 7.5272008 6.5519118 - 90500 2000 -0 7.9486816 7.5271925 6.5519217 - 90600 2000 -0 7.9486692 7.5271867 6.5519276 - 90700 2000 -0 7.9486538 7.5271843 6.5519275 - 90800 2000 -0 7.948636 7.527186 6.5519202 - 90900 2000 -0 7.9486166 7.5271918 6.5519055 - 91000 2000 -0 7.948597 7.5272016 6.551884 - 91100 2000 -0 7.9485784 7.5272143 6.5518575 - 91200 2000 -0 7.9485622 7.5272289 6.5518287 - 91300 2000 -0 7.948549 7.5272442 6.5517999 - 91400 2000 -0 7.9485391 7.5272591 6.5517731 - 91500 2000 -0 7.9485322 7.5272727 6.5517498 - 91600 2000 -0 7.9485279 7.5272845 6.5517305 - 91700 2000 -0 7.9485256 7.5272942 6.5517151 - 91800 2000 -0 7.9485247 7.5273018 6.5517036 - 91900 2000 -0 7.9485245 7.5273072 6.5516953 - 92000 2000 -0 7.9485247 7.5273107 6.5516898 - 92100 2000 -0 7.9485248 7.5273122 6.5516867 - 92200 2000 -0 7.9485251 7.5273121 6.5516858 - 92300 2000 -0 7.9485248 7.5273103 6.5516869 - 92400 2000 -0 7.948524 7.5273066 6.5516899 - 92500 2000 -0 7.9485234 7.5273012 6.5516952 - 92600 2000 -0 7.9485229 7.527294 6.5517031 - 92700 2000 -0 7.9485229 7.5272848 6.5517139 - 92800 2000 -0 7.948524 7.5272735 6.5517283 - 92900 2000 -0 7.9485267 7.5272601 6.5517465 - 93000 2000 -0 7.9485317 7.5272448 6.5517688 - 93100 2000 -0 7.9485395 7.527228 6.5517949 - 93200 2000 -0 7.9485506 7.5272104 6.5518239 - 93300 2000 -0 7.9485649 7.527193 6.5518542 - 93400 2000 -0 7.9485821 7.5271768 6.5518835 - 93500 2000 -0 7.948601 7.527163 6.5519093 - 93600 2000 -0 7.9486206 7.5271527 6.5519294 - 93700 2000 -0 7.9486392 7.5271464 6.5519423 - 93800 2000 -0 7.9486559 7.5271442 6.5519477 - 93900 2000 -0 7.9486698 7.5271457 6.5519465 - 94000 2000 -0 7.9486807 7.5271502 6.55194 - 94100 2000 -0 7.9486885 7.5271566 6.5519303 - 94200 2000 -0 7.9486937 7.527164 6.5519188 - 94300 2000 -0 7.9486968 7.5271716 6.5519072 - 94400 2000 -0 7.9486984 7.5271785 6.5518964 - 94500 2000 -0 7.948699 7.5271843 6.5518871 - 94600 2000 -0 7.948699 7.5271887 6.5518798 - 94700 2000 -0 7.9486987 7.5271915 6.5518747 - 94800 2000 -0 7.9486984 7.5271925 6.5518721 - 94900 2000 -0 7.9486982 7.5271918 6.5518722 - 95000 2000 -0 7.9486982 7.5271891 6.5518743 - 95100 2000 -0 7.9486982 7.5271846 6.5518785 - 95200 2000 -0 7.948698 7.5271783 6.5518855 - 95300 2000 -0 7.9486978 7.5271706 6.5518946 - 95400 2000 -0 7.9486968 7.5271614 6.5519053 - 95500 2000 -0 7.9486946 7.5271514 6.5519176 - 95600 2000 -0 7.9486908 7.527141 6.5519306 - 95700 2000 -0 7.9486848 7.527131 6.551943 - 95800 2000 -0 7.948676 7.5271224 6.5519533 - 95900 2000 -0 7.9486643 7.5271161 6.55196 - 96000 2000 -0 7.9486496 7.527113 6.5519611 - 96100 2000 -0 7.9486322 7.5271138 6.5519551 - 96200 2000 -0 7.9486132 7.5271189 6.5519417 - 96300 2000 -0 7.9485937 7.5271279 6.5519214 - 96400 2000 -0 7.948575 7.5271401 6.5518957 - 96500 2000 -0 7.9485584 7.5271543 6.5518672 - 96600 2000 -0 7.9485447 7.5271695 6.5518384 - 96700 2000 -0 7.9485343 7.5271845 6.5518111 - 96800 2000 -0 7.948527 7.5271983 6.5517871 - 96900 2000 -0 7.9485224 7.5272105 6.5517671 - 97000 2000 -0 7.9485199 7.5272206 6.551751 - 97100 2000 -0 7.9485188 7.5272285 6.5517387 - 97200 2000 -0 7.9485186 7.5272343 6.5517298 - 97300 2000 -0 7.9485188 7.5272381 6.5517238 - 97400 2000 -0 7.9485191 7.52724 6.5517202 - 97500 2000 -0 7.9485192 7.5272402 6.5517188 - 97600 2000 -0 7.9485191 7.5272387 6.5517194 - 97700 2000 -0 7.9485187 7.5272354 6.551722 - 97800 2000 -0 7.9485181 7.5272305 6.5517267 - 97900 2000 -0 7.9485176 7.5272237 6.5517339 - 98000 2000 -0 7.9485176 7.5272149 6.5517439 - 98100 2000 -0 7.9485184 7.5272041 6.5517572 - 98200 2000 -0 7.9485207 7.5271913 6.5517744 - 98300 2000 -0 7.9485251 7.5271764 6.5517956 - 98400 2000 -0 7.9485322 7.52716 6.5518207 - 98500 2000 -0 7.9485424 7.5271426 6.5518489 - 98600 2000 -0 7.948556 7.527125 6.5518789 - 98700 2000 -0 7.9485724 7.5271084 6.5519086 - 98800 2000 -0 7.948591 7.5270939 6.5519354 - 98900 2000 -0 7.9486105 7.5270826 6.551957 - 99000 2000 -0 7.9486296 7.5270752 6.5519718 - 99100 2000 -0 7.9486469 7.5270719 6.5519792 - 99200 2000 -0 7.9486615 7.5270725 6.5519795 - 99300 2000 -0 7.9486732 7.5270763 6.5519743 - 99400 2000 -0 7.9486818 7.5270822 6.5519652 - 99500 2000 -0 7.9486877 7.5270895 6.551954 - 99600 2000 -0 7.9486913 7.527097 6.5519424 - 99700 2000 -0 7.9486933 7.5271042 6.5519313 - 99800 2000 -0 7.9486941 7.5271104 6.5519215 - 99900 2000 -0 7.9486942 7.5271152 6.5519136 - 100000 2000 -0 7.9486939 7.5271185 6.5519079 -Loop time of 92.4328 on 1 procs for 100000 steps with 2000 atoms - -Performance: 93473.341 tau/day, 1081.867 timesteps/s, 2.164 Matom-step/s -92.5% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 64.102 | 64.102 | 64.102 | 0.0 | 69.35 -Neigh | 2.666 | 2.666 | 2.666 | 0.0 | 2.88 -Comm | 1.205 | 1.205 | 1.205 | 0.0 | 1.30 -Output | 6.6387 | 6.6387 | 6.6387 | 0.0 | 7.18 -Modify | 16.945 | 16.945 | 16.945 | 0.0 | 18.33 -Other | | 0.8768 | | | 0.95 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 494 ave 494 max 494 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9635 ave 9635 max 9635 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9635 -Ave neighs/atom = 4.8175 -Neighbor list builds = 3285 -Dangerous builds = 0 - -Total wall time: 0:01:32 diff --git a/examples/granular/log.28Mar23.pour.heat.g++.4 b/examples/granular/log.28Mar23.pour.heat.g++.4 deleted file mode 100644 index 5cdf89d255..0000000000 --- a/examples/granular/log.28Mar23.pour.heat.g++.4 +++ /dev/null @@ -1,1167 +0,0 @@ -LAMMPS (28 Mar 2023 - Development) -# pour one types of particles into cylinder and oscillate -# temperature of the bottom plate - -variable name string heat_plate - -atom_style sphere -units lj - -############################################### -# Geometry-related parameters -############################################### - -variable boxx equal 10 -variable boxy equal 10 -variable boxz equal 50 - -variable drum_rad equal ${boxx}*0.5 -variable drum_rad equal 10*0.5 -variable drum_height equal 30 - -variable xc equal 0.5*${boxx} -variable xc equal 0.5*10 -variable yc equal 0.5*${boxx} -variable yc equal 0.5*10 -variable zc equal 0.5*${boxz} -variable zc equal 0.5*50 - -############################################### -# Particle-related parameters -############################################### -variable rlo equal 0.25 -variable rhi equal 0.5 -variable dlo equal 2.0*${rlo} -variable dlo equal 2.0*0.25 -variable dhi equal 2.0*${rhi} -variable dhi equal 2.0*0.5 - -variable cyl_rad_inner equal ${drum_rad}-1.1*${rhi} -variable cyl_rad_inner equal 5-1.1*${rhi} -variable cyl_rad_inner equal 5-1.1*0.5 - -variable dens equal 1.0 - -variable skin equal 0.4*${rhi} -variable skin equal 0.4*0.5 - -############# -processors * * 1 -region boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz} -region boxreg block 0 10 0 ${boxy} 0 ${boxz} -region boxreg block 0 10 0 10 0 ${boxz} -region boxreg block 0 10 0 10 0 50 -create_box 2 boxreg -Created orthogonal box = (0 0 0) to (10 10 50) - 2 by 2 by 1 MPI processor grid -change_box all boundary p p f -Changing box ... - -pair_style granular -pair_coeff * * hertz/material 1e5 0.2 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 - -region curved_wall cylinder z ${xc} ${yc} ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 ${yc} ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 5 ${drum_rad} 0 ${drum_height} side in -region curved_wall cylinder z 5 5 5 0 ${drum_height} side in -region curved_wall cylinder z 5 5 5 0 30 side in -region bottom_wall plane ${xc} ${yc} 0 0 0 1 side in -region bottom_wall plane 5 ${yc} 0 0 0 1 side in -region bottom_wall plane 5 5 0 0 0 1 side in - -region insreg cylinder z ${xc} ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 ${yc} ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 5 ${cyl_rad_inner} ${drum_height} ${boxz} -region insreg cylinder z 5 5 4.45 ${drum_height} ${boxz} -region insreg cylinder z 5 5 4.45 30 ${boxz} -region insreg cylinder z 5 5 4.45 30 50 - -fix 0 all property/atom temperature heatflow -WARNING: Fix property/atom mol, charge, rmass, temperature, or heatflow w/out ghost communication (../fix_property_atom.cpp:194) -fix 1 all balance 100 1.0 shift xy 5 1.1 -fix 2 all nve/sphere -fix 3 all heat/flow constant 1.0 -fix grav all gravity 10 vector 0 0 -1 -fix ins1 all pour 1000 1 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 ${dens} -fix ins1 all pour 1000 1 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 594 every 400 steps, 1000 by step 401 -fix ins2 all pour 1000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 ${dhi} dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens ${dens} ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 ${dens} -fix ins2 all pour 1000 2 1234 region insreg diam range 0.5 1 dens 1 1 -Particle insertion: 594 every 400 steps, 1000 by step 401 - -comm_modify vel yes - -neighbor ${skin} bin -neighbor 0.2 bin -neigh_modify delay 0 every 1 check yes - -variable oscillate equal 1.0*sin(step*0.0001) - -fix 4 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region curved_wall -fix 5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji heat area 5.0 region bottom_wall temperature v_oscillate - -thermo_style custom step atoms ke pxx pyy pzz -thermo_modify lost warn -thermo 100 - -timestep 0.001 - -#dump 1 all custom 1000 ${name}.dump id type radius mass x y z temperature heatflow - -run 100000 -Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update: every = 1 steps, delay = 0 steps, check = yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.2 - ghost atom cutoff = 1.2 - binsize = 0.6, bins = 17 17 84 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair granular, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.847 | 5.847 | 5.847 Mbytes - Step Atoms KinEng Pxx Pyy Pzz - 0 0 -0 0 0 0 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 100 536 -0 0 0 7.4220499 - 200 536 -0 0 0 10.753096 - 300 536 -0 0 0 13.500241 - 400 536 -0 0 0 18.036636 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 500 903 -0 0 0 25.955524 - 600 903 -0 0 0 32.116907 - 700 903 -0 0.03620165 0.033499977 32.179357 - 800 903 -0 0.2106713 0.26431108 36.206318 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 900 1265 -0 0.2667335 0.20266671 44.177757 - 1000 1265 -0 0.51829265 0.67739212 49.904079 - 1100 1265 -0 0.87525564 0.6604066 53.13465 - 1200 1265 -0 0.8016023 0.82120199 54.27487 -WARNING: Fewer insertions than requested (../fix_pour.cpp:681) - 1300 1618 -0 1.0922969 1.2299526 61.033455 - 1400 1618 -0 3.4739827 3.2058732 60.989867 - 1500 1618 -0 2.952107 2.7920855 61.208615 - 1600 1618 -0 3.4540208 3.5863396 62.262722 - 1700 2000 -0 3.8875418 4.0835421 69.087737 - 1800 2000 -0 4.1780246 5.0584026 70.734293 - 1900 2000 -0 4.5873576 4.7767119 76.481264 - 2000 2000 -0 7.1355414 6.9027373 76.136305 - 2100 2000 -0 7.3292721 6.9457021 74.022659 - 2200 2000 -0 9.1771132 9.0399042 72.911506 - 2300 2000 -0 9.5743887 10.359952 70.996904 - 2400 2000 -0 12.1002 12.023765 68.246157 - 2500 2000 -0 10.68678 11.126488 59.337387 - 2600 2000 -0 10.444117 10.845713 57.115639 - 2700 2000 -0 12.012219 11.766618 56.397063 - 2800 2000 -0 12.987283 13.30882 55.411279 - 2900 2000 -0 11.55722 12.213726 48.690822 - 3000 2000 -0 11.124576 11.369397 43.425073 - 3100 2000 -0 12.54896 12.507632 45.15522 - 3200 2000 -0 13.119307 13.345554 41.469993 - 3300 2000 -0 12.07449 11.769699 32.849662 - 3400 2000 -0 11.409224 11.606583 28.228622 - 3500 2000 -0 13.30178 13.057278 28.120788 - 3600 2000 -0 12.362318 12.451842 22.030785 - 3700 2000 -0 10.065639 10.350313 14.404919 - 3800 2000 -0 9.2215449 9.4216178 10.78298 - 3900 2000 -0 9.1484555 9.2548793 9.4609704 - 4000 2000 -0 8.7679202 8.7720055 7.9592505 - 4100 2000 -0 7.9639161 8.0843783 6.2748484 - 4200 2000 -0 7.4475613 7.662972 5.7240274 - 4300 2000 -0 7.3834943 7.5643205 5.8884721 - 4400 2000 -0 7.5767328 7.7567295 6.4335134 - 4500 2000 -0 7.6350768 7.7802709 6.5220595 - 4600 2000 -0 7.5680597 7.7360764 6.2252142 - 4700 2000 -0 7.5455586 7.7200666 6.1870466 - 4800 2000 -0 7.5889323 7.7502568 6.3364001 - 4900 2000 -0 7.5976185 7.7506557 6.3511631 - 5000 2000 -0 7.5729575 7.7396108 6.226979 - 5100 2000 -0 7.5828423 7.7333361 6.2543182 - 5200 2000 -0 7.5997211 7.7682298 6.3300795 - 5300 2000 -0 7.5951405 7.7598744 6.3224087 - 5400 2000 -0 7.5703525 7.7452048 6.2321318 - 5500 2000 -0 7.5893936 7.7516359 6.2777047 - 5600 2000 -0 7.596363 7.7645306 6.3388976 - 5700 2000 -0 7.5889409 7.7570078 6.2848334 - 5800 2000 -0 7.5820271 7.7456337 6.2569579 - 5900 2000 -0 7.5946475 7.7646155 6.3117599 - 6000 2000 -0 7.5979789 7.7656429 6.3160667 - 6100 2000 -0 7.586255 7.7584393 6.2682341 - 6200 2000 -0 7.5860817 7.7574904 6.2792591 - 6300 2000 -0 7.5952765 7.7646058 6.3189922 - 6400 2000 -0 7.5996199 7.7770424 6.2986723 - 6500 2000 -0 7.5902888 7.7688566 6.2761571 - 6600 2000 -0 7.5950388 7.76863 6.2895943 - 6700 2000 -0 7.5966236 7.7691368 6.302048 - 6800 2000 -0 7.5939532 7.7641262 6.2726096 - 6900 2000 -0 7.5951993 7.7682327 6.2895245 - 7000 2000 -0 7.6023185 7.7697092 6.3080702 - 7100 2000 -0 7.5960578 7.7674031 6.2848334 - 7200 2000 -0 7.5982345 7.7654466 6.2788045 - 7300 2000 -0 7.6023187 7.7710769 6.3041624 - 7400 2000 -0 7.5974296 7.7673886 6.283173 - 7500 2000 -0 7.5973168 7.7670675 6.2788593 - 7600 2000 -0 7.5996473 7.7703847 6.2996016 - 7700 2000 -0 7.5973523 7.7680426 6.2917276 - 7800 2000 -0 7.5955633 7.7663282 6.2774422 - 7900 2000 -0 7.596774 7.7680408 6.2913039 - 8000 2000 -0 7.5990211 7.7682504 6.2971218 - 8100 2000 -0 7.5969667 7.7674553 6.2827596 - 8200 2000 -0 7.5968217 7.768405 6.2864438 - 8300 2000 -0 7.6003301 7.7675972 6.2968783 - 8400 2000 -0 7.5968968 7.7675447 6.2851363 - 8500 2000 -0 7.5964945 7.7664669 6.2821348 - 8600 2000 -0 7.59847 7.7686981 6.2935599 - 8700 2000 -0 7.5973531 7.7680237 6.2892401 - 8800 2000 -0 7.5962388 7.7660642 6.2824211 - 8900 2000 -0 7.5974758 7.7679467 6.2894374 - 9000 2000 -0 7.5980837 7.7680794 6.2922818 - 9100 2000 -0 7.5964734 7.766756 6.2837584 - 9200 2000 -0 7.5970307 7.7673294 6.2867417 - 9300 2000 -0 7.5979654 7.7680887 6.2924025 - 9400 2000 -0 7.5968814 7.7671306 6.2861078 - 9500 2000 -0 7.5967607 7.7670542 6.2853516 - 9600 2000 -0 7.5978051 7.7679583 6.2911802 - 9700 2000 -0 7.597238 7.767496 6.2880951 - 9800 2000 -0 7.596697 7.7670074 6.2853135 - 9900 2000 -0 7.5974854 7.7676519 6.2894109 - 10000 2000 -0 7.5974415 7.7676866 6.2894089 - 10100 2000 -0 7.5968332 7.7671611 6.2858705 - 10200 2000 -0 7.5971895 7.7673771 6.2881001 - 10300 2000 -0 7.5974344 7.7675998 6.2897713 - 10400 2000 -0 7.5969756 7.767279 6.2867879 - 10500 2000 -0 7.5970506 7.7672894 6.2872789 - 10600 2000 -0 7.5973817 7.7675529 6.2895398 - 10700 2000 -0 7.597085 7.7673281 6.2876393 - 10800 2000 -0 7.5969757 7.7672429 6.2869852 - 10900 2000 -0 7.5973016 7.7675261 6.2890364 - 11000 2000 -0 7.5971776 7.7674059 6.2882417 - 11100 2000 -0 7.596955 7.7672303 6.2870489 - 11200 2000 -0 7.5971842 7.7674346 6.288507 - 11300 2000 -0 7.5972149 7.7674441 6.2885796 - 11400 2000 -0 7.5969922 7.7672746 6.2872884 - 11500 2000 -0 7.5970948 7.7673717 6.2880589 - 11600 2000 -0 7.5971991 7.7674426 6.2886788 - 11700 2000 -0 7.5970217 7.7673051 6.2876396 - 11800 2000 -0 7.5970385 7.767356 6.2877736 - 11900 2000 -0 7.5971592 7.7674896 6.2885954 - 12000 2000 -0 7.5970437 7.7673831 6.2879896 - 12100 2000 -0 7.5969799 7.7673414 6.2876892 - 12200 2000 -0 7.597104 7.7674691 6.2883867 - 12300 2000 -0 7.5970688 7.7674421 6.2882073 - 12400 2000 -0 7.5969667 7.7673544 6.2877266 - 12500 2000 -0 7.5970342 7.7674299 6.2881961 - 12600 2000 -0 7.5970575 7.7674563 6.2883162 - 12700 2000 -0 7.5969702 7.7673919 6.2878499 - 12800 2000 -0 7.5969875 7.7674105 6.2880279 - 12900 2000 -0 7.5970261 7.7674542 6.2883236 - 13000 2000 -0 7.5969638 7.7674093 6.2880003 - 13100 2000 -0 7.5969523 7.7674055 6.2879583 - 13200 2000 -0 7.5969948 7.7674543 6.2882605 - 13300 2000 -0 7.5969671 7.7674324 6.2881167 - 13400 2000 -0 7.5969481 7.7674096 6.2879707 - 13500 2000 -0 7.5969704 7.7674472 6.2881927 - 13600 2000 -0 7.5969604 7.7674502 6.2881801 - 13700 2000 -0 7.5969111 7.7674226 6.2880031 - 13800 2000 -0 7.5969206 7.7674314 6.288133 - 13900 2000 -0 7.5969259 7.7674429 6.2882037 - 14000 2000 -0 7.5968972 7.7674314 6.2880579 - 14100 2000 -0 7.5968963 7.7674369 6.2880968 - 14200 2000 -0 7.5969042 7.7674469 6.2882024 - 14300 2000 -0 7.5968803 7.7674344 6.2881112 - 14400 2000 -0 7.59687 7.7674353 6.2880896 - 14500 2000 -0 7.5968808 7.7674514 6.2881879 - 14600 2000 -0 7.5968666 7.7674452 6.28815 - 14700 2000 -0 7.5968485 7.7674368 6.2880988 - 14800 2000 -0 7.5968535 7.767448 6.2881738 - 14900 2000 -0 7.5968474 7.7674514 6.2881775 - 15000 2000 -0 7.5968308 7.7674448 6.2881173 - 15100 2000 -0 7.5968288 7.7674504 6.2881599 - 15200 2000 -0 7.5968259 7.7674545 6.2881943 - 15300 2000 -0 7.5968096 7.7674493 6.2881446 - 15400 2000 -0 7.5968036 7.7674548 6.2881534 - 15500 2000 -0 7.5968025 7.7674625 6.2881974 - 15600 2000 -0 7.5967877 7.7674575 6.2881698 - 15700 2000 -0 7.5967763 7.7674574 6.2881574 - 15800 2000 -0 7.5967748 7.7674674 6.2881956 - 15900 2000 -0 7.5967648 7.7674695 6.2881883 - 16000 2000 -0 7.5967506 7.7674666 6.2881665 - 16100 2000 -0 7.5967447 7.7674721 6.2881929 - 16200 2000 -0 7.596737 7.7674775 6.2882018 - 16300 2000 -0 7.596724 7.7674779 6.2881798 - 16400 2000 -0 7.5967156 7.7674817 6.2881911 - 16500 2000 -0 7.5967078 7.7674863 6.2882086 - 16600 2000 -0 7.5966952 7.7674871 6.288195 - 16700 2000 -0 7.5966855 7.7674905 6.288195 - 16800 2000 -0 7.5966849 7.7675018 6.2882111 - 16900 2000 -0 7.5966659 7.767499 6.2882084 - 17000 2000 -0 7.5966553 7.7674989 6.288203 - 17100 2000 -0 7.5966481 7.7675039 6.288216 - 17200 2000 -0 7.5966391 7.7675079 6.2882174 - 17300 2000 -0 7.5966284 7.7675095 6.2882114 - 17400 2000 -0 7.5966197 7.7675124 6.2882207 - 17500 2000 -0 7.5966116 7.7675184 6.2882274 - 17600 2000 -0 7.5966015 7.7675179 6.2882213 - 17700 2000 -0 7.596598 7.7675217 6.2882271 - 17800 2000 -0 7.5965839 7.7675249 6.2882319 - 17900 2000 -0 7.5965764 7.7675277 6.2882321 - 18000 2000 -0 7.5965694 7.7675324 6.2882345 - 18100 2000 -0 7.5965606 7.7675381 6.288242 - 18200 2000 -0 7.5965529 7.7675402 6.2882446 - 18300 2000 -0 7.5965448 7.7675416 6.2882447 - 18400 2000 -0 7.5965376 7.7675437 6.2882479 - 18500 2000 -0 7.5965312 7.7675449 6.2882502 - 18600 2000 -0 7.5965234 7.7675465 6.2882488 - 18700 2000 -0 7.5965164 7.7675489 6.2882532 - 18800 2000 -0 7.5965092 7.7675524 6.2882585 - 18900 2000 -0 7.5965015 7.7675553 6.2882605 - 19000 2000 -0 7.5964943 7.7675579 6.288263 - 19100 2000 -0 7.5964874 7.7675604 6.2882669 - 19200 2000 -0 7.59648 7.7675614 6.2882681 - 19300 2000 -0 7.5964723 7.7675626 6.2882686 - 19400 2000 -0 7.596465 7.7675656 6.2882725 - 19500 2000 -0 7.5964572 7.7675691 6.2882763 - 19600 2000 -0 7.5964488 7.767572 6.2882784 - 19700 2000 -0 7.5964406 7.7675747 6.2882815 - 19800 2000 -0 7.5964328 7.7675771 6.2882844 - 19900 2000 -0 7.5964247 7.7675792 6.288285 - 20000 2000 -0 7.5964164 7.7675815 6.2882866 - 20100 2000 -0 7.5964079 7.7675846 6.28829 - 20200 2000 -0 7.596399 7.7675881 6.2882925 - 20300 2000 -0 7.5963909 7.7675919 6.2882955 - 20400 2000 -0 7.5963809 7.7675953 6.2882972 - 20500 2000 -0 7.5963752 7.7676011 6.2883018 - 20600 2000 -0 7.5963619 7.7676092 6.2883037 - 20700 2000 -0 7.5963522 7.767611 6.2883069 - 20800 2000 -0 7.5963411 7.7676172 6.28831 - 20900 2000 -0 7.5963304 7.7676213 6.2883118 - 21000 2000 -0 7.5963203 7.767625 6.2883148 - 21100 2000 -0 7.5963105 7.7676285 6.2883181 - 21200 2000 -0 7.5963007 7.7676317 6.2883195 - 21300 2000 -0 7.5962911 7.7676349 6.2883215 - 21400 2000 -0 7.5962816 7.7676382 6.2883246 - 21500 2000 -0 7.5962731 7.7676543 6.288331 - 21600 2000 -0 7.5962632 7.7676583 6.2883332 - 21700 2000 -0 7.5962548 7.767661 6.2883366 - 21800 2000 -0 7.5962459 7.7676634 6.2883395 - 21900 2000 -0 7.5962373 7.7676655 6.2883415 - 22000 2000 -0 7.5962319 7.7676679 6.2883449 - 22100 2000 -0 7.5962209 7.7676703 6.2883465 - 22200 2000 -0 7.5962128 7.7676725 6.2883506 - 22300 2000 -0 7.5962054 7.7676747 6.2883528 - 22400 2000 -0 7.5961978 7.7676768 6.2883553 - 22500 2000 -0 7.5961903 7.7676789 6.288359 - 22600 2000 -0 7.596183 7.7676807 6.2883613 - 22700 2000 -0 7.5961756 7.7676824 6.288363 - 22800 2000 -0 7.5961685 7.7676843 6.2883669 - 22900 2000 -0 7.5961616 7.7676859 6.2883701 - 23000 2000 -0 7.5961555 7.7676881 6.2883726 - 23100 2000 -0 7.5961478 7.7676894 6.2883761 - 23200 2000 -0 7.5961408 7.7676905 6.2883794 - 23300 2000 -0 7.5961337 7.7676917 6.2883816 - 23400 2000 -0 7.5961266 7.7676931 6.2883848 - 23500 2000 -0 7.5961196 7.7676947 6.2883884 - 23600 2000 -0 7.5961122 7.7676962 6.2883911 - 23700 2000 -0 7.5961047 7.7676979 6.2883942 - 23800 2000 -0 7.5960972 7.7676997 6.2883977 - 23900 2000 -0 7.5960894 7.7677015 6.2884004 - 24000 2000 -0 7.5960814 7.7677033 6.288403 - 24100 2000 -0 7.5960734 7.7677054 6.2884061 - 24200 2000 -0 7.5960651 7.7677076 6.2884089 - 24300 2000 -0 7.5960576 7.76771 6.2884124 - 24400 2000 -0 7.5960487 7.7677127 6.288415 - 24500 2000 -0 7.596039 7.7677152 6.2884169 - 24600 2000 -0 7.59603 7.7677178 6.2884192 - 24700 2000 -0 7.5960208 7.7677205 6.2884216 - 24800 2000 -0 7.5960115 7.7677234 6.2884242 - 24900 2000 -0 7.5960021 7.7677264 6.2884266 - 25000 2000 -0 7.5959926 7.7677293 6.288429 - 25100 2000 -0 7.595983 7.7677323 6.2884316 - 25200 2000 -0 7.5959735 7.7677352 6.2884341 - 25300 2000 -0 7.5959639 7.7677381 6.2884365 - 25400 2000 -0 7.5959544 7.7677409 6.2884391 - 25500 2000 -0 7.5959449 7.7677437 6.2884418 - 25600 2000 -0 7.5959355 7.7677464 6.2884444 - 25700 2000 -0 7.5959262 7.7677491 6.2884471 - 25800 2000 -0 7.5959171 7.7677518 6.2884498 - 25900 2000 -0 7.5959081 7.7677543 6.2884525 - 26000 2000 -0 7.5958993 7.7677567 6.2884551 - 26100 2000 -0 7.5958907 7.7677591 6.2884578 - 26200 2000 -0 7.595883 7.7677616 6.2884607 - 26300 2000 -0 7.5958752 7.7677633 6.2884628 - 26400 2000 -0 7.5958661 7.7677658 6.288466 - 26500 2000 -0 7.5958577 7.7677683 6.2884697 - 26600 2000 -0 7.5958499 7.7677701 6.2884712 - 26700 2000 -0 7.5958424 7.767772 6.2884735 - 26800 2000 -0 7.5958352 7.7677742 6.2884777 - 26900 2000 -0 7.5958278 7.767776 6.2884798 - 27000 2000 -0 7.5958205 7.7677777 6.2884817 - 27100 2000 -0 7.5958171 7.7677861 6.2884867 - 27200 2000 -0 7.5958058 7.767782 6.2884877 - 27300 2000 -0 7.5957995 7.767783 6.2884897 - 27400 2000 -0 7.5957928 7.7677845 6.2884941 - 27500 2000 -0 7.5957858 7.7677862 6.2884971 - 27600 2000 -0 7.5957786 7.7677876 6.2884991 - 27700 2000 -0 7.5957716 7.7677894 6.2885028 - 27800 2000 -0 7.5957644 7.7677911 6.2885058 - 27900 2000 -0 7.595757 7.7677927 6.2885082 - 28000 2000 -0 7.5957496 7.7677945 6.2885114 - 28100 2000 -0 7.5957421 7.7677965 6.2885146 - 28200 2000 -0 7.5957342 7.7677984 6.288517 - 28300 2000 -0 7.5957263 7.7678006 6.2885197 - 28400 2000 -0 7.5957182 7.7678029 6.2885227 - 28500 2000 -0 7.5957098 7.7678053 6.2885251 - 28600 2000 -0 7.595701 7.7678109 6.2885275 - 28700 2000 -0 7.5956927 7.7678104 6.2885301 - 28800 2000 -0 7.5956839 7.7678133 6.2885325 - 28900 2000 -0 7.5956749 7.7678161 6.2885345 - 29000 2000 -0 7.5956658 7.7678191 6.2885369 - 29100 2000 -0 7.5956566 7.7678222 6.2885392 - 29200 2000 -0 7.5956473 7.7678253 6.2885412 - 29300 2000 -0 7.5956379 7.7678284 6.2885434 - 29400 2000 -0 7.5956285 7.7678315 6.2885458 - 29500 2000 -0 7.595619 7.7678346 6.288548 - 29600 2000 -0 7.5956096 7.7678376 6.2885502 - 29700 2000 -0 7.5956004 7.7678407 6.2885528 - 29800 2000 -0 7.5955908 7.7678436 6.2885551 - 29900 2000 -0 7.5955816 7.7678465 6.2885573 - 30000 2000 -0 7.5955725 7.7678494 6.2885598 - 30100 2000 -0 7.5955635 7.7678522 6.2885623 - 30200 2000 -0 7.5955547 7.7678548 6.2885646 - 30300 2000 -0 7.5955461 7.7678575 6.2885671 - 30400 2000 -0 7.5955377 7.7678601 6.2885696 - 30500 2000 -0 7.5955317 7.7678632 6.288572 - 30600 2000 -0 7.5955209 7.7678646 6.2885732 - 30700 2000 -0 7.5955138 7.7678673 6.2885773 - 30800 2000 -0 7.5955057 7.7678698 6.2885802 - 30900 2000 -0 7.5954978 7.7678719 6.2885813 - 31000 2000 -0 7.5954905 7.7678739 6.2885838 - 31100 2000 -0 7.5954836 7.7678764 6.2885876 - 31200 2000 -0 7.5954763 7.7678782 6.2885891 - 31300 2000 -0 7.5954742 7.7678842 6.2885893 - 31400 2000 -0 7.5954635 7.7678813 6.2885963 - 31500 2000 -0 7.5954662 7.7678813 6.2885978 - 31600 2000 -0 7.5954651 7.767881 6.2885992 - 31700 2000 -0 7.5954652 7.7678813 6.2886059 - 31800 2000 -0 7.5954642 7.7678815 6.2886093 - 31900 2000 -0 7.5954627 7.7678812 6.2886098 - 32000 2000 -0 7.5954619 7.7678816 6.2886155 - 32100 2000 -0 7.5954608 7.767882 6.2886199 - 32200 2000 -0 7.595459 7.7678819 6.2886212 - 32300 2000 -0 7.5954574 7.7678824 6.2886253 - 32400 2000 -0 7.5954559 7.7678831 6.2886303 - 32500 2000 -0 7.5954537 7.7678834 6.2886323 - 32600 2000 -0 7.5954513 7.7678841 6.2886353 - 32700 2000 -0 7.5954491 7.767885 6.2886401 - 32800 2000 -0 7.5954463 7.7678859 6.2886428 - 32900 2000 -0 7.5954433 7.7678868 6.2886452 - 33000 2000 -0 7.5954404 7.7678881 6.2886494 - 33100 2000 -0 7.5954372 7.7678894 6.2886525 - 33200 2000 -0 7.5954345 7.76789 6.2886545 - 33300 2000 -0 7.5954319 7.7678907 6.2886578 - 33400 2000 -0 7.5954292 7.7678914 6.2886612 - 33500 2000 -0 7.5954262 7.767892 6.2886633 - 33600 2000 -0 7.5954232 7.7678927 6.2886662 - 33700 2000 -0 7.5954203 7.7678934 6.2886697 - 33800 2000 -0 7.5954172 7.767894 6.2886722 - 33900 2000 -0 7.5954142 7.7678945 6.288675 - 34000 2000 -0 7.5954113 7.7678952 6.2886785 - 34100 2000 -0 7.5954084 7.7678956 6.2886814 - 34200 2000 -0 7.5954056 7.767896 6.2886841 - 34300 2000 -0 7.595403 7.7678964 6.2886876 - 34400 2000 -0 7.5954005 7.7678968 6.2886908 - 34500 2000 -0 7.5953981 7.7678969 6.2886936 - 34600 2000 -0 7.5953959 7.7678971 6.2886968 - 34700 2000 -0 7.595394 7.7678972 6.2887001 - 34800 2000 -0 7.5953953 7.7678972 6.288703 - 34900 2000 -0 7.5953889 7.767897 6.2887047 - 35000 2000 -0 7.5953908 7.7678971 6.2887098 - 35100 2000 -0 7.5953877 7.7678973 6.2887122 - 35200 2000 -0 7.5953867 7.767897 6.2887144 - 35300 2000 -0 7.5953863 7.7678962 6.2887182 - 35400 2000 -0 7.5953856 7.7678962 6.288722 - 35500 2000 -0 7.5953849 7.7678956 6.2887237 - 35600 2000 -0 7.5953846 7.7678951 6.2887271 - 35700 2000 -0 7.5953844 7.7678947 6.2887309 - 35800 2000 -0 7.595384 7.767894 6.2887334 - 35900 2000 -0 7.5953838 7.7678933 6.2887362 - 36000 2000 -0 7.5953837 7.7678927 6.2887403 - 36100 2000 -0 7.5953834 7.767892 6.2887432 - 36200 2000 -0 7.595383 7.7678913 6.2887459 - 36300 2000 -0 7.5953827 7.7678907 6.2887498 - 36400 2000 -0 7.5953821 7.7678901 6.2887531 - 36500 2000 -0 7.5953814 7.7678895 6.2887558 - 36600 2000 -0 7.5953807 7.7678891 6.2887593 - 36700 2000 -0 7.5953797 7.7678887 6.2887627 - 36800 2000 -0 7.5953785 7.7678884 6.2887654 - 36900 2000 -0 7.5953772 7.7678883 6.2887685 - 37000 2000 -0 7.5953757 7.7678884 6.2887717 - 37100 2000 -0 7.595374 7.7678885 6.2887744 - 37200 2000 -0 7.5953721 7.7678888 6.2887771 - 37300 2000 -0 7.59537 7.7678892 6.2887801 - 37400 2000 -0 7.5953678 7.7678897 6.2887827 - 37500 2000 -0 7.5953654 7.7678903 6.2887851 - 37600 2000 -0 7.5953628 7.767891 6.2887879 - 37700 2000 -0 7.5953602 7.7678918 6.2887906 - 37800 2000 -0 7.5953571 7.7678929 6.288793 - 37900 2000 -0 7.5953545 7.7678935 6.2887957 - 38000 2000 -0 7.5953517 7.7678941 6.2887985 - 38100 2000 -0 7.5953488 7.7678949 6.2888011 - 38200 2000 -0 7.5953459 7.7678956 6.2888037 - 38300 2000 -0 7.5953431 7.7678962 6.2888066 - 38400 2000 -0 7.5953404 7.7678969 6.2888094 - 38500 2000 -0 7.5953377 7.7678974 6.2888122 - 38600 2000 -0 7.5953352 7.7678979 6.2888151 - 38700 2000 -0 7.5953328 7.7678983 6.288818 - 38800 2000 -0 7.5953306 7.7678987 6.2888209 - 38900 2000 -0 7.5953285 7.7678991 6.2888238 - 39000 2000 -0 7.5953266 7.7678994 6.2888267 - 39100 2000 -0 7.5953284 7.7678993 6.2888299 - 39200 2000 -0 7.5953221 7.7679002 6.2888311 - 39300 2000 -0 7.5953225 7.7678998 6.2888359 - 39400 2000 -0 7.5953215 7.7678999 6.2888384 - 39500 2000 -0 7.5953234 7.7678996 6.2888401 - 39600 2000 -0 7.5953197 7.7678996 6.2888437 - 39700 2000 -0 7.5953193 7.7678996 6.2888471 - 39800 2000 -0 7.5953187 7.7678992 6.2888486 - 39900 2000 -0 7.5953185 7.7678989 6.2888519 - 40000 2000 -0 7.5953185 7.7678987 6.2888555 - 40100 2000 -0 7.5953171 7.7678976 6.2888576 - 40200 2000 -0 7.595318 7.7678977 6.2888603 - 40300 2000 -0 7.5953181 7.7678973 6.2888642 - 40400 2000 -0 7.5953178 7.7678967 6.2888668 - 40500 2000 -0 7.5953175 7.7678962 6.2888695 - 40600 2000 -0 7.5953174 7.7678958 6.2888733 - 40700 2000 -0 7.5953169 7.7678954 6.2888761 - 40800 2000 -0 7.5953162 7.767895 6.2888787 - 40900 2000 -0 7.5953155 7.7678947 6.288882 - 41000 2000 -0 7.5953147 7.7678946 6.2888851 - 41100 2000 -0 7.5953136 7.7678944 6.2888876 - 41200 2000 -0 7.5953123 7.7678945 6.2888905 - 41300 2000 -0 7.5953109 7.7678948 6.2888936 - 41400 2000 -0 7.5953091 7.7678948 6.2888961 - 41500 2000 -0 7.595307 7.7678943 6.2888989 - 41600 2000 -0 7.5953046 7.7678939 6.2889022 - 41700 2000 -0 7.5953019 7.7678935 6.2889051 - 41800 2000 -0 7.595299 7.7678933 6.2889079 - 41900 2000 -0 7.5952973 7.7678931 6.2889112 - 42000 2000 -0 7.595293 7.7678931 6.2889142 - 42100 2000 -0 7.5952897 7.7678929 6.2889165 - 42200 2000 -0 7.5952864 7.7678928 6.2889198 - 42300 2000 -0 7.5952831 7.7678928 6.288923 - 42400 2000 -0 7.5952797 7.7678926 6.2889256 - 42500 2000 -0 7.5952764 7.7678925 6.2889289 - 42600 2000 -0 7.595274 7.7678914 6.2889322 - 42700 2000 -0 7.5952704 7.7678916 6.2889354 - 42800 2000 -0 7.595267 7.7678911 6.2889384 - 42900 2000 -0 7.5952656 7.7678941 6.2889425 - 43000 2000 -0 7.5952627 7.7678921 6.2889451 - 43100 2000 -0 7.5952594 7.7678889 6.2889481 - 43200 2000 -0 7.5952565 7.7678879 6.2889509 - 43300 2000 -0 7.5952547 7.7678871 6.2889548 - 43400 2000 -0 7.5952557 7.767886 6.2889583 - 43500 2000 -0 7.5952503 7.7678854 6.2889594 - 43600 2000 -0 7.5952493 7.7678839 6.288965 - 43700 2000 -0 7.5952482 7.7678827 6.2889677 - 43800 2000 -0 7.5952467 7.7678813 6.2889694 - 43900 2000 -0 7.5952458 7.7678801 6.2889739 - 44000 2000 -0 7.5952454 7.7678787 6.2889774 - 44100 2000 -0 7.5952449 7.7678768 6.2889786 - 44200 2000 -0 7.5952449 7.7678753 6.2889822 - 44300 2000 -0 7.595245 7.7678737 6.288986 - 44400 2000 -0 7.5952448 7.7678718 6.2889879 - 44500 2000 -0 7.5952448 7.7678699 6.2889908 - 44600 2000 -0 7.595245 7.7678683 6.2889949 - 44700 2000 -0 7.5952448 7.7678663 6.2889974 - 44800 2000 -0 7.5952446 7.7678644 6.289 - 44900 2000 -0 7.595245 7.7678622 6.2890034 - 45000 2000 -0 7.5952444 7.767861 6.2890073 - 45100 2000 -0 7.5952437 7.7678593 6.2890094 - 45200 2000 -0 7.595243 7.7678577 6.2890129 - 45300 2000 -0 7.5952422 7.7678563 6.289016 - 45400 2000 -0 7.5952411 7.7678549 6.2890185 - 45500 2000 -0 7.5952399 7.7678537 6.2890214 - 45600 2000 -0 7.5952386 7.7678526 6.2890245 - 45700 2000 -0 7.595237 7.7678516 6.2890269 - 45800 2000 -0 7.5952352 7.7678508 6.2890295 - 45900 2000 -0 7.5952333 7.7678501 6.2890323 - 46000 2000 -0 7.5952312 7.7678495 6.2890348 - 46100 2000 -0 7.5952289 7.767849 6.289037 - 46200 2000 -0 7.5952265 7.7678486 6.2890397 - 46300 2000 -0 7.595224 7.7678482 6.2890422 - 46400 2000 -0 7.5952213 7.7678478 6.2890445 - 46500 2000 -0 7.5952186 7.7678474 6.2890471 - 46600 2000 -0 7.5952159 7.767847 6.2890498 - 46700 2000 -0 7.5952132 7.7678466 6.2890522 - 46800 2000 -0 7.5952105 7.7678462 6.2890548 - 46900 2000 -0 7.5952078 7.7678457 6.2890576 - 47000 2000 -0 7.5952052 7.767848 6.2890603 - 47100 2000 -0 7.5952028 7.7678445 6.2890629 - 47200 2000 -0 7.5952004 7.7678438 6.2890658 - 47300 2000 -0 7.5951983 7.767843 6.2890684 - 47400 2000 -0 7.5951963 7.7678421 6.289071 - 47500 2000 -0 7.5951945 7.7678412 6.2890739 - 47600 2000 -0 7.5951928 7.7678403 6.2890766 - 47700 2000 -0 7.5951936 7.7678391 6.2890792 - 47800 2000 -0 7.5951902 7.7678383 6.2890813 - 47900 2000 -0 7.5951889 7.7678373 6.2890856 - 48000 2000 -0 7.5951881 7.7678358 6.2890872 - 48100 2000 -0 7.5951873 7.7678344 6.2890892 - 48200 2000 -0 7.595187 7.7678333 6.2890933 - 48300 2000 -0 7.5951866 7.7678318 6.2890956 - 48400 2000 -0 7.5951861 7.7678302 6.2890972 - 48500 2000 -0 7.5951861 7.7678288 6.289101 - 48600 2000 -0 7.5951861 7.7678272 6.289104 - 48700 2000 -0 7.5951858 7.7678254 6.2891058 - 48800 2000 -0 7.5951858 7.7678255 6.2891126 - 48900 2000 -0 7.5951857 7.767822 6.2891123 - 49000 2000 -0 7.5951856 7.7678203 6.2891153 - 49100 2000 -0 7.5951853 7.7678184 6.2891183 - 49200 2000 -0 7.595185 7.7678166 6.289121 - 49300 2000 -0 7.5951845 7.7678149 6.2891242 - 49400 2000 -0 7.595184 7.7678133 6.2891272 - 49500 2000 -0 7.5951831 7.7678116 6.2891298 - 49600 2000 -0 7.5951822 7.7678102 6.2891328 - 49700 2000 -0 7.5951811 7.7678089 6.2891358 - 49800 2000 -0 7.5951797 7.7678076 6.2891384 - 49900 2000 -0 7.5951782 7.7678065 6.2891412 - 50000 2000 -0 7.5951765 7.7678056 6.289144 - 50100 2000 -0 7.5951746 7.7678048 6.2891464 - 50200 2000 -0 7.5951725 7.7678041 6.2891489 - 50300 2000 -0 7.5951703 7.7678035 6.2891515 - 50400 2000 -0 7.5951679 7.767803 6.2891539 - 50500 2000 -0 7.5951653 7.7678025 6.2891563 - 50600 2000 -0 7.5951627 7.7678021 6.2891588 - 50700 2000 -0 7.59516 7.7678018 6.2891612 - 50800 2000 -0 7.5951572 7.7678014 6.2891637 - 50900 2000 -0 7.5951543 7.767801 6.2891662 - 51000 2000 -0 7.5951515 7.7678035 6.2891689 - 51100 2000 -0 7.5951486 7.7678002 6.2891713 - 51200 2000 -0 7.5951459 7.7677995 6.2891739 - 51300 2000 -0 7.5951433 7.7677989 6.2891766 - 51400 2000 -0 7.5951407 7.7677982 6.2891793 - 51500 2000 -0 7.5951383 7.7677975 6.289182 - 51600 2000 -0 7.595136 7.7677966 6.2891847 - 51700 2000 -0 7.5951339 7.7677957 6.2891875 - 51800 2000 -0 7.595132 7.7677948 6.2891902 - 51900 2000 -0 7.5951305 7.7677938 6.289193 - 52000 2000 -0 7.5951299 7.7677923 6.289195 - 52100 2000 -0 7.5951278 7.7677914 6.2891981 - 52200 2000 -0 7.5951262 7.7677905 6.2892017 - 52300 2000 -0 7.5951252 7.767789 6.2892033 - 52400 2000 -0 7.5951244 7.7677876 6.2892055 - 52500 2000 -0 7.595124 7.7677865 6.2892095 - 52600 2000 -0 7.5951234 7.7677849 6.2892116 - 52700 2000 -0 7.5951229 7.7677832 6.2892135 - 52800 2000 -0 7.5951229 7.7677818 6.2892173 - 52900 2000 -0 7.5951227 7.7677801 6.28922 - 53000 2000 -0 7.5951223 7.7677783 6.289222 - 53100 2000 -0 7.5951223 7.7677766 6.2892254 - 53200 2000 -0 7.5951221 7.7677749 6.2892286 - 53300 2000 -0 7.5951218 7.7677731 6.2892308 - 53400 2000 -0 7.5951215 7.7677713 6.289234 - 53500 2000 -0 7.5951213 7.7677724 6.2892375 - 53600 2000 -0 7.5951205 7.7677678 6.2892398 - 53700 2000 -0 7.5951197 7.7677663 6.2892426 - 53800 2000 -0 7.5951189 7.7677649 6.2892459 - 53900 2000 -0 7.5951178 7.7677635 6.2892486 - 54000 2000 -0 7.5951165 7.7677622 6.289251 - 54100 2000 -0 7.5951151 7.7677611 6.289254 - 54200 2000 -0 7.5951135 7.7677602 6.2892567 - 54300 2000 -0 7.5951116 7.7677592 6.2892589 - 54400 2000 -0 7.5951095 7.7677585 6.2892615 - 54500 2000 -0 7.5951073 7.7677579 6.2892641 - 54600 2000 -0 7.5951059 7.7677573 6.2892662 - 54700 2000 -0 7.5951022 7.7677569 6.2892686 - 54800 2000 -0 7.5950995 7.7677565 6.2892711 - 54900 2000 -0 7.5950966 7.7677562 6.2892734 - 55000 2000 -0 7.5950936 7.7677558 6.2892757 - 55100 2000 -0 7.5950906 7.7677555 6.2892782 - 55200 2000 -0 7.5950876 7.7677552 6.2892806 - 55300 2000 -0 7.5950846 7.7677547 6.289283 - 55400 2000 -0 7.5950816 7.7677543 6.2892856 - 55500 2000 -0 7.5950787 7.7677538 6.2892882 - 55600 2000 -0 7.5950758 7.7677532 6.2892907 - 55700 2000 -0 7.5950731 7.7677526 6.2892934 - 55800 2000 -0 7.5950705 7.7677519 6.2892961 - 55900 2000 -0 7.5950681 7.7677511 6.2892987 - 56000 2000 -0 7.5950658 7.7677503 6.2893013 - 56100 2000 -0 7.5950637 7.7677494 6.289304 - 56200 2000 -0 7.5950636 7.7677489 6.2893069 - 56300 2000 -0 7.5950599 7.7677469 6.2893081 - 56400 2000 -0 7.5950591 7.7677461 6.2893121 - 56500 2000 -0 7.5950575 7.7677452 6.2893152 - 56600 2000 -0 7.595056 7.7677438 6.2893165 - 56700 2000 -0 7.5950551 7.7677425 6.2893191 - 56800 2000 -0 7.5950546 7.7677414 6.289323 - 56900 2000 -0 7.5950537 7.7677398 6.2893246 - 57000 2000 -0 7.5950531 7.7677383 6.2893268 - 57100 2000 -0 7.5950528 7.7677369 6.2893306 - 57200 2000 -0 7.5950524 7.7677352 6.289333 - 57300 2000 -0 7.5950519 7.7677334 6.289335 - 57400 2000 -0 7.5950517 7.7677318 6.2893386 - 57500 2000 -0 7.5950513 7.7677302 6.2893415 - 57600 2000 -0 7.5950507 7.7677283 6.2893436 - 57700 2000 -0 7.5950502 7.7677267 6.2893469 - 57800 2000 -0 7.5950496 7.7677251 6.2893501 - 57900 2000 -0 7.5950486 7.7677235 6.2893525 - 58000 2000 -0 7.5950476 7.767722 6.2893554 - 58100 2000 -0 7.5950465 7.7677207 6.2893585 - 58200 2000 -0 7.5950451 7.7677194 6.289361 - 58300 2000 -0 7.5950436 7.7677183 6.2893635 - 58400 2000 -0 7.5950421 7.7677174 6.2893664 - 58500 2000 -0 7.5950402 7.7677166 6.2893688 - 58600 2000 -0 7.5950381 7.7677158 6.289371 - 58700 2000 -0 7.595036 7.7677153 6.2893736 - 58800 2000 -0 7.5950336 7.7677148 6.289376 - 58900 2000 -0 7.595031 7.7677144 6.2893781 - 59000 2000 -0 7.5950283 7.7677141 6.2893804 - 59100 2000 -0 7.5950254 7.7677139 6.2893828 - 59200 2000 -0 7.5950225 7.7677137 6.2893849 - 59300 2000 -0 7.5950194 7.7677135 6.2893872 - 59400 2000 -0 7.5950163 7.7677134 6.2893896 - 59500 2000 -0 7.5950132 7.7677131 6.2893919 - 59600 2000 -0 7.5950101 7.7677129 6.2893942 - 59700 2000 -0 7.595007 7.7677126 6.2893968 - 59800 2000 -0 7.5950047 7.7677123 6.2893992 - 59900 2000 -0 7.5950011 7.7677118 6.2894016 - 60000 2000 -0 7.5949983 7.7677113 6.2894042 - 60100 2000 -0 7.5949956 7.7677107 6.2894068 - 60200 2000 -0 7.5949931 7.7677101 6.2894093 - 60300 2000 -0 7.5949908 7.7677094 6.2894119 - 60400 2000 -0 7.5949886 7.7677087 6.2894145 - 60500 2000 -0 7.5949893 7.7677082 6.2894169 - 60600 2000 -0 7.5949834 7.7677067 6.2894183 - 60700 2000 -0 7.5949837 7.7677058 6.2894226 - 60800 2000 -0 7.5949821 7.767705 6.2894252 - 60900 2000 -0 7.5949805 7.7677038 6.2894264 - 61000 2000 -0 7.5949795 7.7677026 6.2894293 - 61100 2000 -0 7.5949789 7.7677016 6.2894329 - 61200 2000 -0 7.5949779 7.7677001 6.2894343 - 61300 2000 -0 7.5949772 7.7676987 6.2894368 - 61400 2000 -0 7.5949768 7.7676974 6.2894404 - 61500 2000 -0 7.5949762 7.7676959 6.2894425 - 61600 2000 -0 7.5949757 7.7676942 6.2894446 - 61700 2000 -0 7.5949753 7.7676928 6.2894483 - 61800 2000 -0 7.5949748 7.7676912 6.2894509 - 61900 2000 -0 7.5949741 7.7676895 6.289453 - 62000 2000 -0 7.5949735 7.767688 6.2894564 - 62100 2000 -0 7.5949727 7.7676865 6.2894593 - 62200 2000 -0 7.5949717 7.767685 6.2894616 - 62300 2000 -0 7.5949706 7.7676836 6.2894646 - 62400 2000 -0 7.5949694 7.7676824 6.2894676 - 62500 2000 -0 7.5949679 7.7676812 6.2894699 - 62600 2000 -0 7.5949663 7.7676801 6.2894725 - 62700 2000 -0 7.5949645 7.7676792 6.2894754 - 62800 2000 -0 7.5949624 7.7676785 6.2894777 - 62900 2000 -0 7.5949602 7.7676778 6.2894799 - 63000 2000 -0 7.5949578 7.7676773 6.2894825 - 63100 2000 -0 7.5949553 7.7676769 6.2894848 - 63200 2000 -0 7.5949525 7.7676765 6.2894868 - 63300 2000 -0 7.5949496 7.7676763 6.2894892 - 63400 2000 -0 7.5949466 7.7676761 6.2894915 - 63500 2000 -0 7.5949435 7.7676759 6.2894935 - 63600 2000 -0 7.5949404 7.7676757 6.2894957 - 63700 2000 -0 7.5949373 7.7676755 6.2894981 - 63800 2000 -0 7.5949341 7.7676752 6.2895003 - 63900 2000 -0 7.594931 7.7676749 6.2895025 - 64000 2000 -0 7.5949281 7.7676746 6.289505 - 64100 2000 -0 7.5949249 7.7676742 6.2895073 - 64200 2000 -0 7.5949219 7.7676737 6.2895097 - 64300 2000 -0 7.5949191 7.7676731 6.2895122 - 64400 2000 -0 7.5949165 7.7676725 6.2895147 - 64500 2000 -0 7.594914 7.7676718 6.2895171 - 64600 2000 -0 7.5949116 7.7676711 6.2895196 - 64700 2000 -0 7.5949095 7.7676702 6.2895221 - 64800 2000 -0 7.5949105 7.7676688 6.2895247 - 64900 2000 -0 7.5949039 7.767668 6.2895261 - 65000 2000 -0 7.5949041 7.7676665 6.2895306 - 65100 2000 -0 7.5949026 7.7676653 6.2895328 - 65200 2000 -0 7.5949005 7.7676632 6.2895342 - 65300 2000 -0 7.5948956 7.7676549 6.2895391 - 65400 2000 -0 7.5948925 7.7676486 6.2895389 - 65500 2000 -0 7.5948924 7.7676487 6.2895397 - 65600 2000 -0 7.5948923 7.767647 6.289549 - 65700 2000 -0 7.5948909 7.7676452 6.2895471 - 65800 2000 -0 7.5948899 7.7676429 6.289548 - 65900 2000 -0 7.5948899 7.7676418 6.2895556 - 66000 2000 -0 7.5948891 7.7676399 6.2895571 - 66100 2000 -0 7.5948876 7.7676375 6.2895567 - 66200 2000 -0 7.5948874 7.7676361 6.2895627 - 66300 2000 -0 7.5948866 7.7676344 6.2895663 - 66400 2000 -0 7.5948851 7.7676323 6.2895661 - 66500 2000 -0 7.5948842 7.7676308 6.2895704 - 66600 2000 -0 7.5948833 7.7676295 6.2895749 - 66700 2000 -0 7.5948815 7.7676277 6.2895755 - 66800 2000 -0 7.5948799 7.7676263 6.2895782 - 66900 2000 -0 7.5948784 7.7676253 6.2895826 - 67000 2000 -0 7.5948762 7.7676241 6.2895841 - 67100 2000 -0 7.5948739 7.767623 6.2895858 - 67200 2000 -0 7.5948718 7.7676223 6.2895898 - 67300 2000 -0 7.5948692 7.7676216 6.289592 - 67400 2000 -0 7.5948662 7.7676208 6.2895932 - 67500 2000 -0 7.5948635 7.7676203 6.2895964 - 67600 2000 -0 7.5948605 7.7676199 6.2895991 - 67700 2000 -0 7.5948572 7.7676193 6.2896004 - 67800 2000 -0 7.594854 7.767619 6.289603 - 67900 2000 -0 7.5948508 7.7676187 6.2896061 - 68000 2000 -0 7.5948473 7.7676182 6.2896078 - 68100 2000 -0 7.5948438 7.7676178 6.28961 - 68200 2000 -0 7.5948406 7.7676174 6.2896131 - 68300 2000 -0 7.5948372 7.7676168 6.2896153 - 68400 2000 -0 7.5948339 7.7676161 6.2896175 - 68500 2000 -0 7.5948308 7.7676156 6.2896206 - 68600 2000 -0 7.5948278 7.7676148 6.2896232 - 68700 2000 -0 7.5948248 7.767614 6.2896254 - 68800 2000 -0 7.5948221 7.7676131 6.2896283 - 68900 2000 -0 7.5948196 7.7676122 6.2896311 - 69000 2000 -0 7.5948172 7.7676111 6.2896334 - 69100 2000 -0 7.5948182 7.7676099 6.2896363 - 69200 2000 -0 7.5948122 7.7676096 6.2896377 - 69300 2000 -0 7.594811 7.7676081 6.2896421 - 69400 2000 -0 7.5948092 7.767607 6.2896441 - 69500 2000 -0 7.5948073 7.7676059 6.2896459 - 69600 2000 -0 7.5948058 7.7676043 6.2896498 - 69700 2000 -0 7.5948044 7.7676026 6.2896529 - 69800 2000 -0 7.5948029 7.7676005 6.2896547 - 69900 2000 -0 7.5948018 7.7675987 6.2896584 - 70000 2000 -0 7.5948007 7.7675967 6.2896619 - 70100 2000 -0 7.5947995 7.7675945 6.2896642 - 70200 2000 -0 7.5947984 7.7675924 6.2896674 - 70300 2000 -0 7.5947974 7.7675903 6.2896713 - 70400 2000 -0 7.5947962 7.7675881 6.2896739 - 70500 2000 -0 7.594795 7.7675859 6.289677 - 70600 2000 -0 7.5947937 7.7675838 6.2896808 - 70700 2000 -0 7.5947922 7.7675817 6.2896838 - 70800 2000 -0 7.5947906 7.7675796 6.2896868 - 70900 2000 -0 7.5947889 7.7675777 6.2896903 - 71000 2000 -0 7.594787 7.7675758 6.2896935 - 71100 2000 -0 7.5947848 7.7675741 6.2896963 - 71200 2000 -0 7.5947826 7.7675725 6.2896995 - 71300 2000 -0 7.5947801 7.767571 6.2897026 - 71400 2000 -0 7.5947774 7.7675697 6.2897053 - 71500 2000 -0 7.5947745 7.7675684 6.2897081 - 71600 2000 -0 7.5947715 7.7675673 6.2897111 - 71700 2000 -0 7.5947683 7.7675663 6.2897137 - 71800 2000 -0 7.5947648 7.7675654 6.2897162 - 71900 2000 -0 7.5947613 7.7675645 6.2897191 - 72000 2000 -0 7.5947575 7.7675638 6.2897217 - 72100 2000 -0 7.5947535 7.7675631 6.2897242 - 72200 2000 -0 7.5947494 7.7675625 6.289727 - 72300 2000 -0 7.5947453 7.7675618 6.2897298 - 72400 2000 -0 7.594741 7.7675611 6.2897324 - 72500 2000 -0 7.5947368 7.7675604 6.2897352 - 72600 2000 -0 7.5947325 7.7675597 6.2897381 - 72700 2000 -0 7.5947283 7.7675588 6.2897408 - 72800 2000 -0 7.5947242 7.7675578 6.2897437 - 72900 2000 -0 7.5947201 7.7675568 6.2897466 - 73000 2000 -0 7.5947162 7.7675557 6.2897494 - 73100 2000 -0 7.5947122 7.7675546 6.2897523 - 73200 2000 -0 7.5947083 7.7675536 6.2897553 - 73300 2000 -0 7.5947045 7.7675525 6.2897583 - 73400 2000 -0 7.5947035 7.7675515 6.2897613 - 73500 2000 -0 7.5946973 7.767551 6.2897633 - 73600 2000 -0 7.5946939 7.7675499 6.2897681 - 73700 2000 -0 7.5946909 7.7675487 6.2897703 - 73800 2000 -0 7.5946877 7.7675475 6.2897725 - 73900 2000 -0 7.5946849 7.7675465 6.2897768 - 74000 2000 -0 7.5946821 7.7675453 6.2897798 - 74100 2000 -0 7.5946792 7.7675439 6.2897817 - 74200 2000 -0 7.5946768 7.7675427 6.2897857 - 74300 2000 -0 7.5946742 7.7675414 6.2897892 - 74400 2000 -0 7.5946714 7.7675399 6.2897916 - 74500 2000 -0 7.5946688 7.7675385 6.2897951 - 74600 2000 -0 7.5946662 7.7675371 6.2897992 - 74700 2000 -0 7.5946634 7.7675355 6.2898019 - 74800 2000 -0 7.5946605 7.7675341 6.2898052 - 74900 2000 -0 7.5946577 7.7675328 6.2898092 - 75000 2000 -0 7.5946545 7.7675314 6.2898123 - 75100 2000 -0 7.5946512 7.76753 6.2898154 - 75200 2000 -0 7.5946478 7.7675289 6.2898193 - 75300 2000 -0 7.5946442 7.7675278 6.2898225 - 75400 2000 -0 7.5946403 7.7675268 6.2898255 - 75500 2000 -0 7.5946363 7.767526 6.2898289 - 75600 2000 -0 7.5946321 7.7675253 6.2898322 - 75700 2000 -0 7.5946277 7.7675247 6.2898349 - 75800 2000 -0 7.594623 7.7675243 6.2898379 - 75900 2000 -0 7.5946182 7.767524 6.289841 - 76000 2000 -0 7.5946184 7.7675222 6.2898477 - 76100 2000 -0 7.5946168 7.7675198 6.2898534 - 76200 2000 -0 7.5946059 7.7675208 6.2898537 - 76300 2000 -0 7.5945934 7.7675229 6.2898545 - 76400 2000 -0 7.5945858 7.7675222 6.2898578 - 76500 2000 -0 7.594578 7.7675215 6.2898604 - 76600 2000 -0 7.5945704 7.767521 6.289865 - 76700 2000 -0 7.5945627 7.7675205 6.2898692 - 76800 2000 -0 7.5945548 7.7675198 6.2898721 - 76900 2000 -0 7.5945472 7.7675191 6.2898763 - 77000 2000 -0 7.5945397 7.7675184 6.2898809 - 77100 2000 -0 7.5945321 7.7675175 6.2898842 - 77200 2000 -0 7.5945247 7.7675166 6.289888 - 77300 2000 -0 7.5945177 7.7675156 6.2898926 - 77400 2000 -0 7.5945106 7.7675145 6.2898964 - 77500 2000 -0 7.5945037 7.7675133 6.2899 - 77600 2000 -0 7.5944972 7.7675122 6.2899045 - 77700 2000 -0 7.5944924 7.7675106 6.2899081 - 77800 2000 -0 7.5944847 7.7675094 6.2899116 - 77900 2000 -0 7.5944783 7.7675083 6.2899171 - 78000 2000 -0 7.5944725 7.7675065 6.2899202 - 78100 2000 -0 7.5944668 7.7675048 6.2899232 - 78200 2000 -0 7.5944616 7.7675034 6.2899286 - 78300 2000 -0 7.5944563 7.7675016 6.2899324 - 78400 2000 -0 7.5944509 7.7674996 6.2899353 - 78500 2000 -0 7.594446 7.7674978 6.2899402 - 78600 2000 -0 7.5944411 7.7674959 6.2899446 - 78700 2000 -0 7.594436 7.7674938 6.2899477 - 78800 2000 -0 7.5944312 7.7674918 6.2899523 - 78900 2000 -0 7.5944263 7.7674898 6.2899571 - 79000 2000 -0 7.5944211 7.7674876 6.2899606 - 79100 2000 -0 7.594416 7.7674855 6.2899649 - 79200 2000 -0 7.5944109 7.7674835 6.2899697 - 79300 2000 -0 7.5944055 7.7674815 6.2899736 - 79400 2000 -0 7.5944 7.7674795 6.2899776 - 79500 2000 -0 7.5943944 7.7674777 6.2899823 - 79600 2000 -0 7.5943887 7.767476 6.2899864 - 79700 2000 -0 7.5943826 7.7674743 6.2899902 - 79800 2000 -0 7.5943766 7.7674728 6.2899944 - 79900 2000 -0 7.5943703 7.7674715 6.2899985 - 80000 2000 -0 7.5943639 7.7674702 6.2900021 - 80100 2000 -0 7.5943573 7.7674691 6.290006 - 80200 2000 -0 7.5943506 7.7674681 6.2900099 - 80300 2000 -0 7.5943437 7.7674671 6.2900134 - 80400 2000 -0 7.5943367 7.7674662 6.2900171 - 80500 2000 -0 7.5943296 7.7674655 6.2900209 - 80600 2000 -0 7.5943224 7.7674647 6.2900245 - 80700 2000 -0 7.5943151 7.7674639 6.2900281 - 80800 2000 -0 7.5943077 7.7674632 6.290032 - 80900 2000 -0 7.5943001 7.7674623 6.290036 - 81000 2000 -0 7.5942925 7.7674614 6.2900398 - 81100 2000 -0 7.594285 7.7674604 6.2900439 - 81200 2000 -0 7.5942776 7.7674594 6.290048 - 81300 2000 -0 7.5942702 7.7674582 6.290052 - 81400 2000 -0 7.594263 7.767457 6.2900562 - 81500 2000 -0 7.594256 7.7674558 6.2900604 - 81600 2000 -0 7.5942491 7.7674544 6.2900645 - 81700 2000 -0 7.5942424 7.767453 6.2900686 - 81800 2000 -0 7.5942359 7.7674515 6.2900729 - 81900 2000 -0 7.5942312 7.7674504 6.2900799 - 82000 2000 -0 7.5942237 7.7674478 6.29008 - 82100 2000 -0 7.5942182 7.7674465 6.2900859 - 82200 2000 -0 7.5942121 7.767445 6.2900901 - 82300 2000 -0 7.5942063 7.7674429 6.2900926 - 82400 2000 -0 7.5942013 7.7674409 6.2900972 - 82500 2000 -0 7.5941965 7.7674392 6.2901025 - 82600 2000 -0 7.5941914 7.7674369 6.2901052 - 82700 2000 -0 7.5941866 7.7674347 6.2901091 - 82800 2000 -0 7.5941822 7.7674326 6.2901146 - 82900 2000 -0 7.5941776 7.7674302 6.2901181 - 83000 2000 -0 7.5941729 7.7674277 6.2901216 - 83100 2000 -0 7.5941686 7.7674254 6.2901269 - 83200 2000 -0 7.5941641 7.767423 6.2901311 - 83300 2000 -0 7.5941594 7.7674205 6.2901346 - 83400 2000 -0 7.5941549 7.7674181 6.2901396 - 83500 2000 -0 7.5941502 7.7674158 6.2901442 - 83600 2000 -0 7.5941452 7.7674133 6.2901479 - 83700 2000 -0 7.5941402 7.7674111 6.2901524 - 83800 2000 -0 7.5941351 7.7674089 6.2901572 - 83900 2000 -0 7.5941297 7.7674068 6.290161 - 84000 2000 -0 7.5941242 7.7674048 6.290165 - 84100 2000 -0 7.5941186 7.767403 6.2901696 - 84200 2000 -0 7.5941126 7.7674013 6.2901734 - 84300 2000 -0 7.5941065 7.7673997 6.2901771 - 84400 2000 -0 7.5941003 7.7673983 6.2901814 - 84500 2000 -0 7.5940939 7.767397 6.2901852 - 84600 2000 -0 7.5940872 7.7673957 6.2901888 - 84700 2000 -0 7.5940805 7.7673944 6.2901928 - 84800 2000 -0 7.5940737 7.7673931 6.2901967 - 84900 2000 -0 7.5940667 7.7673918 6.2902004 - 85000 2000 -0 7.5940597 7.7673906 6.2902042 - 85100 2000 -0 7.5940526 7.7673893 6.2902083 - 85200 2000 -0 7.5940454 7.767388 6.2902121 - 85300 2000 -0 7.5940382 7.7673867 6.290216 - 85400 2000 -0 7.5940312 7.7673853 6.2902202 - 85500 2000 -0 7.5940241 7.7673839 6.2902243 - 85600 2000 -0 7.5940172 7.7673823 6.2902282 - 85700 2000 -0 7.5940104 7.7673808 6.2902325 - 85800 2000 -0 7.5940037 7.7673791 6.2902367 - 85900 2000 -0 7.5939971 7.7673773 6.2902409 - 86000 2000 -0 7.5939906 7.7673755 6.2902452 - 86100 2000 -0 7.5939844 7.7673736 6.2902496 - 86200 2000 -0 7.5939805 7.7673722 6.2902539 - 86300 2000 -0 7.5939717 7.7673693 6.2902569 - 86400 2000 -0 7.5939672 7.7673674 6.2902627 - 86500 2000 -0 7.5939615 7.7673655 6.2902672 - 86600 2000 -0 7.5939558 7.7673632 6.2902702 - 86700 2000 -0 7.5939508 7.7673608 6.2902746 - 86800 2000 -0 7.5939461 7.7673587 6.2902801 - 86900 2000 -0 7.5939411 7.7673561 6.2902832 - 87000 2000 -0 7.5939363 7.7673536 6.2902873 - 87100 2000 -0 7.5939319 7.7673513 6.2902927 - 87200 2000 -0 7.5939273 7.7673486 6.2902967 - 87300 2000 -0 7.5939223 7.7673461 6.2903004 - 87400 2000 -0 7.5939183 7.7673434 6.2903057 - 87500 2000 -0 7.5939138 7.7673407 6.2903103 - 87600 2000 -0 7.5939091 7.7673378 6.2903141 - 87700 2000 -0 7.5939045 7.7673352 6.2903191 - 87800 2000 -0 7.5938997 7.7673326 6.290324 - 87900 2000 -0 7.5938947 7.76733 6.2903281 - 88000 2000 -0 7.5938896 7.7673275 6.2903326 - 88100 2000 -0 7.5938843 7.7673252 6.2903375 - 88200 2000 -0 7.5938785 7.767323 6.2903417 - 88300 2000 -0 7.5938726 7.767321 6.2903459 - 88400 2000 -0 7.5938666 7.7673191 6.2903505 - 88500 2000 -0 7.5938603 7.7673174 6.2903546 - 88600 2000 -0 7.5938538 7.7673157 6.2903585 - 88700 2000 -0 7.5938471 7.7673142 6.2903628 - 88800 2000 -0 7.5938403 7.7673128 6.290367 - 88900 2000 -0 7.5938333 7.7673115 6.2903707 - 89000 2000 -0 7.5938261 7.7673103 6.2903748 - 89100 2000 -0 7.5938189 7.7673091 6.2903789 - 89200 2000 -0 7.5938115 7.7673079 6.2903827 - 89300 2000 -0 7.593804 7.7673068 6.2903867 - 89400 2000 -0 7.5937967 7.7673056 6.2903909 - 89500 2000 -0 7.5937891 7.7673045 6.290395 - 89600 2000 -0 7.5937814 7.7673033 6.2903989 - 89700 2000 -0 7.593774 7.7673021 6.2904033 - 89800 2000 -0 7.5937665 7.7673008 6.2904075 - 89900 2000 -0 7.5937592 7.7672994 6.2904116 - 90000 2000 -0 7.593752 7.7672979 6.2904159 - 90100 2000 -0 7.5937449 7.7672964 6.2904203 - 90200 2000 -0 7.593738 7.7672948 6.2904245 - 90300 2000 -0 7.5937313 7.7672931 6.2904288 - 90400 2000 -0 7.5937247 7.7672914 6.2904332 - 90500 2000 -0 7.5937212 7.7672898 6.2904372 - 90600 2000 -0 7.5937109 7.7672874 6.2904407 - 90700 2000 -0 7.5937069 7.7672852 6.2904466 - 90800 2000 -0 7.5937012 7.7672832 6.2904508 - 90900 2000 -0 7.5936954 7.7672808 6.2904539 - 91000 2000 -0 7.5936902 7.7672783 6.2904586 - 91100 2000 -0 7.5936853 7.7672761 6.2904639 - 91200 2000 -0 7.5936801 7.7672734 6.290467 - 91300 2000 -0 7.5936753 7.7672708 6.2904714 - 91400 2000 -0 7.5936707 7.7672683 6.2904767 - 91500 2000 -0 7.5936659 7.7672655 6.2904805 - 91600 2000 -0 7.5936611 7.7672627 6.2904845 - 91700 2000 -0 7.5936566 7.76726 6.2904899 - 91800 2000 -0 7.5936518 7.7672571 6.2904943 - 91900 2000 -0 7.5936469 7.7672543 6.2904983 - 92000 2000 -0 7.5936421 7.7672515 6.2905034 - 92100 2000 -0 7.5936371 7.7672488 6.2905081 - 92200 2000 -0 7.5936318 7.7672461 6.2905122 - 92300 2000 -0 7.5936265 7.7672435 6.290517 - 92400 2000 -0 7.5936211 7.767241 6.2905217 - 92500 2000 -0 7.5936154 7.7672386 6.2905258 - 92600 2000 -0 7.5936095 7.7672363 6.2905302 - 92700 2000 -0 7.5936035 7.7672343 6.2905348 - 92800 2000 -0 7.5935971 7.7672324 6.2905388 - 92900 2000 -0 7.5935906 7.7672307 6.2905428 - 93000 2000 -0 7.5935838 7.7672293 6.2905471 - 93100 2000 -0 7.5935769 7.7672279 6.2905511 - 93200 2000 -0 7.5935698 7.7672265 6.2905549 - 93300 2000 -0 7.5935625 7.7672254 6.290559 - 93400 2000 -0 7.5935551 7.7672242 6.290563 - 93500 2000 -0 7.5935476 7.7672231 6.2905668 - 93600 2000 -0 7.5935401 7.7672219 6.2905708 - 93700 2000 -0 7.5935325 7.7672208 6.290575 - 93800 2000 -0 7.5935248 7.7672196 6.2905789 - 93900 2000 -0 7.5935172 7.7672184 6.290583 - 94000 2000 -0 7.5935097 7.767217 6.2905873 - 94100 2000 -0 7.5935023 7.7672156 6.2905915 - 94200 2000 -0 7.593495 7.767214 6.2905957 - 94300 2000 -0 7.5934878 7.7672123 6.2906 - 94400 2000 -0 7.5934808 7.7672106 6.2906044 - 94500 2000 -0 7.593474 7.7672087 6.2906086 - 94600 2000 -0 7.5934675 7.7672069 6.290613 - 94700 2000 -0 7.5934609 7.7672048 6.2906173 - 94800 2000 -0 7.5934577 7.7672024 6.2906217 - 94900 2000 -0 7.5934471 7.767201 6.2906246 - 95000 2000 -0 7.5934428 7.7671984 6.2906309 - 95100 2000 -0 7.5934372 7.7671962 6.2906347 - 95200 2000 -0 7.5934313 7.7671938 6.2906378 - 95300 2000 -0 7.5934261 7.7671914 6.290643 - 95400 2000 -0 7.5934211 7.7671891 6.2906478 - 95500 2000 -0 7.5934157 7.7671863 6.2906508 - 95600 2000 -0 7.5934109 7.7671838 6.2906556 - 95700 2000 -0 7.5934061 7.7671813 6.2906607 - 95800 2000 -0 7.5934012 7.7671785 6.2906643 - 95900 2000 -0 7.5933963 7.7671757 6.2906686 - 96000 2000 -0 7.5933917 7.767173 6.2906739 - 96100 2000 -0 7.5933867 7.7671702 6.290678 - 96200 2000 -0 7.5933817 7.7671673 6.2906822 - 96300 2000 -0 7.5933768 7.7671646 6.2906873 - 96400 2000 -0 7.5933716 7.7671619 6.2906918 - 96500 2000 -0 7.5933663 7.7671592 6.2906959 - 96600 2000 -0 7.5933609 7.7671567 6.2907008 - 96700 2000 -0 7.5933553 7.7671542 6.2907054 - 96800 2000 -0 7.5933494 7.7671518 6.2907095 - 96900 2000 -0 7.5933434 7.7671496 6.2907139 - 97000 2000 -0 7.5933372 7.7671476 6.2907184 - 97100 2000 -0 7.5933308 7.7671456 6.2907224 - 97200 2000 -0 7.5933242 7.7671437 6.2907265 - 97300 2000 -0 7.5933174 7.7671421 6.2907308 - 97400 2000 -0 7.5933105 7.7671404 6.2907348 - 97500 2000 -0 7.5933033 7.7671389 6.2907386 - 97600 2000 -0 7.5932961 7.7671375 6.2907428 - 97700 2000 -0 7.5932888 7.7671359 6.2907468 - 97800 2000 -0 7.5932813 7.7671343 6.2907507 - 97900 2000 -0 7.5932739 7.7671327 6.2907548 - 98000 2000 -0 7.5932664 7.7671312 6.290759 - 98100 2000 -0 7.5932588 7.7671296 6.290763 - 98200 2000 -0 7.5932513 7.7671279 6.2907672 - 98300 2000 -0 7.5932438 7.7671262 6.2907715 - 98400 2000 -0 7.5932364 7.7671245 6.2907757 - 98500 2000 -0 7.5932291 7.7671226 6.2907799 - 98600 2000 -0 7.5932219 7.7671208 6.2907843 - 98700 2000 -0 7.5932149 7.7671188 6.2907886 - 98800 2000 -0 7.593208 7.7671167 6.2907928 - 98900 2000 -0 7.5932013 7.7671147 6.2907972 - 99000 2000 -0 7.5931948 7.7671125 6.2908015 - 99100 2000 -0 7.5931916 7.7671102 6.2908061 - 99200 2000 -0 7.5931818 7.7671085 6.2908089 - 99300 2000 -0 7.5931764 7.7671057 6.2908152 - 99400 2000 -0 7.5931708 7.7671032 6.2908188 - 99500 2000 -0 7.593165 7.7671007 6.290822 - 99600 2000 -0 7.5931598 7.7670982 6.2908274 - 99700 2000 -0 7.5931546 7.7670957 6.2908319 - 99800 2000 -0 7.5931492 7.7670928 6.2908349 - 99900 2000 -0 7.5931443 7.7670902 6.29084 - 100000 2000 -0 7.5931395 7.7670875 6.2908449 -Loop time of 30.0046 on 4 procs for 100000 steps with 2000 atoms - -Performance: 287955.602 tau/day, 3332.819 timesteps/s, 6.666 Matom-step/s -96.6% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 14.456 | 15.429 | 16.749 | 23.8 | 51.42 -Neigh | 0.50522 | 0.53511 | 0.56337 | 3.4 | 1.78 -Comm | 4.8655 | 6.3036 | 7.267 | 39.7 | 21.01 -Output | 0.018666 | 0.021667 | 0.030382 | 3.4 | 0.07 -Modify | 6.9997 | 7.0865 | 7.1678 | 2.3 | 23.62 -Other | | 0.6286 | | | 2.09 - -Nlocal: 500 ave 504 max 496 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Nghost: 545.75 ave 553 max 538 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Neighs: 2409.75 ave 2523 max 2343 min -Histogram: 1 1 0 1 0 0 0 0 0 1 - -Total # of neighbors = 9639 -Ave neighs/atom = 4.8195 -Neighbor list builds = 3151 -Dangerous builds = 0 - -Total wall time: 0:00:30 diff --git a/examples/meam/msmeam/README.md b/examples/meam/msmeam/README.md index dbf569d4b3..a21e35aa12 100644 --- a/examples/meam/msmeam/README.md +++ b/examples/meam/msmeam/README.md @@ -1,8 +1,8 @@ -To run Baske's test, do +To run this test, do lmp -in in.msmeam -Then +Then: diff dump.msmeam dump.msmeam.bu diff --git a/examples/meam/msmeam/dump.msmeam.bu b/examples/meam/msmeam/dump.msmeam.bu index 039f630073..45d17a5228 100644 --- a/examples/meam/msmeam/dump.msmeam.bu +++ b/examples/meam/msmeam/dump.msmeam.bu @@ -3,22 +3,22 @@ ITEM: TIMESTEP ITEM: NUMBER OF ATOMS 3 ITEM: BOX BOUNDS pp pp pp --4 4 --4 4 --4 4 -ITEM: ATOMS id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6] -1 0 0 0 -131.925 -88.3005 0 22.9153 -2.147e+08 -1.62661e+08 -0 -2.05301e+07 -0 -0 -2 2.2 0 0 120.809 -0.482171 0 14.7692 -2.12028e+08 -0 -0 403352 -0 -0 -3 0.3 2.3 0 11.1159 88.7827 0 8.61478 -2.67145e+06 -1.62661e+08 -0 -2.09335e+07 -0 -0 +-4.0000000000000000e+00 4.0000000000000000e+00 +-4.0000000000000000e+00 4.0000000000000000e+00 +-4.0000000000000000e+00 4.0000000000000000e+00 +ITEM: ATOMS id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6] +1 0 0 0 -131.977 -88.3322 0 22.9236 -2.14786e+08 -1.62719e+08 -0 -2.05378e+07 -0 -0 +2 2.2 0 0 120.857 -0.482171 0 14.7745 -2.12113e+08 -0 -0 403352 -0 -0 +3 0.3 2.3 0 11.1201 88.8144 0 8.61773 -2.67245e+06 -1.62719e+08 -0 -2.09411e+07 -0 -0 ITEM: TIMESTEP 1 ITEM: NUMBER OF ATOMS 3 ITEM: BOX BOUNDS pp pp pp --4 4 --4 4 --4 4 -ITEM: ATOMS id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6] -1 0 0 0 -131.925 -88.3005 0 22.9153 -2.147e+08 -1.62661e+08 -0 -2.05301e+07 -0 -0 -2 2.2 0 0 120.809 -0.482171 0 14.7692 -2.12028e+08 -0 -0 403352 -0 -0 -3 0.3 2.3 0 11.1159 88.7827 0 8.61478 -2.67145e+06 -1.62661e+08 -0 -2.09335e+07 -0 -0 +-4.0000000000000000e+00 4.0000000000000000e+00 +-4.0000000000000000e+00 4.0000000000000000e+00 +-4.0000000000000000e+00 4.0000000000000000e+00 +ITEM: ATOMS id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6] +1 0 0 0 -131.977 -88.3322 0 22.9236 -2.14786e+08 -1.62719e+08 -0 -2.05378e+07 -0 -0 +2 2.2 0 0 120.857 -0.482171 0 14.7745 -2.12113e+08 -0 -0 403352 -0 -0 +3 0.3 2.3 0 11.1201 88.8144 0 8.61773 -2.67245e+06 -1.62719e+08 -0 -2.09411e+07 -0 -0 diff --git a/examples/nemd/log.30Sep24.g++.1 b/examples/nemd/log.30Sep24.nemd.g++.1 similarity index 100% rename from examples/nemd/log.30Sep24.g++.1 rename to examples/nemd/log.30Sep24.nemd.g++.1 diff --git a/examples/nemd/log.30Sep24.g++.4 b/examples/nemd/log.30Sep24.nemd.g++.4 similarity index 100% rename from examples/nemd/log.30Sep24.g++.4 rename to examples/nemd/log.30Sep24.nemd.g++.4 diff --git a/lib/h5md/Makefile.h5cc b/lib/h5md/Makefile.h5cc index 9feed2d74e..d3c3075a45 100644 --- a/lib/h5md/Makefile.h5cc +++ b/lib/h5md/Makefile.h5cc @@ -4,7 +4,8 @@ CC=h5cc # -DH5_NO_DEPRECATED_SYMBOLS is required here to ensure we are using # the v1.8 API when HDF5 is configured to default to using the v1.6 API. -CFLAGS=-D_DEFAULT_SOURCE -O2 -DH5_NO_DEPRECATED_SYMBOLS -Wall -fPIC +#CFLAGS=-D_DEFAULT_SOURCE -O2 -DH5_NO_DEPRECATED_SYMBOLS -Wall -fPIC +CFLAGS=-D_DEFAULT_SOURCE -O2 -Wall -fPIC HDF5_PATH=/usr INC=-I include AR=ar diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index a4e76aa87a..65cc356739 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -61,6 +61,7 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; extscalar = 0; time_depend = 1; + initialize_flag = 0; if (!atom->radius_flag || !atom->rmass_flag) error->all(FLERR, "Fix pour requires atom attributes radius, rmass"); @@ -156,10 +157,6 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : memory->create(coords, natom_max, 4, "pour:coords"); memory->create(imageflags, natom_max, "pour:imageflags"); - // find max atom and molecule IDs just once - - if (idnext) find_maxid(); - // random number generator, same for all procs // warm up the generator 30x to avoid correlations in first-particle // positions if runs are repeated with consecutive seeds @@ -173,95 +170,6 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : MPI_Comm_size(world, &nprocs); recvcounts = new int[nprocs]; displs = new int[nprocs]; - - // grav = gravity in distance/time^2 units - // assume grav = -magnitude at this point, enforce in init() - - auto fixlist = modify->get_fix_by_style("^gravity"); - if (fixlist.size() != 1) - error->all(FLERR, "There must be exactly one fix gravity defined for fix pour"); - auto fixgrav = dynamic_cast(fixlist.front()); - - grav = -fixgrav->magnitude * force->ftm2v; - - // nfreq = timesteps between insertions - // should be time for a particle to fall from top of insertion region - // to bottom, taking into account that the region may be moving - // set these 2 eqs equal to each other, solve for smallest positive t - // x = zhi + vz*t + 1/2 grav t^2 - // x = zlo + rate*t - // gives t = [-(vz-rate) - sqrt((vz-rate)^2 - 2*grav*(zhi-zlo))] / grav - // where zhi-zlo > 0, grav < 0, and vz & rate can be either > 0 or < 0 - - double v_relative, delta; - if (domain->dimension == 3) { - v_relative = vz - rate; - delta = zhi - zlo; - } else { - v_relative = vy - rate; - delta = yhi - ylo; - } - double t = (-v_relative - sqrt(v_relative * v_relative - 2.0 * grav * delta)) / grav; - nfreq = static_cast(t / update->dt + 0.5); - - // 1st insertion on next timestep - - force_reneighbor = 1; - next_reneighbor = update->ntimestep + 1; - nfirst = next_reneighbor; - ninserted = 0; - - // nper = # to insert each time - // depends on specified volume fraction - // volume = volume of insertion region - // volume_one = volume of inserted particle (with max possible radius) - // in 3d, ensure dy >= 1, for quasi-2d simulations - - double volume, volume_one = 1.0; - - molradius_max = 0.0; - if (mode == MOLECULE) { - for (int i = 0; i < nmol; i++) molradius_max = MAX(molradius_max, onemols[i]->molradius); - } - - if (domain->dimension == 3) { - if (region_style == 1) { - double dy = yhi - ylo; - if (dy < 1.0) dy = 1.0; - volume = (xhi - xlo) * dy * (zhi - zlo); - } else - volume = MY_PI * rc * rc * (zhi - zlo); - if (mode == MOLECULE) { - volume_one = MY_4PI3 * molradius_max * molradius_max * molradius_max; - } else if (dstyle == ONE || dstyle == RANGE) { - volume_one = MY_4PI3 * radius_max * radius_max * radius_max; - } else if (dstyle == POLY) { - volume_one = 0.0; - for (int i = 0; i < npoly; i++) - volume_one += (MY_4PI3 * radius_poly[i] * radius_poly[i] * radius_poly[i]) * frac_poly[i]; - } - } else { - volume = (xhi - xlo) * (yhi - ylo); - if (mode == MOLECULE) { - volume_one = MY_PI * molradius_max * molradius_max; - } else if (dstyle == ONE || dstyle == RANGE) { - volume_one = MY_PI * radius_max * radius_max; - } else if (dstyle == POLY) { - volume_one = 0.0; - for (int i = 0; i < npoly; i++) - volume_one += (MY_PI * radius_poly[i] * radius_poly[i]) * frac_poly[i]; - } - } - - nper = static_cast(volfrac * volume / volume_one); - if (nper == 0) error->all(FLERR, "Fix pour insertion count per timestep is 0"); - int nfinal = update->ntimestep + 1 + ((bigint) ninsert - 1) / nper * nfreq; - - // print stats - - if (me == 0) - utils::logmesg(lmp, "Particle insertion: {} every {} steps, {} by step {}\n", nper, nfreq, - ninsert, nfinal); } /* ---------------------------------------------------------------------- */ @@ -299,9 +207,7 @@ void FixPour::init() region = domain->get_region_by_id(idregion); if (!region) error->all(FLERR, "Fix pour region {} does not exist", idregion); - // ensure gravity fix (still) exists - // for 3d must point in -z, for 2d must point in -y - // else insertion cannot work + // Find gravity fix auto fixlist = modify->get_fix_by_style("^gravity"); if (fixlist.size() != 1) @@ -310,6 +216,108 @@ void FixPour::init() if (fixgrav->varflag != FixGravity::CONSTANT) error->all(FLERR, "Fix gravity for fix pour must be constant"); + // Perform one time initialization operations + // outside of constructor in case fix definition precedes timestep definition/atom creation + + if (!initialize_flag) { + initialize_flag = 1; + + // find max atom and molecule IDs just once + + if (idnext) find_maxid(); + + // grav = gravity in distance/time^2 units + // assume grav = -magnitude at this point, enforce in init() + + grav = -fixgrav->magnitude * force->ftm2v; + + // nfreq = timesteps between insertions + // should be time for a particle to fall from top of insertion region + // to bottom, taking into account that the region may be moving + // set these 2 eqs equal to each other, solve for smallest positive t + // x = zhi + vz*t + 1/2 grav t^2 + // x = zlo + rate*t + // gives t = [-(vz-rate) - sqrt((vz-rate)^2 - 2*grav*(zhi-zlo))] / grav + // where zhi-zlo > 0, grav < 0, and vz & rate can be either > 0 or < 0 + + double v_relative, delta; + if (domain->dimension == 3) { + v_relative = vz - rate; + delta = zhi - zlo; + } else { + v_relative = vy - rate; + delta = yhi - ylo; + } + double t = (-v_relative - sqrt(v_relative * v_relative - 2.0 * grav * delta)) / grav; + nfreq = static_cast(t / update->dt + 0.5); + + // 1st insertion on next timestep + + force_reneighbor = 1; + next_reneighbor = update->ntimestep + 1; + nfirst = next_reneighbor; + ninserted = 0; + + // nper = # to insert each time + // depends on specified volume fraction + // volume = volume of insertion region + // volume_one = volume of inserted particle (with max possible radius) + // in 3d, ensure dy >= max diameter, for quasi-2d simulations + + double volume, volume_one = 1.0; + + molradius_max = 0.0; + if (mode == MOLECULE) { + for (int i = 0; i < nmol; i++) molradius_max = MAX(molradius_max, onemols[i]->molradius); + } + + if (domain->dimension == 3) { + if (region_style == 1) { + double dy = yhi - ylo; + if (dy < (2 * radius_max)) dy = (2 * radius_max); + volume = (xhi - xlo) * dy * (zhi - zlo); + } else + volume = MY_PI * rc * rc * (zhi - zlo); + if (mode == MOLECULE) { + volume_one = MY_4PI3 * molradius_max * molradius_max * molradius_max; + } else if (dstyle == ONE || dstyle == RANGE) { + volume_one = MY_4PI3 * radius_max * radius_max * radius_max; + } else if (dstyle == POLY) { + volume_one = 0.0; + for (int i = 0; i < npoly; i++) + volume_one += (MY_4PI3 * radius_poly[i] * radius_poly[i] * radius_poly[i]) * frac_poly[i]; + } + } else { + volume = (xhi - xlo) * (yhi - ylo); + if (mode == MOLECULE) { + volume_one = MY_PI * molradius_max * molradius_max; + } else if (dstyle == ONE || dstyle == RANGE) { + volume_one = MY_PI * radius_max * radius_max; + } else if (dstyle == POLY) { + volume_one = 0.0; + for (int i = 0; i < npoly; i++) + volume_one += (MY_PI * radius_poly[i] * radius_poly[i]) * frac_poly[i]; + } + } + + nper = static_cast(volfrac * volume / volume_one); + if (nper == 0) error->all(FLERR, "Fix pour insertion count per timestep is 0"); + int nfinal = update->ntimestep + 1 + ((bigint) ninsert - 1) / nper * nfreq; + + // print stats + + if (me == 0) + utils::logmesg(lmp, "Particle insertion: {} every {} steps, {} by step {}\n", nper, nfreq, + ninsert, nfinal); + } + + // ensure gravity fix (still) exists + // for 3d must point in -z, for 2d must point in -y + // else insertion cannot work + + double gnew = -fixgrav->magnitude * force->ftm2v; + if (gnew != grav) error->all(FLERR, "Gravity changed since fix pour was created"); + double xgrav = fixgrav->xgrav; double ygrav = fixgrav->ygrav; double zgrav = fixgrav->zgrav; @@ -322,9 +330,6 @@ void FixPour::init() error->all(FLERR, "Gravity must point in -y to use with fix pour in 2d"); } - double gnew = -fixgrav->magnitude * force->ftm2v; - if (gnew != grav) error->all(FLERR, "Gravity changed since fix pour was created"); - // if rigidflag defined, check for rigid/small fix // its molecule template must be same as this one @@ -895,13 +900,13 @@ void FixPour::options(int narg, char **arg) int iarg = 0; while (iarg < narg) { if (strcmp(arg[iarg], "region") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour region", error); region = domain->get_region_by_id(arg[iarg + 1]); if (!region) error->all(FLERR, "Fix pour region {} does not exist", arg[iarg + 1]); idregion = utils::strdup(arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "mol") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour mol", error); int imol = atom->find_molecule(arg[iarg + 1]); if (imol == -1) error->all(FLERR, "Molecule template ID for fix pour does not exist"); mode = MOLECULE; @@ -914,37 +919,37 @@ void FixPour::options(int narg, char **arg) molfrac[nmol - 1] = 1.0; iarg += 2; } else if (strcmp(arg[iarg], "molfrac") == 0) { - if (mode != MOLECULE) error->all(FLERR, "Illegal fix pour command"); - if (iarg + nmol + 1 > narg) error->all(FLERR, "Illegal fix pour command"); + if (mode != MOLECULE) error->all(FLERR, "Illegal fix pour command, must specify mol keyword before molfrac"); + if (iarg + nmol + 1 > narg) utils::missing_cmd_args(FLERR, "pour molfrac", error); molfrac[0] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); for (int i = 1; i < nmol; i++) molfrac[i] = molfrac[i - 1] + utils::numeric(FLERR, arg[iarg + i + 1], false, lmp); if (molfrac[nmol - 1] < 1.0 - EPSILON || molfrac[nmol - 1] > 1.0 + EPSILON) - error->all(FLERR, "Illegal fix pour command"); + error->all(FLERR, "Illegal fix pour command molfrac: {}", molfrac[nmol - 1]); molfrac[nmol - 1] = 1.0; iarg += nmol + 1; } else if (strcmp(arg[iarg], "rigid") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour rigid", error); delete[] idrigid; idrigid = utils::strdup(arg[iarg + 1]); rigidflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "shake") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour shake", error); delete[] idshake; idshake = utils::strdup(arg[iarg + 1]); shakeflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "id") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour id", error); if (strcmp(arg[iarg + 1], "max") == 0) idnext = 0; else if (strcmp(arg[iarg + 1], "next") == 0) idnext = 1; else - error->all(FLERR, "Illegal fix pour command"); + error->all(FLERR, "Illegal fix pour command id argument: {}", arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "ignore") == 0) { @@ -954,27 +959,27 @@ void FixPour::options(int narg, char **arg) iarg += 1; } else if (strcmp(arg[iarg], "diam") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour diam", error); if (strcmp(arg[iarg + 1], "one") == 0) { - if (iarg + 3 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "pour diam one", error); dstyle = ONE; radius_one = 0.5 * utils::numeric(FLERR, arg[iarg + 2], false, lmp); radius_max = radius_one; iarg += 3; } else if (strcmp(arg[iarg + 1], "range") == 0) { - if (iarg + 4 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 4 > narg) utils::missing_cmd_args(FLERR, "pour diam range", error); dstyle = RANGE; radius_lo = 0.5 * utils::numeric(FLERR, arg[iarg + 2], false, lmp); radius_hi = 0.5 * utils::numeric(FLERR, arg[iarg + 3], false, lmp); - if (radius_lo > radius_hi) error->all(FLERR, "Illegal fix pour command"); + if (radius_lo > radius_hi) error->all(FLERR, "Illegal fix pour radii: {} exceeds {}", radius_lo, radius_hi); radius_max = radius_hi; iarg += 4; } else if (strcmp(arg[iarg + 1], "poly") == 0) { - if (iarg + 3 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "pour diam poly", error); dstyle = POLY; npoly = utils::inumeric(FLERR, arg[iarg + 2], false, lmp); - if (npoly <= 0) error->all(FLERR, "Illegal fix pour command"); - if (iarg + 3 + 2 * npoly > narg) error->all(FLERR, "Illegal fix pour command"); + if (npoly <= 0) error->all(FLERR, "Illegal fix pour poly number: {}", npoly); + if (iarg + 3 + 2 * npoly > narg) utils::missing_cmd_args(FLERR, "pour diam poly", error); radius_poly = new double[npoly]; frac_poly = new double[npoly]; iarg += 3; @@ -982,8 +987,10 @@ void FixPour::options(int narg, char **arg) for (int i = 0; i < npoly; i++) { radius_poly[i] = 0.5 * utils::numeric(FLERR, arg[iarg++], false, lmp); frac_poly[i] = utils::numeric(FLERR, arg[iarg++], false, lmp); - if (radius_poly[i] <= 0.0 || frac_poly[i] < 0.0) - error->all(FLERR, "Illegal fix pour command"); + if (radius_poly[i] <= 0.0) + error->all(FLERR, "Illegal fix pour poly radius: {}", radius_poly[i]); + if (frac_poly[i] < 0.0) + error->all(FLERR, "Illegal fix pour poly fraction: {}", frac_poly[i]); radius_max = MAX(radius_max, radius_poly[i]); } double sum = 0.0; @@ -994,41 +1001,42 @@ void FixPour::options(int narg, char **arg) error->all(FLERR, "Illegal fix pour command"); } else if (strcmp(arg[iarg], "dens") == 0) { - if (iarg + 3 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "pour dens", error); density_lo = utils::numeric(FLERR, arg[iarg + 1], false, lmp); density_hi = utils::numeric(FLERR, arg[iarg + 2], false, lmp); - if (density_lo > density_hi) error->all(FLERR, "Illegal fix pour command"); + if (density_lo > density_hi) error->all(FLERR, "Illegal fix pour densities: {} exceeds {}", density_lo, density_hi); iarg += 3; } else if (strcmp(arg[iarg], "vol") == 0) { - if (iarg + 3 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "pour vol", error); volfrac = utils::numeric(FLERR, arg[iarg + 1], false, lmp); maxattempt = utils::inumeric(FLERR, arg[iarg + 2], false, lmp); iarg += 3; } else if (strcmp(arg[iarg], "rate") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "pour rate", error); rate = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; } else if (strcmp(arg[iarg], "vel") == 0) { if (domain->dimension == 3) { - if (iarg + 6 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 6 > narg) utils::missing_cmd_args(FLERR, "pour vel", error); vxlo = utils::numeric(FLERR, arg[iarg + 1], false, lmp); vxhi = utils::numeric(FLERR, arg[iarg + 2], false, lmp); vylo = utils::numeric(FLERR, arg[iarg + 3], false, lmp); vyhi = utils::numeric(FLERR, arg[iarg + 4], false, lmp); - if (vxlo > vxhi || vylo > vyhi) error->all(FLERR, "Illegal fix pour command"); + if (vxlo > vxhi) error->all(FLERR, "Illegal fix pour x velocities: {} exceeds {}", vxlo, vxhi); + if (vylo > vyhi) error->all(FLERR, "Illegal fix pour y velocities: {} exceeds {}", vylo, vyhi); vz = utils::numeric(FLERR, arg[iarg + 5], false, lmp); iarg += 6; } else { - if (iarg + 4 > narg) error->all(FLERR, "Illegal fix pour command"); + if (iarg + 4 > narg) utils::missing_cmd_args(FLERR, "pour vel", error); vxlo = utils::numeric(FLERR, arg[iarg + 1], false, lmp); vxhi = utils::numeric(FLERR, arg[iarg + 2], false, lmp); vy = utils::numeric(FLERR, arg[iarg + 3], false, lmp); vz = 0.0; - if (vxlo > vxhi) error->all(FLERR, "Illegal fix pour command"); + if (vxlo > vxhi) error->all(FLERR, "Illegal fix pour velocities: {} exceeds {}", vxlo, vxhi); iarg += 4; } } else - error->all(FLERR, "Illegal fix pour command"); + error->all(FLERR, "Illegal fix pour command argument: {}", arg[iarg]); } } diff --git a/src/GRANULAR/fix_pour.h b/src/GRANULAR/fix_pour.h index 57db2541df..deb7c7aa5d 100644 --- a/src/GRANULAR/fix_pour.h +++ b/src/GRANULAR/fix_pour.h @@ -37,7 +37,7 @@ class FixPour : public Fix { void *extract(const char *, int &) override; private: - int ninsert, ntype, seed; + int ninsert, ntype, seed, initialize_flag; int mode, idnext, dstyle, npoly, rigidflag, shakeflag; int ignoreflag, ignoreline, ignoretri; double radius_one, radius_max; diff --git a/src/GRANULAR/fix_wall_gran.cpp b/src/GRANULAR/fix_wall_gran.cpp index b8b06add2e..3336a8a4d7 100644 --- a/src/GRANULAR/fix_wall_gran.cpp +++ b/src/GRANULAR/fix_wall_gran.cpp @@ -165,6 +165,9 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) : wallstyle = REGION; idregion = utils::strdup(arg[iarg+1]); iarg += 2; + // This option is only compatible with fix wall/gran/region + if (!utils::strmatch(style, "^wall/gran/region")) + error->all(FLERR, "Region option only compatible with fix wall/gran/region"); } else wallstyle = NOSTYLE; // optional args diff --git a/src/MAKE/MACHINES/Makefile.perlmutter_kokkos b/src/MAKE/MACHINES/Makefile.perlmutter_kokkos index cdf2daa471..81164aa040 100644 --- a/src/MAKE/MACHINES/Makefile.perlmutter_kokkos +++ b/src/MAKE/MACHINES/Makefile.perlmutter_kokkos @@ -9,7 +9,7 @@ SHELL = /bin/sh KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) CC = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper -CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma +CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma -Xcudafe --diag_suppress=128 SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/MACHINES/Makefile.summit_kokkos b/src/MAKE/MACHINES/Makefile.summit_kokkos index d554e09a5a..57c25702aa 100644 --- a/src/MAKE/MACHINES/Makefile.summit_kokkos +++ b/src/MAKE/MACHINES/Makefile.summit_kokkos @@ -9,7 +9,7 @@ SHELL = /bin/sh KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) CC = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper -CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma +CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma -Xcudafe --diag_suppress=128 SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index 88c07fc2c5..fd173b5588 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -10,7 +10,7 @@ KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) export MPICH_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper CC = mpicxx -CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma +CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma -Xcudafe --diag_suppress=128 SHFLAGS = -fPIC # uncomment when compiling with Intel 21.5 or older FMTFLAGS = # -std=c++11 diff --git a/src/MESONT/pair_mesocnt.cpp b/src/MESONT/pair_mesocnt.cpp index 21b04268c4..4882c39403 100644 --- a/src/MESONT/pair_mesocnt.cpp +++ b/src/MESONT/pair_mesocnt.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include diff --git a/src/RHEO/compute_rheo_kernel.cpp b/src/RHEO/compute_rheo_kernel.cpp index 453f2b9028..31b1f65fc2 100644 --- a/src/RHEO/compute_rheo_kernel.cpp +++ b/src/RHEO/compute_rheo_kernel.cpp @@ -740,9 +740,9 @@ void ComputeRHEOKernel::compute_peratom() dpotri_(&uplo, &Mdim, M, &Mdim, &lapack_error); // make result matrix symmetric - for (int i = 0; i < Mdim; ++i) { - for (int j = i+1; j < Mdim; ++j) { - M[i * Mdim + j] = M[j * Mdim + i]; + for (a = 0; a < Mdim; a++) { + for (b = a + 1; b < Mdim; b++) { + M[a * Mdim + b] = M[b * Mdim + a]; } } diff --git a/src/fmt/args.h b/src/fmt/args.h index b77a2d0661..31a60e8faf 100644 --- a/src/fmt/args.h +++ b/src/fmt/args.h @@ -8,9 +8,11 @@ #ifndef FMT_ARGS_H_ #define FMT_ARGS_H_ -#include // std::reference_wrapper -#include // std::unique_ptr -#include +#ifndef FMT_MODULE +# include // std::reference_wrapper +# include // std::unique_ptr +# include +#endif #include "format.h" // std_string_view @@ -28,15 +30,18 @@ auto unwrap(const std::reference_wrapper& v) -> const T& { return static_cast(v); } -class dynamic_arg_list { - // Workaround for clang's -Wweak-vtables. Unlike for regular classes, for - // templates it doesn't complain about inability to deduce single translation - // unit for placing vtable. So storage_node_base is made a fake template. - template struct node { - virtual ~node() = default; - std::unique_ptr> next; - }; +// node is defined outside dynamic_arg_list to workaround a C2504 bug in MSVC +// 2022 (v17.10.0). +// +// Workaround for clang's -Wweak-vtables. Unlike for regular classes, for +// templates it doesn't complain about inability to deduce single translation +// unit for placing vtable. So node is made a fake template. +template struct node { + virtual ~node() = default; + std::unique_ptr> next; +}; +class dynamic_arg_list { template struct typed_node : node<> { T value; @@ -62,14 +67,10 @@ class dynamic_arg_list { } // namespace detail /** - \rst - A dynamic version of `fmt::format_arg_store`. - It's equipped with a storage to potentially temporary objects which lifetimes - could be shorter than the format arguments object. - - It can be implicitly converted into `~fmt::basic_format_args` for passing - into type-erased formatting functions such as `~fmt::vformat`. - \endrst + * A dynamic list of formatting arguments with storage. + * + * It can be implicitly converted into `fmt::basic_format_args` for passing + * into type-erased formatting functions such as `fmt::vformat`. */ template class dynamic_format_arg_store @@ -147,22 +148,20 @@ class dynamic_format_arg_store constexpr dynamic_format_arg_store() = default; /** - \rst - Adds an argument into the dynamic store for later passing to a formatting - function. - - Note that custom types and string types (but not string views) are copied - into the store dynamically allocating memory if necessary. - - **Example**:: - - fmt::dynamic_format_arg_store store; - store.push_back(42); - store.push_back("abc"); - store.push_back(1.5f); - std::string result = fmt::vformat("{} and {} and {}", store); - \endrst - */ + * Adds an argument into the dynamic store for later passing to a formatting + * function. + * + * Note that custom types and string types (but not string views) are copied + * into the store dynamically allocating memory if necessary. + * + * **Example**: + * + * fmt::dynamic_format_arg_store store; + * store.push_back(42); + * store.push_back("abc"); + * store.push_back(1.5f); + * std::string result = fmt::vformat("{} and {} and {}", store); + */ template void push_back(const T& arg) { if (detail::const_check(need_copy::value)) emplace_arg(dynamic_args_.push>(arg)); @@ -171,20 +170,18 @@ class dynamic_format_arg_store } /** - \rst - Adds a reference to the argument into the dynamic store for later passing to - a formatting function. - - **Example**:: - - fmt::dynamic_format_arg_store store; - char band[] = "Rolling Stones"; - store.push_back(std::cref(band)); - band[9] = 'c'; // Changing str affects the output. - std::string result = fmt::vformat("{}", store); - // result == "Rolling Scones" - \endrst - */ + * Adds a reference to the argument into the dynamic store for later passing + * to a formatting function. + * + * **Example**: + * + * fmt::dynamic_format_arg_store store; + * char band[] = "Rolling Stones"; + * store.push_back(std::cref(band)); + * band[9] = 'c'; // Changing str affects the output. + * std::string result = fmt::vformat("{}", store); + * // result == "Rolling Scones" + */ template void push_back(std::reference_wrapper arg) { static_assert( need_copy::value, @@ -193,10 +190,10 @@ class dynamic_format_arg_store } /** - Adds named argument into the dynamic store for later passing to a formatting - function. ``std::reference_wrapper`` is supported to avoid copying of the - argument. The name is always copied into the store. - */ + * Adds named argument into the dynamic store for later passing to a + * formatting function. `std::reference_wrapper` is supported to avoid + * copying of the argument. The name is always copied into the store. + */ template void push_back(const detail::named_arg& arg) { const char_type* arg_name = @@ -209,19 +206,15 @@ class dynamic_format_arg_store } } - /** Erase all elements from the store */ + /// Erase all elements from the store. void clear() { data_.clear(); named_info_.clear(); dynamic_args_ = detail::dynamic_arg_list(); } - /** - \rst - Reserves space to store at least *new_cap* arguments including - *new_cap_named* named arguments. - \endrst - */ + /// Reserves space to store at least `new_cap` arguments including + /// `new_cap_named` named arguments. void reserve(size_t new_cap, size_t new_cap_named) { FMT_ASSERT(new_cap >= new_cap_named, "Set of arguments includes set of named arguments"); diff --git a/src/fmt/base.h b/src/fmt/base.h new file mode 100644 index 0000000000..9584029d59 --- /dev/null +++ b/src/fmt/base.h @@ -0,0 +1,3091 @@ +// Formatting library for C++ - the base API for char/UTF-8 +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_BASE_H_ +#define FMT_BASE_H_ + +#if defined(FMT_IMPORT_STD) && !defined(FMT_MODULE) +# define FMT_MODULE +#endif + +#ifndef FMT_MODULE +# include // CHAR_BIT +# include // FILE +# include // strlen + +// is also included transitively from . +# include // std::byte +# include // std::enable_if +#endif + +// The fmt library version in the form major * 10000 + minor * 100 + patch. +#define FMT_VERSION 110002 + +// Detect compiler versions. +#if defined(__clang__) && !defined(__ibmxl__) +# define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) +#else +# define FMT_CLANG_VERSION 0 +#endif +#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) +# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#else +# define FMT_GCC_VERSION 0 +#endif +#if defined(__ICL) +# define FMT_ICC_VERSION __ICL +#elif defined(__INTEL_COMPILER) +# define FMT_ICC_VERSION __INTEL_COMPILER +#else +# define FMT_ICC_VERSION 0 +#endif +#if defined(_MSC_VER) +# define FMT_MSC_VERSION _MSC_VER +#else +# define FMT_MSC_VERSION 0 +#endif + +// Detect standard library versions. +#ifdef _GLIBCXX_RELEASE +# define FMT_GLIBCXX_RELEASE _GLIBCXX_RELEASE +#else +# define FMT_GLIBCXX_RELEASE 0 +#endif +#ifdef _LIBCPP_VERSION +# define FMT_LIBCPP_VERSION _LIBCPP_VERSION +#else +# define FMT_LIBCPP_VERSION 0 +#endif + +#ifdef _MSVC_LANG +# define FMT_CPLUSPLUS _MSVC_LANG +#else +# define FMT_CPLUSPLUS __cplusplus +#endif + +// Detect __has_*. +#ifdef __has_feature +# define FMT_HAS_FEATURE(x) __has_feature(x) +#else +# define FMT_HAS_FEATURE(x) 0 +#endif +#ifdef __has_include +# define FMT_HAS_INCLUDE(x) __has_include(x) +#else +# define FMT_HAS_INCLUDE(x) 0 +#endif +#ifdef __has_cpp_attribute +# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define FMT_HAS_CPP_ATTRIBUTE(x) 0 +#endif + +#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ + (FMT_CPLUSPLUS >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \ + (FMT_CPLUSPLUS >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +// Detect C++14 relaxed constexpr. +#ifdef FMT_USE_CONSTEXPR +// Use the provided definition. +#elif FMT_GCC_VERSION >= 600 && FMT_CPLUSPLUS >= 201402L +// GCC only allows throw in constexpr since version 6: +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67371. +# define FMT_USE_CONSTEXPR 1 +#elif FMT_ICC_VERSION +# define FMT_USE_CONSTEXPR 0 // https://github.com/fmtlib/fmt/issues/1628 +#elif FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VERSION >= 1912 +# define FMT_USE_CONSTEXPR 1 +#else +# define FMT_USE_CONSTEXPR 0 +#endif +#if FMT_USE_CONSTEXPR +# define FMT_CONSTEXPR constexpr +#else +# define FMT_CONSTEXPR +#endif + +// Detect consteval, C++20 constexpr extensions and std::is_constant_evaluated. +// LAMMPS customization. Using consteval is not compatible with how we use libfmt +#if 1 +# define FMT_USE_CONSTEVAL 0 +#elif !defined(__cpp_lib_is_constant_evaluated) +# define FMT_USE_CONSTEVAL 0 +#elif FMT_CPLUSPLUS < 201709L +# define FMT_USE_CONSTEVAL 0 +#elif FMT_GLIBCXX_RELEASE && FMT_GLIBCXX_RELEASE < 10 +# define FMT_USE_CONSTEVAL 0 +#elif FMT_LIBCPP_VERSION && FMT_LIBCPP_VERSION < 10000 +# define FMT_USE_CONSTEVAL 0 +#elif defined(__apple_build_version__) && __apple_build_version__ < 14000029L +# define FMT_USE_CONSTEVAL 0 // consteval is broken in Apple clang < 14. +#elif FMT_MSC_VERSION && FMT_MSC_VERSION < 1929 +# define FMT_USE_CONSTEVAL 0 // consteval is broken in MSVC VS2019 < 16.10. +#elif defined(__cpp_consteval) +# define FMT_USE_CONSTEVAL 1 +#elif FMT_GCC_VERSION >= 1002 || FMT_CLANG_VERSION >= 1101 +# define FMT_USE_CONSTEVAL 1 +#else +# define FMT_USE_CONSTEVAL 0 +#endif +#if FMT_USE_CONSTEVAL +# define FMT_CONSTEVAL consteval +# define FMT_CONSTEXPR20 constexpr +#else +# define FMT_CONSTEVAL +# define FMT_CONSTEXPR20 +#endif + +#if defined(FMT_USE_NONTYPE_TEMPLATE_ARGS) +// Use the provided definition. +#elif defined(__NVCOMPILER) +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 0 +#elif FMT_GCC_VERSION >= 903 && FMT_CPLUSPLUS >= 201709L +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 +#elif defined(__cpp_nontype_template_args) && \ + __cpp_nontype_template_args >= 201911L +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 +#elif FMT_CLANG_VERSION >= 1200 && FMT_CPLUSPLUS >= 202002L +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 +#else +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 0 +#endif + +#ifdef FMT_USE_CONCEPTS +// Use the provided definition. +#elif defined(__cpp_concepts) +# define FMT_USE_CONCEPTS 1 +#else +# define FMT_USE_CONCEPTS 0 +#endif + +// Check if exceptions are disabled. +#ifdef FMT_EXCEPTIONS +// Use the provided definition. +#elif defined(__GNUC__) && !defined(__EXCEPTIONS) +# define FMT_EXCEPTIONS 0 +#elif FMT_MSC_VERSION && !_HAS_EXCEPTIONS +# define FMT_EXCEPTIONS 0 +#else +# define FMT_EXCEPTIONS 1 +#endif +#if FMT_EXCEPTIONS +# define FMT_TRY try +# define FMT_CATCH(x) catch (x) +#else +# define FMT_TRY if (true) +# define FMT_CATCH(x) if (false) +#endif + +#if FMT_HAS_CPP17_ATTRIBUTE(fallthrough) +# define FMT_FALLTHROUGH [[fallthrough]] +#elif defined(__clang__) +# define FMT_FALLTHROUGH [[clang::fallthrough]] +#elif FMT_GCC_VERSION >= 700 && \ + (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) +# define FMT_FALLTHROUGH [[gnu::fallthrough]] +#else +# define FMT_FALLTHROUGH +#endif + +// Disable [[noreturn]] on MSVC/NVCC because of bogus unreachable code warnings. +#if FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VERSION && !defined(__NVCC__) +# define FMT_NORETURN [[noreturn]] +#else +# define FMT_NORETURN +#endif + +#ifndef FMT_NODISCARD +# if FMT_HAS_CPP17_ATTRIBUTE(nodiscard) +# define FMT_NODISCARD [[nodiscard]] +# else +# define FMT_NODISCARD +# endif +#endif + +#ifdef FMT_DEPRECATED +// Use the provided definition. +#elif FMT_HAS_CPP14_ATTRIBUTE(deprecated) +# define FMT_DEPRECATED [[deprecated]] +#else +# define FMT_DEPRECATED /* deprecated */ +#endif + +#ifdef FMT_INLINE +// Use the provided definition. +#elif FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_ALWAYS_INLINE inline __attribute__((always_inline)) +#else +# define FMT_ALWAYS_INLINE inline +#endif +// A version of FMT_INLINE to prevent code bloat in debug mode. +#ifdef NDEBUG +# define FMT_INLINE FMT_ALWAYS_INLINE +#else +# define FMT_INLINE inline +#endif + +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_VISIBILITY(value) __attribute__((visibility(value))) +#else +# define FMT_VISIBILITY(value) +#endif + +#ifndef FMT_GCC_PRAGMA +// Workaround a _Pragma bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59884 +// and an nvhpc warning: https://github.com/fmtlib/fmt/pull/2582. +# if FMT_GCC_VERSION >= 504 && !defined(__NVCOMPILER) +# define FMT_GCC_PRAGMA(arg) _Pragma(arg) +# else +# define FMT_GCC_PRAGMA(arg) +# endif +#endif + +// GCC < 5 requires this-> in decltype. +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 +# define FMT_DECLTYPE_THIS this-> +#else +# define FMT_DECLTYPE_THIS +#endif + +#if FMT_MSC_VERSION +# define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__)) +# define FMT_UNCHECKED_ITERATOR(It) \ + using _Unchecked_type = It // Mark iterator as checked. +#else +# define FMT_MSC_WARNING(...) +# define FMT_UNCHECKED_ITERATOR(It) using unchecked_type = It +#endif + +// LAMMPS customization +// use 'v11_lmp' namespace instead of 'v11' so that our +// bundled copy does not collide with linking other code +// using system wide installations which may be using +// a different version. + +#ifndef FMT_BEGIN_NAMESPACE +# define FMT_BEGIN_NAMESPACE \ + namespace fmt { \ + inline namespace v11_lmp { +# define FMT_END_NAMESPACE \ + } \ + } +#endif + +#ifndef FMT_EXPORT +# define FMT_EXPORT +# define FMT_BEGIN_EXPORT +# define FMT_END_EXPORT +#endif + +#if !defined(FMT_HEADER_ONLY) && defined(_WIN32) +# if defined(FMT_LIB_EXPORT) +# define FMT_API __declspec(dllexport) +# elif defined(FMT_SHARED) +# define FMT_API __declspec(dllimport) +# endif +#elif defined(FMT_LIB_EXPORT) || defined(FMT_SHARED) +# define FMT_API FMT_VISIBILITY("default") +#endif +#ifndef FMT_API +# define FMT_API +#endif + +#ifndef FMT_UNICODE +# define FMT_UNICODE 1 +#endif + +// Check if rtti is available. +#ifndef FMT_USE_RTTI +// __RTTI is for EDG compilers. _CPPRTTI is for MSVC. +# if defined(__GXX_RTTI) || FMT_HAS_FEATURE(cxx_rtti) || defined(_CPPRTTI) || \ + defined(__INTEL_RTTI__) || defined(__RTTI) +# define FMT_USE_RTTI 1 +# else +# define FMT_USE_RTTI 0 +# endif +#endif + +#define FMT_FWD(...) static_cast(__VA_ARGS__) + +// Enable minimal optimizations for more compact code in debug mode. +// LAMMPS customization: exclude __NVCC__ in addition to __NVCOMPILER for nvcc from CUDA toolkit +// TODO: check if __CUDACC__ is a sufficient condition +FMT_GCC_PRAGMA("GCC push_options") +#if !defined(__OPTIMIZE__) && !defined(__CUDACC__) && !defined(__NVCOMPILER) && !defined(__NVCC__) +FMT_GCC_PRAGMA("GCC optimize(\"Og\")") +#endif + +FMT_BEGIN_NAMESPACE + +// Implementations of enable_if_t and other metafunctions for older systems. +template +using enable_if_t = typename std::enable_if::type; +template +using conditional_t = typename std::conditional::type; +template using bool_constant = std::integral_constant; +template +using remove_reference_t = typename std::remove_reference::type; +template +using remove_const_t = typename std::remove_const::type; +template +using remove_cvref_t = typename std::remove_cv>::type; +template struct type_identity { + using type = T; +}; +template using type_identity_t = typename type_identity::type; +template +using make_unsigned_t = typename std::make_unsigned::type; +template +using underlying_t = typename std::underlying_type::type; + +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 +// A workaround for gcc 4.8 to make void_t work in a SFINAE context. +template struct void_t_impl { + using type = void; +}; +template using void_t = typename void_t_impl::type; +#else +template using void_t = void; +#endif + +struct monostate { + constexpr monostate() {} +}; + +// An enable_if helper to be used in template parameters which results in much +// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed +// to workaround a bug in MSVC 2019 (see #1140 and #1186). +#ifdef FMT_DOC +# define FMT_ENABLE_IF(...) +#else +# define FMT_ENABLE_IF(...) fmt::enable_if_t<(__VA_ARGS__), int> = 0 +#endif + +// This is defined in base.h instead of format.h to avoid injecting in std. +// It is a template to avoid undesirable implicit conversions to std::byte. +#ifdef __cpp_lib_byte +template ::value)> +inline auto format_as(T b) -> unsigned char { + return static_cast(b); +} +#endif + +namespace detail { +// Suppresses "unused variable" warnings with the method described in +// https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/. +// (void)var does not work on many Intel compilers. +template FMT_CONSTEXPR void ignore_unused(const T&...) {} + +constexpr auto is_constant_evaluated(bool default_value = false) noexcept + -> bool { +// Workaround for incompatibility between libstdc++ consteval-based +// std::is_constant_evaluated() implementation and clang-14: +// https://github.com/fmtlib/fmt/issues/3247. +#if FMT_CPLUSPLUS >= 202002L && FMT_GLIBCXX_RELEASE >= 12 && \ + (FMT_CLANG_VERSION >= 1400 && FMT_CLANG_VERSION < 1500) + ignore_unused(default_value); + return __builtin_is_constant_evaluated(); +#elif defined(__cpp_lib_is_constant_evaluated) + ignore_unused(default_value); + return std::is_constant_evaluated(); +#else + return default_value; +#endif +} + +// Suppresses "conditional expression is constant" warnings. +template constexpr auto const_check(T value) -> T { return value; } + +FMT_NORETURN FMT_API void assert_fail(const char* file, int line, + const char* message); + +#if defined(FMT_ASSERT) +// Use the provided definition. +#elif defined(NDEBUG) +// FMT_ASSERT is not empty to avoid -Wempty-body. +# define FMT_ASSERT(condition, message) \ + fmt::detail::ignore_unused((condition), (message)) +#else +# define FMT_ASSERT(condition, message) \ + ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ + ? (void)0 \ + : fmt::detail::assert_fail(__FILE__, __LINE__, (message))) +#endif + +#ifdef FMT_USE_INT128 +// Do nothing. +#elif defined(__SIZEOF_INT128__) && !defined(__NVCC__) && \ + !(FMT_CLANG_VERSION && FMT_MSC_VERSION) +# define FMT_USE_INT128 1 +using int128_opt = __int128_t; // An optional native 128-bit integer. +using uint128_opt = __uint128_t; +template inline auto convert_for_visit(T value) -> T { + return value; +} +#else +# define FMT_USE_INT128 0 +#endif +#if !FMT_USE_INT128 +enum class int128_opt {}; +enum class uint128_opt {}; +// Reduce template instantiations. +template auto convert_for_visit(T) -> monostate { return {}; } +#endif + +// Casts a nonnegative integer to unsigned. +template +FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t { +#if 0 + // LAMMPS customization: disable assertion to avoid bogus warnings + FMT_ASSERT(std::is_unsigned::value || value >= 0, "negative value"); +#endif + return static_cast>(value); +} + +// A heuristic to detect std::string and std::[experimental::]string_view. +// It is mainly used to avoid dependency on <[experimental/]string_view>. +template +struct is_std_string_like : std::false_type {}; +template +struct is_std_string_like().find_first_of( + typename T::value_type(), 0))>> + : std::is_convertible().data()), + const typename T::value_type*> {}; + +// Returns true iff the literal encoding is UTF-8. +constexpr auto is_utf8_enabled() -> bool { + // Avoid an MSVC sign extension bug: https://github.com/fmtlib/fmt/pull/2297. + using uchar = unsigned char; + return sizeof("\u00A7") == 3 && uchar("\u00A7"[0]) == 0xC2 && + uchar("\u00A7"[1]) == 0xA7; +} +constexpr auto use_utf8() -> bool { + return !FMT_MSC_VERSION || is_utf8_enabled(); +} + +static_assert(!FMT_UNICODE || use_utf8(), + "Unicode support requires compiling with /utf-8"); + +template FMT_CONSTEXPR auto length(const Char* s) -> size_t { + size_t len = 0; + while (*s++) ++len; + return len; +} + +template +FMT_CONSTEXPR auto compare(const Char* s1, const Char* s2, std::size_t n) + -> int { + if (!is_constant_evaluated() && sizeof(Char) == 1) return memcmp(s1, s2, n); + for (; n != 0; ++s1, ++s2, --n) { + if (*s1 < *s2) return -1; + if (*s1 > *s2) return 1; + } + return 0; +} + +namespace adl { +using namespace std; + +template +auto invoke_back_inserter() + -> decltype(back_inserter(std::declval())); +} // namespace adl + +template +struct is_back_insert_iterator : std::false_type {}; + +template +struct is_back_insert_iterator< + It, bool_constant()), + It>::value>> : std::true_type {}; + +// Extracts a reference to the container from *insert_iterator. +template +inline auto get_container(OutputIt it) -> typename OutputIt::container_type& { + struct accessor : OutputIt { + accessor(OutputIt base) : OutputIt(base) {} + using OutputIt::container; + }; + return *accessor(it).container; +} +} // namespace detail + +// Checks whether T is a container with contiguous storage. +template struct is_contiguous : std::false_type {}; + +/** + * An implementation of `std::basic_string_view` for pre-C++17. It provides a + * subset of the API. `fmt::basic_string_view` is used for format strings even + * if `std::basic_string_view` is available to prevent issues when a library is + * compiled with a different `-std` option than the client code (which is not + * recommended). + */ +FMT_EXPORT +template class basic_string_view { + private: + const Char* data_; + size_t size_; + + public: + using value_type = Char; + using iterator = const Char*; + + constexpr basic_string_view() noexcept : data_(nullptr), size_(0) {} + + /// Constructs a string reference object from a C string and a size. + constexpr basic_string_view(const Char* s, size_t count) noexcept + : data_(s), size_(count) {} + + constexpr basic_string_view(std::nullptr_t) = delete; + + /// Constructs a string reference object from a C string. + FMT_CONSTEXPR20 + basic_string_view(const Char* s) + : data_(s), + size_(detail::const_check(std::is_same::value && + !detail::is_constant_evaluated(false)) + ? strlen(reinterpret_cast(s)) + : detail::length(s)) {} + + /// Constructs a string reference from a `std::basic_string` or a + /// `std::basic_string_view` object. + template ::value&& std::is_same< + typename S::value_type, Char>::value)> + FMT_CONSTEXPR basic_string_view(const S& s) noexcept + : data_(s.data()), size_(s.size()) {} + + /// Returns a pointer to the string data. + constexpr auto data() const noexcept -> const Char* { return data_; } + + /// Returns the string size. + constexpr auto size() const noexcept -> size_t { return size_; } + + constexpr auto begin() const noexcept -> iterator { return data_; } + constexpr auto end() const noexcept -> iterator { return data_ + size_; } + + constexpr auto operator[](size_t pos) const noexcept -> const Char& { + return data_[pos]; + } + + FMT_CONSTEXPR void remove_prefix(size_t n) noexcept { + data_ += n; + size_ -= n; + } + + FMT_CONSTEXPR auto starts_with(basic_string_view sv) const noexcept + -> bool { + return size_ >= sv.size_ && detail::compare(data_, sv.data_, sv.size_) == 0; + } + FMT_CONSTEXPR auto starts_with(Char c) const noexcept -> bool { + return size_ >= 1 && *data_ == c; + } + FMT_CONSTEXPR auto starts_with(const Char* s) const -> bool { + return starts_with(basic_string_view(s)); + } + + // Lexicographically compare this string reference to other. + FMT_CONSTEXPR auto compare(basic_string_view other) const -> int { + size_t str_size = size_ < other.size_ ? size_ : other.size_; + int result = detail::compare(data_, other.data_, str_size); + if (result == 0) + result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); + return result; + } + + FMT_CONSTEXPR friend auto operator==(basic_string_view lhs, + basic_string_view rhs) -> bool { + return lhs.compare(rhs) == 0; + } + friend auto operator!=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) != 0; + } + friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) < 0; + } + friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) <= 0; + } + friend auto operator>(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) > 0; + } + friend auto operator>=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) >= 0; + } +}; + +FMT_EXPORT +using string_view = basic_string_view; + +/// Specifies if `T` is a character type. Can be specialized by users. +FMT_EXPORT +template struct is_char : std::false_type {}; +template <> struct is_char : std::true_type {}; + +namespace detail { + +// Constructs fmt::basic_string_view from types implicitly convertible +// to it, deducing Char. Explicitly convertible types such as the ones returned +// from FMT_STRING are intentionally excluded. +template ::value)> +constexpr auto to_string_view(const Char* s) -> basic_string_view { + return s; +} +template ::value)> +constexpr auto to_string_view(const T& s) + -> basic_string_view { + return s; +} +template +constexpr auto to_string_view(basic_string_view s) + -> basic_string_view { + return s; +} + +template +struct has_to_string_view : std::false_type {}; +// detail:: is intentional since to_string_view is not an extension point. +template +struct has_to_string_view< + T, void_t()))>> + : std::true_type {}; + +template struct string_literal { + static constexpr Char value[sizeof...(C)] = {C...}; + constexpr operator basic_string_view() const { + return {value, sizeof...(C)}; + } +}; +#if FMT_CPLUSPLUS < 201703L +template +constexpr Char string_literal::value[sizeof...(C)]; +#endif + +enum class type { + none_type, + // Integer types should go first, + int_type, + uint_type, + long_long_type, + ulong_long_type, + int128_type, + uint128_type, + bool_type, + char_type, + last_integer_type = char_type, + // followed by floating-point types. + float_type, + double_type, + long_double_type, + last_numeric_type = long_double_type, + cstring_type, + string_type, + pointer_type, + custom_type +}; + +// Maps core type T to the corresponding type enum constant. +template +struct type_constant : std::integral_constant {}; + +#define FMT_TYPE_CONSTANT(Type, constant) \ + template \ + struct type_constant \ + : std::integral_constant {} + +FMT_TYPE_CONSTANT(int, int_type); +FMT_TYPE_CONSTANT(unsigned, uint_type); +FMT_TYPE_CONSTANT(long long, long_long_type); +FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); +FMT_TYPE_CONSTANT(int128_opt, int128_type); +FMT_TYPE_CONSTANT(uint128_opt, uint128_type); +FMT_TYPE_CONSTANT(bool, bool_type); +FMT_TYPE_CONSTANT(Char, char_type); +FMT_TYPE_CONSTANT(float, float_type); +FMT_TYPE_CONSTANT(double, double_type); +FMT_TYPE_CONSTANT(long double, long_double_type); +FMT_TYPE_CONSTANT(const Char*, cstring_type); +FMT_TYPE_CONSTANT(basic_string_view, string_type); +FMT_TYPE_CONSTANT(const void*, pointer_type); + +constexpr auto is_integral_type(type t) -> bool { + return t > type::none_type && t <= type::last_integer_type; +} +constexpr auto is_arithmetic_type(type t) -> bool { + return t > type::none_type && t <= type::last_numeric_type; +} + +constexpr auto set(type rhs) -> int { return 1 << static_cast(rhs); } +constexpr auto in(type t, int set) -> bool { + return ((set >> static_cast(t)) & 1) != 0; +} + +// Bitsets of types. +enum { + sint_set = + set(type::int_type) | set(type::long_long_type) | set(type::int128_type), + uint_set = set(type::uint_type) | set(type::ulong_long_type) | + set(type::uint128_type), + bool_set = set(type::bool_type), + char_set = set(type::char_type), + float_set = set(type::float_type) | set(type::double_type) | + set(type::long_double_type), + string_set = set(type::string_type), + cstring_set = set(type::cstring_type), + pointer_set = set(type::pointer_type) +}; +} // namespace detail + +/// Reports a format error at compile time or, via a `format_error` exception, +/// at runtime. +// This function is intentionally not constexpr to give a compile-time error. +FMT_NORETURN FMT_API void report_error(const char* message); + +FMT_DEPRECATED FMT_NORETURN inline void throw_format_error( + const char* message) { + report_error(message); +} + +/// String's character (code unit) type. +template ()))> +using char_t = typename V::value_type; + +/** + * Parsing context consisting of a format string range being parsed and an + * argument counter for automatic indexing. + * You can use the `format_parse_context` type alias for `char` instead. + */ +FMT_EXPORT +template class basic_format_parse_context { + private: + basic_string_view format_str_; + int next_arg_id_; + + FMT_CONSTEXPR void do_check_arg_id(int id); + + public: + using char_type = Char; + using iterator = const Char*; + + explicit constexpr basic_format_parse_context( + basic_string_view format_str, int next_arg_id = 0) + : format_str_(format_str), next_arg_id_(next_arg_id) {} + + /// Returns an iterator to the beginning of the format string range being + /// parsed. + constexpr auto begin() const noexcept -> iterator { + return format_str_.begin(); + } + + /// Returns an iterator past the end of the format string range being parsed. + constexpr auto end() const noexcept -> iterator { return format_str_.end(); } + + /// Advances the begin iterator to `it`. + FMT_CONSTEXPR void advance_to(iterator it) { + format_str_.remove_prefix(detail::to_unsigned(it - begin())); + } + + /// Reports an error if using the manual argument indexing; otherwise returns + /// the next argument index and switches to the automatic indexing. + FMT_CONSTEXPR auto next_arg_id() -> int { + if (next_arg_id_ < 0) { + report_error("cannot switch from manual to automatic argument indexing"); + return 0; + } + int id = next_arg_id_++; + do_check_arg_id(id); + return id; + } + + /// Reports an error if using the automatic argument indexing; otherwise + /// switches to the manual indexing. + FMT_CONSTEXPR void check_arg_id(int id) { + if (next_arg_id_ > 0) { + report_error("cannot switch from automatic to manual argument indexing"); + return; + } + next_arg_id_ = -1; + do_check_arg_id(id); + } + FMT_CONSTEXPR void check_arg_id(basic_string_view) { + next_arg_id_ = -1; + } + FMT_CONSTEXPR void check_dynamic_spec(int arg_id); +}; + +FMT_EXPORT +using format_parse_context = basic_format_parse_context; + +namespace detail { +// A parse context with extra data used only in compile-time checks. +template +class compile_parse_context : public basic_format_parse_context { + private: + int num_args_; + const type* types_; + using base = basic_format_parse_context; + + public: + explicit FMT_CONSTEXPR compile_parse_context( + basic_string_view format_str, int num_args, const type* types, + int next_arg_id = 0) + : base(format_str, next_arg_id), num_args_(num_args), types_(types) {} + + constexpr auto num_args() const -> int { return num_args_; } + constexpr auto arg_type(int id) const -> type { return types_[id]; } + + FMT_CONSTEXPR auto next_arg_id() -> int { + int id = base::next_arg_id(); + if (id >= num_args_) report_error("argument not found"); + return id; + } + + FMT_CONSTEXPR void check_arg_id(int id) { + base::check_arg_id(id); + if (id >= num_args_) report_error("argument not found"); + } + using base::check_arg_id; + + FMT_CONSTEXPR void check_dynamic_spec(int arg_id) { + detail::ignore_unused(arg_id); + if (arg_id < num_args_ && types_ && !is_integral_type(types_[arg_id])) + report_error("width/precision is not integer"); + } +}; + +/// A contiguous memory buffer with an optional growing ability. It is an +/// internal class and shouldn't be used directly, only via `memory_buffer`. +template class buffer { + private: + T* ptr_; + size_t size_; + size_t capacity_; + + using grow_fun = void (*)(buffer& buf, size_t capacity); + grow_fun grow_; + + protected: + // Don't initialize ptr_ since it is not accessed to save a few cycles. + FMT_MSC_WARNING(suppress : 26495) + FMT_CONSTEXPR20 buffer(grow_fun grow, size_t sz) noexcept + : size_(sz), capacity_(sz), grow_(grow) {} + + constexpr buffer(grow_fun grow, T* p = nullptr, size_t sz = 0, + size_t cap = 0) noexcept + : ptr_(p), size_(sz), capacity_(cap), grow_(grow) {} + + FMT_CONSTEXPR20 ~buffer() = default; + buffer(buffer&&) = default; + + /// Sets the buffer data and capacity. + FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept { + ptr_ = buf_data; + capacity_ = buf_capacity; + } + + public: + using value_type = T; + using const_reference = const T&; + + buffer(const buffer&) = delete; + void operator=(const buffer&) = delete; + + auto begin() noexcept -> T* { return ptr_; } + auto end() noexcept -> T* { return ptr_ + size_; } + + auto begin() const noexcept -> const T* { return ptr_; } + auto end() const noexcept -> const T* { return ptr_ + size_; } + + /// Returns the size of this buffer. + constexpr auto size() const noexcept -> size_t { return size_; } + + /// Returns the capacity of this buffer. + constexpr auto capacity() const noexcept -> size_t { return capacity_; } + + /// Returns a pointer to the buffer data (not null-terminated). + FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; } + FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; } + + /// Clears this buffer. + void clear() { size_ = 0; } + + // Tries resizing the buffer to contain `count` elements. If T is a POD type + // the new elements may not be initialized. + FMT_CONSTEXPR void try_resize(size_t count) { + try_reserve(count); + size_ = count <= capacity_ ? count : capacity_; + } + + // Tries increasing the buffer capacity to `new_capacity`. It can increase the + // capacity by a smaller amount than requested but guarantees there is space + // for at least one additional element either by increasing the capacity or by + // flushing the buffer if it is full. + FMT_CONSTEXPR void try_reserve(size_t new_capacity) { + if (new_capacity > capacity_) grow_(*this, new_capacity); + } + + FMT_CONSTEXPR void push_back(const T& value) { + try_reserve(size_ + 1); + ptr_[size_++] = value; + } + + /// Appends data to the end of the buffer. + template void append(const U* begin, const U* end) { + while (begin != end) { + auto count = to_unsigned(end - begin); + try_reserve(size_ + count); + auto free_cap = capacity_ - size_; + if (free_cap < count) count = free_cap; + // A loop is faster than memcpy on small sizes. + T* out = ptr_ + size_; + for (size_t i = 0; i < count; ++i) out[i] = begin[i]; + size_ += count; + begin += count; + } + } + + template FMT_CONSTEXPR auto operator[](Idx index) -> T& { + return ptr_[index]; + } + template + FMT_CONSTEXPR auto operator[](Idx index) const -> const T& { + return ptr_[index]; + } +}; + +struct buffer_traits { + explicit buffer_traits(size_t) {} + auto count() const -> size_t { return 0; } + auto limit(size_t size) -> size_t { return size; } +}; + +class fixed_buffer_traits { + private: + size_t count_ = 0; + size_t limit_; + + public: + explicit fixed_buffer_traits(size_t limit) : limit_(limit) {} + auto count() const -> size_t { return count_; } + auto limit(size_t size) -> size_t { + size_t n = limit_ > count_ ? limit_ - count_ : 0; + count_ += size; + return size < n ? size : n; + } +}; + +// A buffer that writes to an output iterator when flushed. +template +class iterator_buffer : public Traits, public buffer { + private: + OutputIt out_; + enum { buffer_size = 256 }; + T data_[buffer_size]; + + static FMT_CONSTEXPR void grow(buffer& buf, size_t) { + if (buf.size() == buffer_size) static_cast(buf).flush(); + } + + void flush() { + auto size = this->size(); + this->clear(); + const T* begin = data_; + const T* end = begin + this->limit(size); + while (begin != end) *out_++ = *begin++; + } + + public: + explicit iterator_buffer(OutputIt out, size_t n = buffer_size) + : Traits(n), buffer(grow, data_, 0, buffer_size), out_(out) {} + iterator_buffer(iterator_buffer&& other) noexcept + : Traits(other), + buffer(grow, data_, 0, buffer_size), + out_(other.out_) {} + ~iterator_buffer() { + // Don't crash if flush fails during unwinding. + FMT_TRY { flush(); } + FMT_CATCH(...) {} + } + + auto out() -> OutputIt { + flush(); + return out_; + } + auto count() const -> size_t { return Traits::count() + this->size(); } +}; + +template +class iterator_buffer : public fixed_buffer_traits, + public buffer { + private: + T* out_; + enum { buffer_size = 256 }; + T data_[buffer_size]; + + static FMT_CONSTEXPR void grow(buffer& buf, size_t) { + if (buf.size() == buf.capacity()) + static_cast(buf).flush(); + } + + void flush() { + size_t n = this->limit(this->size()); + if (this->data() == out_) { + out_ += n; + this->set(data_, buffer_size); + } + this->clear(); + } + + public: + explicit iterator_buffer(T* out, size_t n = buffer_size) + : fixed_buffer_traits(n), buffer(grow, out, 0, n), out_(out) {} + iterator_buffer(iterator_buffer&& other) noexcept + : fixed_buffer_traits(other), + buffer(static_cast(other)), + out_(other.out_) { + if (this->data() != out_) { + this->set(data_, buffer_size); + this->clear(); + } + } + ~iterator_buffer() { flush(); } + + auto out() -> T* { + flush(); + return out_; + } + auto count() const -> size_t { + return fixed_buffer_traits::count() + this->size(); + } +}; + +template class iterator_buffer : public buffer { + public: + explicit iterator_buffer(T* out, size_t = 0) + : buffer([](buffer&, size_t) {}, out, 0, ~size_t()) {} + + auto out() -> T* { return &*this->end(); } +}; + +// A buffer that writes to a container with the contiguous storage. +template +class iterator_buffer< + OutputIt, + enable_if_t::value && + is_contiguous::value, + typename OutputIt::container_type::value_type>> + : public buffer { + private: + using container_type = typename OutputIt::container_type; + using value_type = typename container_type::value_type; + container_type& container_; + + static FMT_CONSTEXPR void grow(buffer& buf, size_t capacity) { + auto& self = static_cast(buf); + self.container_.resize(capacity); + self.set(&self.container_[0], capacity); + } + + public: + explicit iterator_buffer(container_type& c) + : buffer(grow, c.size()), container_(c) {} + explicit iterator_buffer(OutputIt out, size_t = 0) + : iterator_buffer(get_container(out)) {} + + auto out() -> OutputIt { return back_inserter(container_); } +}; + +// A buffer that counts the number of code units written discarding the output. +template class counting_buffer : public buffer { + private: + enum { buffer_size = 256 }; + T data_[buffer_size]; + size_t count_ = 0; + + static FMT_CONSTEXPR void grow(buffer& buf, size_t) { + if (buf.size() != buffer_size) return; + static_cast(buf).count_ += buf.size(); + buf.clear(); + } + + public: + counting_buffer() : buffer(grow, data_, 0, buffer_size) {} + + auto count() -> size_t { return count_ + this->size(); } +}; +} // namespace detail + +template +FMT_CONSTEXPR void basic_format_parse_context::do_check_arg_id(int id) { + // Argument id is only checked at compile-time during parsing because + // formatting has its own validation. + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + if (id >= static_cast(this)->num_args()) + report_error("argument not found"); + } +} + +template +FMT_CONSTEXPR void basic_format_parse_context::check_dynamic_spec( + int arg_id) { + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + static_cast(this)->check_dynamic_spec(arg_id); + } +} + +FMT_EXPORT template class basic_format_arg; +FMT_EXPORT template class basic_format_args; +FMT_EXPORT template class dynamic_format_arg_store; + +// A formatter for objects of type T. +FMT_EXPORT +template +struct formatter { + // A deleted default constructor indicates a disabled formatter. + formatter() = delete; +}; + +// Specifies if T has an enabled formatter specialization. A type can be +// formattable even if it doesn't have a formatter e.g. via a conversion. +template +using has_formatter = + std::is_constructible>; + +// An output iterator that appends to a buffer. It is used instead of +// back_insert_iterator to reduce symbol sizes and avoid dependency. +template class basic_appender { + private: + detail::buffer* buffer_; + + friend auto get_container(basic_appender app) -> detail::buffer& { + return *app.buffer_; + } + + public: + using iterator_category = int; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; + using container_type = detail::buffer; + FMT_UNCHECKED_ITERATOR(basic_appender); + + FMT_CONSTEXPR basic_appender(detail::buffer& buf) : buffer_(&buf) {} + + auto operator=(T c) -> basic_appender& { + buffer_->push_back(c); + return *this; + } + auto operator*() -> basic_appender& { return *this; } + auto operator++() -> basic_appender& { return *this; } + auto operator++(int) -> basic_appender { return *this; } +}; + +using appender = basic_appender; + +namespace detail { +template +struct is_back_insert_iterator> : std::true_type {}; + +template +struct locking : std::true_type {}; +template +struct locking>::nonlocking>> + : std::false_type {}; + +template FMT_CONSTEXPR inline auto is_locking() -> bool { + return locking::value; +} +template +FMT_CONSTEXPR inline auto is_locking() -> bool { + return locking::value || is_locking(); +} + +// An optimized version of std::copy with the output value type (T). +template ::value)> +auto copy(InputIt begin, InputIt end, OutputIt out) -> OutputIt { + get_container(out).append(begin, end); + return out; +} + +template ::value)> +FMT_CONSTEXPR auto copy(InputIt begin, InputIt end, OutputIt out) -> OutputIt { + while (begin != end) *out++ = static_cast(*begin++); + return out; +} + +template +FMT_CONSTEXPR auto copy(basic_string_view s, OutputIt out) -> OutputIt { + return copy(s.begin(), s.end(), out); +} + +template +constexpr auto has_const_formatter_impl(T*) + -> decltype(typename Context::template formatter_type().format( + std::declval(), std::declval()), + true) { + return true; +} +template +constexpr auto has_const_formatter_impl(...) -> bool { + return false; +} +template +constexpr auto has_const_formatter() -> bool { + return has_const_formatter_impl(static_cast(nullptr)); +} + +template +struct is_buffer_appender : std::false_type {}; +template +struct is_buffer_appender< + It, bool_constant< + is_back_insert_iterator::value && + std::is_base_of, + typename It::container_type>::value>> + : std::true_type {}; + +// Maps an output iterator to a buffer. +template ::value)> +auto get_buffer(OutputIt out) -> iterator_buffer { + return iterator_buffer(out); +} +template ::value)> +auto get_buffer(OutputIt out) -> buffer& { + return get_container(out); +} + +template +auto get_iterator(Buf& buf, OutputIt) -> decltype(buf.out()) { + return buf.out(); +} +template +auto get_iterator(buffer&, OutputIt out) -> OutputIt { + return out; +} + +struct view {}; + +template struct named_arg : view { + const Char* name; + const T& value; + named_arg(const Char* n, const T& v) : name(n), value(v) {} +}; + +template struct named_arg_info { + const Char* name; + int id; +}; + +template struct is_named_arg : std::false_type {}; +template struct is_statically_named_arg : std::false_type {}; + +template +struct is_named_arg> : std::true_type {}; + +template constexpr auto count() -> size_t { return B ? 1 : 0; } +template constexpr auto count() -> size_t { + return (B1 ? 1 : 0) + count(); +} + +template constexpr auto count_named_args() -> size_t { + return count::value...>(); +} + +template +constexpr auto count_statically_named_args() -> size_t { + return count::value...>(); +} + +struct unformattable {}; +struct unformattable_char : unformattable {}; +struct unformattable_pointer : unformattable {}; + +template struct string_value { + const Char* data; + size_t size; +}; + +template struct named_arg_value { + const named_arg_info* data; + size_t size; +}; + +template struct custom_value { + using parse_context = typename Context::parse_context_type; + void* value; + void (*format)(void* arg, parse_context& parse_ctx, Context& ctx); +}; + +// A formatting argument value. +template class value { + public: + using char_type = typename Context::char_type; + + union { + monostate no_value; + int int_value; + unsigned uint_value; + long long long_long_value; + unsigned long long ulong_long_value; + int128_opt int128_value; + uint128_opt uint128_value; + bool bool_value; + char_type char_value; + float float_value; + double double_value; + long double long_double_value; + const void* pointer; + string_value string; + custom_value custom; + named_arg_value named_args; + }; + + constexpr FMT_ALWAYS_INLINE value() : no_value() {} + constexpr FMT_ALWAYS_INLINE value(int val) : int_value(val) {} + constexpr FMT_ALWAYS_INLINE value(unsigned val) : uint_value(val) {} + constexpr FMT_ALWAYS_INLINE value(long long val) : long_long_value(val) {} + constexpr FMT_ALWAYS_INLINE value(unsigned long long val) + : ulong_long_value(val) {} + FMT_ALWAYS_INLINE value(int128_opt val) : int128_value(val) {} + FMT_ALWAYS_INLINE value(uint128_opt val) : uint128_value(val) {} + constexpr FMT_ALWAYS_INLINE value(float val) : float_value(val) {} + constexpr FMT_ALWAYS_INLINE value(double val) : double_value(val) {} + FMT_ALWAYS_INLINE value(long double val) : long_double_value(val) {} + constexpr FMT_ALWAYS_INLINE value(bool val) : bool_value(val) {} + constexpr FMT_ALWAYS_INLINE value(char_type val) : char_value(val) {} + FMT_CONSTEXPR FMT_ALWAYS_INLINE value(const char_type* val) { + string.data = val; + if (is_constant_evaluated()) string.size = {}; + } + FMT_CONSTEXPR FMT_ALWAYS_INLINE value(basic_string_view val) { + string.data = val.data(); + string.size = val.size(); + } + FMT_ALWAYS_INLINE value(const void* val) : pointer(val) {} + FMT_ALWAYS_INLINE value(const named_arg_info* args, size_t size) + : named_args{args, size} {} + + template FMT_CONSTEXPR20 FMT_ALWAYS_INLINE value(T& val) { + using value_type = remove_const_t; + // T may overload operator& e.g. std::vector::reference in libc++. +#if defined(__cpp_if_constexpr) + if constexpr (std::is_same::value) + custom.value = const_cast(&val); +#endif + if (!is_constant_evaluated()) + custom.value = const_cast(&reinterpret_cast(val)); + // Get the formatter type through the context to allow different contexts + // have different extension points, e.g. `formatter` for `format` and + // `printf_formatter` for `printf`. + custom.format = format_custom_arg< + value_type, typename Context::template formatter_type>; + } + value(unformattable); + value(unformattable_char); + value(unformattable_pointer); + + private: + // Formats an argument of a custom type, such as a user-defined class. + template + static void format_custom_arg(void* arg, + typename Context::parse_context_type& parse_ctx, + Context& ctx) { + auto f = Formatter(); + parse_ctx.advance_to(f.parse(parse_ctx)); + using qualified_type = + conditional_t(), const T, T>; + // format must be const for compatibility with std::format and compilation. + const auto& cf = f; + ctx.advance_to(cf.format(*static_cast(arg), ctx)); + } +}; + +// To minimize the number of types we need to deal with, long is translated +// either to int or to long long depending on its size. +enum { long_short = sizeof(long) == sizeof(int) }; +using long_type = conditional_t; +using ulong_type = conditional_t; + +template struct format_as_result { + template ::value || std::is_class::value)> + static auto map(U*) -> remove_cvref_t()))>; + static auto map(...) -> void; + + using type = decltype(map(static_cast(nullptr))); +}; +template using format_as_t = typename format_as_result::type; + +template +struct has_format_as + : bool_constant, void>::value> {}; + +#define FMT_MAP_API FMT_CONSTEXPR FMT_ALWAYS_INLINE + +// Maps formatting arguments to core types. +// arg_mapper reports errors by returning unformattable instead of using +// static_assert because it's used in the is_formattable trait. +template struct arg_mapper { + using char_type = typename Context::char_type; + + FMT_MAP_API auto map(signed char val) -> int { return val; } + FMT_MAP_API auto map(unsigned char val) -> unsigned { return val; } + FMT_MAP_API auto map(short val) -> int { return val; } + FMT_MAP_API auto map(unsigned short val) -> unsigned { return val; } + FMT_MAP_API auto map(int val) -> int { return val; } + FMT_MAP_API auto map(unsigned val) -> unsigned { return val; } + FMT_MAP_API auto map(long val) -> long_type { return val; } + FMT_MAP_API auto map(unsigned long val) -> ulong_type { return val; } + FMT_MAP_API auto map(long long val) -> long long { return val; } + FMT_MAP_API auto map(unsigned long long val) -> unsigned long long { + return val; + } + FMT_MAP_API auto map(int128_opt val) -> int128_opt { return val; } + FMT_MAP_API auto map(uint128_opt val) -> uint128_opt { return val; } + FMT_MAP_API auto map(bool val) -> bool { return val; } + + template ::value || + std::is_same::value)> + FMT_MAP_API auto map(T val) -> char_type { + return val; + } + template ::value || +#ifdef __cpp_char8_t + std::is_same::value || +#endif + std::is_same::value || + std::is_same::value) && + !std::is_same::value, + int> = 0> + FMT_MAP_API auto map(T) -> unformattable_char { + return {}; + } + + FMT_MAP_API auto map(float val) -> float { return val; } + FMT_MAP_API auto map(double val) -> double { return val; } + FMT_MAP_API auto map(long double val) -> long double { return val; } + + FMT_MAP_API auto map(char_type* val) -> const char_type* { return val; } + FMT_MAP_API auto map(const char_type* val) -> const char_type* { return val; } + template , + FMT_ENABLE_IF(std::is_same::value && + !std::is_pointer::value)> + FMT_MAP_API auto map(const T& val) -> basic_string_view { + return to_string_view(val); + } + template , + FMT_ENABLE_IF(!std::is_same::value && + !std::is_pointer::value)> + FMT_MAP_API auto map(const T&) -> unformattable_char { + return {}; + } + + FMT_MAP_API auto map(void* val) -> const void* { return val; } + FMT_MAP_API auto map(const void* val) -> const void* { return val; } + FMT_MAP_API auto map(volatile void* val) -> const void* { + return const_cast(val); + } + FMT_MAP_API auto map(const volatile void* val) -> const void* { + return const_cast(val); + } + FMT_MAP_API auto map(std::nullptr_t val) -> const void* { return val; } + + // Use SFINAE instead of a const T* parameter to avoid a conflict with the + // array overload. + template < + typename T, + FMT_ENABLE_IF( + std::is_pointer::value || std::is_member_pointer::value || + std::is_function::type>::value || + (std::is_array::value && + !std::is_convertible::value))> + FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer { + return {}; + } + + template ::value)> + FMT_MAP_API auto map(const T (&values)[N]) -> const T (&)[N] { + return values; + } + + // Only map owning types because mapping views can be unsafe. + template , + FMT_ENABLE_IF(std::is_arithmetic::value)> + FMT_MAP_API auto map(const T& val) -> decltype(FMT_DECLTYPE_THIS map(U())) { + return map(format_as(val)); + } + + template > + struct formattable : bool_constant() || + (has_formatter::value && + !std::is_const::value)> {}; + + template ::value)> + FMT_MAP_API auto do_map(T& val) -> T& { + return val; + } + template ::value)> + FMT_MAP_API auto do_map(T&) -> unformattable { + return {}; + } + + // is_fundamental is used to allow formatters for extended FP types. + template , + FMT_ENABLE_IF( + (std::is_class::value || std::is_enum::value || + std::is_union::value || std::is_fundamental::value) && + !has_to_string_view::value && !is_char::value && + !is_named_arg::value && !std::is_integral::value && + !std::is_arithmetic>::value)> + FMT_MAP_API auto map(T& val) -> decltype(FMT_DECLTYPE_THIS do_map(val)) { + return do_map(val); + } + + template ::value)> + FMT_MAP_API auto map(const T& named_arg) + -> decltype(FMT_DECLTYPE_THIS map(named_arg.value)) { + return map(named_arg.value); + } + + auto map(...) -> unformattable { return {}; } +}; + +// A type constant after applying arg_mapper. +template +using mapped_type_constant = + type_constant().map(std::declval())), + typename Context::char_type>; + +enum { packed_arg_bits = 4 }; +// Maximum number of arguments with packed types. +enum { max_packed_args = 62 / packed_arg_bits }; +enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; +enum : unsigned long long { has_named_args_bit = 1ULL << 62 }; + +template +struct is_output_iterator : std::false_type {}; + +template <> struct is_output_iterator : std::true_type {}; + +template +struct is_output_iterator< + It, T, void_t()++ = std::declval())>> + : std::true_type {}; + +// A type-erased reference to an std::locale to avoid a heavy include. +class locale_ref { + private: + const void* locale_; // A type-erased pointer to std::locale. + + public: + constexpr locale_ref() : locale_(nullptr) {} + template explicit locale_ref(const Locale& loc); + + explicit operator bool() const noexcept { return locale_ != nullptr; } + + template auto get() const -> Locale; +}; + +template constexpr auto encode_types() -> unsigned long long { + return 0; +} + +template +constexpr auto encode_types() -> unsigned long long { + return static_cast(mapped_type_constant::value) | + (encode_types() << packed_arg_bits); +} + +template +constexpr unsigned long long make_descriptor() { + return NUM_ARGS <= max_packed_args ? encode_types() + : is_unpacked_bit | NUM_ARGS; +} + +// This type is intentionally undefined, only used for errors. +template +#if FMT_CLANG_VERSION && FMT_CLANG_VERSION <= 1500 +// https://github.com/fmtlib/fmt/issues/3796 +struct type_is_unformattable_for { +}; +#else +struct type_is_unformattable_for; +#endif + +template +FMT_CONSTEXPR auto make_arg(T& val) -> value { + using arg_type = remove_cvref_t().map(val))>; + + // Use enum instead of constexpr because the latter may generate code. + enum { + formattable_char = !std::is_same::value + }; + static_assert(formattable_char, "Mixing character types is disallowed."); + + // Formatting of arbitrary pointers is disallowed. If you want to format a + // pointer cast it to `void*` or `const void*`. In particular, this forbids + // formatting of `[const] volatile char*` printed as bool by iostreams. + enum { + formattable_pointer = !std::is_same::value + }; + static_assert(formattable_pointer, + "Formatting of non-void pointers is disallowed."); + + enum { formattable = !std::is_same::value }; +#if defined(__cpp_if_constexpr) + if constexpr (!formattable) + type_is_unformattable_for _; +#endif + static_assert( + formattable, + "Cannot format an argument. To make type T formattable provide a " + "formatter specialization: https://fmt.dev/latest/api.html#udt"); + return {arg_mapper().map(val)}; +} + +template +FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg { + auto arg = basic_format_arg(); + arg.type_ = mapped_type_constant::value; + arg.value_ = make_arg(val); + return arg; +} + +template +FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg { + return make_arg(val); +} + +template +using arg_t = conditional_t, + basic_format_arg>; + +template ::value)> +void init_named_arg(named_arg_info*, int& arg_index, int&, const T&) { + ++arg_index; +} +template ::value)> +void init_named_arg(named_arg_info* named_args, int& arg_index, + int& named_arg_index, const T& arg) { + named_args[named_arg_index++] = {arg.name, arg_index++}; +} + +// An array of references to arguments. It can be implicitly converted to +// `fmt::basic_format_args` for passing into type-erased formatting functions +// such as `fmt::vformat`. +template +struct format_arg_store { + // args_[0].named_args points to named_args to avoid bloating format_args. + // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. + static constexpr size_t ARGS_ARR_SIZE = 1 + (NUM_ARGS != 0 ? NUM_ARGS : +1); + + arg_t args[ARGS_ARR_SIZE]; + named_arg_info named_args[NUM_NAMED_ARGS]; + + template + FMT_MAP_API format_arg_store(T&... values) + : args{{named_args, NUM_NAMED_ARGS}, + make_arg(values)...} { + using dummy = int[]; + int arg_index = 0, named_arg_index = 0; + (void)dummy{ + 0, + (init_named_arg(named_args, arg_index, named_arg_index, values), 0)...}; + } + + format_arg_store(format_arg_store&& rhs) { + args[0] = {named_args, NUM_NAMED_ARGS}; + for (size_t i = 1; i < ARGS_ARR_SIZE; ++i) args[i] = rhs.args[i]; + for (size_t i = 0; i < NUM_NAMED_ARGS; ++i) + named_args[i] = rhs.named_args[i]; + } + + format_arg_store(const format_arg_store& rhs) = delete; + format_arg_store& operator=(const format_arg_store& rhs) = delete; + format_arg_store& operator=(format_arg_store&& rhs) = delete; +}; + +// A specialization of format_arg_store without named arguments. +// It is a plain struct to reduce binary size in debug mode. +template +struct format_arg_store { + // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. + arg_t args[NUM_ARGS != 0 ? NUM_ARGS : +1]; +}; + +} // namespace detail +FMT_BEGIN_EXPORT + +// A formatting argument. Context is a template parameter for the compiled API +// where output can be unbuffered. +template class basic_format_arg { + private: + detail::value value_; + detail::type type_; + + template + friend FMT_CONSTEXPR auto detail::make_arg(T& value) + -> basic_format_arg; + + friend class basic_format_args; + friend class dynamic_format_arg_store; + + using char_type = typename Context::char_type; + + template + friend struct detail::format_arg_store; + + basic_format_arg(const detail::named_arg_info* args, size_t size) + : value_(args, size) {} + + public: + class handle { + public: + explicit handle(detail::custom_value custom) : custom_(custom) {} + + void format(typename Context::parse_context_type& parse_ctx, + Context& ctx) const { + custom_.format(custom_.value, parse_ctx, ctx); + } + + private: + detail::custom_value custom_; + }; + + constexpr basic_format_arg() : type_(detail::type::none_type) {} + + constexpr explicit operator bool() const noexcept { + return type_ != detail::type::none_type; + } + + auto type() const -> detail::type { return type_; } + + auto is_integral() const -> bool { return detail::is_integral_type(type_); } + auto is_arithmetic() const -> bool { + return detail::is_arithmetic_type(type_); + } + + /** + * Visits an argument dispatching to the appropriate visit method based on + * the argument type. For example, if the argument type is `double` then + * `vis(value)` will be called with the value of type `double`. + */ + template + FMT_CONSTEXPR FMT_INLINE auto visit(Visitor&& vis) const -> decltype(vis(0)) { + switch (type_) { + case detail::type::none_type: + break; + case detail::type::int_type: + return vis(value_.int_value); + case detail::type::uint_type: + return vis(value_.uint_value); + case detail::type::long_long_type: + return vis(value_.long_long_value); + case detail::type::ulong_long_type: + return vis(value_.ulong_long_value); + case detail::type::int128_type: + return vis(detail::convert_for_visit(value_.int128_value)); + case detail::type::uint128_type: + return vis(detail::convert_for_visit(value_.uint128_value)); + case detail::type::bool_type: + return vis(value_.bool_value); + case detail::type::char_type: + return vis(value_.char_value); + case detail::type::float_type: + return vis(value_.float_value); + case detail::type::double_type: + return vis(value_.double_value); + case detail::type::long_double_type: + return vis(value_.long_double_value); + case detail::type::cstring_type: + return vis(value_.string.data); + case detail::type::string_type: + using sv = basic_string_view; + return vis(sv(value_.string.data, value_.string.size)); + case detail::type::pointer_type: + return vis(value_.pointer); + case detail::type::custom_type: + return vis(typename basic_format_arg::handle(value_.custom)); + } + return vis(monostate()); + } + + auto format_custom(const char_type* parse_begin, + typename Context::parse_context_type& parse_ctx, + Context& ctx) -> bool { + if (type_ != detail::type::custom_type) return false; + parse_ctx.advance_to(parse_begin); + value_.custom.format(value_.custom.value, parse_ctx, ctx); + return true; + } +}; + +template +FMT_DEPRECATED FMT_CONSTEXPR auto visit_format_arg( + Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { + return arg.visit(static_cast(vis)); +} + +/** + * A view of a collection of formatting arguments. To avoid lifetime issues it + * should only be used as a parameter type in type-erased functions such as + * `vformat`: + * + * void vlog(fmt::string_view fmt, fmt::format_args args); // OK + * fmt::format_args args = fmt::make_format_args(); // Dangling reference + */ +template class basic_format_args { + public: + using size_type = int; + using format_arg = basic_format_arg; + + private: + // A descriptor that contains information about formatting arguments. + // If the number of arguments is less or equal to max_packed_args then + // argument types are passed in the descriptor. This reduces binary code size + // per formatting function call. + unsigned long long desc_; + union { + // If is_packed() returns true then argument values are stored in values_; + // otherwise they are stored in args_. This is done to improve cache + // locality and reduce compiled code size since storing larger objects + // may require more code (at least on x86-64) even if the same amount of + // data is actually copied to stack. It saves ~10% on the bloat test. + const detail::value* values_; + const format_arg* args_; + }; + + constexpr auto is_packed() const -> bool { + return (desc_ & detail::is_unpacked_bit) == 0; + } + constexpr auto has_named_args() const -> bool { + return (desc_ & detail::has_named_args_bit) != 0; + } + + FMT_CONSTEXPR auto type(int index) const -> detail::type { + int shift = index * detail::packed_arg_bits; + unsigned int mask = (1 << detail::packed_arg_bits) - 1; + return static_cast((desc_ >> shift) & mask); + } + + public: + constexpr basic_format_args() : desc_(0), args_(nullptr) {} + + /// Constructs a `basic_format_args` object from `format_arg_store`. + template + constexpr FMT_ALWAYS_INLINE basic_format_args( + const detail::format_arg_store& + store) + : desc_(DESC), values_(store.args + (NUM_NAMED_ARGS != 0 ? 1 : 0)) {} + + template detail::max_packed_args)> + constexpr basic_format_args( + const detail::format_arg_store& + store) + : desc_(DESC), args_(store.args + (NUM_NAMED_ARGS != 0 ? 1 : 0)) {} + + /// Constructs a `basic_format_args` object from `dynamic_format_arg_store`. + constexpr basic_format_args(const dynamic_format_arg_store& store) + : desc_(store.get_types()), args_(store.data()) {} + + /// Constructs a `basic_format_args` object from a dynamic list of arguments. + constexpr basic_format_args(const format_arg* args, int count) + : desc_(detail::is_unpacked_bit | detail::to_unsigned(count)), + args_(args) {} + + /// Returns the argument with the specified id. + FMT_CONSTEXPR auto get(int id) const -> format_arg { + format_arg arg; + if (!is_packed()) { + if (id < max_size()) arg = args_[id]; + return arg; + } + if (static_cast(id) >= detail::max_packed_args) return arg; + arg.type_ = type(id); + if (arg.type_ == detail::type::none_type) return arg; + arg.value_ = values_[id]; + return arg; + } + + template + auto get(basic_string_view name) const -> format_arg { + int id = get_id(name); + return id >= 0 ? get(id) : format_arg(); + } + + template + FMT_CONSTEXPR auto get_id(basic_string_view name) const -> int { + if (!has_named_args()) return -1; + const auto& named_args = + (is_packed() ? values_[-1] : args_[-1].value_).named_args; + for (size_t i = 0; i < named_args.size; ++i) { + if (named_args.data[i].name == name) return named_args.data[i].id; + } + return -1; + } + + auto max_size() const -> int { + unsigned long long max_packed = detail::max_packed_args; + return static_cast(is_packed() ? max_packed + : desc_ & ~detail::is_unpacked_bit); + } +}; + +// A formatting context. +class context { + private: + appender out_; + basic_format_args args_; + detail::locale_ref loc_; + + public: + /// The character type for the output. + using char_type = char; + + using iterator = appender; + using format_arg = basic_format_arg; + using parse_context_type = basic_format_parse_context; + template using formatter_type = formatter; + + /// Constructs a `basic_format_context` object. References to the arguments + /// are stored in the object so make sure they have appropriate lifetimes. + FMT_CONSTEXPR context(iterator out, basic_format_args ctx_args, + detail::locale_ref loc = {}) + : out_(out), args_(ctx_args), loc_(loc) {} + context(context&&) = default; + context(const context&) = delete; + void operator=(const context&) = delete; + + FMT_CONSTEXPR auto arg(int id) const -> format_arg { return args_.get(id); } + auto arg(string_view name) -> format_arg { return args_.get(name); } + FMT_CONSTEXPR auto arg_id(string_view name) -> int { + return args_.get_id(name); + } + auto args() const -> const basic_format_args& { return args_; } + + // Returns an iterator to the beginning of the output range. + FMT_CONSTEXPR auto out() -> iterator { return out_; } + + // Advances the begin iterator to `it`. + void advance_to(iterator) {} + + FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; } +}; + +template class generic_context; + +// Longer aliases for C++20 compatibility. +template +using basic_format_context = + conditional_t::value, context, + generic_context>; +using format_context = context; + +template +using buffered_context = basic_format_context, Char>; + +template +using is_formattable = bool_constant>() + .map(std::declval()))>::value>; + +#if FMT_USE_CONCEPTS +template +concept formattable = is_formattable, Char>::value; +#endif + +/** + * Constructs an object that stores references to arguments and can be + * implicitly converted to `format_args`. `Context` can be omitted in which case + * it defaults to `format_context`. See `arg` for lifetime considerations. + */ +// Take arguments by lvalue references to avoid some lifetime issues, e.g. +// auto args = make_format_args(std::string()); +template (), + unsigned long long DESC = detail::make_descriptor(), + FMT_ENABLE_IF(NUM_NAMED_ARGS == 0)> +constexpr FMT_ALWAYS_INLINE auto make_format_args(T&... args) + -> detail::format_arg_store { + return {{detail::make_arg( + args)...}}; +} + +#ifndef FMT_DOC +template (), + unsigned long long DESC = + detail::make_descriptor() | + static_cast(detail::has_named_args_bit), + FMT_ENABLE_IF(NUM_NAMED_ARGS != 0)> +constexpr auto make_format_args(T&... args) + -> detail::format_arg_store { + return {args...}; +} +#endif + +/** + * Returns a named argument to be used in a formatting function. + * It should only be used in a call to a formatting function or + * `dynamic_format_arg_store::push_back`. + * + * **Example**: + * + * fmt::print("The answer is {answer}.", fmt::arg("answer", 42)); + */ +template +inline auto arg(const Char* name, const T& arg) -> detail::named_arg { + static_assert(!detail::is_named_arg(), "nested named arguments"); + return {name, arg}; +} +FMT_END_EXPORT + +/// An alias for `basic_format_args`. +// A separate type would result in shorter symbols but break ABI compatibility +// between clang and gcc on ARM (#1919). +FMT_EXPORT using format_args = basic_format_args; + +// We cannot use enum classes as bit fields because of a gcc bug, so we put them +// in namespaces instead (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414). +// Additionally, if an underlying type is specified, older gcc incorrectly warns +// that the type is too small. Both bugs are fixed in gcc 9.3. +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 903 +# define FMT_ENUM_UNDERLYING_TYPE(type) +#else +# define FMT_ENUM_UNDERLYING_TYPE(type) : type +#endif +namespace align { +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, left, right, center, + numeric}; +} +using align_t = align::type; +namespace sign { +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, minus, plus, space}; +} +using sign_t = sign::type; + +namespace detail { + +template +using unsigned_char = typename conditional_t::value, + std::make_unsigned, + type_identity>::type; + +// Character (code unit) type is erased to prevent template bloat. +struct fill_t { + private: + enum { max_size = 4 }; + char data_[max_size] = {' '}; + unsigned char size_ = 1; + + public: + template + FMT_CONSTEXPR void operator=(basic_string_view s) { + auto size = s.size(); + size_ = static_cast(size); + if (size == 1) { + unsigned uchar = static_cast>(s[0]); + data_[0] = static_cast(uchar); + data_[1] = static_cast(uchar >> 8); + return; + } + FMT_ASSERT(size <= max_size, "invalid fill"); + for (size_t i = 0; i < size; ++i) data_[i] = static_cast(s[i]); + } + + FMT_CONSTEXPR void operator=(char c) { + data_[0] = c; + size_ = 1; + } + + constexpr auto size() const -> size_t { return size_; } + + template constexpr auto get() const -> Char { + using uchar = unsigned char; + return static_cast(static_cast(data_[0]) | + (static_cast(data_[1]) << 8)); + } + + template ::value)> + constexpr auto data() const -> const Char* { + return data_; + } + template ::value)> + constexpr auto data() const -> const Char* { + return nullptr; + } +}; +} // namespace detail + +enum class presentation_type : unsigned char { + // Common specifiers: + none = 0, + debug = 1, // '?' + string = 2, // 's' (string, bool) + + // Integral, bool and character specifiers: + dec = 3, // 'd' + hex, // 'x' or 'X' + oct, // 'o' + bin, // 'b' or 'B' + chr, // 'c' + + // String and pointer specifiers: + pointer = 3, // 'p' + + // Floating-point specifiers: + exp = 1, // 'e' or 'E' (1 since there is no FP debug presentation) + fixed, // 'f' or 'F' + general, // 'g' or 'G' + hexfloat // 'a' or 'A' +}; + +// Format specifiers for built-in and string types. +struct format_specs { + int width; + int precision; + presentation_type type; + align_t align : 4; + sign_t sign : 3; + bool upper : 1; // An uppercase version e.g. 'X' for 'x'. + bool alt : 1; // Alternate form ('#'). + bool localized : 1; + detail::fill_t fill; + + constexpr format_specs() + : width(0), + precision(-1), + type(presentation_type::none), + align(align::none), + sign(sign::none), + upper(false), + alt(false), + localized(false) {} +}; + +namespace detail { + +enum class arg_id_kind { none, index, name }; + +// An argument reference. +template struct arg_ref { + FMT_CONSTEXPR arg_ref() : kind(arg_id_kind::none), val() {} + + FMT_CONSTEXPR explicit arg_ref(int index) + : kind(arg_id_kind::index), val(index) {} + FMT_CONSTEXPR explicit arg_ref(basic_string_view name) + : kind(arg_id_kind::name), val(name) {} + + FMT_CONSTEXPR auto operator=(int idx) -> arg_ref& { + kind = arg_id_kind::index; + val.index = idx; + return *this; + } + + arg_id_kind kind; + union value { + FMT_CONSTEXPR value(int idx = 0) : index(idx) {} + FMT_CONSTEXPR value(basic_string_view n) : name(n) {} + + int index; + basic_string_view name; + } val; +}; + +// Format specifiers with width and precision resolved at formatting rather +// than parsing time to allow reusing the same parsed specifiers with +// different sets of arguments (precompilation of format strings). +template struct dynamic_format_specs : format_specs { + arg_ref width_ref; + arg_ref precision_ref; +}; + +// Converts a character to ASCII. Returns '\0' on conversion failure. +template ::value)> +constexpr auto to_ascii(Char c) -> char { + return c <= 0xff ? static_cast(c) : '\0'; +} + +// Returns the number of code units in a code point or 1 on error. +template +FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int { + if (const_check(sizeof(Char) != 1)) return 1; + auto c = static_cast(*begin); + return static_cast((0x3a55000000000000ull >> (2 * (c >> 3))) & 0x3) + 1; +} + +// Return the result via the out param to workaround gcc bug 77539. +template +FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr& out) -> bool { + for (out = first; out != last; ++out) { + if (*out == value) return true; + } + return false; +} + +template <> +inline auto find(const char* first, const char* last, char value, + const char*& out) -> bool { + out = + static_cast(memchr(first, value, to_unsigned(last - first))); + return out != nullptr; +} + +// Parses the range [begin, end) as an unsigned integer. This function assumes +// that the range is non-empty and the first character is a digit. +template +FMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end, + int error_value) noexcept -> int { + FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', ""); + unsigned value = 0, prev = 0; + auto p = begin; + do { + prev = value; + value = value * 10 + unsigned(*p - '0'); + ++p; + } while (p != end && '0' <= *p && *p <= '9'); + auto num_digits = p - begin; + begin = p; + int digits10 = static_cast(sizeof(int) * CHAR_BIT * 3 / 10); + if (num_digits <= digits10) return static_cast(value); + // Check for overflow. + unsigned max = INT_MAX; + return num_digits == digits10 + 1 && + prev * 10ull + unsigned(p[-1] - '0') <= max + ? static_cast(value) + : error_value; +} + +FMT_CONSTEXPR inline auto parse_align(char c) -> align_t { + switch (c) { + case '<': + return align::left; + case '>': + return align::right; + case '^': + return align::center; + } + return align::none; +} + +template constexpr auto is_name_start(Char c) -> bool { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_'; +} + +template +FMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + Char c = *begin; + if (c >= '0' && c <= '9') { + int index = 0; + if (c != '0') + index = parse_nonnegative_int(begin, end, INT_MAX); + else + ++begin; + if (begin == end || (*begin != '}' && *begin != ':')) + report_error("invalid format string"); + else + handler.on_index(index); + return begin; + } + if (!is_name_start(c)) { + report_error("invalid format string"); + return begin; + } + auto it = begin; + do { + ++it; + } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9'))); + handler.on_name({begin, to_unsigned(it - begin)}); + return it; +} + +template +FMT_CONSTEXPR auto parse_arg_id(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + FMT_ASSERT(begin != end, ""); + Char c = *begin; + if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler); + handler.on_auto(); + return begin; +} + +template struct dynamic_spec_id_handler { + basic_format_parse_context& ctx; + arg_ref& ref; + + FMT_CONSTEXPR void on_auto() { + int id = ctx.next_arg_id(); + ref = arg_ref(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_index(int id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_name(basic_string_view id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + } +}; + +// Parses [integer | "{" [arg_id] "}"]. +template +FMT_CONSTEXPR auto parse_dynamic_spec(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) + -> const Char* { + FMT_ASSERT(begin != end, ""); + if ('0' <= *begin && *begin <= '9') { + int val = parse_nonnegative_int(begin, end, -1); + if (val != -1) + value = val; + else + report_error("number is too big"); + } else if (*begin == '{') { + ++begin; + auto handler = dynamic_spec_id_handler{ctx, ref}; + if (begin != end) begin = parse_arg_id(begin, end, handler); + if (begin != end && *begin == '}') return ++begin; + report_error("invalid format string"); + } + return begin; +} + +template +FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) + -> const Char* { + ++begin; + if (begin == end || *begin == '}') { + report_error("invalid precision"); + return begin; + } + return parse_dynamic_spec(begin, end, value, ref, ctx); +} + +enum class state { start, align, sign, hash, zero, width, precision, locale }; + +// Parses standard format specifiers. +template +FMT_CONSTEXPR auto parse_format_specs(const Char* begin, const Char* end, + dynamic_format_specs& specs, + basic_format_parse_context& ctx, + type arg_type) -> const Char* { + auto c = '\0'; + if (end - begin > 1) { + auto next = to_ascii(begin[1]); + c = parse_align(next) == align::none ? to_ascii(*begin) : '\0'; + } else { + if (begin == end) return begin; + c = to_ascii(*begin); + } + + struct { + state current_state = state::start; + FMT_CONSTEXPR void operator()(state s, bool valid = true) { + if (current_state >= s || !valid) + report_error("invalid format specifier"); + current_state = s; + } + } enter_state; + + using pres = presentation_type; + constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; + struct { + const Char*& begin; + dynamic_format_specs& specs; + type arg_type; + + FMT_CONSTEXPR auto operator()(pres pres_type, int set) -> const Char* { + if (!in(arg_type, set)) { + if (arg_type == type::none_type) return begin; + report_error("invalid format specifier"); + } + specs.type = pres_type; + return begin + 1; + } + } parse_presentation_type{begin, specs, arg_type}; + + for (;;) { + switch (c) { + case '<': + case '>': + case '^': + enter_state(state::align); + specs.align = parse_align(c); + ++begin; + break; + case '+': + case '-': + case ' ': + if (arg_type == type::none_type) return begin; + enter_state(state::sign, in(arg_type, sint_set | float_set)); + switch (c) { + case '+': + specs.sign = sign::plus; + break; + case '-': + specs.sign = sign::minus; + break; + case ' ': + specs.sign = sign::space; + break; + } + ++begin; + break; + case '#': + if (arg_type == type::none_type) return begin; + enter_state(state::hash, is_arithmetic_type(arg_type)); + specs.alt = true; + ++begin; + break; + case '0': + enter_state(state::zero); + if (!is_arithmetic_type(arg_type)) { + if (arg_type == type::none_type) return begin; + report_error("format specifier requires numeric argument"); + } + if (specs.align == align::none) { + // Ignore 0 if align is specified for compatibility with std::format. + specs.align = align::numeric; + specs.fill = '0'; + } + ++begin; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '{': + enter_state(state::width); + begin = parse_dynamic_spec(begin, end, specs.width, specs.width_ref, ctx); + break; + case '.': + if (arg_type == type::none_type) return begin; + enter_state(state::precision, + in(arg_type, float_set | string_set | cstring_set)); + begin = parse_precision(begin, end, specs.precision, specs.precision_ref, + ctx); + break; + case 'L': + if (arg_type == type::none_type) return begin; + enter_state(state::locale, is_arithmetic_type(arg_type)); + specs.localized = true; + ++begin; + break; + case 'd': + return parse_presentation_type(pres::dec, integral_set); + case 'X': + specs.upper = true; + FMT_FALLTHROUGH; + case 'x': + return parse_presentation_type(pres::hex, integral_set); + case 'o': + return parse_presentation_type(pres::oct, integral_set); + case 'B': + specs.upper = true; + FMT_FALLTHROUGH; + case 'b': + return parse_presentation_type(pres::bin, integral_set); + case 'E': + specs.upper = true; + FMT_FALLTHROUGH; + case 'e': + return parse_presentation_type(pres::exp, float_set); + case 'F': + specs.upper = true; + FMT_FALLTHROUGH; + case 'f': + return parse_presentation_type(pres::fixed, float_set); + case 'G': + specs.upper = true; + FMT_FALLTHROUGH; + case 'g': + return parse_presentation_type(pres::general, float_set); + case 'A': + specs.upper = true; + FMT_FALLTHROUGH; + case 'a': + return parse_presentation_type(pres::hexfloat, float_set); + case 'c': + if (arg_type == type::bool_type) report_error("invalid format specifier"); + return parse_presentation_type(pres::chr, integral_set); + case 's': + return parse_presentation_type(pres::string, + bool_set | string_set | cstring_set); + case 'p': + return parse_presentation_type(pres::pointer, pointer_set | cstring_set); + case '?': + return parse_presentation_type(pres::debug, + char_set | string_set | cstring_set); + case '}': + return begin; + default: { + if (*begin == '}') return begin; + // Parse fill and alignment. + auto fill_end = begin + code_point_length(begin); + if (end - fill_end <= 0) { + report_error("invalid format specifier"); + return begin; + } + if (*begin == '{') { + report_error("invalid fill character '{'"); + return begin; + } + auto align = parse_align(to_ascii(*fill_end)); + enter_state(state::align, align != align::none); + specs.fill = + basic_string_view(begin, to_unsigned(fill_end - begin)); + specs.align = align; + begin = fill_end + 1; + } + } + if (begin == end) return begin; + c = to_ascii(*begin); + } +} + +template +FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + struct id_adapter { + Handler& handler; + int arg_id; + + FMT_CONSTEXPR void on_auto() { arg_id = handler.on_arg_id(); } + FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); } + FMT_CONSTEXPR void on_name(basic_string_view id) { + arg_id = handler.on_arg_id(id); + } + }; + + ++begin; + if (begin == end) return handler.on_error("invalid format string"), end; + if (*begin == '}') { + handler.on_replacement_field(handler.on_arg_id(), begin); + } else if (*begin == '{') { + handler.on_text(begin, begin + 1); + } else { + auto adapter = id_adapter{handler, 0}; + begin = parse_arg_id(begin, end, adapter); + Char c = begin != end ? *begin : Char(); + if (c == '}') { + handler.on_replacement_field(adapter.arg_id, begin); + } else if (c == ':') { + begin = handler.on_format_specs(adapter.arg_id, begin + 1, end); + if (begin == end || *begin != '}') + return handler.on_error("unknown format specifier"), end; + } else { + return handler.on_error("missing '}' in format string"), end; + } + } + return begin + 1; +} + +template +FMT_CONSTEXPR void parse_format_string(basic_string_view format_str, + Handler&& handler) { + auto begin = format_str.data(); + auto end = begin + format_str.size(); + if (end - begin < 32) { + // Use a simple loop instead of memchr for small strings. + const Char* p = begin; + while (p != end) { + auto c = *p++; + if (c == '{') { + handler.on_text(begin, p - 1); + begin = p = parse_replacement_field(p - 1, end, handler); + } else if (c == '}') { + if (p == end || *p != '}') + return handler.on_error("unmatched '}' in format string"); + handler.on_text(begin, p); + begin = ++p; + } + } + handler.on_text(begin, end); + return; + } + struct writer { + FMT_CONSTEXPR void operator()(const Char* from, const Char* to) { + if (from == to) return; + for (;;) { + const Char* p = nullptr; + if (!find(from, to, Char('}'), p)) + return handler_.on_text(from, to); + ++p; + if (p == to || *p != '}') + return handler_.on_error("unmatched '}' in format string"); + handler_.on_text(from, p); + from = p + 1; + } + } + Handler& handler_; + } write = {handler}; + while (begin != end) { + // Doing two passes with memchr (one for '{' and another for '}') is up to + // 2.5x faster than the naive one-pass implementation on big format strings. + const Char* p = begin; + if (*begin != '{' && !find(begin + 1, end, Char('{'), p)) + return write(begin, end); + write(begin, p); + begin = parse_replacement_field(p, end, handler); + } +} + +template ::value> struct strip_named_arg { + using type = T; +}; +template struct strip_named_arg { + using type = remove_cvref_t; +}; + +template +FMT_VISIBILITY("hidden") // Suppress an ld warning on macOS (#3769). +FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) + -> decltype(ctx.begin()) { + using char_type = typename ParseContext::char_type; + using context = buffered_context; + using mapped_type = conditional_t< + mapped_type_constant::value != type::custom_type, + decltype(arg_mapper().map(std::declval())), + typename strip_named_arg::type>; +#if defined(__cpp_if_constexpr) + if constexpr (std::is_default_constructible< + formatter>::value) { + return formatter().parse(ctx); + } else { + type_is_unformattable_for _; + return ctx.begin(); + } +#else + return formatter().parse(ctx); +#endif +} + +// Checks char specs and returns true iff the presentation type is char-like. +FMT_CONSTEXPR inline auto check_char_specs(const format_specs& specs) -> bool { + if (specs.type != presentation_type::none && + specs.type != presentation_type::chr && + specs.type != presentation_type::debug) { + return false; + } + if (specs.align == align::numeric || specs.sign != sign::none || specs.alt) + report_error("invalid format specifier for char"); + return true; +} + +#if FMT_USE_NONTYPE_TEMPLATE_ARGS +template +constexpr auto get_arg_index_by_name(basic_string_view name) -> int { + if constexpr (is_statically_named_arg()) { + if (name == T::name) return N; + } + if constexpr (sizeof...(Args) > 0) + return get_arg_index_by_name(name); + (void)name; // Workaround an MSVC bug about "unused" parameter. + return -1; +} +#endif + +template +FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view name) -> int { +#if FMT_USE_NONTYPE_TEMPLATE_ARGS + if constexpr (sizeof...(Args) > 0) + return get_arg_index_by_name<0, Args...>(name); +#endif + (void)name; + return -1; +} + +template class format_string_checker { + private: + using parse_context_type = compile_parse_context; + static constexpr int num_args = sizeof...(Args); + + // Format specifier parsing function. + // In the future basic_format_parse_context will replace compile_parse_context + // here and will use is_constant_evaluated and downcasting to access the data + // needed for compile-time checks: https://godbolt.org/z/GvWzcTjh1. + using parse_func = const Char* (*)(parse_context_type&); + + type types_[num_args > 0 ? static_cast(num_args) : 1]; + parse_context_type context_; + parse_func parse_funcs_[num_args > 0 ? static_cast(num_args) : 1]; + + public: + explicit FMT_CONSTEXPR format_string_checker(basic_string_view fmt) + : types_{mapped_type_constant>::value...}, + context_(fmt, num_args, types_), + parse_funcs_{&parse_format_specs...} {} + + FMT_CONSTEXPR void on_text(const Char*, const Char*) {} + + FMT_CONSTEXPR auto on_arg_id() -> int { return context_.next_arg_id(); } + FMT_CONSTEXPR auto on_arg_id(int id) -> int { + return context_.check_arg_id(id), id; + } + FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { +#if FMT_USE_NONTYPE_TEMPLATE_ARGS + auto index = get_arg_index_by_name(id); + if (index < 0) on_error("named argument is not found"); + return index; +#else + (void)id; + on_error("compile-time checks for named arguments require C++20 support"); + return 0; +#endif + } + + FMT_CONSTEXPR void on_replacement_field(int id, const Char* begin) { + on_format_specs(id, begin, begin); // Call parse() on empty specs. + } + + FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*) + -> const Char* { + context_.advance_to(begin); + // id >= 0 check is a workaround for gcc 10 bug (#2065). + return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; + } + + FMT_NORETURN FMT_CONSTEXPR void on_error(const char* message) { + report_error(message); + } +}; + +// A base class for compile-time strings. +struct compile_string {}; + +template +using is_compile_string = std::is_base_of; + +// Reports a compile-time error if S is not a valid format string. +template ::value)> +FMT_ALWAYS_INLINE void check_format_string(const S&) { +#ifdef FMT_ENFORCE_COMPILE_STRING + static_assert(is_compile_string::value, + "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " + "FMT_STRING."); +#endif +} +template ::value)> +void check_format_string(S format_str) { + using char_t = typename S::char_type; + FMT_CONSTEXPR auto s = basic_string_view(format_str); + using checker = format_string_checker...>; + FMT_CONSTEXPR bool error = (parse_format_string(s, checker(s)), true); + ignore_unused(error); +} + +// Report truncation to prevent silent data loss. +inline void report_truncation(bool truncated) { + if (truncated) report_error("output is truncated"); +} + +// Use vformat_args and avoid type_identity to keep symbols short and workaround +// a GCC <= 4.8 bug. +template struct vformat_args { + using type = basic_format_args>; +}; +template <> struct vformat_args { + using type = format_args; +}; + +template +void vformat_to(buffer& buf, basic_string_view fmt, + typename vformat_args::type args, locale_ref loc = {}); + +FMT_API void vprint_mojibake(FILE*, string_view, format_args, bool = false); +#ifndef _WIN32 +inline void vprint_mojibake(FILE*, string_view, format_args, bool) {} +#endif + +template struct native_formatter { + private: + dynamic_format_specs specs_; + + public: + using nonlocking = void; + + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { + if (ctx.begin() == ctx.end() || *ctx.begin() == '}') return ctx.begin(); + auto end = parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, TYPE); + if (const_check(TYPE == type::char_type)) check_char_specs(specs_); + return end; + } + + template + FMT_CONSTEXPR void set_debug_format(bool set = true) { + specs_.type = set ? presentation_type::debug : presentation_type::none; + } + + template + FMT_CONSTEXPR auto format(const T& val, FormatContext& ctx) const + -> decltype(ctx.out()); +}; +} // namespace detail + +FMT_BEGIN_EXPORT + +// A formatter specialization for natively supported types. +template +struct formatter::value != + detail::type::custom_type>> + : detail::native_formatter::value> { +}; + +template struct runtime_format_string { + basic_string_view str; +}; + +/// A compile-time format string. +template class basic_format_string { + private: + basic_string_view str_; + + public: + template < + typename S, + FMT_ENABLE_IF( + std::is_convertible>::value || + (detail::is_compile_string::value && + std::is_constructible, const S&>::value))> + FMT_CONSTEVAL FMT_ALWAYS_INLINE basic_format_string(const S& s) : str_(s) { + static_assert( + detail::count< + (std::is_base_of>::value && + std::is_reference::value)...>() == 0, + "passing views as lvalues is disallowed"); +#if FMT_USE_CONSTEVAL + if constexpr (detail::count_named_args() == + detail::count_statically_named_args()) { + using checker = + detail::format_string_checker...>; + detail::parse_format_string(str_, checker(s)); + } +#else + detail::check_format_string(s); +#endif + } + basic_format_string(runtime_format_string fmt) : str_(fmt.str) {} + + FMT_ALWAYS_INLINE operator basic_string_view() const { return str_; } + auto get() const -> basic_string_view { return str_; } +}; + +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 +// Workaround broken conversion on older gcc. +template using format_string = string_view; +inline auto runtime(string_view s) -> string_view { return s; } +#else +template +using format_string = basic_format_string...>; +/** + * Creates a runtime format string. + * + * **Example**: + * + * // Check format string at runtime instead of compile-time. + * fmt::print(fmt::runtime("{:d}"), "I am not a number"); + */ +inline auto runtime(string_view s) -> runtime_format_string<> { return {{s}}; } +#endif + +/// Formats a string and writes the output to `out`. +template , + char>::value)> +auto vformat_to(OutputIt&& out, string_view fmt, format_args args) + -> remove_cvref_t { + auto&& buf = detail::get_buffer(out); + detail::vformat_to(buf, fmt, args, {}); + return detail::get_iterator(buf, out); +} + +/** + * Formats `args` according to specifications in `fmt`, writes the result to + * the output iterator `out` and returns the iterator past the end of the output + * range. `format_to` does not append a terminating null character. + * + * **Example**: + * + * auto out = std::vector(); + * fmt::format_to(std::back_inserter(out), "{}", 42); + */ +template , + char>::value)> +FMT_INLINE auto format_to(OutputIt&& out, format_string fmt, T&&... args) + -> remove_cvref_t { + return vformat_to(FMT_FWD(out), fmt, fmt::make_format_args(args...)); +} + +template struct format_to_n_result { + /// Iterator past the end of the output range. + OutputIt out; + /// Total (not truncated) output size. + size_t size; +}; + +template ::value)> +auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args) + -> format_to_n_result { + using traits = detail::fixed_buffer_traits; + auto buf = detail::iterator_buffer(out, n); + detail::vformat_to(buf, fmt, args, {}); + return {buf.out(), buf.count()}; +} + +/** + * Formats `args` according to specifications in `fmt`, writes up to `n` + * characters of the result to the output iterator `out` and returns the total + * (not truncated) output size and the iterator past the end of the output + * range. `format_to_n` does not append a terminating null character. + */ +template ::value)> +FMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string fmt, + T&&... args) -> format_to_n_result { + return vformat_to_n(out, n, fmt, fmt::make_format_args(args...)); +} + +template +struct format_to_result { + /// Iterator pointing to just after the last successful write in the range. + OutputIt out; + /// Specifies if the output was truncated. + bool truncated; + + FMT_CONSTEXPR operator OutputIt&() & { + detail::report_truncation(truncated); + return out; + } + FMT_CONSTEXPR operator const OutputIt&() const& { + detail::report_truncation(truncated); + return out; + } + FMT_CONSTEXPR operator OutputIt&&() && { + detail::report_truncation(truncated); + return static_cast(out); + } +}; + +template +auto vformat_to(char (&out)[N], string_view fmt, format_args args) + -> format_to_result { + auto result = vformat_to_n(out, N, fmt, args); + return {result.out, result.size > N}; +} + +template +FMT_INLINE auto format_to(char (&out)[N], format_string fmt, T&&... args) + -> format_to_result { + auto result = fmt::format_to_n(out, N, fmt, static_cast(args)...); + return {result.out, result.size > N}; +} + +/// Returns the number of chars in the output of `format(fmt, args...)`. +template +FMT_NODISCARD FMT_INLINE auto formatted_size(format_string fmt, + T&&... args) -> size_t { + auto buf = detail::counting_buffer<>(); + detail::vformat_to(buf, fmt, fmt::make_format_args(args...), {}); + return buf.count(); +} + +FMT_API void vprint(string_view fmt, format_args args); +FMT_API void vprint(FILE* f, string_view fmt, format_args args); +FMT_API void vprint_buffered(FILE* f, string_view fmt, format_args args); +FMT_API void vprintln(FILE* f, string_view fmt, format_args args); + +/** + * Formats `args` according to specifications in `fmt` and writes the output + * to `stdout`. + * + * **Example**: + * + * fmt::print("The answer is {}.", 42); + */ +template +FMT_INLINE void print(format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + if (!detail::use_utf8()) return detail::vprint_mojibake(stdout, fmt, vargs); + return detail::is_locking() ? vprint_buffered(stdout, fmt, vargs) + : vprint(fmt, vargs); +} + +/** + * Formats `args` according to specifications in `fmt` and writes the + * output to the file `f`. + * + * **Example**: + * + * fmt::print(stderr, "Don't {}!", "panic"); + */ +template +FMT_INLINE void print(FILE* f, format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + if (!detail::use_utf8()) return detail::vprint_mojibake(f, fmt, vargs); + return detail::is_locking() ? vprint_buffered(f, fmt, vargs) + : vprint(f, fmt, vargs); +} + +/// Formats `args` according to specifications in `fmt` and writes the output +/// to the file `f` followed by a newline. +template +FMT_INLINE void println(FILE* f, format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + return detail::use_utf8() ? vprintln(f, fmt, vargs) + : detail::vprint_mojibake(f, fmt, vargs, true); +} + +/// Formats `args` according to specifications in `fmt` and writes the output +/// to `stdout` followed by a newline. +template +FMT_INLINE void println(format_string fmt, T&&... args) { + return fmt::println(stdout, fmt, static_cast(args)...); +} + +FMT_END_EXPORT +FMT_GCC_PRAGMA("GCC pop_options") +FMT_END_NAMESPACE + +#ifdef FMT_HEADER_ONLY +# include "format.h" +#endif +#endif // FMT_BASE_H_ diff --git a/src/fmt/chrono.h b/src/fmt/chrono.h index 9d54574e16..c93123fd33 100644 --- a/src/fmt/chrono.h +++ b/src/fmt/chrono.h @@ -8,17 +8,19 @@ #ifndef FMT_CHRONO_H_ #define FMT_CHRONO_H_ -#include -#include -#include // std::isfinite -#include // std::memcpy -#include -#include -#include -#include -#include +#ifndef FMT_MODULE +# include +# include +# include // std::isfinite +# include // std::memcpy +# include +# include +# include +# include +# include +#endif -#include "ostream.h" // formatbuf +#include "format.h" FMT_BEGIN_NAMESPACE @@ -94,10 +96,8 @@ FMT_CONSTEXPR auto lossless_integral_conversion(const From from, int& ec) return static_cast(from); } -/** - * converts From to To, without loss. If the dynamic value of from - * can't be converted to To without loss, ec is set. - */ +/// Converts From to To, without loss. If the dynamic value of from +/// can't be converted to To without loss, ec is set. template ::value && std::numeric_limits::is_signed != @@ -185,9 +185,7 @@ FMT_CONSTEXPR auto safe_float_conversion(const From from, int& ec) -> To { return from; } -/** - * safe duration cast between integral durations - */ +/// Safe duration cast between integral durations template ::value), FMT_ENABLE_IF(std::is_integral::value)> @@ -237,9 +235,7 @@ auto safe_duration_cast(std::chrono::duration from, return ec ? To() : To(tocount); } -/** - * safe duration_cast between floating point durations - */ +/// Safe duration_cast between floating point durations template ::value), FMT_ENABLE_IF(std::is_floating_point::value)> @@ -329,6 +325,39 @@ inline auto localtime_s(...) -> null<> { return null<>(); } inline auto gmtime_r(...) -> null<> { return null<>(); } inline auto gmtime_s(...) -> null<> { return null<>(); } +// It is defined here and not in ostream.h because the latter has expensive +// includes. +template class formatbuf : public Streambuf { + private: + using char_type = typename Streambuf::char_type; + using streamsize = decltype(std::declval().sputn(nullptr, 0)); + using int_type = typename Streambuf::int_type; + using traits_type = typename Streambuf::traits_type; + + buffer& buffer_; + + public: + explicit formatbuf(buffer& buf) : buffer_(buf) {} + + protected: + // The put area is always empty. This makes the implementation simpler and has + // the advantage that the streambuf and the buffer are always in sync and + // sputc never writes into uninitialized memory. A disadvantage is that each + // call to sputc always results in a (virtual) call to overflow. There is no + // disadvantage here for sputn since this always results in a call to xsputn. + + auto overflow(int_type ch) -> int_type override { + if (!traits_type::eq_int_type(ch, traits_type::eof())) + buffer_.push_back(static_cast(ch)); + return ch; + } + + auto xsputn(const char_type* s, streamsize count) -> streamsize override { + buffer_.append(s, s + count); + return count; + } +}; + inline auto get_classic_locale() -> const std::locale& { static const auto& locale = std::locale::classic(); return locale; @@ -362,11 +391,12 @@ void write_codecvt(codecvt_result& out, string_view in_buf, template auto write_encoded_tm_str(OutputIt out, string_view in, const std::locale& loc) -> OutputIt { - if (detail::is_utf8() && loc != get_classic_locale()) { + if (detail::use_utf8() && loc != get_classic_locale()) { // char16_t and char32_t codecvts are broken in MSVC (linkage errors) and // gcc-4. -#if FMT_MSC_VERSION != 0 || \ - (defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_DUAL_ABI)) +#if FMT_MSC_VERSION != 0 || \ + (defined(__GLIBCXX__) && \ + (!defined(_GLIBCXX_USE_DUAL_ABI) || _GLIBCXX_USE_DUAL_ABI == 0)) // The _GLIBCXX_USE_DUAL_ABI macro is always defined in libstdc++ from gcc-5 // and newer. using code_unit = wchar_t; @@ -382,9 +412,9 @@ auto write_encoded_tm_str(OutputIt out, string_view in, const std::locale& loc) to_utf8>(); if (!u.convert({unit.buf, to_unsigned(unit.end - unit.buf)})) FMT_THROW(format_error("failed to format time")); - return copy_str(u.c_str(), u.c_str() + u.size(), out); + return copy(u.c_str(), u.c_str() + u.size(), out); } - return copy_str(in.data(), in.data() + in.size(), out); + return copy(in.data(), in.data() + in.size(), out); } template OutputIt { codecvt_result unit; write_codecvt(unit, sv, loc); - return copy_str(unit.buf, unit.end, out); + return copy(unit.buf, unit.end, out); } template std::tm { struct dispatcher { @@ -531,9 +561,9 @@ inline auto localtime(std::chrono::local_time time) -> std::tm { #endif /** - Converts given time since epoch as ``std::time_t`` value into calendar time, - expressed in Coordinated Universal Time (UTC). Unlike ``std::gmtime``, this - function is thread-safe on most platforms. + * Converts given time since epoch as `std::time_t` value into calendar time, + * expressed in Coordinated Universal Time (UTC). Unlike `std::gmtime`, this + * function is thread-safe on most platforms. */ inline auto gmtime(std::time_t time) -> std::tm { struct dispatcher { @@ -646,12 +676,10 @@ enum class numeric_system { // Glibc extensions for formatting numeric values. enum class pad_type { - unspecified, + // Pad a numeric result string with zeros (the default). + zero, // Do not pad a numeric result string. none, - // Pad a numeric result string with zeros even if the conversion specifier - // character uses space-padding by default. - zero, // Pad a numeric result string with spaces. space, }; @@ -659,7 +687,7 @@ enum class pad_type { template auto write_padding(OutputIt out, pad_type pad, int width) -> OutputIt { if (pad == pad_type::none) return out; - return std::fill_n(out, width, pad == pad_type::space ? ' ' : '0'); + return detail::fill_n(out, width, pad == pad_type::space ? ' ' : '0'); } template @@ -675,8 +703,8 @@ FMT_CONSTEXPR auto parse_chrono_format(const Char* begin, const Char* end, if (begin == end || *begin == '}') return begin; if (*begin != '%') FMT_THROW(format_error("invalid format")); auto ptr = begin; - pad_type pad = pad_type::unspecified; while (ptr != end) { + pad_type pad = pad_type::zero; auto c = *ptr; if (c == '}') break; if (c != '%') { @@ -696,10 +724,6 @@ FMT_CONSTEXPR auto parse_chrono_format(const Char* begin, const Char* end, pad = pad_type::none; ++ptr; break; - case '0': - pad = pad_type::zero; - ++ptr; - break; } if (ptr == end) FMT_THROW(format_error("invalid format")); c = *ptr++; @@ -759,22 +783,22 @@ FMT_CONSTEXPR auto parse_chrono_format(const Char* begin, const Char* end, break; // Day of the year/month: case 'U': - handler.on_dec0_week_of_year(numeric_system::standard); + handler.on_dec0_week_of_year(numeric_system::standard, pad); break; case 'W': - handler.on_dec1_week_of_year(numeric_system::standard); + handler.on_dec1_week_of_year(numeric_system::standard, pad); break; case 'V': - handler.on_iso_week_of_year(numeric_system::standard); + handler.on_iso_week_of_year(numeric_system::standard, pad); break; case 'j': handler.on_day_of_year(); break; case 'd': - handler.on_day_of_month(numeric_system::standard); + handler.on_day_of_month(numeric_system::standard, pad); break; case 'e': - handler.on_day_of_month_space(numeric_system::standard); + handler.on_day_of_month(numeric_system::standard, pad_type::space); break; // Hour, minute, second: case 'H': @@ -871,19 +895,19 @@ FMT_CONSTEXPR auto parse_chrono_format(const Char* begin, const Char* end, handler.on_dec_month(numeric_system::alternative); break; case 'U': - handler.on_dec0_week_of_year(numeric_system::alternative); + handler.on_dec0_week_of_year(numeric_system::alternative, pad); break; case 'W': - handler.on_dec1_week_of_year(numeric_system::alternative); + handler.on_dec1_week_of_year(numeric_system::alternative, pad); break; case 'V': - handler.on_iso_week_of_year(numeric_system::alternative); + handler.on_iso_week_of_year(numeric_system::alternative, pad); break; case 'd': - handler.on_day_of_month(numeric_system::alternative); + handler.on_day_of_month(numeric_system::alternative, pad); break; case 'e': - handler.on_day_of_month_space(numeric_system::alternative); + handler.on_day_of_month(numeric_system::alternative, pad_type::space); break; case 'w': handler.on_dec0_weekday(numeric_system::alternative); @@ -936,12 +960,19 @@ template struct null_chrono_spec_handler { FMT_CONSTEXPR void on_abbr_month() { unsupported(); } FMT_CONSTEXPR void on_full_month() { unsupported(); } FMT_CONSTEXPR void on_dec_month(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system, pad_type) { + unsupported(); + } + FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system, pad_type) { + unsupported(); + } + FMT_CONSTEXPR void on_iso_week_of_year(numeric_system, pad_type) { + unsupported(); + } FMT_CONSTEXPR void on_day_of_year() { unsupported(); } - FMT_CONSTEXPR void on_day_of_month(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_day_of_month_space(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_day_of_month(numeric_system, pad_type) { + unsupported(); + } FMT_CONSTEXPR void on_24_hour(numeric_system) { unsupported(); } FMT_CONSTEXPR void on_12_hour(numeric_system) { unsupported(); } FMT_CONSTEXPR void on_minute(numeric_system) { unsupported(); } @@ -979,12 +1010,11 @@ struct tm_format_checker : null_chrono_spec_handler { FMT_CONSTEXPR void on_abbr_month() {} FMT_CONSTEXPR void on_full_month() {} FMT_CONSTEXPR void on_dec_month(numeric_system) {} - FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) {} - FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) {} - FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) {} + FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_iso_week_of_year(numeric_system, pad_type) {} FMT_CONSTEXPR void on_day_of_year() {} - FMT_CONSTEXPR void on_day_of_month(numeric_system) {} - FMT_CONSTEXPR void on_day_of_month_space(numeric_system) {} + FMT_CONSTEXPR void on_day_of_month(numeric_system, pad_type) {} FMT_CONSTEXPR void on_24_hour(numeric_system, pad_type) {} FMT_CONSTEXPR void on_12_hour(numeric_system, pad_type) {} FMT_CONSTEXPR void on_minute(numeric_system, pad_type) {} @@ -1061,9 +1091,10 @@ inline auto to_nonnegative_int(T value, Int upper) -> Int { } template ::value)> inline auto to_nonnegative_int(T value, Int upper) -> Int { - if (value < 0 || value > static_cast(upper)) + auto int_value = static_cast(value); + if (int_value < 0 || value > static_cast(upper)) FMT_THROW(format_error("invalid value")); - return static_cast(value); + return int_value; } constexpr auto pow10(std::uint32_t n) -> long long { @@ -1115,22 +1146,27 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) { if (std::ratio_less::value) { *out++ = '.'; - out = std::fill_n(out, leading_zeroes, '0'); + out = detail::fill_n(out, leading_zeroes, '0'); out = format_decimal(out, n, num_digits).end; } - } else { + } else if (precision > 0) { *out++ = '.'; leading_zeroes = (std::min)(leading_zeroes, precision); - out = std::fill_n(out, leading_zeroes, '0'); int remaining = precision - leading_zeroes; - if (remaining != 0 && remaining < num_digits) { - n /= to_unsigned(detail::pow10(to_unsigned(num_digits - remaining))); - out = format_decimal(out, n, remaining).end; + out = detail::fill_n(out, leading_zeroes, '0'); + if (remaining < num_digits) { + int num_truncated_digits = num_digits - remaining; + n /= to_unsigned(detail::pow10(to_unsigned(num_truncated_digits))); + if (n) { + out = format_decimal(out, n, remaining).end; + } return; } - out = format_decimal(out, n, num_digits).end; - remaining -= num_digits; - out = std::fill_n(out, remaining, '0'); + if (n) { + out = format_decimal(out, n, num_digits).end; + remaining -= num_digits; + } + out = detail::fill_n(out, remaining, '0'); } } @@ -1281,7 +1317,8 @@ class tm_writer { } uint32_or_64_or_128_t n = to_unsigned(year); const int num_digits = count_digits(n); - if (width > num_digits) out_ = std::fill_n(out_, width - num_digits, '0'); + if (width > num_digits) + out_ = detail::fill_n(out_, width - num_digits, '0'); out_ = format_decimal(out_, n, num_digits).end; } void write_year(long long year) { @@ -1364,7 +1401,7 @@ class tm_writer { auto out() const -> OutputIt { return out_; } FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { - out_ = copy_str(begin, end, out_); + out_ = copy(begin, end, out_); } void on_abbr_weekday() { @@ -1411,7 +1448,7 @@ class tm_writer { *out_++ = ' '; on_abbr_month(); *out_++ = ' '; - on_day_of_month_space(numeric_system::standard); + on_day_of_month(numeric_system::standard, pad_type::space); *out_++ = ' '; on_iso_time(); *out_++ = ' '; @@ -1437,7 +1474,7 @@ class tm_writer { write_digit2_separated(buf, to_unsigned(tm_mon() + 1), to_unsigned(tm_mday()), to_unsigned(split_year_lower(tm_year())), '/'); - out_ = copy_str(std::begin(buf), std::end(buf), out_); + out_ = copy(std::begin(buf), std::end(buf), out_); } void on_iso_date() { auto year = tm_year(); @@ -1453,7 +1490,7 @@ class tm_writer { write_digit2_separated(buf + 2, static_cast(year % 100), to_unsigned(tm_mon() + 1), to_unsigned(tm_mday()), '-'); - out_ = copy_str(std::begin(buf) + offset, std::end(buf), out_); + out_ = copy(std::begin(buf) + offset, std::end(buf), out_); } void on_utc_offset(numeric_system ns) { format_utc_offset_impl(tm_, ns); } @@ -1498,24 +1535,26 @@ class tm_writer { format_localized('m', 'O'); } - void on_dec0_week_of_year(numeric_system ns) { + void on_dec0_week_of_year(numeric_system ns, pad_type pad) { if (is_classic_ || ns == numeric_system::standard) - return write2((tm_yday() + days_per_week - tm_wday()) / days_per_week); + return write2((tm_yday() + days_per_week - tm_wday()) / days_per_week, + pad); format_localized('U', 'O'); } - void on_dec1_week_of_year(numeric_system ns) { + void on_dec1_week_of_year(numeric_system ns, pad_type pad) { if (is_classic_ || ns == numeric_system::standard) { auto wday = tm_wday(); write2((tm_yday() + days_per_week - (wday == 0 ? (days_per_week - 1) : (wday - 1))) / - days_per_week); + days_per_week, + pad); } else { format_localized('W', 'O'); } } - void on_iso_week_of_year(numeric_system ns) { + void on_iso_week_of_year(numeric_system ns, pad_type pad) { if (is_classic_ || ns == numeric_system::standard) - return write2(tm_iso_week_of_year()); + return write2(tm_iso_week_of_year(), pad); format_localized('V', 'O'); } @@ -1529,20 +1568,11 @@ class tm_writer { write1(yday / 100); write2(yday % 100); } - void on_day_of_month(numeric_system ns) { - if (is_classic_ || ns == numeric_system::standard) return write2(tm_mday()); + void on_day_of_month(numeric_system ns, pad_type pad) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_mday(), pad); format_localized('d', 'O'); } - void on_day_of_month_space(numeric_system ns) { - if (is_classic_ || ns == numeric_system::standard) { - auto mday = to_unsigned(tm_mday()) % 100; - const char* d2 = digits2(mday); - *out_++ = mday < 10 ? ' ' : d2[0]; - *out_++ = d2[1]; - } else { - format_localized('e', 'O'); - } - } void on_24_hour(numeric_system ns, pad_type pad) { if (is_classic_ || ns == numeric_system::standard) @@ -1586,7 +1616,7 @@ class tm_writer { char buf[8]; write_digit2_separated(buf, to_unsigned(tm_hour12()), to_unsigned(tm_min()), to_unsigned(tm_sec()), ':'); - out_ = copy_str(std::begin(buf), std::end(buf), out_); + out_ = copy(std::begin(buf), std::end(buf), out_); *out_++ = ' '; on_am_pm(); } else { @@ -1601,7 +1631,7 @@ class tm_writer { void on_iso_time() { on_24_hour_time(); *out_++ = ':'; - on_second(numeric_system::standard, pad_type::unspecified); + on_second(numeric_system::standard, pad_type::zero); } void on_am_pm() { @@ -1700,10 +1730,10 @@ auto format_duration_value(OutputIt out, Rep val, int) -> OutputIt { template ::value)> auto format_duration_value(OutputIt out, Rep val, int precision) -> OutputIt { - auto specs = format_specs(); + auto specs = format_specs(); specs.precision = precision; - specs.type = precision >= 0 ? presentation_type::fixed_lower - : presentation_type::general_lower; + specs.type = + precision >= 0 ? presentation_type::fixed : presentation_type::general; return write(out, val, specs); } @@ -1744,8 +1774,10 @@ class get_locale { public: get_locale(bool localized, locale_ref loc) : has_locale_(localized) { +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR if (localized) ::new (&locale_) std::locale(loc.template get()); +#endif } ~get_locale() { if (has_locale_) locale_.~locale(); @@ -1840,7 +1872,7 @@ struct chrono_formatter { } } - void write(Rep value, int width, pad_type pad = pad_type::unspecified) { + void write(Rep value, int width, pad_type pad = pad_type::zero) { write_sign(); if (isnan(value)) return write_nan(); uint32_or_64_or_128_t n = @@ -1890,11 +1922,10 @@ struct chrono_formatter { void on_iso_week_based_year() {} void on_iso_week_based_short_year() {} void on_dec_month(numeric_system) {} - void on_dec0_week_of_year(numeric_system) {} - void on_dec1_week_of_year(numeric_system) {} - void on_iso_week_of_year(numeric_system) {} - void on_day_of_month(numeric_system) {} - void on_day_of_month_space(numeric_system) {} + void on_dec0_week_of_year(numeric_system, pad_type) {} + void on_dec1_week_of_year(numeric_system, pad_type) {} + void on_iso_week_of_year(numeric_system, pad_type) {} + void on_day_of_month(numeric_system, pad_type) {} void on_day_of_year() { if (handle_nan_inf()) return; @@ -1974,7 +2005,7 @@ struct chrono_formatter { on_24_hour_time(); *out++ = ':'; if (handle_nan_inf()) return; - on_second(numeric_system::standard, pad_type::unspecified); + on_second(numeric_system::standard, pad_type::zero); } void on_am_pm() { @@ -1997,53 +2028,215 @@ struct chrono_formatter { #if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907 using weekday = std::chrono::weekday; +using day = std::chrono::day; +using month = std::chrono::month; +using year = std::chrono::year; +using year_month_day = std::chrono::year_month_day; #else // A fallback version of weekday. class weekday { private: - unsigned char value; + unsigned char value_; public: weekday() = default; - explicit constexpr weekday(unsigned wd) noexcept - : value(static_cast(wd != 7 ? wd : 0)) {} - constexpr auto c_encoding() const noexcept -> unsigned { return value; } + constexpr explicit weekday(unsigned wd) noexcept + : value_(static_cast(wd != 7 ? wd : 0)) {} + constexpr auto c_encoding() const noexcept -> unsigned { return value_; } }; -class year_month_day {}; +class day { + private: + unsigned char value_; + + public: + day() = default; + constexpr explicit day(unsigned d) noexcept + : value_(static_cast(d)) {} + constexpr explicit operator unsigned() const noexcept { return value_; } +}; + +class month { + private: + unsigned char value_; + + public: + month() = default; + constexpr explicit month(unsigned m) noexcept + : value_(static_cast(m)) {} + constexpr explicit operator unsigned() const noexcept { return value_; } +}; + +class year { + private: + int value_; + + public: + year() = default; + constexpr explicit year(int y) noexcept : value_(y) {} + constexpr explicit operator int() const noexcept { return value_; } +}; + +class year_month_day { + private: + fmt::year year_; + fmt::month month_; + fmt::day day_; + + public: + year_month_day() = default; + constexpr year_month_day(const year& y, const month& m, const day& d) noexcept + : year_(y), month_(m), day_(d) {} + constexpr auto year() const noexcept -> fmt::year { return year_; } + constexpr auto month() const noexcept -> fmt::month { return month_; } + constexpr auto day() const noexcept -> fmt::day { return day_; } +}; #endif -// A rudimentary weekday formatter. -template struct formatter { +template +struct formatter : private formatter { private: - bool localized = false; + bool localized_ = false; + bool use_tm_formatter_ = false; public: FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) -> decltype(ctx.begin()) { - auto begin = ctx.begin(), end = ctx.end(); - if (begin != end && *begin == 'L') { - ++begin; - localized = true; + auto it = ctx.begin(), end = ctx.end(); + if (it != end && *it == 'L') { + ++it; + localized_ = true; + return it; } - return begin; + use_tm_formatter_ = it != end && *it != '}'; + return use_tm_formatter_ ? formatter::parse(ctx) : it; } template auto format(weekday wd, FormatContext& ctx) const -> decltype(ctx.out()) { auto time = std::tm(); time.tm_wday = static_cast(wd.c_encoding()); - detail::get_locale loc(localized, ctx.locale()); + if (use_tm_formatter_) return formatter::format(time, ctx); + detail::get_locale loc(localized_, ctx.locale()); auto w = detail::tm_writer(loc, ctx.out(), time); w.on_abbr_weekday(); return w.out(); } }; +template +struct formatter : private formatter { + private: + bool use_tm_formatter_ = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + use_tm_formatter_ = it != end && *it != '}'; + return use_tm_formatter_ ? formatter::parse(ctx) : it; + } + + template + auto format(day d, FormatContext& ctx) const -> decltype(ctx.out()) { + auto time = std::tm(); + time.tm_mday = static_cast(static_cast(d)); + if (use_tm_formatter_) return formatter::format(time, ctx); + detail::get_locale loc(false, ctx.locale()); + auto w = detail::tm_writer(loc, ctx.out(), time); + w.on_day_of_month(detail::numeric_system::standard, detail::pad_type::zero); + return w.out(); + } +}; + +template +struct formatter : private formatter { + private: + bool localized_ = false; + bool use_tm_formatter_ = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + if (it != end && *it == 'L') { + ++it; + localized_ = true; + return it; + } + use_tm_formatter_ = it != end && *it != '}'; + return use_tm_formatter_ ? formatter::parse(ctx) : it; + } + + template + auto format(month m, FormatContext& ctx) const -> decltype(ctx.out()) { + auto time = std::tm(); + time.tm_mon = static_cast(static_cast(m)) - 1; + if (use_tm_formatter_) return formatter::format(time, ctx); + detail::get_locale loc(localized_, ctx.locale()); + auto w = detail::tm_writer(loc, ctx.out(), time); + w.on_abbr_month(); + return w.out(); + } +}; + +template +struct formatter : private formatter { + private: + bool use_tm_formatter_ = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + use_tm_formatter_ = it != end && *it != '}'; + return use_tm_formatter_ ? formatter::parse(ctx) : it; + } + + template + auto format(year y, FormatContext& ctx) const -> decltype(ctx.out()) { + auto time = std::tm(); + time.tm_year = static_cast(y) - 1900; + if (use_tm_formatter_) return formatter::format(time, ctx); + detail::get_locale loc(false, ctx.locale()); + auto w = detail::tm_writer(loc, ctx.out(), time); + w.on_year(detail::numeric_system::standard); + return w.out(); + } +}; + +template +struct formatter : private formatter { + private: + bool use_tm_formatter_ = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + use_tm_formatter_ = it != end && *it != '}'; + return use_tm_formatter_ ? formatter::parse(ctx) : it; + } + + template + auto format(year_month_day val, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto time = std::tm(); + time.tm_year = static_cast(val.year()) - 1900; + time.tm_mon = static_cast(static_cast(val.month())) - 1; + time.tm_mday = static_cast(static_cast(val.day())); + if (use_tm_formatter_) return formatter::format(time, ctx); + detail::get_locale loc(true, ctx.locale()); + auto w = detail::tm_writer(loc, ctx.out(), time); + w.on_iso_date(); + return w.out(); + } +}; + template struct formatter, Char> { private: - format_specs specs_; + format_specs specs_; detail::arg_ref width_ref_; detail::arg_ref precision_ref_; bool localized_ = false; @@ -2117,27 +2310,26 @@ struct formatter, template auto format(std::chrono::time_point val, FormatContext& ctx) const -> decltype(ctx.out()) { + std::tm tm = gmtime(val); using period = typename Duration::period; if (detail::const_check( - period::num != 1 || period::den != 1 || - std::is_floating_point::value)) { - const auto epoch = val.time_since_epoch(); - auto subsecs = detail::fmt_duration_cast( - epoch - detail::fmt_duration_cast(epoch)); - - if (subsecs.count() < 0) { - auto second = - detail::fmt_duration_cast(std::chrono::seconds(1)); - if (epoch.count() < ((Duration::min)() + second).count()) - FMT_THROW(format_error("duration is too small")); - subsecs += second; - val -= second; - } - - return formatter::do_format(gmtime(val), ctx, &subsecs); + period::num == 1 && period::den == 1 && + !std::is_floating_point::value)) { + return formatter::format(tm, ctx); } - - return formatter::format(gmtime(val), ctx); + Duration epoch = val.time_since_epoch(); + Duration subsecs = detail::fmt_duration_cast( + epoch - detail::fmt_duration_cast(epoch)); + if (subsecs.count() < 0) { + auto second = + detail::fmt_duration_cast(std::chrono::seconds(1)); + if (tm.tm_sec != 0) + --tm.tm_sec; + else + tm = gmtime(val - second); + subsecs += detail::fmt_duration_cast(std::chrono::seconds(1)); + } + return formatter::do_format(tm, ctx, &subsecs); } }; @@ -2185,7 +2377,7 @@ struct formatter, template struct formatter { private: - format_specs specs_; + format_specs specs_; detail::arg_ref width_ref_; protected: diff --git a/src/fmt/color.h b/src/fmt/color.h index 464519e582..f0e9dd94ef 100644 --- a/src/fmt/color.h +++ b/src/fmt/color.h @@ -227,7 +227,7 @@ struct color_type { }; } // namespace detail -/** A text style consisting of foreground and background colors and emphasis. */ +/// A text style consisting of foreground and background colors and emphasis. class text_style { public: FMT_CONSTEXPR text_style(emphasis em = emphasis()) noexcept @@ -239,7 +239,7 @@ class text_style { foreground_color = rhs.foreground_color; } else if (rhs.set_foreground_color) { if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) - FMT_THROW(format_error("can't OR a terminal color")); + report_error("can't OR a terminal color"); foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color; } @@ -248,7 +248,7 @@ class text_style { background_color = rhs.background_color; } else if (rhs.set_background_color) { if (!background_color.is_rgb || !rhs.background_color.is_rgb) - FMT_THROW(format_error("can't OR a terminal color")); + report_error("can't OR a terminal color"); background_color.value.rgb_color |= rhs.background_color.value.rgb_color; } @@ -310,13 +310,13 @@ class text_style { emphasis ems; }; -/** Creates a text style from the foreground (text) color. */ +/// Creates a text style from the foreground (text) color. FMT_CONSTEXPR inline auto fg(detail::color_type foreground) noexcept -> text_style { return text_style(true, foreground); } -/** Creates a text style from the background color. */ +/// Creates a text style from the background color. FMT_CONSTEXPR inline auto bg(detail::color_type background) noexcept -> text_style { return text_style(false, background); @@ -391,7 +391,7 @@ template struct ansi_color_escape { FMT_CONSTEXPR auto begin() const noexcept -> const Char* { return buffer; } FMT_CONSTEXPR20 auto end() const noexcept -> const Char* { - return buffer + std::char_traits::length(buffer); + return buffer + basic_string_view(buffer).size(); } private: @@ -441,9 +441,9 @@ template struct styled_arg : detail::view { }; template -void vformat_to(buffer& buf, const text_style& ts, - basic_string_view format_str, - basic_format_args>> args) { +void vformat_to( + buffer& buf, const text_style& ts, basic_string_view format_str, + basic_format_args>> args) { bool has_style = false; if (ts.has_emphasis()) { has_style = true; @@ -466,121 +466,92 @@ void vformat_to(buffer& buf, const text_style& ts, } // namespace detail -inline void vprint(std::FILE* f, const text_style& ts, string_view fmt, +inline void vprint(FILE* f, const text_style& ts, string_view fmt, format_args args) { - // Legacy wide streams are not supported. auto buf = memory_buffer(); detail::vformat_to(buf, ts, fmt, args); - if (detail::is_utf8()) { - detail::print(f, string_view(buf.begin(), buf.size())); - return; - } - buf.push_back('\0'); - int result = std::fputs(buf.data(), f); - if (result < 0) - FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); + print(f, FMT_STRING("{}"), string_view(buf.begin(), buf.size())); } /** - \rst - Formats a string and prints it to the specified file stream using ANSI - escape sequences to specify text formatting. - - **Example**:: - - fmt::print(fmt::emphasis::bold | fg(fmt::color::red), - "Elapsed time: {0:.2f} seconds", 1.23); - \endrst + * Formats a string and prints it to the specified file stream using ANSI + * escape sequences to specify text formatting. + * + * **Example**: + * + * fmt::print(fmt::emphasis::bold | fg(fmt::color::red), + * "Elapsed time: {0:.2f} seconds", 1.23); */ -template ::value)> -void print(std::FILE* f, const text_style& ts, const S& format_str, - const Args&... args) { - vprint(f, ts, format_str, - fmt::make_format_args>>(args...)); +template +void print(FILE* f, const text_style& ts, format_string fmt, + T&&... args) { + vprint(f, ts, fmt, fmt::make_format_args(args...)); } /** - \rst - Formats a string and prints it to stdout using ANSI escape sequences to - specify text formatting. - - **Example**:: - - fmt::print(fmt::emphasis::bold | fg(fmt::color::red), - "Elapsed time: {0:.2f} seconds", 1.23); - \endrst + * Formats a string and prints it to stdout using ANSI escape sequences to + * specify text formatting. + * + * **Example**: + * + * fmt::print(fmt::emphasis::bold | fg(fmt::color::red), + * "Elapsed time: {0:.2f} seconds", 1.23); */ -template ::value)> -void print(const text_style& ts, const S& format_str, const Args&... args) { - return print(stdout, ts, format_str, args...); +template +void print(const text_style& ts, format_string fmt, T&&... args) { + return print(stdout, ts, fmt, std::forward(args)...); } -template > -inline auto vformat( - const text_style& ts, const S& format_str, - basic_format_args>> args) - -> std::basic_string { - basic_memory_buffer buf; - detail::vformat_to(buf, ts, detail::to_string_view(format_str), args); +inline auto vformat(const text_style& ts, string_view fmt, format_args args) + -> std::string { + auto buf = memory_buffer(); + detail::vformat_to(buf, ts, fmt, args); return fmt::to_string(buf); } /** - \rst - Formats arguments and returns the result as a string using ANSI - escape sequences to specify text formatting. - - **Example**:: - - #include - std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), - "The answer is {}", 42); - \endrst -*/ -template > -inline auto format(const text_style& ts, const S& format_str, - const Args&... args) -> std::basic_string { - return fmt::vformat(ts, detail::to_string_view(format_str), - fmt::make_format_args>(args...)); + * Formats arguments and returns the result as a string using ANSI escape + * sequences to specify text formatting. + * + * **Example**: + * + * ``` + * #include + * std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), + * "The answer is {}", 42); + * ``` + */ +template +inline auto format(const text_style& ts, format_string fmt, T&&... args) + -> std::string { + return fmt::vformat(ts, fmt, fmt::make_format_args(args...)); } -/** - Formats a string with the given text_style and writes the output to ``out``. - */ -template ::value)> -auto vformat_to(OutputIt out, const text_style& ts, - basic_string_view format_str, - basic_format_args>> args) - -> OutputIt { - auto&& buf = detail::get_buffer(out); - detail::vformat_to(buf, ts, format_str, args); +/// Formats a string with the given text_style and writes the output to `out`. +template ::value)> +auto vformat_to(OutputIt out, const text_style& ts, string_view fmt, + format_args args) -> OutputIt { + auto&& buf = detail::get_buffer(out); + detail::vformat_to(buf, ts, fmt, args); return detail::get_iterator(buf, out); } /** - \rst - Formats arguments with the given text_style, writes the result to the output - iterator ``out`` and returns the iterator past the end of the output range. - - **Example**:: - - std::vector out; - fmt::format_to(std::back_inserter(out), - fmt::emphasis::bold | fg(fmt::color::red), "{}", 42); - \endrst -*/ -template < - typename OutputIt, typename S, typename... Args, - bool enable = detail::is_output_iterator>::value && - detail::is_string::value> -inline auto format_to(OutputIt out, const text_style& ts, const S& format_str, - Args&&... args) -> - typename std::enable_if::type { - return vformat_to(out, ts, detail::to_string_view(format_str), - fmt::make_format_args>>(args...)); + * Formats arguments with the given text style, writes the result to the output + * iterator `out` and returns the iterator past the end of the output range. + * + * **Example**: + * + * std::vector out; + * fmt::format_to(std::back_inserter(out), + * fmt::emphasis::bold | fg(fmt::color::red), "{}", 42); + */ +template ::value)> +inline auto format_to(OutputIt out, const text_style& ts, + format_string fmt, T&&... args) -> OutputIt { + return vformat_to(out, ts, fmt, fmt::make_format_args(args...)); } template @@ -620,16 +591,14 @@ struct formatter, Char> : formatter { }; /** - \rst - Returns an argument that will be formatted using ANSI escape sequences, - to be used in a formatting function. - - **Example**:: - - fmt::print("Elapsed time: {0:.2f} seconds", - fmt::styled(1.23, fmt::fg(fmt::color::green) | - fmt::bg(fmt::color::blue))); - \endrst + * Returns an argument that will be formatted using ANSI escape sequences, + * to be used in a formatting function. + * + * **Example**: + * + * fmt::print("Elapsed time: {0:.2f} seconds", + * fmt::styled(1.23, fmt::fg(fmt::color::green) | + * fmt::bg(fmt::color::blue))); */ template FMT_CONSTEXPR auto styled(const T& value, text_style ts) diff --git a/src/fmt/compile.h b/src/fmt/compile.h index 71fa69c67e..b2afc2c309 100644 --- a/src/fmt/compile.h +++ b/src/fmt/compile.h @@ -8,39 +8,41 @@ #ifndef FMT_COMPILE_H_ #define FMT_COMPILE_H_ +#ifndef FMT_MODULE +# include // std::back_inserter +#endif + #include "format.h" FMT_BEGIN_NAMESPACE -namespace detail { - -template -FMT_CONSTEXPR inline auto copy_str(InputIt begin, InputIt end, - counting_iterator it) -> counting_iterator { - return it + (end - begin); -} // A compile-time string which is compiled into fast formatting code. -class compiled_string {}; +FMT_EXPORT class compiled_string {}; + +namespace detail { + +template +FMT_CONSTEXPR inline auto copy(InputIt begin, InputIt end, counting_iterator it) + -> counting_iterator { + return it + (end - begin); +} template struct is_compiled_string : std::is_base_of {}; /** - \rst - Converts a string literal *s* into a format string that will be parsed at - compile time and converted into efficient formatting code. Requires C++17 - ``constexpr if`` compiler support. - - **Example**:: - - // Converts 42 into std::string using the most efficient method and no - // runtime format string processing. - std::string s = fmt::format(FMT_COMPILE("{}"), 42); - \endrst + * Converts a string literal `s` into a format string that will be parsed at + * compile time and converted into efficient formatting code. Requires C++17 + * `constexpr if` compiler support. + * + * **Example**: + * + * // Converts 42 into std::string using the most efficient method and no + * // runtime format string processing. + * std::string s = fmt::format(FMT_COMPILE("{}"), 42); */ #if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) -# define FMT_COMPILE(s) \ - FMT_STRING_IMPL(s, fmt::detail::compiled_string, explicit) +# define FMT_COMPILE(s) FMT_STRING_IMPL(s, fmt::compiled_string, explicit) #else # define FMT_COMPILE(s) FMT_STRING(s) #endif @@ -61,8 +63,7 @@ auto first(const T& value, const Tail&...) -> const T& { return value; } -// LAMMPS customization: only use 'if constexpr' with C++17 -#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && (FMT_CPLUSPLUS >= 201703L) +#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) template struct type_list {}; // Returns a reference to the argument at index N from [first, rest...]. @@ -145,9 +146,9 @@ template struct field { template constexpr OutputIt format(OutputIt out, const Args&... args) const { const T& arg = get_arg_checked(args...); - if constexpr (std::is_convertible_v>) { + if constexpr (std::is_convertible>::value) { auto s = basic_string_view(arg); - return copy_str(s.begin(), s.end(), out); + return copy(s.begin(), s.end(), out); } return write(out, arg); } @@ -237,13 +238,12 @@ constexpr size_t parse_text(basic_string_view str, size_t pos) { } template -constexpr auto compile_format_string(S format_str); +constexpr auto compile_format_string(S fmt); template -constexpr auto parse_tail(T head, S format_str) { - if constexpr (POS != - basic_string_view(format_str).size()) { - constexpr auto tail = compile_format_string(format_str); +constexpr auto parse_tail(T head, S fmt) { + if constexpr (POS != basic_string_view(fmt).size()) { + constexpr auto tail = compile_format_string(fmt); if constexpr (std::is_same, unknown_format>()) return tail; @@ -314,14 +314,13 @@ struct field_type::value>> { template -constexpr auto parse_replacement_field_then_tail(S format_str) { +constexpr auto parse_replacement_field_then_tail(S fmt) { using char_type = typename S::char_type; - constexpr auto str = basic_string_view(format_str); + constexpr auto str = basic_string_view(fmt); constexpr char_type c = END_POS != str.size() ? str[END_POS] : char_type(); if constexpr (c == '}') { return parse_tail( - field::type, ARG_INDEX>(), - format_str); + field::type, ARG_INDEX>(), fmt); } else if constexpr (c != ':') { FMT_THROW(format_error("expected ':'")); } else { @@ -334,7 +333,7 @@ constexpr auto parse_replacement_field_then_tail(S format_str) { return parse_tail( spec_field::type, ARG_INDEX>{ result.fmt}, - format_str); + fmt); } } } @@ -342,22 +341,21 @@ constexpr auto parse_replacement_field_then_tail(S format_str) { // Compiles a non-empty format string and returns the compiled representation // or unknown_format() on unrecognized input. template -constexpr auto compile_format_string(S format_str) { +constexpr auto compile_format_string(S fmt) { using char_type = typename S::char_type; - constexpr auto str = basic_string_view(format_str); + constexpr auto str = basic_string_view(fmt); if constexpr (str[POS] == '{') { if constexpr (POS + 1 == str.size()) FMT_THROW(format_error("unmatched '{' in format string")); if constexpr (str[POS + 1] == '{') { - return parse_tail(make_text(str, POS, 1), format_str); + return parse_tail(make_text(str, POS, 1), fmt); } else if constexpr (str[POS + 1] == '}' || str[POS + 1] == ':') { static_assert(ID != manual_indexing_id, "cannot switch from manual to automatic argument indexing"); constexpr auto next_id = ID != manual_indexing_id ? ID + 1 : manual_indexing_id; return parse_replacement_field_then_tail, Args, - POS + 1, ID, next_id>( - format_str); + POS + 1, ID, next_id>(fmt); } else { constexpr auto arg_id_result = parse_arg_id(str.data() + POS + 1, str.data() + str.size()); @@ -373,7 +371,7 @@ constexpr auto compile_format_string(S format_str) { return parse_replacement_field_then_tail, Args, arg_id_end_pos, arg_index, manual_indexing_id>( - format_str); + fmt); } else if constexpr (arg_id_result.arg_id.kind == arg_id_kind::name) { constexpr auto arg_index = get_arg_index_by_name(arg_id_result.arg_id.val.name, Args{}); @@ -382,11 +380,11 @@ constexpr auto compile_format_string(S format_str) { ID != manual_indexing_id ? ID + 1 : manual_indexing_id; return parse_replacement_field_then_tail< decltype(get_type::value), Args, arg_id_end_pos, - arg_index, next_id>(format_str); + arg_index, next_id>(fmt); } else if constexpr (c == '}') { return parse_tail( runtime_named_field{arg_id_result.arg_id.val.name}, - format_str); + fmt); } else if constexpr (c == ':') { return unknown_format(); // no type info for specs parsing } @@ -395,29 +393,26 @@ constexpr auto compile_format_string(S format_str) { } else if constexpr (str[POS] == '}') { if constexpr (POS + 1 == str.size()) FMT_THROW(format_error("unmatched '}' in format string")); - return parse_tail(make_text(str, POS, 1), format_str); + return parse_tail(make_text(str, POS, 1), fmt); } else { constexpr auto end = parse_text(str, POS + 1); if constexpr (end - POS > 1) { - return parse_tail(make_text(str, POS, end - POS), - format_str); + return parse_tail(make_text(str, POS, end - POS), fmt); } else { - return parse_tail(code_unit{str[POS]}, - format_str); + return parse_tail(code_unit{str[POS]}, fmt); } } } template ::value)> -constexpr auto compile(S format_str) { - constexpr auto str = basic_string_view(format_str); +constexpr auto compile(S fmt) { + constexpr auto str = basic_string_view(fmt); if constexpr (str.size() == 0) { return detail::make_text(str, 0, 0); } else { constexpr auto result = - detail::compile_format_string, 0, 0>( - format_str); + detail::compile_format_string, 0, 0>(fmt); return result; } } @@ -489,35 +484,33 @@ FMT_CONSTEXPR OutputIt format_to(OutputIt out, const S&, Args&&... args) { template ::value)> -auto format_to_n(OutputIt out, size_t n, const S& format_str, Args&&... args) +auto format_to_n(OutputIt out, size_t n, const S& fmt, Args&&... args) -> format_to_n_result { using traits = detail::fixed_buffer_traits; auto buf = detail::iterator_buffer(out, n); - fmt::format_to(std::back_inserter(buf), format_str, - std::forward(args)...); + fmt::format_to(std::back_inserter(buf), fmt, std::forward(args)...); return {buf.out(), buf.count()}; } template ::value)> -FMT_CONSTEXPR20 auto formatted_size(const S& format_str, const Args&... args) +FMT_CONSTEXPR20 auto formatted_size(const S& fmt, const Args&... args) -> size_t { - return fmt::format_to(detail::counting_iterator(), format_str, args...) - .count(); + return fmt::format_to(detail::counting_iterator(), fmt, args...).count(); } template ::value)> -void print(std::FILE* f, const S& format_str, const Args&... args) { +void print(std::FILE* f, const S& fmt, const Args&... args) { memory_buffer buffer; - fmt::format_to(std::back_inserter(buffer), format_str, args...); + fmt::format_to(std::back_inserter(buffer), fmt, args...); detail::print(f, {buffer.data(), buffer.size()}); } template ::value)> -void print(const S& format_str, const Args&... args) { - print(stdout, format_str, args...); +void print(const S& fmt, const Args&... args) { + print(stdout, fmt, args...); } #if FMT_USE_NONTYPE_TEMPLATE_ARGS diff --git a/src/fmt/core.h b/src/fmt/core.h index 6a53b8c52c..8ca735f0c0 100644 --- a/src/fmt/core.h +++ b/src/fmt/core.h @@ -1,2963 +1,5 @@ -// Formatting library for C++ - the core API for char/UTF-8 -// -// Copyright (c) 2012 - present, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. +// This file is only provided for compatibility and may be removed in future +// versions. Use fmt/base.h if you don't need fmt::format and fmt/format.h +// otherwise. -#ifndef FMT_CORE_H_ -#define FMT_CORE_H_ - -#include // std::byte -#include // std::FILE -#include // std::strlen -#include // CHAR_BIT -#include // std::string -#include // std::enable_if - -// The fmt library version in the form major * 10000 + minor * 100 + patch. -#define FMT_VERSION 100200 - -#if defined(__clang__) && !defined(__ibmxl__) -# define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) -#else -# define FMT_CLANG_VERSION 0 -#endif - -#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && \ - !defined(__NVCOMPILER) -# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -#else -# define FMT_GCC_VERSION 0 -#endif - -#ifndef FMT_GCC_PRAGMA -// Workaround _Pragma bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59884. -# if FMT_GCC_VERSION >= 504 -# define FMT_GCC_PRAGMA(arg) _Pragma(arg) -# else -# define FMT_GCC_PRAGMA(arg) -# endif -#endif - -#ifdef __ICL -# define FMT_ICC_VERSION __ICL -#elif defined(__INTEL_COMPILER) -# define FMT_ICC_VERSION __INTEL_COMPILER -#else -# define FMT_ICC_VERSION 0 -#endif - -#ifdef _MSC_VER -# define FMT_MSC_VERSION _MSC_VER -# define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__)) -#else -# define FMT_MSC_VERSION 0 -# define FMT_MSC_WARNING(...) -#endif - -#ifdef _GLIBCXX_RELEASE -# define FMT_GLIBCXX_RELEASE _GLIBCXX_RELEASE -#else -# define FMT_GLIBCXX_RELEASE 0 -#endif - -#ifdef _MSVC_LANG -# define FMT_CPLUSPLUS _MSVC_LANG -#else -# define FMT_CPLUSPLUS __cplusplus -#endif - -#ifdef __has_feature -# define FMT_HAS_FEATURE(x) __has_feature(x) -#else -# define FMT_HAS_FEATURE(x) 0 -#endif - -#if defined(__has_include) || FMT_ICC_VERSION >= 1600 || FMT_MSC_VERSION > 1900 -# define FMT_HAS_INCLUDE(x) __has_include(x) -#else -# define FMT_HAS_INCLUDE(x) 0 -#endif - -#ifdef __has_cpp_attribute -# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -# define FMT_HAS_CPP_ATTRIBUTE(x) 0 -#endif - -#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ - (FMT_CPLUSPLUS >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) - -#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \ - (FMT_CPLUSPLUS >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute)) - -#ifndef FMT_DEPRECATED -# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VERSION >= 1900 -# define FMT_DEPRECATED [[deprecated]] -# else -# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) -# define FMT_DEPRECATED __attribute__((deprecated)) -# elif FMT_MSC_VERSION -# define FMT_DEPRECATED __declspec(deprecated) -# else -# define FMT_DEPRECATED /* deprecated */ -# endif -# endif -#endif - -// Check if relaxed C++14 constexpr is supported. -// GCC doesn't allow throw in constexpr until version 6 (bug 67371). -#ifndef FMT_USE_CONSTEXPR -# if (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VERSION >= 1912 || \ - (FMT_GCC_VERSION >= 600 && FMT_CPLUSPLUS >= 201402L)) && \ - !FMT_ICC_VERSION && (!defined(__NVCC__) || FMT_CPLUSPLUS >= 202002L) -# define FMT_USE_CONSTEXPR 1 -# else -# define FMT_USE_CONSTEXPR 0 -# endif -#endif -#if FMT_USE_CONSTEXPR -# define FMT_CONSTEXPR constexpr -#else -# define FMT_CONSTEXPR -#endif - -#if (FMT_CPLUSPLUS >= 202002L || \ - (FMT_CPLUSPLUS >= 201709L && FMT_GCC_VERSION >= 1002)) && \ - ((!FMT_GLIBCXX_RELEASE || FMT_GLIBCXX_RELEASE >= 10) && \ - (!defined(_LIBCPP_VERSION) || _LIBCPP_VERSION >= 10000) && \ - (!FMT_MSC_VERSION || FMT_MSC_VERSION >= 1928)) && \ - defined(__cpp_lib_is_constant_evaluated) -# define FMT_CONSTEXPR20 constexpr -#else -# define FMT_CONSTEXPR20 -#endif - -// Check if exceptions are disabled. -#ifndef FMT_EXCEPTIONS -# if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ - (FMT_MSC_VERSION && !_HAS_EXCEPTIONS) -# define FMT_EXCEPTIONS 0 -# else -# define FMT_EXCEPTIONS 1 -# endif -#endif - -// Disable [[noreturn]] on MSVC/NVCC because of bogus unreachable code warnings. -#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VERSION && \ - !defined(__NVCC__) -# define FMT_NORETURN [[noreturn]] -#else -# define FMT_NORETURN -#endif - -#ifndef FMT_NODISCARD -# if FMT_HAS_CPP17_ATTRIBUTE(nodiscard) -# define FMT_NODISCARD [[nodiscard]] -# else -# define FMT_NODISCARD -# endif -#endif - -#ifndef FMT_INLINE -# if FMT_GCC_VERSION || FMT_CLANG_VERSION -# define FMT_INLINE inline __attribute__((always_inline)) -# else -# define FMT_INLINE inline -# endif -#endif - -#ifdef _MSC_VER -# define FMT_UNCHECKED_ITERATOR(It) \ - using _Unchecked_type = It // Mark iterator as checked. -#else -# define FMT_UNCHECKED_ITERATOR(It) using unchecked_type = It -#endif - -// LAMMPS customization -// use 'v10_lmp' namespace instead of 'v10' so that our -// bundled copy does not collide with linking other code -// using system wide installations which may be using -// a different version. - -#ifndef FMT_BEGIN_NAMESPACE -# define FMT_BEGIN_NAMESPACE \ - namespace fmt { \ - inline namespace v10_lmp { -# define FMT_END_NAMESPACE \ - } \ - } -#endif - -#ifndef FMT_EXPORT -# define FMT_EXPORT -# define FMT_BEGIN_EXPORT -# define FMT_END_EXPORT -#endif - -#if FMT_GCC_VERSION || FMT_CLANG_VERSION -# define FMT_VISIBILITY(value) __attribute__((visibility(value))) -#else -# define FMT_VISIBILITY(value) -#endif - -#if !defined(FMT_HEADER_ONLY) && defined(_WIN32) -# if defined(FMT_LIB_EXPORT) -# define FMT_API __declspec(dllexport) -# elif defined(FMT_SHARED) -# define FMT_API __declspec(dllimport) -# endif -#elif defined(FMT_LIB_EXPORT) || defined(FMT_SHARED) -# define FMT_API FMT_VISIBILITY("default") -#endif -#ifndef FMT_API -# define FMT_API -#endif - -#ifndef FMT_UNICODE -# define FMT_UNICODE !FMT_MSC_VERSION -#endif - -#ifndef FMT_CONSTEVAL -# if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) && \ - (!defined(__apple_build_version__) || \ - __apple_build_version__ >= 14000029L) && \ - FMT_CPLUSPLUS >= 202002L) || \ - (defined(__cpp_consteval) && \ - (!FMT_MSC_VERSION || FMT_MSC_VERSION >= 1929)) -// consteval is broken in MSVC before VS2019 version 16.10 and Apple clang -// before 14. -# define FMT_CONSTEVAL consteval -# define FMT_HAS_CONSTEVAL -# else -# define FMT_CONSTEVAL -# endif -#endif - -#ifndef FMT_USE_NONTYPE_TEMPLATE_ARGS -# if defined(__cpp_nontype_template_args) && \ - ((FMT_GCC_VERSION >= 903 && FMT_CPLUSPLUS >= 201709L) || \ - __cpp_nontype_template_args >= 201911L) && \ - !defined(__NVCOMPILER) && !defined(__LCC__) -# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 -# else -# define FMT_USE_NONTYPE_TEMPLATE_ARGS 0 -# endif -#endif - -// GCC < 5 requires this-> in decltype. -#ifndef FMT_DECLTYPE_THIS -# if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 -# define FMT_DECLTYPE_THIS this-> -# else -# define FMT_DECLTYPE_THIS -# endif -#endif - -// Enable minimal optimizations for more compact code in debug mode. -FMT_GCC_PRAGMA("GCC push_options") -#if !defined(__OPTIMIZE__) && !defined(__NVCOMPILER) && !defined(__LCC__) && \ - !defined(__CUDACC__) -FMT_GCC_PRAGMA("GCC optimize(\"Og\")") -#endif - -FMT_BEGIN_NAMESPACE - -// Implementations of enable_if_t and other metafunctions for older systems. -template -using enable_if_t = typename std::enable_if::type; -template -using conditional_t = typename std::conditional::type; -template using bool_constant = std::integral_constant; -template -using remove_reference_t = typename std::remove_reference::type; -template -using remove_const_t = typename std::remove_const::type; -template -using remove_cvref_t = typename std::remove_cv>::type; -template struct type_identity { - using type = T; -}; -template using type_identity_t = typename type_identity::type; -template -using underlying_t = typename std::underlying_type::type; - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 -// A workaround for gcc 4.8 to make void_t work in a SFINAE context. -template struct void_t_impl { - using type = void; -}; -template using void_t = typename void_t_impl::type; -#else -template using void_t = void; -#endif - -struct monostate { - constexpr monostate() {} -}; - -// An implementation of back_insert_iterator to avoid dependency on . -template class back_insert_iterator { - private: - Container* container_; - - friend auto get_container(back_insert_iterator it) -> Container& { - return *it.container_; - } - - public: - using difference_type = ptrdiff_t; - FMT_UNCHECKED_ITERATOR(back_insert_iterator); - - explicit back_insert_iterator(Container& c) : container_(&c) {} - - auto operator=(const typename Container::value_type& value) - -> back_insert_iterator& { - container_->push_back(value); - return *this; - } - auto operator*() -> back_insert_iterator& { return *this; } - auto operator++() -> back_insert_iterator& { return *this; } - auto operator++(int) -> back_insert_iterator { return *this; } -}; - -template -auto back_inserter(Container& c) -> back_insert_iterator { - return {c}; -} - -// An enable_if helper to be used in template parameters which results in much -// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed -// to workaround a bug in MSVC 2019 (see #1140 and #1186). -#ifdef FMT_DOC -# define FMT_ENABLE_IF(...) -#else -# define FMT_ENABLE_IF(...) fmt::enable_if_t<(__VA_ARGS__), int> = 0 -#endif - -// This is defined in core.h instead of format.h to avoid injecting in std. -// It is a template to avoid undesirable implicit conversions to std::byte. -#ifdef __cpp_lib_byte -template ::value)> -inline auto format_as(T b) -> unsigned char { - return static_cast(b); -} -#endif - -namespace detail { -// Suppresses "unused variable" warnings with the method described in -// https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/. -// (void)var does not work on many Intel compilers. -template FMT_CONSTEXPR void ignore_unused(const T&...) {} - -constexpr FMT_INLINE auto is_constant_evaluated( - bool default_value = false) noexcept -> bool { -// Workaround for incompatibility between libstdc++ consteval-based -// std::is_constant_evaluated() implementation and clang-14: -// https://github.com/fmtlib/fmt/issues/3247. -#if FMT_CPLUSPLUS >= 202002L && FMT_GLIBCXX_RELEASE >= 12 && \ - (FMT_CLANG_VERSION >= 1400 && FMT_CLANG_VERSION < 1500) - ignore_unused(default_value); - return __builtin_is_constant_evaluated(); -#elif defined(__cpp_lib_is_constant_evaluated) - ignore_unused(default_value); - return std::is_constant_evaluated(); -#else - return default_value; -#endif -} - -// Suppresses "conditional expression is constant" warnings. -template constexpr FMT_INLINE auto const_check(T value) -> T { - return value; -} - -FMT_NORETURN FMT_API void assert_fail(const char* file, int line, - const char* message); - -#ifndef FMT_ASSERT -# ifdef NDEBUG -// FMT_ASSERT is not empty to avoid -Wempty-body. -# define FMT_ASSERT(condition, message) \ - fmt::detail::ignore_unused((condition), (message)) -# else -# define FMT_ASSERT(condition, message) \ - ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ - ? (void)0 \ - : fmt::detail::assert_fail(__FILE__, __LINE__, (message))) -# endif -#endif - -#ifdef FMT_USE_INT128 -// Do nothing. -#elif defined(__SIZEOF_INT128__) && !defined(__NVCC__) && \ - !(FMT_CLANG_VERSION && FMT_MSC_VERSION) -# define FMT_USE_INT128 1 -using int128_opt = __int128_t; // An optional native 128-bit integer. -using uint128_opt = __uint128_t; -template inline auto convert_for_visit(T value) -> T { - return value; -} -#else -# define FMT_USE_INT128 0 -#endif -#if !FMT_USE_INT128 -enum class int128_opt {}; -enum class uint128_opt {}; -// Reduce template instantiations. -template auto convert_for_visit(T) -> monostate { return {}; } -#endif - -// Casts a nonnegative integer to unsigned. -template -FMT_CONSTEXPR auto to_unsigned(Int value) -> - typename std::make_unsigned::type { -#if 0 - // LAMMPS customization: disable assertion to avoid bogus warnings - FMT_ASSERT(std::is_unsigned::value || value >= 0, "negative value"); -#endif - return static_cast::type>(value); -} - -template -struct is_string_like : std::false_type {}; - -// A heuristic to detect std::string and std::string_view. -template -struct is_string_like().find_first_of( - typename T::value_type(), 0))>> : std::true_type { -}; - -FMT_CONSTEXPR inline auto is_utf8() -> bool { - FMT_MSC_WARNING(suppress : 4566) constexpr unsigned char section[] = "\u00A7"; - - // Avoid buggy sign extensions in MSVC's constant evaluation mode (#2297). - using uchar = unsigned char; - return FMT_UNICODE || (sizeof(section) == 3 && uchar(section[0]) == 0xC2 && - uchar(section[1]) == 0xA7); -} - -template FMT_CONSTEXPR auto length(const Char* s) -> size_t { - size_t len = 0; - while (*s++) ++len; - return len; -} - -template -FMT_CONSTEXPR auto compare(const Char* s1, const Char* s2, std::size_t n) - -> int { - for (; n != 0; ++s1, ++s2, --n) { - if (*s1 < *s2) return -1; - if (*s1 > *s2) return 1; - } - return 0; -} -} // namespace detail - -template -using basic_string = - std::basic_string, std::allocator>; - -// Checks whether T is a container with contiguous storage. -template struct is_contiguous : std::false_type {}; -template -struct is_contiguous> : std::true_type {}; - -/** - An implementation of ``std::basic_string_view`` for pre-C++17. It provides a - subset of the API. ``fmt::basic_string_view`` is used for format strings even - if ``std::string_view`` is available to prevent issues when a library is - compiled with a different ``-std`` option than the client code (which is not - recommended). - */ -FMT_EXPORT -template class basic_string_view { - private: - const Char* data_; - size_t size_; - - public: - using value_type = Char; - using iterator = const Char*; - - constexpr basic_string_view() noexcept : data_(nullptr), size_(0) {} - - /** Constructs a string reference object from a C string and a size. */ - constexpr basic_string_view(const Char* s, size_t count) noexcept - : data_(s), size_(count) {} - - /** - Constructs a string reference object from a C string. - */ - FMT_CONSTEXPR20 - FMT_INLINE - basic_string_view(const Char* s) - : data_(s), - size_(detail::const_check(std::is_same::value && - !detail::is_constant_evaluated(false)) - ? std::strlen(reinterpret_cast(s)) - : detail::length(s)) {} - - /** - Constructs a string reference from a ``std::basic_string`` or a - ``std::basic_string_view`` object. - */ - template ::value&& std::is_same< - typename S::value_type, Char>::value)> - FMT_CONSTEXPR basic_string_view(const S& s) noexcept - : data_(s.data()), size_(s.size()) {} - - /** Returns a pointer to the string data. */ - constexpr auto data() const noexcept -> const Char* { return data_; } - - /** Returns the string size. */ - constexpr auto size() const noexcept -> size_t { return size_; } - - constexpr auto begin() const noexcept -> iterator { return data_; } - constexpr auto end() const noexcept -> iterator { return data_ + size_; } - - constexpr auto operator[](size_t pos) const noexcept -> const Char& { - return data_[pos]; - } - - FMT_CONSTEXPR void remove_prefix(size_t n) noexcept { - data_ += n; - size_ -= n; - } - - FMT_CONSTEXPR auto starts_with(basic_string_view sv) const noexcept - -> bool { - return size_ >= sv.size_ && detail::compare(data_, sv.data_, sv.size_) == 0; - } - FMT_CONSTEXPR auto starts_with(Char c) const noexcept -> bool { - return size_ >= 1 && *data_ == c; - } - FMT_CONSTEXPR auto starts_with(const Char* s) const -> bool { - return starts_with(basic_string_view(s)); - } - - // Lexicographically compare this string reference to other. - FMT_CONSTEXPR auto compare(basic_string_view other) const -> int { - size_t str_size = size_ < other.size_ ? size_ : other.size_; - int result = detail::compare(data_, other.data_, str_size); - if (result == 0) - result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); - return result; - } - - FMT_CONSTEXPR friend auto operator==(basic_string_view lhs, - basic_string_view rhs) -> bool { - return lhs.compare(rhs) == 0; - } - friend auto operator!=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) != 0; - } - friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) < 0; - } - friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) <= 0; - } - friend auto operator>(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) > 0; - } - friend auto operator>=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) >= 0; - } -}; - -FMT_EXPORT -using string_view = basic_string_view; - -/** Specifies if ``T`` is a character type. Can be specialized by users. */ -FMT_EXPORT -template struct is_char : std::false_type {}; -template <> struct is_char : std::true_type {}; - -namespace detail { - -// A base class for compile-time strings. -struct compile_string {}; - -template -struct is_compile_string : std::is_base_of {}; - -template ::value)> -FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view { - return s; -} -template ::value)> -inline auto to_string_view(const S& s) - -> basic_string_view { - return s; // std::basic_string[_view] -} -template -constexpr auto to_string_view(basic_string_view s) - -> basic_string_view { - return s; -} -template ::value)> -constexpr auto to_string_view(const S& s) - -> basic_string_view { - return basic_string_view(s); -} -void to_string_view(...); - -// Specifies whether S is a string type convertible to fmt::basic_string_view. -// It should be a constexpr function but MSVC 2017 fails to compile it in -// enable_if and MSVC 2015 fails to compile it as an alias template. -// ADL is intentionally disabled as to_string_view is not an extension point. -template -struct is_string - : std::is_class()))> {}; - -template struct char_t_impl {}; -template struct char_t_impl::value>> { - using result = decltype(to_string_view(std::declval())); - using type = typename result::value_type; -}; - -enum class type { - none_type, - // Integer types should go first, - int_type, - uint_type, - long_long_type, - ulong_long_type, - int128_type, - uint128_type, - bool_type, - char_type, - last_integer_type = char_type, - // followed by floating-point types. - float_type, - double_type, - long_double_type, - last_numeric_type = long_double_type, - cstring_type, - string_type, - pointer_type, - custom_type -}; - -// Maps core type T to the corresponding type enum constant. -template -struct type_constant : std::integral_constant {}; - -#define FMT_TYPE_CONSTANT(Type, constant) \ - template \ - struct type_constant \ - : std::integral_constant {} - -FMT_TYPE_CONSTANT(int, int_type); -FMT_TYPE_CONSTANT(unsigned, uint_type); -FMT_TYPE_CONSTANT(long long, long_long_type); -FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); -FMT_TYPE_CONSTANT(int128_opt, int128_type); -FMT_TYPE_CONSTANT(uint128_opt, uint128_type); -FMT_TYPE_CONSTANT(bool, bool_type); -FMT_TYPE_CONSTANT(Char, char_type); -FMT_TYPE_CONSTANT(float, float_type); -FMT_TYPE_CONSTANT(double, double_type); -FMT_TYPE_CONSTANT(long double, long_double_type); -FMT_TYPE_CONSTANT(const Char*, cstring_type); -FMT_TYPE_CONSTANT(basic_string_view, string_type); -FMT_TYPE_CONSTANT(const void*, pointer_type); - -constexpr auto is_integral_type(type t) -> bool { - return t > type::none_type && t <= type::last_integer_type; -} -constexpr auto is_arithmetic_type(type t) -> bool { - return t > type::none_type && t <= type::last_numeric_type; -} - -constexpr auto set(type rhs) -> int { return 1 << static_cast(rhs); } -constexpr auto in(type t, int set) -> bool { - return ((set >> static_cast(t)) & 1) != 0; -} - -// Bitsets of types. -enum { - sint_set = - set(type::int_type) | set(type::long_long_type) | set(type::int128_type), - uint_set = set(type::uint_type) | set(type::ulong_long_type) | - set(type::uint128_type), - bool_set = set(type::bool_type), - char_set = set(type::char_type), - float_set = set(type::float_type) | set(type::double_type) | - set(type::long_double_type), - string_set = set(type::string_type), - cstring_set = set(type::cstring_type), - pointer_set = set(type::pointer_type) -}; -} // namespace detail - -/** Throws ``format_error`` with a given message. */ -FMT_NORETURN FMT_API void throw_format_error(const char* message); - -/** String's character type. */ -template using char_t = typename detail::char_t_impl::type; - -/** - \rst - Parsing context consisting of a format string range being parsed and an - argument counter for automatic indexing. - You can use the ``format_parse_context`` type alias for ``char`` instead. - \endrst - */ -FMT_EXPORT -template class basic_format_parse_context { - private: - basic_string_view format_str_; - int next_arg_id_; - - FMT_CONSTEXPR void do_check_arg_id(int id); - - public: - using char_type = Char; - using iterator = const Char*; - - explicit constexpr basic_format_parse_context( - basic_string_view format_str, int next_arg_id = 0) - : format_str_(format_str), next_arg_id_(next_arg_id) {} - - /** - Returns an iterator to the beginning of the format string range being - parsed. - */ - constexpr auto begin() const noexcept -> iterator { - return format_str_.begin(); - } - - /** - Returns an iterator past the end of the format string range being parsed. - */ - constexpr auto end() const noexcept -> iterator { return format_str_.end(); } - - /** Advances the begin iterator to ``it``. */ - FMT_CONSTEXPR void advance_to(iterator it) { - format_str_.remove_prefix(detail::to_unsigned(it - begin())); - } - - /** - Reports an error if using the manual argument indexing; otherwise returns - the next argument index and switches to the automatic indexing. - */ - FMT_CONSTEXPR auto next_arg_id() -> int { - if (next_arg_id_ < 0) { - throw_format_error( - "cannot switch from manual to automatic argument indexing"); - return 0; - } - int id = next_arg_id_++; - do_check_arg_id(id); - return id; - } - - /** - Reports an error if using the automatic argument indexing; otherwise - switches to the manual indexing. - */ - FMT_CONSTEXPR void check_arg_id(int id) { - if (next_arg_id_ > 0) { - throw_format_error( - "cannot switch from automatic to manual argument indexing"); - return; - } - next_arg_id_ = -1; - do_check_arg_id(id); - } - FMT_CONSTEXPR void check_arg_id(basic_string_view) {} - FMT_CONSTEXPR void check_dynamic_spec(int arg_id); -}; - -FMT_EXPORT -using format_parse_context = basic_format_parse_context; - -namespace detail { -// A parse context with extra data used only in compile-time checks. -template -class compile_parse_context : public basic_format_parse_context { - private: - int num_args_; - const type* types_; - using base = basic_format_parse_context; - - public: - explicit FMT_CONSTEXPR compile_parse_context( - basic_string_view format_str, int num_args, const type* types, - int next_arg_id = 0) - : base(format_str, next_arg_id), num_args_(num_args), types_(types) {} - - constexpr auto num_args() const -> int { return num_args_; } - constexpr auto arg_type(int id) const -> type { return types_[id]; } - - FMT_CONSTEXPR auto next_arg_id() -> int { - int id = base::next_arg_id(); - if (id >= num_args_) throw_format_error("argument not found"); - return id; - } - - FMT_CONSTEXPR void check_arg_id(int id) { - base::check_arg_id(id); - if (id >= num_args_) throw_format_error("argument not found"); - } - using base::check_arg_id; - - FMT_CONSTEXPR void check_dynamic_spec(int arg_id) { - detail::ignore_unused(arg_id); -#if !defined(__LCC__) - if (arg_id < num_args_ && types_ && !is_integral_type(types_[arg_id])) - throw_format_error("width/precision is not integer"); -#endif - } -}; - -/** - \rst - A contiguous memory buffer with an optional growing ability. It is an internal - class and shouldn't be used directly, only via `~fmt::basic_memory_buffer`. - \endrst - */ -template class buffer { - private: - T* ptr_; - size_t size_; - size_t capacity_; - - using grow_fun = void (*)(buffer& buf, size_t capacity); - grow_fun grow_; - - protected: - // Don't initialize ptr_ since it is not accessed to save a few cycles. - FMT_MSC_WARNING(suppress : 26495) - FMT_CONSTEXPR buffer(grow_fun grow, size_t sz) noexcept - : size_(sz), capacity_(sz), grow_(grow) {} - - FMT_CONSTEXPR20 buffer(grow_fun grow, T* p = nullptr, size_t sz = 0, - size_t cap = 0) noexcept - : ptr_(p), size_(sz), capacity_(cap), grow_(grow) {} - - FMT_CONSTEXPR20 ~buffer() = default; - buffer(buffer&&) = default; - - /** Sets the buffer data and capacity. */ - FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept { - ptr_ = buf_data; - capacity_ = buf_capacity; - } - - public: - using value_type = T; - using const_reference = const T&; - - buffer(const buffer&) = delete; - void operator=(const buffer&) = delete; - - FMT_INLINE auto begin() noexcept -> T* { return ptr_; } - FMT_INLINE auto end() noexcept -> T* { return ptr_ + size_; } - - FMT_INLINE auto begin() const noexcept -> const T* { return ptr_; } - FMT_INLINE auto end() const noexcept -> const T* { return ptr_ + size_; } - - /** Returns the size of this buffer. */ - constexpr auto size() const noexcept -> size_t { return size_; } - - /** Returns the capacity of this buffer. */ - constexpr auto capacity() const noexcept -> size_t { return capacity_; } - - /** Returns a pointer to the buffer data (not null-terminated). */ - FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; } - FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; } - - /** Clears this buffer. */ - void clear() { size_ = 0; } - - // Tries resizing the buffer to contain *count* elements. If T is a POD type - // the new elements may not be initialized. - FMT_CONSTEXPR20 void try_resize(size_t count) { - try_reserve(count); - size_ = count <= capacity_ ? count : capacity_; - } - - // Tries increasing the buffer capacity to *new_capacity*. It can increase the - // capacity by a smaller amount than requested but guarantees there is space - // for at least one additional element either by increasing the capacity or by - // flushing the buffer if it is full. - FMT_CONSTEXPR20 void try_reserve(size_t new_capacity) { - if (new_capacity > capacity_) grow_(*this, new_capacity); - } - - FMT_CONSTEXPR20 void push_back(const T& value) { - try_reserve(size_ + 1); - ptr_[size_++] = value; - } - - /** Appends data to the end of the buffer. */ - template void append(const U* begin, const U* end); - - template FMT_CONSTEXPR auto operator[](Idx index) -> T& { - return ptr_[index]; - } - template - FMT_CONSTEXPR auto operator[](Idx index) const -> const T& { - return ptr_[index]; - } -}; - -struct buffer_traits { - explicit buffer_traits(size_t) {} - auto count() const -> size_t { return 0; } - auto limit(size_t size) -> size_t { return size; } -}; - -class fixed_buffer_traits { - private: - size_t count_ = 0; - size_t limit_; - - public: - explicit fixed_buffer_traits(size_t limit) : limit_(limit) {} - auto count() const -> size_t { return count_; } - auto limit(size_t size) -> size_t { - size_t n = limit_ > count_ ? limit_ - count_ : 0; - count_ += size; - return size < n ? size : n; - } -}; - -// A buffer that writes to an output iterator when flushed. -template -class iterator_buffer final : public Traits, public buffer { - private: - OutputIt out_; - enum { buffer_size = 256 }; - T data_[buffer_size]; - - static FMT_CONSTEXPR20 void grow(buffer& buf, size_t) { - if (buf.size() == buffer_size) static_cast(buf).flush(); - } - - void flush() { - auto size = this->size(); - this->clear(); - const T* begin = data_; - const T* end = begin + this->limit(size); - while (begin != end) *out_++ = *begin++; - } - - public: - explicit iterator_buffer(OutputIt out, size_t n = buffer_size) - : Traits(n), buffer(grow, data_, 0, buffer_size), out_(out) {} - iterator_buffer(iterator_buffer&& other) - : Traits(other), - buffer(grow, data_, 0, buffer_size), - out_(other.out_) {} - ~iterator_buffer() { flush(); } - - auto out() -> OutputIt { - flush(); - return out_; - } - auto count() const -> size_t { return Traits::count() + this->size(); } -}; - -template -class iterator_buffer final - : public fixed_buffer_traits, - public buffer { - private: - T* out_; - enum { buffer_size = 256 }; - T data_[buffer_size]; - - static FMT_CONSTEXPR20 void grow(buffer& buf, size_t) { - if (buf.size() == buf.capacity()) - static_cast(buf).flush(); - } - - void flush() { - size_t n = this->limit(this->size()); - if (this->data() == out_) { - out_ += n; - this->set(data_, buffer_size); - } - this->clear(); - } - - public: - explicit iterator_buffer(T* out, size_t n = buffer_size) - : fixed_buffer_traits(n), buffer(grow, out, 0, n), out_(out) {} - iterator_buffer(iterator_buffer&& other) - : fixed_buffer_traits(other), - buffer(static_cast(other)), - out_(other.out_) { - if (this->data() != out_) { - this->set(data_, buffer_size); - this->clear(); - } - } - ~iterator_buffer() { flush(); } - - auto out() -> T* { - flush(); - return out_; - } - auto count() const -> size_t { - return fixed_buffer_traits::count() + this->size(); - } -}; - -template class iterator_buffer final : public buffer { - public: - explicit iterator_buffer(T* out, size_t = 0) - : buffer([](buffer&, size_t) {}, out, 0, ~size_t()) {} - - auto out() -> T* { return &*this->end(); } -}; - -// A buffer that writes to a container with the contiguous storage. -template -class iterator_buffer, - enable_if_t::value, - typename Container::value_type>> - final : public buffer { - private: - using value_type = typename Container::value_type; - Container& container_; - - static FMT_CONSTEXPR20 void grow(buffer& buf, size_t capacity) { - auto& self = static_cast(buf); - self.container_.resize(capacity); - self.set(&self.container_[0], capacity); - } - - public: - explicit iterator_buffer(Container& c) - : buffer(grow, c.size()), container_(c) {} - explicit iterator_buffer(back_insert_iterator out, size_t = 0) - : iterator_buffer(get_container(out)) {} - - auto out() -> back_insert_iterator { - return fmt::back_inserter(container_); - } -}; - -// A buffer that counts the number of code units written discarding the output. -template class counting_buffer final : public buffer { - private: - enum { buffer_size = 256 }; - T data_[buffer_size]; - size_t count_ = 0; - - static FMT_CONSTEXPR20 void grow(buffer& buf, size_t) { - if (buf.size() != buffer_size) return; - static_cast(buf).count_ += buf.size(); - buf.clear(); - } - - public: - counting_buffer() : buffer(grow, data_, 0, buffer_size) {} - - auto count() -> size_t { return count_ + this->size(); } -}; -} // namespace detail - -template -FMT_CONSTEXPR void basic_format_parse_context::do_check_arg_id(int id) { - // Argument id is only checked at compile-time during parsing because - // formatting has its own validation. - if (detail::is_constant_evaluated() && - (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { - using context = detail::compile_parse_context; - if (id >= static_cast(this)->num_args()) - throw_format_error("argument not found"); - } -} - -template -FMT_CONSTEXPR void basic_format_parse_context::check_dynamic_spec( - int arg_id) { - if (detail::is_constant_evaluated() && - (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { - using context = detail::compile_parse_context; - static_cast(this)->check_dynamic_spec(arg_id); - } -} - -FMT_EXPORT template class basic_format_arg; -FMT_EXPORT template class basic_format_args; -FMT_EXPORT template class dynamic_format_arg_store; - -// A formatter for objects of type T. -FMT_EXPORT -template -struct formatter { - // A deleted default constructor indicates a disabled formatter. - formatter() = delete; -}; - -// Specifies if T has an enabled formatter specialization. A type can be -// formattable even if it doesn't have a formatter e.g. via a conversion. -template -using has_formatter = - std::is_constructible>; - -// An output iterator that appends to a buffer. It is used instead of -// back_insert_iterator to reduce symbol sizes for the common case. -class appender { - private: - detail::buffer* buffer_; - - friend auto get_container(appender app) -> detail::buffer& { - return *app.buffer_; - } - - public: - using difference_type = ptrdiff_t; - FMT_UNCHECKED_ITERATOR(appender); - - appender(detail::buffer& buf) : buffer_(&buf) {} - - auto operator=(char c) -> appender& { - buffer_->push_back(c); - return *this; - } - auto operator*() -> appender& { return *this; } - auto operator++() -> appender& { return *this; } - auto operator++(int) -> appender { return *this; } -}; - -namespace detail { - -template -constexpr auto has_const_formatter_impl(T*) - -> decltype(typename Context::template formatter_type().format( - std::declval(), std::declval()), - true) { - return true; -} -template -constexpr auto has_const_formatter_impl(...) -> bool { - return false; -} -template -constexpr auto has_const_formatter() -> bool { - return has_const_formatter_impl(static_cast(nullptr)); -} - -template -using buffer_appender = conditional_t::value, appender, - back_insert_iterator>>; - -// Maps an output iterator to a buffer. -template -auto get_buffer(OutputIt out) -> iterator_buffer { - return iterator_buffer(out); -} -template , Buf>::value)> -auto get_buffer(back_insert_iterator out) -> buffer& { - return get_container(out); -} - -template -FMT_INLINE auto get_iterator(Buf& buf, OutputIt) -> decltype(buf.out()) { - return buf.out(); -} -template -auto get_iterator(buffer&, OutputIt out) -> OutputIt { - return out; -} - -struct view {}; - -template struct named_arg : view { - const Char* name; - const T& value; - named_arg(const Char* n, const T& v) : name(n), value(v) {} -}; - -template struct named_arg_info { - const Char* name; - int id; -}; - -template -struct arg_data { - // args_[0].named_args points to named_args_ to avoid bloating format_args. - // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. - T args_[1 + (NUM_ARGS != 0 ? NUM_ARGS : +1)]; - named_arg_info named_args_[NUM_NAMED_ARGS]; - - template - arg_data(const U&... init) : args_{T(named_args_, NUM_NAMED_ARGS), init...} {} - arg_data(const arg_data& other) = delete; - auto args() const -> const T* { return args_ + 1; } - auto named_args() -> named_arg_info* { return named_args_; } -}; - -template -struct arg_data { - // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. - T args_[NUM_ARGS != 0 ? NUM_ARGS : +1]; - - template - FMT_CONSTEXPR FMT_INLINE arg_data(const U&... init) : args_{init...} {} - FMT_CONSTEXPR FMT_INLINE auto args() const -> const T* { return args_; } - FMT_CONSTEXPR FMT_INLINE auto named_args() -> std::nullptr_t { - return nullptr; - } -}; - -template -inline void init_named_args(named_arg_info*, int, int) {} - -template struct is_named_arg : std::false_type {}; -template struct is_statically_named_arg : std::false_type {}; - -template -struct is_named_arg> : std::true_type {}; - -template ::value)> -void init_named_args(named_arg_info* named_args, int arg_count, - int named_arg_count, const T&, const Tail&... args) { - init_named_args(named_args, arg_count + 1, named_arg_count, args...); -} - -template ::value)> -void init_named_args(named_arg_info* named_args, int arg_count, - int named_arg_count, const T& arg, const Tail&... args) { - named_args[named_arg_count++] = {arg.name, arg_count}; - init_named_args(named_args, arg_count + 1, named_arg_count, args...); -} - -template -FMT_CONSTEXPR FMT_INLINE void init_named_args(std::nullptr_t, int, int, - const Args&...) {} - -template constexpr auto count() -> size_t { return B ? 1 : 0; } -template constexpr auto count() -> size_t { - return (B1 ? 1 : 0) + count(); -} - -template constexpr auto count_named_args() -> size_t { - return count::value...>(); -} - -template -constexpr auto count_statically_named_args() -> size_t { - return count::value...>(); -} - -struct unformattable {}; -struct unformattable_char : unformattable {}; -struct unformattable_pointer : unformattable {}; - -template struct string_value { - const Char* data; - size_t size; -}; - -template struct named_arg_value { - const named_arg_info* data; - size_t size; -}; - -template struct custom_value { - using parse_context = typename Context::parse_context_type; - void* value; - void (*format)(void* arg, parse_context& parse_ctx, Context& ctx); -}; - -// A formatting argument value. -template class value { - public: - using char_type = typename Context::char_type; - - union { - monostate no_value; - int int_value; - unsigned uint_value; - long long long_long_value; - unsigned long long ulong_long_value; - int128_opt int128_value; - uint128_opt uint128_value; - bool bool_value; - char_type char_value; - float float_value; - double double_value; - long double long_double_value; - const void* pointer; - string_value string; - custom_value custom; - named_arg_value named_args; - }; - - constexpr FMT_INLINE value() : no_value() {} - constexpr FMT_INLINE value(int val) : int_value(val) {} - constexpr FMT_INLINE value(unsigned val) : uint_value(val) {} - constexpr FMT_INLINE value(long long val) : long_long_value(val) {} - constexpr FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {} - FMT_INLINE value(int128_opt val) : int128_value(val) {} - FMT_INLINE value(uint128_opt val) : uint128_value(val) {} - constexpr FMT_INLINE value(float val) : float_value(val) {} - constexpr FMT_INLINE value(double val) : double_value(val) {} - FMT_INLINE value(long double val) : long_double_value(val) {} - constexpr FMT_INLINE value(bool val) : bool_value(val) {} - constexpr FMT_INLINE value(char_type val) : char_value(val) {} - FMT_CONSTEXPR FMT_INLINE value(const char_type* val) { - string.data = val; - if (is_constant_evaluated()) string.size = {}; - } - FMT_CONSTEXPR FMT_INLINE value(basic_string_view val) { - string.data = val.data(); - string.size = val.size(); - } - FMT_INLINE value(const void* val) : pointer(val) {} - FMT_INLINE value(const named_arg_info* args, size_t size) - : named_args{args, size} {} - - template FMT_CONSTEXPR20 FMT_INLINE value(T& val) { - using value_type = remove_const_t; - // T may overload operator& e.g. std::vector::reference in libc++. -#ifdef __cpp_if_constexpr - if constexpr (std::is_same::value) - custom.value = const_cast(&val); -#endif - if (!is_constant_evaluated()) - custom.value = const_cast(&reinterpret_cast(val)); - // Get the formatter type through the context to allow different contexts - // have different extension points, e.g. `formatter` for `format` and - // `printf_formatter` for `printf`. - custom.format = format_custom_arg< - value_type, typename Context::template formatter_type>; - } - value(unformattable); - value(unformattable_char); - value(unformattable_pointer); - - private: - // Formats an argument of a custom type, such as a user-defined class. - template - static void format_custom_arg(void* arg, - typename Context::parse_context_type& parse_ctx, - Context& ctx) { - auto f = Formatter(); - parse_ctx.advance_to(f.parse(parse_ctx)); - using qualified_type = - conditional_t(), const T, T>; - // Calling format through a mutable reference is deprecated. - ctx.advance_to(f.format(*static_cast(arg), ctx)); - } -}; - -// To minimize the number of types we need to deal with, long is translated -// either to int or to long long depending on its size. -enum { long_short = sizeof(long) == sizeof(int) }; -using long_type = conditional_t; -using ulong_type = conditional_t; - -template struct format_as_result { - template ::value || std::is_class::value)> - static auto map(U*) -> remove_cvref_t()))>; - static auto map(...) -> void; - - using type = decltype(map(static_cast(nullptr))); -}; -template using format_as_t = typename format_as_result::type; - -template -struct has_format_as - : bool_constant, void>::value> {}; - -// Maps formatting arguments to core types. -// arg_mapper reports errors by returning unformattable instead of using -// static_assert because it's used in the is_formattable trait. -template struct arg_mapper { - using char_type = typename Context::char_type; - - FMT_CONSTEXPR FMT_INLINE auto map(signed char val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned char val) -> unsigned { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(short val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned short val) -> unsigned { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(int val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned val) -> unsigned { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(long val) -> long_type { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned long val) -> ulong_type { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(long long val) -> long long { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned long long val) - -> unsigned long long { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(int128_opt val) -> int128_opt { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(uint128_opt val) -> uint128_opt { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(bool val) -> bool { return val; } - - template ::value || - std::is_same::value)> - FMT_CONSTEXPR FMT_INLINE auto map(T val) -> char_type { - return val; - } - template ::value || -#ifdef __cpp_char8_t - std::is_same::value || -#endif - std::is_same::value || - std::is_same::value) && - !std::is_same::value, - int> = 0> - FMT_CONSTEXPR FMT_INLINE auto map(T) -> unformattable_char { - return {}; - } - - FMT_CONSTEXPR FMT_INLINE auto map(float val) -> float { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(double val) -> double { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(long double val) -> long double { - return val; - } - - FMT_CONSTEXPR FMT_INLINE auto map(char_type* val) -> const char_type* { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(const char_type* val) -> const char_type* { - return val; - } - template ::value && !std::is_pointer::value && - std::is_same>::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - return to_string_view(val); - } - template ::value && !std::is_pointer::value && - !std::is_same>::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T&) -> unformattable_char { - return {}; - } - - FMT_CONSTEXPR FMT_INLINE auto map(void* val) -> const void* { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(const void* val) -> const void* { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(std::nullptr_t val) -> const void* { - return val; - } - - // Use SFINAE instead of a const T* parameter to avoid a conflict with the - // array overload. - template < - typename T, - FMT_ENABLE_IF( - std::is_pointer::value || std::is_member_pointer::value || - std::is_function::type>::value || - (std::is_array::value && - !std::is_convertible::value))> - FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer { - return {}; - } - - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T (&values)[N]) -> const T (&)[N] { - return values; - } - - // Only map owning types because mapping views can be unsafe. - template , - FMT_ENABLE_IF(std::is_arithmetic::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> decltype(FMT_DECLTYPE_THIS map(U())) { - return map(format_as(val)); - } - - template > - struct formattable : bool_constant() || - (has_formatter::value && - !std::is_const::value)> {}; - - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto do_map(T& val) -> T& { - return val; - } - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto do_map(T&) -> unformattable { - return {}; - } - - template , - FMT_ENABLE_IF((std::is_class::value || std::is_enum::value || - std::is_union::value) && - !is_string::value && !is_char::value && - !is_named_arg::value && - !std::is_arithmetic>::value)> - FMT_CONSTEXPR FMT_INLINE auto map(T& val) - -> decltype(FMT_DECLTYPE_THIS do_map(val)) { - return do_map(val); - } - - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) - -> decltype(FMT_DECLTYPE_THIS map(named_arg.value)) { - return map(named_arg.value); - } - - auto map(...) -> unformattable { return {}; } -}; - -// A type constant after applying arg_mapper. -template -using mapped_type_constant = - type_constant().map(std::declval())), - typename Context::char_type>; - -enum { packed_arg_bits = 4 }; -// Maximum number of arguments with packed types. -enum { max_packed_args = 62 / packed_arg_bits }; -enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; -enum : unsigned long long { has_named_args_bit = 1ULL << 62 }; - -template -struct is_output_iterator : std::false_type {}; - -template <> struct is_output_iterator : std::true_type {}; - -template -struct is_output_iterator< - It, T, void_t()++ = std::declval())>> - : std::true_type {}; - -template struct is_back_insert_iterator : std::false_type {}; -template -struct is_back_insert_iterator> - : std::true_type {}; - -// A type-erased reference to an std::locale to avoid a heavy include. -class locale_ref { - private: - const void* locale_; // A type-erased pointer to std::locale. - - public: - constexpr FMT_INLINE locale_ref() : locale_(nullptr) {} - template explicit locale_ref(const Locale& loc); - - explicit operator bool() const noexcept { return locale_ != nullptr; } - - template auto get() const -> Locale; -}; - -template constexpr auto encode_types() -> unsigned long long { - return 0; -} - -template -constexpr auto encode_types() -> unsigned long long { - return static_cast(mapped_type_constant::value) | - (encode_types() << packed_arg_bits); -} - -#if defined(__cpp_if_constexpr) -// This type is intentionally undefined, only used for errors -template struct type_is_unformattable_for; -#endif - -template -FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { - using arg_type = remove_cvref_t().map(val))>; - - constexpr bool formattable_char = - !std::is_same::value; - static_assert(formattable_char, "Mixing character types is disallowed."); - - // Formatting of arbitrary pointers is disallowed. If you want to format a - // pointer cast it to `void*` or `const void*`. In particular, this forbids - // formatting of `[const] volatile char*` printed as bool by iostreams. - constexpr bool formattable_pointer = - !std::is_same::value; - static_assert(formattable_pointer, - "Formatting of non-void pointers is disallowed."); - - constexpr bool formattable = !std::is_same::value; -#if defined(__cpp_if_constexpr) - if constexpr (!formattable) { - type_is_unformattable_for _; - } -#endif - static_assert( - formattable, - "Cannot format an argument. To make type T formattable provide a " - "formatter specialization: https://fmt.dev/latest/api.html#udt"); - return {arg_mapper().map(val)}; -} - -template -FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg { - auto arg = basic_format_arg(); - arg.type_ = mapped_type_constant::value; - arg.value_ = make_arg(val); - return arg; -} - -template -FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg { - return make_arg(val); -} -} // namespace detail -FMT_BEGIN_EXPORT - -// A formatting argument. Context is a template parameter for the compiled API -// where output can be unbuffered. -template class basic_format_arg { - private: - detail::value value_; - detail::type type_; - - template - friend FMT_CONSTEXPR auto detail::make_arg(T& value) - -> basic_format_arg; - - friend class basic_format_args; - friend class dynamic_format_arg_store; - - using char_type = typename Context::char_type; - - template - friend struct detail::arg_data; - - basic_format_arg(const detail::named_arg_info* args, size_t size) - : value_(args, size) {} - - public: - class handle { - public: - explicit handle(detail::custom_value custom) : custom_(custom) {} - - void format(typename Context::parse_context_type& parse_ctx, - Context& ctx) const { - custom_.format(custom_.value, parse_ctx, ctx); - } - - private: - detail::custom_value custom_; - }; - - constexpr basic_format_arg() : type_(detail::type::none_type) {} - - constexpr explicit operator bool() const noexcept { - return type_ != detail::type::none_type; - } - - auto type() const -> detail::type { return type_; } - - auto is_integral() const -> bool { return detail::is_integral_type(type_); } - auto is_arithmetic() const -> bool { - return detail::is_arithmetic_type(type_); - } - - /** - \rst - Visits an argument dispatching to the appropriate visit method based on - the argument type. For example, if the argument type is ``double`` then - ``vis(value)`` will be called with the value of type ``double``. - \endrst - */ - template - FMT_CONSTEXPR auto visit(Visitor&& vis) -> decltype(vis(0)) { - switch (type_) { - case detail::type::none_type: - break; - case detail::type::int_type: - return vis(value_.int_value); - case detail::type::uint_type: - return vis(value_.uint_value); - case detail::type::long_long_type: - return vis(value_.long_long_value); - case detail::type::ulong_long_type: - return vis(value_.ulong_long_value); - case detail::type::int128_type: - return vis(detail::convert_for_visit(value_.int128_value)); - case detail::type::uint128_type: - return vis(detail::convert_for_visit(value_.uint128_value)); - case detail::type::bool_type: - return vis(value_.bool_value); - case detail::type::char_type: - return vis(value_.char_value); - case detail::type::float_type: - return vis(value_.float_value); - case detail::type::double_type: - return vis(value_.double_value); - case detail::type::long_double_type: - return vis(value_.long_double_value); - case detail::type::cstring_type: - return vis(value_.string.data); - case detail::type::string_type: - using sv = basic_string_view; - return vis(sv(value_.string.data, value_.string.size)); - case detail::type::pointer_type: - return vis(value_.pointer); - case detail::type::custom_type: - return vis(typename basic_format_arg::handle(value_.custom)); - } - return vis(monostate()); - } - - FMT_INLINE auto format_custom(const char_type* parse_begin, - typename Context::parse_context_type& parse_ctx, - Context& ctx) -> bool { - if (type_ != detail::type::custom_type) return false; - parse_ctx.advance_to(parse_begin); - value_.custom.format(value_.custom.value, parse_ctx, ctx); - return true; - } -}; - -template -FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto visit_format_arg( - Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { - return arg.visit(std::forward(vis)); -} - -// Formatting context. -template class basic_format_context { - private: - OutputIt out_; - basic_format_args args_; - detail::locale_ref loc_; - - public: - using iterator = OutputIt; - using format_arg = basic_format_arg; - using format_args = basic_format_args; - using parse_context_type = basic_format_parse_context; - template using formatter_type = formatter; - - /** The character type for the output. */ - using char_type = Char; - - basic_format_context(basic_format_context&&) = default; - basic_format_context(const basic_format_context&) = delete; - void operator=(const basic_format_context&) = delete; - /** - Constructs a ``basic_format_context`` object. References to the arguments - are stored in the object so make sure they have appropriate lifetimes. - */ - constexpr basic_format_context(OutputIt out, format_args ctx_args, - detail::locale_ref loc = {}) - : out_(out), args_(ctx_args), loc_(loc) {} - - constexpr auto arg(int id) const -> format_arg { return args_.get(id); } - FMT_CONSTEXPR auto arg(basic_string_view name) -> format_arg { - return args_.get(name); - } - FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { - return args_.get_id(name); - } - auto args() const -> const format_args& { return args_; } - - // This function is intentionally not constexpr to give a compile-time error. - void on_error(const char* message) { throw_format_error(message); } - - // Returns an iterator to the beginning of the output range. - FMT_CONSTEXPR auto out() -> iterator { return out_; } - - // Advances the begin iterator to ``it``. - void advance_to(iterator it) { - if (!detail::is_back_insert_iterator()) out_ = it; - } - - FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; } -}; - -template -using buffer_context = - basic_format_context, Char>; -using format_context = buffer_context; - -template -using is_formattable = bool_constant>() - .map(std::declval()))>::value>; - -/** - \rst - An array of references to arguments. It can be implicitly converted into - `~fmt::basic_format_args` for passing into type-erased formatting functions - such as `~fmt::vformat`. - \endrst - */ -template -class format_arg_store -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 - // Workaround a GCC template argument substitution bug. - : public basic_format_args -#endif -{ - private: - static const size_t num_args = sizeof...(Args); - static constexpr size_t num_named_args = detail::count_named_args(); - static const bool is_packed = num_args <= detail::max_packed_args; - - using value_type = conditional_t, - basic_format_arg>; - - detail::arg_data - data_; - - friend class basic_format_args; - - static constexpr unsigned long long desc = - (is_packed ? detail::encode_types() - : detail::is_unpacked_bit | num_args) | - (num_named_args != 0 - ? static_cast(detail::has_named_args_bit) - : 0); - - public: - template - FMT_CONSTEXPR FMT_INLINE format_arg_store(T&... args) - : -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 - basic_format_args(*this), -#endif - data_{detail::make_arg(args)...} { - if (detail::const_check(num_named_args != 0)) - detail::init_named_args(data_.named_args(), 0, 0, args...); - } -}; - -/** - \rst - Constructs a `~fmt::format_arg_store` object that contains references to - arguments and can be implicitly converted to `~fmt::format_args`. `Context` - can be omitted in which case it defaults to `~fmt::format_context`. - See `~fmt::arg` for lifetime considerations. - \endrst - */ -// Arguments are taken by lvalue references to avoid some lifetime issues. -template -constexpr auto make_format_args(T&... args) - -> format_arg_store...> { - return {args...}; -} - -/** - \rst - Returns a named argument to be used in a formatting function. - It should only be used in a call to a formatting function or - `dynamic_format_arg_store::push_back`. - - **Example**:: - - fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23)); - \endrst - */ -template -inline auto arg(const Char* name, const T& arg) -> detail::named_arg { - static_assert(!detail::is_named_arg(), "nested named arguments"); - return {name, arg}; -} -FMT_END_EXPORT - -/** - \rst - A view of a collection of formatting arguments. To avoid lifetime issues it - should only be used as a parameter type in type-erased functions such as - ``vformat``:: - - void vlog(string_view format_str, format_args args); // OK - format_args args = make_format_args(); // Error: dangling reference - \endrst - */ -template class basic_format_args { - public: - using size_type = int; - using format_arg = basic_format_arg; - - private: - // A descriptor that contains information about formatting arguments. - // If the number of arguments is less or equal to max_packed_args then - // argument types are passed in the descriptor. This reduces binary code size - // per formatting function call. - unsigned long long desc_; - union { - // If is_packed() returns true then argument values are stored in values_; - // otherwise they are stored in args_. This is done to improve cache - // locality and reduce compiled code size since storing larger objects - // may require more code (at least on x86-64) even if the same amount of - // data is actually copied to stack. It saves ~10% on the bloat test. - const detail::value* values_; - const format_arg* args_; - }; - - constexpr auto is_packed() const -> bool { - return (desc_ & detail::is_unpacked_bit) == 0; - } - auto has_named_args() const -> bool { - return (desc_ & detail::has_named_args_bit) != 0; - } - - FMT_CONSTEXPR auto type(int index) const -> detail::type { - int shift = index * detail::packed_arg_bits; - unsigned int mask = (1 << detail::packed_arg_bits) - 1; - return static_cast((desc_ >> shift) & mask); - } - - constexpr FMT_INLINE basic_format_args(unsigned long long desc, - const detail::value* values) - : desc_(desc), values_(values) {} - constexpr basic_format_args(unsigned long long desc, const format_arg* args) - : desc_(desc), args_(args) {} - - public: - constexpr basic_format_args() : desc_(0), args_(nullptr) {} - - /** - \rst - Constructs a `basic_format_args` object from `~fmt::format_arg_store`. - \endrst - */ - template - constexpr FMT_INLINE basic_format_args( - const format_arg_store& store) - : basic_format_args(format_arg_store::desc, - store.data_.args()) {} - - /** - \rst - Constructs a `basic_format_args` object from - `~fmt::dynamic_format_arg_store`. - \endrst - */ - constexpr FMT_INLINE basic_format_args( - const dynamic_format_arg_store& store) - : basic_format_args(store.get_types(), store.data()) {} - - /** - \rst - Constructs a `basic_format_args` object from a dynamic set of arguments. - \endrst - */ - constexpr basic_format_args(const format_arg* args, int count) - : basic_format_args(detail::is_unpacked_bit | detail::to_unsigned(count), - args) {} - - /** Returns the argument with the specified id. */ - FMT_CONSTEXPR auto get(int id) const -> format_arg { - format_arg arg; - if (!is_packed()) { - if (id < max_size()) arg = args_[id]; - return arg; - } - if (id >= detail::max_packed_args) return arg; - arg.type_ = type(id); - if (arg.type_ == detail::type::none_type) return arg; - arg.value_ = values_[id]; - return arg; - } - - template - auto get(basic_string_view name) const -> format_arg { - int id = get_id(name); - return id >= 0 ? get(id) : format_arg(); - } - - template - auto get_id(basic_string_view name) const -> int { - if (!has_named_args()) return -1; - const auto& named_args = - (is_packed() ? values_[-1] : args_[-1].value_).named_args; - for (size_t i = 0; i < named_args.size; ++i) { - if (named_args.data[i].name == name) return named_args.data[i].id; - } - return -1; - } - - auto max_size() const -> int { - unsigned long long max_packed = detail::max_packed_args; - return static_cast(is_packed() ? max_packed - : desc_ & ~detail::is_unpacked_bit); - } -}; - -/** An alias to ``basic_format_args``. */ -// A separate type would result in shorter symbols but break ABI compatibility -// between clang and gcc on ARM (#1919). -FMT_EXPORT using format_args = basic_format_args; - -// We cannot use enum classes as bit fields because of a gcc bug, so we put them -// in namespaces instead (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414). -// Additionally, if an underlying type is specified, older gcc incorrectly warns -// that the type is too small. Both bugs are fixed in gcc 9.3. -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 903 -# define FMT_ENUM_UNDERLYING_TYPE(type) -#else -# define FMT_ENUM_UNDERLYING_TYPE(type) : type -#endif -namespace align { -enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, left, right, center, - numeric}; -} -using align_t = align::type; -namespace sign { -enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, minus, plus, space}; -} -using sign_t = sign::type; - -namespace detail { - -// Workaround an array initialization issue in gcc 4.8. -template struct fill_t { - private: - enum { max_size = 4 }; - Char data_[max_size] = {Char(' '), Char(0), Char(0), Char(0)}; - unsigned char size_ = 1; - - public: - FMT_CONSTEXPR void operator=(basic_string_view s) { - auto size = s.size(); - FMT_ASSERT(size <= max_size, "invalid fill"); - for (size_t i = 0; i < size; ++i) data_[i] = s[i]; - size_ = static_cast(size); - } - - constexpr auto size() const -> size_t { return size_; } - constexpr auto data() const -> const Char* { return data_; } - - FMT_CONSTEXPR auto operator[](size_t index) -> Char& { return data_[index]; } - FMT_CONSTEXPR auto operator[](size_t index) const -> const Char& { - return data_[index]; - } -}; -} // namespace detail - -enum class presentation_type : unsigned char { - none, - dec, // 'd' - oct, // 'o' - hex_lower, // 'x' - hex_upper, // 'X' - bin_lower, // 'b' - bin_upper, // 'B' - hexfloat_lower, // 'a' - hexfloat_upper, // 'A' - exp_lower, // 'e' - exp_upper, // 'E' - fixed_lower, // 'f' - fixed_upper, // 'F' - general_lower, // 'g' - general_upper, // 'G' - chr, // 'c' - string, // 's' - pointer, // 'p' - debug // '?' -}; - -// Format specifiers for built-in and string types. -template struct format_specs { - int width; - int precision; - presentation_type type; - align_t align : 4; - sign_t sign : 3; - bool alt : 1; // Alternate form ('#'). - bool localized : 1; - detail::fill_t fill; - - constexpr format_specs() - : width(0), - precision(-1), - type(presentation_type::none), - align(align::none), - sign(sign::none), - alt(false), - localized(false) {} -}; - -namespace detail { - -enum class arg_id_kind { none, index, name }; - -// An argument reference. -template struct arg_ref { - FMT_CONSTEXPR arg_ref() : kind(arg_id_kind::none), val() {} - - FMT_CONSTEXPR explicit arg_ref(int index) - : kind(arg_id_kind::index), val(index) {} - FMT_CONSTEXPR explicit arg_ref(basic_string_view name) - : kind(arg_id_kind::name), val(name) {} - - FMT_CONSTEXPR auto operator=(int idx) -> arg_ref& { - kind = arg_id_kind::index; - val.index = idx; - return *this; - } - - arg_id_kind kind; - union value { - FMT_CONSTEXPR value(int idx = 0) : index(idx) {} - FMT_CONSTEXPR value(basic_string_view n) : name(n) {} - - int index; - basic_string_view name; - } val; -}; - -// Format specifiers with width and precision resolved at formatting rather -// than parsing time to allow reusing the same parsed specifiers with -// different sets of arguments (precompilation of format strings). -template -struct dynamic_format_specs : format_specs { - arg_ref width_ref; - arg_ref precision_ref; -}; - -// Converts a character to ASCII. Returns '\0' on conversion failure. -template ::value || - std::is_enum::value)> -constexpr auto to_ascii(Char c) -> char { - return c <= 0xff ? static_cast(c) : '\0'; -} - -// Returns the number of code units in a code point or 1 on error. -template -FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int { - if (const_check(sizeof(Char) != 1)) return 1; - auto c = static_cast(*begin); - return static_cast((0x3a55000000000000ull >> (2 * (c >> 3))) & 0x3) + 1; -} - -// Return the result via the out param to workaround gcc bug 77539. -template -FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr& out) -> bool { - for (out = first; out != last; ++out) { - if (*out == value) return true; - } - return false; -} - -template <> -inline auto find(const char* first, const char* last, char value, - const char*& out) -> bool { - out = static_cast( - std::memchr(first, value, to_unsigned(last - first))); - return out != nullptr; -} - -// Parses the range [begin, end) as an unsigned integer. This function assumes -// that the range is non-empty and the first character is a digit. -template -FMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end, - int error_value) noexcept -> int { - FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', ""); - unsigned value = 0, prev = 0; - auto p = begin; - do { - prev = value; - value = value * 10 + unsigned(*p - '0'); - ++p; - } while (p != end && '0' <= *p && *p <= '9'); - auto num_digits = p - begin; - begin = p; - int digits10 = static_cast(sizeof(int) * CHAR_BIT * 3 / 10); - if (num_digits <= digits10) return static_cast(value); - // Check for overflow. - unsigned max = INT_MAX; - return num_digits == digits10 + 1 && - prev * 10ull + unsigned(p[-1] - '0') <= max - ? static_cast(value) - : error_value; -} - -FMT_CONSTEXPR inline auto parse_align(char c) -> align_t { - switch (c) { - case '<': - return align::left; - case '>': - return align::right; - case '^': - return align::center; - } - return align::none; -} - -template constexpr auto is_name_start(Char c) -> bool { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_'; -} - -template -FMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - Char c = *begin; - if (c >= '0' && c <= '9') { - int index = 0; - if (c != '0') - index = parse_nonnegative_int(begin, end, INT_MAX); - else - ++begin; - if (begin == end || (*begin != '}' && *begin != ':')) - throw_format_error("invalid format string"); - else - handler.on_index(index); - return begin; - } - if (!is_name_start(c)) { - throw_format_error("invalid format string"); - return begin; - } - auto it = begin; - do { - ++it; - } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9'))); - handler.on_name({begin, to_unsigned(it - begin)}); - return it; -} - -template -FMT_CONSTEXPR FMT_INLINE auto parse_arg_id(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - FMT_ASSERT(begin != end, ""); - Char c = *begin; - if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler); - handler.on_auto(); - return begin; -} - -template struct dynamic_spec_id_handler { - basic_format_parse_context& ctx; - arg_ref& ref; - - FMT_CONSTEXPR void on_auto() { - int id = ctx.next_arg_id(); - ref = arg_ref(id); - ctx.check_dynamic_spec(id); - } - FMT_CONSTEXPR void on_index(int id) { - ref = arg_ref(id); - ctx.check_arg_id(id); - ctx.check_dynamic_spec(id); - } - FMT_CONSTEXPR void on_name(basic_string_view id) { - ref = arg_ref(id); - ctx.check_arg_id(id); - } -}; - -// Parses [integer | "{" [arg_id] "}"]. -template -FMT_CONSTEXPR auto parse_dynamic_spec(const Char* begin, const Char* end, - int& value, arg_ref& ref, - basic_format_parse_context& ctx) - -> const Char* { - FMT_ASSERT(begin != end, ""); - if ('0' <= *begin && *begin <= '9') { - int val = parse_nonnegative_int(begin, end, -1); - if (val != -1) - value = val; - else - throw_format_error("number is too big"); - } else if (*begin == '{') { - ++begin; - auto handler = dynamic_spec_id_handler{ctx, ref}; - if (begin != end) begin = parse_arg_id(begin, end, handler); - if (begin != end && *begin == '}') return ++begin; - throw_format_error("invalid format string"); - } - return begin; -} - -template -FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, - int& value, arg_ref& ref, - basic_format_parse_context& ctx) - -> const Char* { - ++begin; - if (begin == end || *begin == '}') { - throw_format_error("invalid precision"); - return begin; - } - return parse_dynamic_spec(begin, end, value, ref, ctx); -} - -enum class state { start, align, sign, hash, zero, width, precision, locale }; - -// Parses standard format specifiers. -template -FMT_CONSTEXPR FMT_INLINE auto parse_format_specs( - const Char* begin, const Char* end, dynamic_format_specs& specs, - basic_format_parse_context& ctx, type arg_type) -> const Char* { - auto c = '\0'; - if (end - begin > 1) { - auto next = to_ascii(begin[1]); - c = parse_align(next) == align::none ? to_ascii(*begin) : '\0'; - } else { - if (begin == end) return begin; - c = to_ascii(*begin); - } - - struct { - state current_state = state::start; - FMT_CONSTEXPR void operator()(state s, bool valid = true) { - if (current_state >= s || !valid) - throw_format_error("invalid format specifier"); - current_state = s; - } - } enter_state; - - using pres = presentation_type; - constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; - struct { - const Char*& begin; - dynamic_format_specs& specs; - type arg_type; - - FMT_CONSTEXPR auto operator()(pres pres_type, int set) -> const Char* { - if (!in(arg_type, set)) { - if (arg_type == type::none_type) return begin; - throw_format_error("invalid format specifier"); - } - specs.type = pres_type; - return begin + 1; - } - } parse_presentation_type{begin, specs, arg_type}; - - for (;;) { - switch (c) { - case '<': - case '>': - case '^': - enter_state(state::align); - specs.align = parse_align(c); - ++begin; - break; - case '+': - case '-': - case ' ': - if (arg_type == type::none_type) return begin; - enter_state(state::sign, in(arg_type, sint_set | float_set)); - switch (c) { - case '+': - specs.sign = sign::plus; - break; - case '-': - specs.sign = sign::minus; - break; - case ' ': - specs.sign = sign::space; - break; - } - ++begin; - break; - case '#': - if (arg_type == type::none_type) return begin; - enter_state(state::hash, is_arithmetic_type(arg_type)); - specs.alt = true; - ++begin; - break; - case '0': - enter_state(state::zero); - if (!is_arithmetic_type(arg_type)) { - if (arg_type == type::none_type) return begin; - throw_format_error("format specifier requires numeric argument"); - } - if (specs.align == align::none) { - // Ignore 0 if align is specified for compatibility with std::format. - specs.align = align::numeric; - specs.fill[0] = Char('0'); - } - ++begin; - break; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '{': - enter_state(state::width); - begin = parse_dynamic_spec(begin, end, specs.width, specs.width_ref, ctx); - break; - case '.': - if (arg_type == type::none_type) return begin; - enter_state(state::precision, - in(arg_type, float_set | string_set | cstring_set)); - begin = parse_precision(begin, end, specs.precision, specs.precision_ref, - ctx); - break; - case 'L': - if (arg_type == type::none_type) return begin; - enter_state(state::locale, is_arithmetic_type(arg_type)); - specs.localized = true; - ++begin; - break; - case 'd': - return parse_presentation_type(pres::dec, integral_set); - case 'o': - return parse_presentation_type(pres::oct, integral_set); - case 'x': - return parse_presentation_type(pres::hex_lower, integral_set); - case 'X': - return parse_presentation_type(pres::hex_upper, integral_set); - case 'b': - return parse_presentation_type(pres::bin_lower, integral_set); - case 'B': - return parse_presentation_type(pres::bin_upper, integral_set); - case 'a': - return parse_presentation_type(pres::hexfloat_lower, float_set); - case 'A': - return parse_presentation_type(pres::hexfloat_upper, float_set); - case 'e': - return parse_presentation_type(pres::exp_lower, float_set); - case 'E': - return parse_presentation_type(pres::exp_upper, float_set); - case 'f': - return parse_presentation_type(pres::fixed_lower, float_set); - case 'F': - return parse_presentation_type(pres::fixed_upper, float_set); - case 'g': - return parse_presentation_type(pres::general_lower, float_set); - case 'G': - return parse_presentation_type(pres::general_upper, float_set); - case 'c': - if (arg_type == type::bool_type) - throw_format_error("invalid format specifier"); - return parse_presentation_type(pres::chr, integral_set); - case 's': - return parse_presentation_type(pres::string, - bool_set | string_set | cstring_set); - case 'p': - return parse_presentation_type(pres::pointer, pointer_set | cstring_set); - case '?': - return parse_presentation_type(pres::debug, - char_set | string_set | cstring_set); - case '}': - return begin; - default: { - if (*begin == '}') return begin; - // Parse fill and alignment. - auto fill_end = begin + code_point_length(begin); - if (end - fill_end <= 0) { - throw_format_error("invalid format specifier"); - return begin; - } - if (*begin == '{') { - throw_format_error("invalid fill character '{'"); - return begin; - } - auto align = parse_align(to_ascii(*fill_end)); - enter_state(state::align, align != align::none); - specs.fill = {begin, to_unsigned(fill_end - begin)}; - specs.align = align; - begin = fill_end + 1; - } - } - if (begin == end) return begin; - c = to_ascii(*begin); - } -} - -template -FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - struct id_adapter { - Handler& handler; - int arg_id; - - FMT_CONSTEXPR void on_auto() { arg_id = handler.on_arg_id(); } - FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); } - FMT_CONSTEXPR void on_name(basic_string_view id) { - arg_id = handler.on_arg_id(id); - } - }; - - ++begin; - if (begin == end) return handler.on_error("invalid format string"), end; - if (*begin == '}') { - handler.on_replacement_field(handler.on_arg_id(), begin); - } else if (*begin == '{') { - handler.on_text(begin, begin + 1); - } else { - auto adapter = id_adapter{handler, 0}; - begin = parse_arg_id(begin, end, adapter); - Char c = begin != end ? *begin : Char(); - if (c == '}') { - handler.on_replacement_field(adapter.arg_id, begin); - } else if (c == ':') { - begin = handler.on_format_specs(adapter.arg_id, begin + 1, end); - if (begin == end || *begin != '}') - return handler.on_error("unknown format specifier"), end; - } else { - return handler.on_error("missing '}' in format string"), end; - } - } - return begin + 1; -} - -template -FMT_CONSTEXPR FMT_INLINE void parse_format_string( - basic_string_view format_str, Handler&& handler) { - auto begin = format_str.data(); - auto end = begin + format_str.size(); - if (end - begin < 32) { - // Use a simple loop instead of memchr for small strings. - const Char* p = begin; - while (p != end) { - auto c = *p++; - if (c == '{') { - handler.on_text(begin, p - 1); - begin = p = parse_replacement_field(p - 1, end, handler); - } else if (c == '}') { - if (p == end || *p != '}') - return handler.on_error("unmatched '}' in format string"); - handler.on_text(begin, p); - begin = ++p; - } - } - handler.on_text(begin, end); - return; - } - struct writer { - FMT_CONSTEXPR void operator()(const Char* from, const Char* to) { - if (from == to) return; - for (;;) { - const Char* p = nullptr; - if (!find(from, to, Char('}'), p)) - return handler_.on_text(from, to); - ++p; - if (p == to || *p != '}') - return handler_.on_error("unmatched '}' in format string"); - handler_.on_text(from, p); - from = p + 1; - } - } - Handler& handler_; - } write = {handler}; - while (begin != end) { - // Doing two passes with memchr (one for '{' and another for '}') is up to - // 2.5x faster than the naive one-pass implementation on big format strings. - const Char* p = begin; - if (*begin != '{' && !find(begin + 1, end, Char('{'), p)) - return write(begin, end); - write(begin, p); - begin = parse_replacement_field(p, end, handler); - } -} - -template ::value> struct strip_named_arg { - using type = T; -}; -template struct strip_named_arg { - using type = remove_cvref_t; -}; - -template -FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) - -> decltype(ctx.begin()) { - using char_type = typename ParseContext::char_type; - using context = buffer_context; - using mapped_type = conditional_t< - mapped_type_constant::value != type::custom_type, - decltype(arg_mapper().map(std::declval())), - typename strip_named_arg::type>; -// LAMMPS customization. Fails to compile with (some) Intel compilers -#if defined(__cpp_if_constexpr) && 1 - if constexpr (std::is_default_constructible< - formatter>::value) { - return formatter().parse(ctx); - } else { - type_is_unformattable_for _; - return ctx.begin(); - } -#else - return formatter().parse(ctx); -#endif -} - -// Checks char specs and returns true iff the presentation type is char-like. -template -FMT_CONSTEXPR auto check_char_specs(const format_specs& specs) -> bool { - if (specs.type != presentation_type::none && - specs.type != presentation_type::chr && - specs.type != presentation_type::debug) { - return false; - } - if (specs.align == align::numeric || specs.sign != sign::none || specs.alt) - throw_format_error("invalid format specifier for char"); - return true; -} - -#if FMT_USE_NONTYPE_TEMPLATE_ARGS -template -constexpr auto get_arg_index_by_name(basic_string_view name) -> int { - if constexpr (is_statically_named_arg()) { - if (name == T::name) return N; - } - if constexpr (sizeof...(Args) > 0) - return get_arg_index_by_name(name); - (void)name; // Workaround an MSVC bug about "unused" parameter. - return -1; -} -#endif - -template -FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view name) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_ARGS - if constexpr (sizeof...(Args) > 0) - return get_arg_index_by_name<0, Args...>(name); -#endif - (void)name; - return -1; -} - -template class format_string_checker { - private: - using parse_context_type = compile_parse_context; - static constexpr int num_args = sizeof...(Args); - - // Format specifier parsing function. - // In the future basic_format_parse_context will replace compile_parse_context - // here and will use is_constant_evaluated and downcasting to access the data - // needed for compile-time checks: https://godbolt.org/z/GvWzcTjh1. - using parse_func = const Char* (*)(parse_context_type&); - - type types_[num_args > 0 ? static_cast(num_args) : 1]; - parse_context_type context_; - parse_func parse_funcs_[num_args > 0 ? static_cast(num_args) : 1]; - - public: - explicit FMT_CONSTEXPR format_string_checker(basic_string_view fmt) - : types_{mapped_type_constant>::value...}, - context_(fmt, num_args, types_), - parse_funcs_{&parse_format_specs...} {} - - FMT_CONSTEXPR void on_text(const Char*, const Char*) {} - - FMT_CONSTEXPR auto on_arg_id() -> int { return context_.next_arg_id(); } - FMT_CONSTEXPR auto on_arg_id(int id) -> int { - return context_.check_arg_id(id), id; - } - FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_ARGS - auto index = get_arg_index_by_name(id); - if (index < 0) on_error("named argument is not found"); - return index; -#else - (void)id; - on_error("compile-time checks for named arguments require C++20 support"); - return 0; -#endif - } - - FMT_CONSTEXPR void on_replacement_field(int id, const Char* begin) { - on_format_specs(id, begin, begin); // Call parse() on empty specs. - } - - FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*) - -> const Char* { - context_.advance_to(begin); - // id >= 0 check is a workaround for gcc 10 bug (#2065). - return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; - } - - FMT_CONSTEXPR void on_error(const char* message) { - throw_format_error(message); - } -}; - -// Reports a compile-time error if S is not a valid format string. -template ::value)> -FMT_INLINE void check_format_string(const S&) { -#ifdef FMT_ENFORCE_COMPILE_STRING - static_assert(is_compile_string::value, - "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " - "FMT_STRING."); -#endif -} -template ::value)> -void check_format_string(S format_str) { - using char_t = typename S::char_type; - FMT_CONSTEXPR auto s = basic_string_view(format_str); - using checker = format_string_checker...>; - FMT_CONSTEXPR bool error = (parse_format_string(s, checker(s)), true); - ignore_unused(error); -} - -template struct vformat_args { - using type = basic_format_args< - basic_format_context>, Char>>; -}; -template <> struct vformat_args { - using type = format_args; -}; - -// Use vformat_args and avoid type_identity to keep symbols short. -template -void vformat_to(buffer& buf, basic_string_view fmt, - typename vformat_args::type args, locale_ref loc = {}); - -FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); -#ifndef _WIN32 -inline void vprint_mojibake(std::FILE*, string_view, format_args) {} -#endif -} // namespace detail - -FMT_BEGIN_EXPORT - -// A formatter specialization for natively supported types. -template -struct formatter::value != - detail::type::custom_type>> { - private: - detail::dynamic_format_specs specs_; - - public: - template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { - auto type = detail::type_constant::value; - auto end = - detail::parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, type); - if (type == detail::type::char_type) detail::check_char_specs(specs_); - return end; - } - - template ::value, - FMT_ENABLE_IF(U == detail::type::string_type || - U == detail::type::cstring_type || - U == detail::type::char_type)> - FMT_CONSTEXPR void set_debug_format(bool set = true) { - specs_.type = set ? presentation_type::debug : presentation_type::none; - } - - template - FMT_CONSTEXPR auto format(const T& val, FormatContext& ctx) const - -> decltype(ctx.out()); -}; - -template struct runtime_format_string { - basic_string_view str; -}; - -/** A compile-time format string. */ -template class basic_format_string { - private: - basic_string_view str_; - - public: - template >::value)> - FMT_CONSTEVAL FMT_INLINE basic_format_string(const S& s) : str_(s) { - static_assert( - detail::count< - (std::is_base_of>::value && - std::is_reference::value)...>() == 0, - "passing views as lvalues is disallowed"); -#ifdef FMT_HAS_CONSTEVAL - if constexpr (detail::count_named_args() == - detail::count_statically_named_args()) { - using checker = - detail::format_string_checker...>; - detail::parse_format_string(str_, checker(s)); - } -#else - detail::check_format_string(s); -#endif - } - basic_format_string(runtime_format_string fmt) : str_(fmt.str) {} - - FMT_INLINE operator basic_string_view() const { return str_; } - FMT_INLINE auto get() const -> basic_string_view { return str_; } -}; - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 -// Workaround broken conversion on older gcc. -template using format_string = string_view; -inline auto runtime(string_view s) -> string_view { return s; } -#else -template -using format_string = basic_format_string...>; -/** - \rst - Creates a runtime format string. - - **Example**:: - - // Check format string at runtime instead of compile-time. - fmt::print(fmt::runtime("{:d}"), "I am not a number"); - \endrst - */ -inline auto runtime(string_view s) -> runtime_format_string<> { return {{s}}; } -#endif - -FMT_API auto vformat(string_view fmt, format_args args) -> basic_string; - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and returns the result - as a string. - - **Example**:: - - #include - std::string message = fmt::format("The answer is {}.", 42); - \endrst -*/ -template -FMT_NODISCARD FMT_INLINE auto format(format_string fmt, T&&... args) - -> basic_string { - return vformat(fmt, fmt::make_format_args(args...)); -} - -/** Formats a string and writes the output to ``out``. */ -template ::value)> -auto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt { - auto&& buf = detail::get_buffer(out); - detail::vformat_to(buf, fmt, args, {}); - return detail::get_iterator(buf, out); -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt``, writes the result to - the output iterator ``out`` and returns the iterator past the end of the output - range. `format_to` does not append a terminating null character. - - **Example**:: - - auto out = std::vector(); - fmt::format_to(fmt::back_inserter(out), "{}", 42); - \endrst - */ -template ::value)> -FMT_INLINE auto format_to(OutputIt out, format_string fmt, T&&... args) - -> OutputIt { - return vformat_to(out, fmt, fmt::make_format_args(args...)); -} - -template struct format_to_n_result { - /** Iterator past the end of the output range. */ - OutputIt out; - /** Total (not truncated) output size. */ - size_t size; -}; - -template ::value)> -auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args) - -> format_to_n_result { - using traits = detail::fixed_buffer_traits; - auto buf = detail::iterator_buffer(out, n); - detail::vformat_to(buf, fmt, args, {}); - return {buf.out(), buf.count()}; -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt``, writes up to ``n`` - characters of the result to the output iterator ``out`` and returns the total - (not truncated) output size and the iterator past the end of the output range. - `format_to_n` does not append a terminating null character. - \endrst - */ -template ::value)> -FMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string fmt, - T&&... args) -> format_to_n_result { - return vformat_to_n(out, n, fmt, fmt::make_format_args(args...)); -} - -/** Returns the number of chars in the output of ``format(fmt, args...)``. */ -template -FMT_NODISCARD FMT_INLINE auto formatted_size(format_string fmt, - T&&... args) -> size_t { - auto buf = detail::counting_buffer<>(); - detail::vformat_to(buf, fmt, fmt::make_format_args(args...), {}); - return buf.count(); -} - -FMT_API void vprint(string_view fmt, format_args args); -FMT_API void vprint(std::FILE* f, string_view fmt, format_args args); - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and writes the output - to ``stdout``. - - **Example**:: - - fmt::print("Elapsed time: {0:.2f} seconds", 1.23); - \endrst - */ -template -FMT_INLINE void print(format_string fmt, T&&... args) { - const auto& vargs = fmt::make_format_args(args...); - return detail::is_utf8() ? vprint(fmt, vargs) - : detail::vprint_mojibake(stdout, fmt, vargs); -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and writes the - output to the file ``f``. - - **Example**:: - - fmt::print(stderr, "Don't {}!", "panic"); - \endrst - */ -template -FMT_INLINE void print(std::FILE* f, format_string fmt, T&&... args) { - const auto& vargs = fmt::make_format_args(args...); - return detail::is_utf8() ? vprint(f, fmt, vargs) - : detail::vprint_mojibake(f, fmt, vargs); -} - -/** - Formats ``args`` according to specifications in ``fmt`` and writes the - output to the file ``f`` followed by a newline. - */ -template -FMT_INLINE void println(std::FILE* f, format_string fmt, T&&... args) { - return fmt::print(f, "{}\n", fmt::format(fmt, std::forward(args)...)); -} - -/** - Formats ``args`` according to specifications in ``fmt`` and writes the output - to ``stdout`` followed by a newline. - */ -template -FMT_INLINE void println(format_string fmt, T&&... args) { - return fmt::println(stdout, fmt, std::forward(args)...); -} - -FMT_END_EXPORT -FMT_GCC_PRAGMA("GCC pop_options") -FMT_END_NAMESPACE - -#ifdef FMT_HEADER_ONLY -# include "format.h" -#endif -#endif // FMT_CORE_H_ +#include "format.h" diff --git a/src/fmt/format-inl.h b/src/fmt/format-inl.h index 8da1c17f36..a887483b6f 100644 --- a/src/fmt/format-inl.h +++ b/src/fmt/format-inl.h @@ -8,17 +8,19 @@ #ifndef FMT_FORMAT_INL_H_ #define FMT_FORMAT_INL_H_ -#include -#include // errno -#include -#include -#include +#ifndef FMT_MODULE +# include +# include // errno +# include +# include +# include -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR -# include +# if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) +# include +# endif #endif -#if defined(_WIN32) && !defined(FMT_WINDOWS_NO_WCHAR) +#if defined(_WIN32) && !defined(FMT_USE_WRITE_CONSOLE) # include // _isatty #endif @@ -52,7 +54,7 @@ FMT_FUNC void format_error_code(detail::buffer& out, int error_code, ++error_code_size; } error_code_size += detail::to_unsigned(detail::count_digits(abs_value)); - auto it = buffer_appender(out); + auto it = appender(out); if (message.size() <= inline_buffer_size - error_code_size) fmt::format_to(it, FMT_STRING("{}{}"), message, SEP); fmt::format_to(it, FMT_STRING("{}{}"), ERROR_STR, error_code); @@ -109,8 +111,12 @@ template FMT_FUNC Char decimal_point_impl(locale_ref) { #endif FMT_FUNC auto write_loc(appender out, loc_value value, - const format_specs<>& specs, locale_ref loc) -> bool { -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR + const format_specs& specs, locale_ref loc) -> bool { +#ifdef FMT_STATIC_THOUSANDS_SEPARATOR + value.visit(loc_writer<>{ + out, specs, std::string(1, FMT_STATIC_THOUSANDS_SEPARATOR), "\3", "."}); + return true; +#else auto locale = loc.get(); // We cannot use the num_put facet because it may produce output in // a wrong encoding. @@ -119,11 +125,10 @@ FMT_FUNC auto write_loc(appender out, loc_value value, return std::use_facet(locale).put(out, value, specs); return facet(locale).put(out, value, specs); #endif - return false; } } // namespace detail -FMT_FUNC void throw_format_error(const char* message) { +FMT_FUNC void report_error(const char* message) { FMT_THROW(format_error(message)); } @@ -138,7 +143,7 @@ template format_facet::format_facet(Locale& loc) { template <> FMT_API FMT_FUNC auto format_facet::do_put( - appender out, loc_value val, const format_specs<>& specs) const -> bool { + appender out, loc_value val, const format_specs& specs) const -> bool { return val.visit( detail::loc_writer<>{out, specs, separator_, grouping_, decimal_point_}); } @@ -1411,7 +1416,7 @@ FMT_FUNC void format_system_error(detail::buffer& out, int error_code, const char* message) noexcept { FMT_TRY { auto ec = std::error_code(error_code, std::generic_category()); - write(std::back_inserter(out), std::system_error(ec, message).what()); + detail::write(appender(out), std::system_error(ec, message).what()); return; } FMT_CATCH(...) {} @@ -1432,7 +1437,241 @@ FMT_FUNC auto vformat(string_view fmt, format_args args) -> std::string { } namespace detail { -#if !defined(_WIN32) || defined(FMT_WINDOWS_NO_WCHAR) + +template struct span { + T* data; + size_t size; +}; + +template auto flockfile(F* f) -> decltype(_lock_file(f)) { + _lock_file(f); +} +template auto funlockfile(F* f) -> decltype(_unlock_file(f)) { + _unlock_file(f); +} + +#ifndef getc_unlocked +template auto getc_unlocked(F* f) -> decltype(_fgetc_nolock(f)) { + return _fgetc_nolock(f); +} +#endif + +template +struct has_flockfile : std::false_type {}; + +template +struct has_flockfile()))>> + : std::true_type {}; + +// A FILE wrapper. F is FILE defined as a template parameter to make system API +// detection work. +template class file_base { + public: + F* file_; + + public: + file_base(F* file) : file_(file) {} + operator F*() const { return file_; } + + // Reads a code unit from the stream. + auto get() -> int { + int result = getc_unlocked(file_); + if (result == EOF && ferror(file_) != 0) + FMT_THROW(system_error(errno, FMT_STRING("getc failed"))); + return result; + } + + // Puts the code unit back into the stream buffer. + void unget(char c) { + if (ungetc(c, file_) == EOF) + FMT_THROW(system_error(errno, FMT_STRING("ungetc failed"))); + } + + void flush() { fflush(this->file_); } +}; + +// A FILE wrapper for glibc. +template class glibc_file : public file_base { + private: + enum { + line_buffered = 0x200, // _IO_LINE_BUF + unbuffered = 2 // _IO_UNBUFFERED + }; + + public: + using file_base::file_base; + + auto is_buffered() const -> bool { + return (this->file_->_flags & unbuffered) == 0; + } + + void init_buffer() { + if (this->file_->_IO_write_ptr) return; + // Force buffer initialization by placing and removing a char in a buffer. + putc_unlocked(0, this->file_); + --this->file_->_IO_write_ptr; + } + + // Returns the file's read buffer. + auto get_read_buffer() const -> span { + auto ptr = this->file_->_IO_read_ptr; + return {ptr, to_unsigned(this->file_->_IO_read_end - ptr)}; + } + + // Returns the file's write buffer. + auto get_write_buffer() const -> span { + auto ptr = this->file_->_IO_write_ptr; + return {ptr, to_unsigned(this->file_->_IO_buf_end - ptr)}; + } + + void advance_write_buffer(size_t size) { this->file_->_IO_write_ptr += size; } + + bool needs_flush() const { + if ((this->file_->_flags & line_buffered) == 0) return false; + char* end = this->file_->_IO_write_end; + return memchr(end, '\n', to_unsigned(this->file_->_IO_write_ptr - end)); + } + + void flush() { fflush_unlocked(this->file_); } +}; + +// A FILE wrapper for Apple's libc. +template class apple_file : public file_base { + private: + enum { + line_buffered = 1, // __SNBF + unbuffered = 2 // __SLBF + }; + + public: + using file_base::file_base; + + auto is_buffered() const -> bool { + return (this->file_->_flags & unbuffered) == 0; + } + + void init_buffer() { + if (this->file_->_p) return; + // Force buffer initialization by placing and removing a char in a buffer. + putc_unlocked(0, this->file_); + --this->file_->_p; + ++this->file_->_w; + } + + auto get_read_buffer() const -> span { + return {reinterpret_cast(this->file_->_p), + to_unsigned(this->file_->_r)}; + } + + auto get_write_buffer() const -> span { + return {reinterpret_cast(this->file_->_p), + to_unsigned(this->file_->_bf._base + this->file_->_bf._size - + this->file_->_p)}; + } + + void advance_write_buffer(size_t size) { + this->file_->_p += size; + this->file_->_w -= size; + } + + bool needs_flush() const { + if ((this->file_->_flags & line_buffered) == 0) return false; + return memchr(this->file_->_p + this->file_->_w, '\n', + to_unsigned(-this->file_->_w)); + } +}; + +// A fallback FILE wrapper. +template class fallback_file : public file_base { + private: + char next_; // The next unconsumed character in the buffer. + bool has_next_ = false; + + public: + using file_base::file_base; + + auto is_buffered() const -> bool { return false; } + auto needs_flush() const -> bool { return false; } + void init_buffer() {} + + auto get_read_buffer() const -> span { + return {&next_, has_next_ ? 1u : 0u}; + } + + auto get_write_buffer() const -> span { return {nullptr, 0}; } + + void advance_write_buffer(size_t) {} + + auto get() -> int { + has_next_ = false; + return file_base::get(); + } + + void unget(char c) { + file_base::unget(c); + next_ = c; + has_next_ = true; + } +}; + +#ifndef FMT_USE_FALLBACK_FILE +# define FMT_USE_FALLBACK_FILE 1 +#endif + +template +auto get_file(F* f, int) -> apple_file { + return f; +} +template +inline auto get_file(F* f, int) -> glibc_file { + return f; +} + +inline auto get_file(FILE* f, ...) -> fallback_file { return f; } + +using file_ref = decltype(get_file(static_cast(nullptr), 0)); + +template +class file_print_buffer : public buffer { + public: + explicit file_print_buffer(F*) : buffer(nullptr, size_t()) {} +}; + +template +class file_print_buffer::value>> + : public buffer { + private: + file_ref file_; + + static void grow(buffer& base, size_t) { + auto& self = static_cast(base); + self.file_.advance_write_buffer(self.size()); + if (self.file_.get_write_buffer().size == 0) self.file_.flush(); + auto buf = self.file_.get_write_buffer(); + FMT_ASSERT(buf.size > 0, ""); + self.set(buf.data, buf.size); + self.clear(); + } + + public: + explicit file_print_buffer(F* f) : buffer(grow, size_t()), file_(f) { + flockfile(f); + file_.init_buffer(); + auto buf = file_.get_write_buffer(); + set(buf.data, buf.size); + } + ~file_print_buffer() { + file_.advance_write_buffer(size()); + bool flush = file_.needs_flush(); + F* f = file_; // Make funlockfile depend on the template parameter F + funlockfile(f); // for the system API detection to work. + if (flush) fflush(file_); + } +}; + +#if !defined(_WIN32) || defined(FMT_USE_WRITE_CONSOLE) FMT_FUNC auto write_console(int, string_view) -> bool { return false; } #else using dword = conditional_t; @@ -1448,15 +1687,17 @@ FMT_FUNC bool write_console(int fd, string_view text) { #ifdef _WIN32 // Print assuming legacy (non-Unicode) encoding. -FMT_FUNC void vprint_mojibake(std::FILE* f, string_view fmt, format_args args) { +FMT_FUNC void vprint_mojibake(std::FILE* f, string_view fmt, format_args args, + bool newline) { auto buffer = memory_buffer(); detail::vformat_to(buffer, fmt, args); + if (newline) buffer.push_back('\n'); fwrite_fully(buffer.data(), buffer.size(), f); } #endif FMT_FUNC void print(std::FILE* f, string_view text) { -#ifdef _WIN32 +#if defined(_WIN32) && !defined(FMT_USE_WRITE_CONSOLE) int fd = _fileno(f); if (_isatty(fd)) { std::fflush(f); @@ -1467,12 +1708,26 @@ FMT_FUNC void print(std::FILE* f, string_view text) { } } // namespace detail -FMT_FUNC void vprint(std::FILE* f, string_view fmt, format_args args) { +FMT_FUNC void vprint_buffered(std::FILE* f, string_view fmt, format_args args) { auto buffer = memory_buffer(); detail::vformat_to(buffer, fmt, args); detail::print(f, {buffer.data(), buffer.size()}); } +FMT_FUNC void vprint(std::FILE* f, string_view fmt, format_args args) { + if (!detail::file_ref(f).is_buffered() || !detail::has_flockfile<>()) + return vprint_buffered(f, fmt, args); + auto&& buffer = detail::file_print_buffer<>(f); + return detail::vformat_to(buffer, fmt, args); +} + +FMT_FUNC void vprintln(std::FILE* f, string_view fmt, format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, args); + buffer.push_back('\n'); + detail::print(f, {buffer.data(), buffer.size()}); +} + FMT_FUNC void vprint(string_view fmt, format_args args) { vprint(stdout, fmt, args); } diff --git a/src/fmt/format.h b/src/fmt/format.h index 8cdf95b7bd..67f0ab739b 100644 --- a/src/fmt/format.h +++ b/src/fmt/format.h @@ -33,31 +33,39 @@ #ifndef FMT_FORMAT_H_ #define FMT_FORMAT_H_ -#include // std::signbit -#include // uint32_t -#include // std::memcpy -#include // std::initializer_list -#include -#include // std::numeric_limits -#include // std::uninitialized_copy -#include // std::runtime_error -#include // std::system_error - -#ifdef __cpp_lib_bit_cast -# include // std::bit_cast +#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES +# define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES +# define FMT_REMOVE_TRANSITIVE_INCLUDES #endif -#include "core.h" +#include "base.h" + +#ifndef FMT_MODULE +# include // std::signbit +# include // uint32_t +# include // std::memcpy +# include // std::initializer_list +# include // std::numeric_limits +# if defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_DUAL_ABI) +// Workaround for pre gcc 5 libstdc++. +# include // std::allocator_traits +# endif +# include // std::runtime_error +# include // std::string +# include // std::system_error + +// Checking FMT_CPLUSPLUS for warning suppression in MSVC. +# if FMT_HAS_INCLUDE() && FMT_CPLUSPLUS > 201703L +# include // std::bit_cast +# endif // libc++ supports string_view in pre-c++17. -#if FMT_HAS_INCLUDE() && \ - (FMT_CPLUSPLUS >= 201703L || defined(_LIBCPP_VERSION)) -# include -# define FMT_USE_STRING_VIEW -#elif FMT_HAS_INCLUDE("experimental/string_view") && FMT_CPLUSPLUS >= 201402L -# include -# define FMT_USE_EXPERIMENTAL_STRING_VIEW -#endif +# if FMT_HAS_INCLUDE() && \ + (FMT_CPLUSPLUS >= 201703L || defined(_LIBCPP_VERSION)) +# include +# define FMT_USE_STRING_VIEW +# endif +#endif // FMT_MODULE #if defined __cpp_inline_variables && __cpp_inline_variables >= 201606L # define FMT_INLINE_VARIABLE inline @@ -65,17 +73,6 @@ # define FMT_INLINE_VARIABLE #endif -#if FMT_HAS_CPP17_ATTRIBUTE(fallthrough) -# define FMT_FALLTHROUGH [[fallthrough]] -#elif defined(__clang__) -# define FMT_FALLTHROUGH [[clang::fallthrough]] -#elif FMT_GCC_VERSION >= 700 && \ - (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) -# define FMT_FALLTHROUGH [[gnu::fallthrough]] -#else -# define FMT_FALLTHROUGH -#endif - #ifndef FMT_NO_UNIQUE_ADDRESS # if FMT_CPLUSPLUS >= 202002L # if FMT_HAS_CPP_ATTRIBUTE(no_unique_address) @@ -109,6 +106,13 @@ # define FMT_NOINLINE #endif +namespace std { +template <> struct iterator_traits { + using iterator_category = output_iterator_tag; + using value_type = char; +}; +} // namespace std + #ifndef FMT_THROW # if FMT_EXCEPTIONS # if FMT_MSC_VERSION || defined(__NVCC__) @@ -132,14 +136,6 @@ FMT_END_NAMESPACE # endif #endif -#if FMT_EXCEPTIONS -# define FMT_TRY try -# define FMT_CATCH(x) catch (x) -#else -# define FMT_TRY if (true) -# define FMT_CATCH(x) if (false) -#endif - #ifndef FMT_MAYBE_UNUSED # if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) # define FMT_MAYBE_UNUSED [[maybe_unused]] @@ -273,19 +269,12 @@ inline auto ctzll(uint64_t x) -> int { FMT_END_NAMESPACE #endif -namespace std { -template <> struct iterator_traits { - using value_type = void; - using iterator_category = std::output_iterator_tag; -}; -template -struct iterator_traits> { - using value_type = void; - using iterator_category = std::output_iterator_tag; -}; -} // namespace std - FMT_BEGIN_NAMESPACE + +template +struct is_contiguous> + : std::true_type {}; + namespace detail { FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) { @@ -297,25 +286,10 @@ FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) { #if defined(FMT_USE_STRING_VIEW) template using std_string_view = std::basic_string_view; -#elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) -template -using std_string_view = std::experimental::basic_string_view; #else template struct std_string_view {}; #endif -template struct string_literal { - static constexpr CharT value[sizeof...(C)] = {C...}; - constexpr operator basic_string_view() const { - return {value, sizeof...(C)}; - } -}; - -#if FMT_CPLUSPLUS < 201703L -template -constexpr CharT string_literal::value[sizeof...(C)]; -#endif - // Implementation of std::bit_cast for pre-C++20. template FMT_CONSTEXPR20 auto bit_cast(const From& from) -> To { @@ -472,7 +446,8 @@ template constexpr auto num_bits() -> int { } // std::numeric_limits::digits may return 0 for 128-bit ints. template <> constexpr auto num_bits() -> int { return 128; } -template <> constexpr auto num_bits() -> int { return 128; } +template <> constexpr auto num_bits() -> int { return 128; } +template <> constexpr auto num_bits() -> int { return 128; } // A heterogeneous bit_cast used for converting 96-bit long double to uint128_t // and 128-bit pointers to uint128_fallback. @@ -524,52 +499,6 @@ FMT_INLINE void assume(bool condition) { #endif } -// Extracts a reference to the container from back_insert_iterator. -template -inline auto get_container(std::back_insert_iterator it) - -> Container& { - using base = std::back_insert_iterator; - struct accessor : base { - accessor(base b) : base(b) {} - using base::container; - }; - return *accessor(it).container; -} - -template -FMT_CONSTEXPR auto copy_str(InputIt begin, InputIt end, OutputIt out) - -> OutputIt { - while (begin != end) *out++ = static_cast(*begin++); - return out; -} - -template , U>::value&& is_char::value)> -FMT_CONSTEXPR auto copy_str(T* begin, T* end, U* out) -> U* { - if (is_constant_evaluated()) return copy_str(begin, end, out); - auto size = to_unsigned(end - begin); - if (size > 0) memcpy(out, begin, size * sizeof(U)); - return out + size; -} - -template -auto copy_str(InputIt begin, InputIt end, appender out) -> appender { - get_container(out).append(begin, end); - return out; -} -template -auto copy_str(InputIt begin, InputIt end, back_insert_iterator out) - -> back_insert_iterator { - get_container(out).append(begin, end); - return out; -} - -template -FMT_CONSTEXPR auto copy_str(R&& rng, OutputIt out) -> OutputIt { - return detail::copy_str(rng.begin(), rng.end(), out); -} - // An approximation of iterator_t for pre-C++20 systems. template using iterator_t = decltype(std::begin(std::declval())); @@ -587,21 +516,22 @@ inline auto get_data(Container& c) -> typename Container::value_type* { // Attempts to reserve space for n extra characters in the output range. // Returns a pointer to the reserved range or a reference to it. -template ::value)> +template ::value&& + is_contiguous::value)> #if FMT_CLANG_VERSION >= 307 && !FMT_ICC_VERSION __attribute__((no_sanitize("undefined"))) #endif inline auto -reserve(std::back_insert_iterator it, size_t n) -> - typename Container::value_type* { - Container& c = get_container(it); +reserve(OutputIt it, size_t n) -> typename OutputIt::value_type* { + auto& c = get_container(it); size_t size = c.size(); c.resize(size + n); return get_data(c) + size; } template -inline auto reserve(buffer_appender it, size_t n) -> buffer_appender { +inline auto reserve(basic_appender it, size_t n) -> basic_appender { buffer& buf = get_container(it); buf.try_reserve(buf.size() + n); return it; @@ -620,18 +550,21 @@ template constexpr auto to_pointer(OutputIt, size_t) -> T* { return nullptr; } -template auto to_pointer(buffer_appender it, size_t n) -> T* { +template auto to_pointer(basic_appender it, size_t n) -> T* { buffer& buf = get_container(it); auto size = buf.size(); + buf.try_reserve(size + n); if (buf.capacity() < size + n) return nullptr; buf.try_resize(size + n); return buf.data() + size; } -template ::value)> -inline auto base_iterator(std::back_insert_iterator it, - typename Container::value_type*) - -> std::back_insert_iterator { +template ::value&& + is_contiguous::value)> +inline auto base_iterator(OutputIt it, + typename OutputIt::container_type::value_type*) + -> OutputIt { return it; } @@ -657,16 +590,10 @@ FMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* { return out + count; } -#ifdef __cpp_char8_t -using char8_type = char8_t; -#else -enum char8_type : unsigned char {}; -#endif - template -FMT_CONSTEXPR FMT_NOINLINE auto copy_str_noinline(InputIt begin, InputIt end, - OutputIt out) -> OutputIt { - return copy_str(begin, end, out); +FMT_CONSTEXPR FMT_NOINLINE auto copy_noinline(InputIt begin, InputIt end, + OutputIt out) -> OutputIt { + return copy(begin, end, out); } // A public domain branchless UTF-8 decoder by Christopher Wellons: @@ -747,7 +674,7 @@ FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) { } if (auto num_chars_left = s.data() + s.size() - p) { char buf[2 * block_size - 1] = {}; - copy_str(p, p + num_chars_left, buf); + copy(p, p + num_chars_left, buf); const char* buf_ptr = buf; do { auto end = decode(buf_ptr, p); @@ -798,11 +725,6 @@ FMT_CONSTEXPR inline auto compute_width(string_view s) -> size_t { return num_code_points; } -inline auto compute_width(basic_string_view s) -> size_t { - return compute_width( - string_view(reinterpret_cast(s.data()), s.size())); -} - template inline auto code_point_index(basic_string_view s, size_t n) -> size_t { size_t size = s.size(); @@ -824,12 +746,6 @@ inline auto code_point_index(string_view s, size_t n) -> size_t { return result; } -inline auto code_point_index(basic_string_view s, size_t n) - -> size_t { - return code_point_index( - string_view(reinterpret_cast(s.data()), s.size()), n); -} - template struct is_integral : std::is_integral {}; template <> struct is_integral : std::true_type {}; template <> struct is_integral : std::true_type {}; @@ -855,28 +771,22 @@ using is_integer = # define FMT_USE_LONG_DOUBLE 1 #endif -#ifndef FMT_USE_FLOAT128 -# ifdef __clang__ -// Clang emulates GCC, so it has to appear early. -# if FMT_HAS_INCLUDE() -# define FMT_USE_FLOAT128 1 -# endif -# elif defined(__GNUC__) -// GNU C++: -# if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) -# define FMT_USE_FLOAT128 1 -# endif -# endif -# ifndef FMT_USE_FLOAT128 -# define FMT_USE_FLOAT128 0 -# endif +#if defined(FMT_USE_FLOAT128) +// Use the provided definition. +#elif FMT_CLANG_VERSION && FMT_HAS_INCLUDE() +# define FMT_USE_FLOAT128 1 +#elif FMT_GCC_VERSION && defined(_GLIBCXX_USE_FLOAT128) && \ + !defined(__STRICT_ANSI__) +# define FMT_USE_FLOAT128 1 +#else +# define FMT_USE_FLOAT128 0 #endif - #if FMT_USE_FLOAT128 using float128 = __float128; #else using float128 = void; #endif + template using is_float128 = std::is_same; template @@ -895,20 +805,6 @@ using is_double_double = bool_constant::digits == 106>; # define FMT_USE_FULL_CACHE_DRAGONBOX 0 #endif -template -template -void buffer::append(const U* begin, const U* end) { - while (begin != end) { - auto count = to_unsigned(end - begin); - try_reserve(size_ + count); - auto free_cap = capacity_ - size_; - if (free_cap < count) count = free_cap; - std::uninitialized_copy_n(begin, count, ptr_ + size_); - size_ += count; - begin += count; - } -} - template struct is_locale : std::false_type {}; template @@ -922,29 +818,21 @@ FMT_BEGIN_EXPORT enum { inline_buffer_size = 500 }; /** - \rst - A dynamically growing memory buffer for trivially copyable/constructible types - with the first ``SIZE`` elements stored in the object itself. - - You can use the ``memory_buffer`` type alias for ``char`` instead. - - **Example**:: - - auto out = fmt::memory_buffer(); - fmt::format_to(std::back_inserter(out), "The answer is {}.", 42); - - This will append the following output to the ``out`` object: - - .. code-block:: none - - The answer is 42. - - The output can be converted to an ``std::string`` with ``to_string(out)``. - \endrst + * A dynamically growing memory buffer for trivially copyable/constructible + * types with the first `SIZE` elements stored in the object itself. Most + * commonly used via the `memory_buffer` alias for `char`. + * + * **Example**: + * + * auto out = fmt::memory_buffer(); + * fmt::format_to(std::back_inserter(out), "The answer is {}.", 42); + * + * This will append "The answer is 42." to `out`. The buffer content can be + * converted to `std::string` with `to_string(out)`. */ template > -class basic_memory_buffer final : public detail::buffer { +class basic_memory_buffer : public detail::buffer { private: T store_[SIZE]; @@ -957,7 +845,6 @@ class basic_memory_buffer final : public detail::buffer { if (data != store_) alloc_.deallocate(data, this->capacity()); } - protected: static FMT_CONSTEXPR20 void grow(detail::buffer& buf, size_t size) { detail::abort_fuzzing_if(size > 5000); auto& self = static_cast(buf); @@ -970,12 +857,11 @@ class basic_memory_buffer final : public detail::buffer { else if (new_capacity > max_size) new_capacity = size > max_size ? size : max_size; T* old_data = buf.data(); - T* new_data = - std::allocator_traits::allocate(self.alloc_, new_capacity); + T* new_data = self.alloc_.allocate(new_capacity); // Suppress a bogus -Wstringop-overflow in gcc 13.1 (#3481). detail::assume(buf.size() <= new_capacity); // The following code doesn't throw, so the raw pointer above doesn't leak. - std::uninitialized_copy_n(old_data, buf.size(), new_data); + memcpy(new_data, old_data, buf.size() * sizeof(T)); self.set(new_data, new_capacity); // deallocate must not throw according to the standard, but even if it does, // the buffer already uses the new storage and will deallocate it in @@ -1003,7 +889,7 @@ class basic_memory_buffer final : public detail::buffer { size_t size = other.size(), capacity = other.capacity(); if (data == other.store_) { this->set(store_, capacity); - detail::copy_str(other.store_, other.store_ + size, store_); + detail::copy(other.store_, other.store_ + size, store_); } else { this->set(data, capacity); // Set pointer to the inline array so that delete is not called @@ -1015,22 +901,14 @@ class basic_memory_buffer final : public detail::buffer { } public: - /** - \rst - Constructs a :class:`fmt::basic_memory_buffer` object moving the content - of the other object to it. - \endrst - */ + /// Constructs a `basic_memory_buffer` object moving the content of the other + /// object to it. FMT_CONSTEXPR20 basic_memory_buffer(basic_memory_buffer&& other) noexcept : detail::buffer(grow) { move(other); } - /** - \rst - Moves the content of the other ``basic_memory_buffer`` object to this one. - \endrst - */ + /// Moves the content of the other `basic_memory_buffer` object to this one. auto operator=(basic_memory_buffer&& other) noexcept -> basic_memory_buffer& { FMT_ASSERT(this != &other, ""); deallocate(); @@ -1041,13 +919,11 @@ class basic_memory_buffer final : public detail::buffer { // Returns a copy of the allocator associated with this buffer. auto get_allocator() const -> Allocator { return alloc_; } - /** - Resizes the buffer to contain *count* elements. If T is a POD type new - elements may not be initialized. - */ + /// Resizes the buffer to contain `count` elements. If T is a POD type new + /// elements may not be initialized. FMT_CONSTEXPR20 void resize(size_t count) { this->try_resize(count); } - /** Increases the buffer capacity to *new_capacity*. */ + /// Increases the buffer capacity to `new_capacity`. void reserve(size_t new_capacity) { this->try_reserve(new_capacity); } using detail::buffer::append; @@ -1076,7 +952,7 @@ FMT_BEGIN_EXPORT # pragma clang diagnostic ignored "-Wweak-vtables" #endif -/** An error reported from a formatting function. */ +/// An error reported from a formatting function. class FMT_SO_VISIBILITY("default") format_error : public std::runtime_error { public: using std::runtime_error::runtime_error; @@ -1086,8 +962,8 @@ namespace detail_exported { #if FMT_USE_NONTYPE_TEMPLATE_ARGS template struct fixed_string { constexpr fixed_string(const Char (&str)[N]) { - detail::copy_str(static_cast(str), - str + N, data); + detail::copy(static_cast(str), + str + N, data); } Char data[N] = {}; }; @@ -1102,12 +978,57 @@ constexpr auto compile_string_to_view(const Char (&s)[N]) return {s, N - (std::char_traits::to_int_type(s[N - 1]) == 0 ? 1 : 0)}; } template -constexpr auto compile_string_to_view(detail::std_string_view s) +constexpr auto compile_string_to_view(basic_string_view s) -> basic_string_view { - return {s.data(), s.size()}; + return s; } } // namespace detail_exported +// A generic formatting context with custom output iterator and character +// (code unit) support. Char is the format string code unit type which can be +// different from OutputIt::value_type. +template class generic_context { + private: + OutputIt out_; + basic_format_args args_; + detail::locale_ref loc_; + + public: + using char_type = Char; + using iterator = OutputIt; + using parse_context_type = basic_format_parse_context; + template using formatter_type = formatter; + + constexpr generic_context(OutputIt out, + basic_format_args ctx_args, + detail::locale_ref loc = {}) + : out_(out), args_(ctx_args), loc_(loc) {} + generic_context(generic_context&&) = default; + generic_context(const generic_context&) = delete; + void operator=(const generic_context&) = delete; + + constexpr auto arg(int id) const -> basic_format_arg { + return args_.get(id); + } + auto arg(basic_string_view name) -> basic_format_arg { + return args_.get(name); + } + FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { + return args_.get_id(name); + } + auto args() const -> const basic_format_args& { + return args_; + } + + FMT_CONSTEXPR auto out() -> iterator { return out_; } + + void advance_to(iterator it) { + if (!detail::is_back_insert_iterator()) out_ = it; + } + + FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; } +}; + class loc_value { private: basic_format_arg value_; @@ -1134,7 +1055,7 @@ template class format_facet : public Locale::facet { protected: virtual auto do_put(appender out, loc_value val, - const format_specs<>& specs) const -> bool; + const format_specs& specs) const -> bool; public: static FMT_API typename Locale::id id; @@ -1147,12 +1068,14 @@ template class format_facet : public Locale::facet { grouping_(g.begin(), g.end()), decimal_point_(decimal_point) {} - auto put(appender out, loc_value val, const format_specs<>& specs) const + auto put(appender out, loc_value val, const format_specs& specs) const -> bool { return do_put(out, val, specs); } }; +FMT_END_EXPORT + namespace detail { // Returns true if value is negative, false otherwise. @@ -1204,7 +1127,7 @@ template constexpr auto sign(Sign s) -> Char { #if !FMT_GCC_VERSION || FMT_GCC_VERSION >= 604 static_assert(std::is_same::value, ""); #endif - return static_cast("\0-+ "[s]); + return static_cast(((' ' << 24) | ('+' << 16) | ('-' << 8)) >> (s * 8)); } template FMT_CONSTEXPR auto count_digits_fallback(T n) -> int { @@ -1252,9 +1175,7 @@ inline auto do_count_digits(uint64_t n) -> int { // except for n == 0 in which case count_digits returns 1. FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int { #ifdef FMT_BUILTIN_CLZLL - if (!is_constant_evaluated()) { - return do_count_digits(n); - } + if (!is_constant_evaluated()) return do_count_digits(n); #endif return count_digits_fallback(n); } @@ -1400,7 +1321,7 @@ FMT_CONSTEXPR inline auto format_decimal(Iterator out, UInt value, int size) // Buffer is large enough to hold all digits (digits10 + 1). Char buffer[digits10() + 1] = {}; auto end = format_decimal(buffer, value, size).end; - return {out, detail::copy_str_noinline(buffer, end, out)}; + return {out, detail::copy_noinline(buffer, end, out)}; } template @@ -1427,7 +1348,7 @@ FMT_CONSTEXPR inline auto format_uint(It out, UInt value, int num_digits, // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1). char buffer[num_bits() / BASE_BITS + 1] = {}; format_uint(buffer, value, num_digits, upper); - return detail::copy_str_noinline(buffer, buffer + num_digits, out); + return detail::copy_noinline(buffer, buffer + num_digits, out); } // A converter from UTF-8 to UTF-16. @@ -1777,23 +1698,23 @@ constexpr auto convert_float(T value) -> convert_float_result { return static_cast>(value); } -template -FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, - const fill_t& fill) -> OutputIt { +template +FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, const fill_t& fill) + -> OutputIt { auto fill_size = fill.size(); - if (fill_size == 1) return detail::fill_n(it, n, fill[0]); - auto data = fill.data(); - for (size_t i = 0; i < n; ++i) - it = copy_str(data, data + fill_size, it); + if (fill_size == 1) return detail::fill_n(it, n, fill.template get()); + if (const Char* data = fill.template data()) { + for (size_t i = 0; i < n; ++i) it = copy(data, data + fill_size, it); + } return it; } // Writes the output of f, padded according to format specifications in specs. // size: output size in code units. // width: output display width in (terminal) column positions. -template -FMT_CONSTEXPR auto write_padded(OutputIt out, const format_specs& specs, +FMT_CONSTEXPR auto write_padded(OutputIt out, const format_specs& specs, size_t size, size_t width, F&& f) -> OutputIt { static_assert(align == align::left || align == align::right, ""); unsigned spec_width = to_unsigned(specs.width); @@ -1804,31 +1725,31 @@ FMT_CONSTEXPR auto write_padded(OutputIt out, const format_specs& specs, size_t left_padding = padding >> shifts[specs.align]; size_t right_padding = padding - left_padding; auto it = reserve(out, size + padding * specs.fill.size()); - if (left_padding != 0) it = fill(it, left_padding, specs.fill); + if (left_padding != 0) it = fill(it, left_padding, specs.fill); it = f(it); - if (right_padding != 0) it = fill(it, right_padding, specs.fill); + if (right_padding != 0) it = fill(it, right_padding, specs.fill); return base_iterator(out, it); } -template -constexpr auto write_padded(OutputIt out, const format_specs& specs, +constexpr auto write_padded(OutputIt out, const format_specs& specs, size_t size, F&& f) -> OutputIt { - return write_padded(out, specs, size, size, f); + return write_padded(out, specs, size, size, f); } -template +template FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, - const format_specs& specs) -> OutputIt { - return write_padded( + const format_specs& specs = {}) -> OutputIt { + return write_padded( out, specs, bytes.size(), [bytes](reserve_iterator it) { const char* data = bytes.data(); - return copy_str(data, data + bytes.size(), it); + return copy(data, data + bytes.size(), it); }); } template -auto write_ptr(OutputIt out, UIntPtr value, const format_specs* specs) +auto write_ptr(OutputIt out, UIntPtr value, const format_specs* specs) -> OutputIt { int num_digits = count_digits<4>(value); auto size = to_unsigned(num_digits) + size_t(2); @@ -1837,7 +1758,7 @@ auto write_ptr(OutputIt out, UIntPtr value, const format_specs* specs) *it++ = static_cast('x'); return format_uint<4, Char>(it, value, num_digits); }; - return specs ? write_padded(out, *specs, size, write) + return specs ? write_padded(out, *specs, size, write) : base_iterator(out, write(reserve(out, size))); } @@ -1855,17 +1776,11 @@ template struct find_escape_result { uint32_t cp; }; -template -using make_unsigned_char = - typename conditional_t::value, - std::make_unsigned, - type_identity>::type; - template auto find_escape(const Char* begin, const Char* end) -> find_escape_result { for (; begin != end; ++begin) { - uint32_t cp = static_cast>(*begin); + uint32_t cp = static_cast>(*begin); if (const_check(sizeof(Char) == 1) && cp >= 0x80) continue; if (needs_escape(cp)) return {begin, begin + 1, cp}; } @@ -1874,7 +1789,7 @@ auto find_escape(const Char* begin, const Char* end) inline auto find_escape(const char* begin, const char* end) -> find_escape_result { - if (!is_utf8()) return find_escape(begin, end); + if (!use_utf8()) return find_escape(begin, end); auto result = find_escape_result{end, nullptr, 0}; for_each_codepoint(string_view(begin, to_unsigned(end - begin)), [&](uint32_t cp, string_view sv) { @@ -1902,14 +1817,12 @@ inline auto find_escape(const char* begin, const char* end) }() /** - \rst - Constructs a compile-time format string from a string literal *s*. - - **Example**:: - - // A compile-time error because 'd' is an invalid specifier for strings. - std::string s = fmt::format(FMT_STRING("{:d}"), "foo"); - \endrst + * Constructs a compile-time format string from a string literal `s`. + * + * **Example**: + * + * // A compile-time error because 'd' is an invalid specifier for strings. + * std::string s = fmt::format(FMT_STRING("{:d}"), "foo"); */ #define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) @@ -1920,7 +1833,7 @@ auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt { Char buf[width]; fill_n(buf, width, static_cast('0')); format_uint<4>(buf, cp, width); - return copy_str(buf, buf + width, out); + return copy(buf, buf + width, out); } template @@ -1971,7 +1884,7 @@ auto write_escaped_string(OutputIt out, basic_string_view str) auto begin = str.begin(), end = str.end(); do { auto escape = find_escape(begin, end); - out = copy_str(begin, escape.begin, out); + out = copy(begin, escape.begin, out); begin = escape.end; if (!begin) break; out = write_escaped_cp(out, escape); @@ -1998,24 +1911,23 @@ auto write_escaped_char(OutputIt out, Char v) -> OutputIt { template FMT_CONSTEXPR auto write_char(OutputIt out, Char value, - const format_specs& specs) -> OutputIt { + const format_specs& specs) -> OutputIt { bool is_debug = specs.type == presentation_type::debug; - return write_padded(out, specs, 1, [=](reserve_iterator it) { + return write_padded(out, specs, 1, [=](reserve_iterator it) { if (is_debug) return write_escaped_char(it, value); *it++ = value; return it; }); } template -FMT_CONSTEXPR auto write(OutputIt out, Char value, - const format_specs& specs, locale_ref loc = {}) - -> OutputIt { +FMT_CONSTEXPR auto write(OutputIt out, Char value, const format_specs& specs, + locale_ref loc = {}) -> OutputIt { // char is formatted as unsigned char for consistency across platforms. using unsigned_type = conditional_t::value, unsigned char, unsigned>; return check_char_specs(specs) - ? write_char(out, value, specs) - : write(out, static_cast(value), specs, loc); + ? write_char(out, value, specs) + : write(out, static_cast(value), specs, loc); } // Data for write_int that doesn't depend on output iterator type. It is used to @@ -2025,7 +1937,7 @@ template struct write_int_data { size_t padding; FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix, - const format_specs& specs) + const format_specs& specs) : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) { if (specs.align == align::numeric) { auto width = to_unsigned(specs.width); @@ -2044,10 +1956,10 @@ template struct write_int_data { // // where are written by write_digits(it). // prefix contains chars in three lower bytes and the size in the fourth byte. -template +template FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits, unsigned prefix, - const format_specs& specs, + const format_specs& specs, W write_digits) -> OutputIt { // Slightly faster check for specs.width == 0 && specs.precision == -1. if ((specs.width | (specs.precision + 1)) == 0) { @@ -2059,7 +1971,7 @@ FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits, return base_iterator(out, write_digits(it)); } auto data = write_int_data(num_digits, prefix, specs); - return write_padded( + return write_padded( out, specs, data.size, [=](reserve_iterator it) { for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) *it++ = static_cast(p & 0xff); @@ -2122,9 +2034,8 @@ template class digit_grouping { for (int i = 0, sep_index = static_cast(separators.size() - 1); i < num_digits; ++i) { if (num_digits - i == separators[sep_index]) { - out = - copy_str(thousands_sep_.data(), - thousands_sep_.data() + thousands_sep_.size(), out); + out = copy(thousands_sep_.data(), + thousands_sep_.data() + thousands_sep_.size(), out); --sep_index; } *out++ = static_cast(digits[to_unsigned(i)]); @@ -2141,37 +2052,27 @@ FMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) { // Writes a decimal integer with digit grouping. template auto write_int(OutputIt out, UInt value, unsigned prefix, - const format_specs& specs, - const digit_grouping& grouping) -> OutputIt { + const format_specs& specs, const digit_grouping& grouping) + -> OutputIt { static_assert(std::is_same, UInt>::value, ""); int num_digits = 0; auto buffer = memory_buffer(); switch (specs.type) { + default: + FMT_ASSERT(false, ""); + FMT_FALLTHROUGH; case presentation_type::none: - case presentation_type::dec: { + case presentation_type::dec: num_digits = count_digits(value); format_decimal(appender(buffer), value, num_digits); break; - } - case presentation_type::hex_lower: - case presentation_type::hex_upper: { - bool upper = specs.type == presentation_type::hex_upper; + case presentation_type::hex: if (specs.alt) - prefix_append(prefix, unsigned(upper ? 'X' : 'x') << 8 | '0'); + prefix_append(prefix, unsigned(specs.upper ? 'X' : 'x') << 8 | '0'); num_digits = count_digits<4>(value); - format_uint<4, char>(appender(buffer), value, num_digits, upper); + format_uint<4, char>(appender(buffer), value, num_digits, specs.upper); break; - } - case presentation_type::bin_lower: - case presentation_type::bin_upper: { - bool upper = specs.type == presentation_type::bin_upper; - if (specs.alt) - prefix_append(prefix, unsigned(upper ? 'B' : 'b') << 8 | '0'); - num_digits = count_digits<1>(value); - format_uint<1, char>(appender(buffer), value, num_digits); - break; - } - case presentation_type::oct: { + case presentation_type::oct: num_digits = count_digits<3>(value); // Octal prefix '0' is counted as a digit, so only add it if precision // is not greater than the number of digits. @@ -2179,16 +2080,19 @@ auto write_int(OutputIt out, UInt value, unsigned prefix, prefix_append(prefix, '0'); format_uint<3, char>(appender(buffer), value, num_digits); break; - } + case presentation_type::bin: + if (specs.alt) + prefix_append(prefix, unsigned(specs.upper ? 'B' : 'b') << 8 | '0'); + num_digits = count_digits<1>(value); + format_uint<1, char>(appender(buffer), value, num_digits); + break; case presentation_type::chr: - return write_char(out, static_cast(value), specs); - default: - throw_format_error("invalid format specifier"); + return write_char(out, static_cast(value), specs); } unsigned size = (prefix != 0 ? prefix >> 24 : 0) + to_unsigned(num_digits) + to_unsigned(grouping.count_separators(num_digits)); - return write_padded( + return write_padded( out, specs, size, size, [&](reserve_iterator it) { for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) *it++ = static_cast(p & 0xff); @@ -2197,11 +2101,11 @@ auto write_int(OutputIt out, UInt value, unsigned prefix, } // Writes a localized value. -FMT_API auto write_loc(appender out, loc_value value, - const format_specs<>& specs, locale_ref loc) -> bool; -template -inline auto write_loc(OutputIt, loc_value, const format_specs&, - locale_ref) -> bool { +FMT_API auto write_loc(appender out, loc_value value, const format_specs& specs, + locale_ref loc) -> bool; +template +inline auto write_loc(OutputIt, loc_value, const format_specs&, locale_ref) + -> bool { return false; } @@ -2227,8 +2131,8 @@ FMT_CONSTEXPR auto make_write_int_arg(T value, sign_t sign) } template struct loc_writer { - buffer_appender out; - const format_specs& specs; + basic_appender out; + const format_specs& specs; std::basic_string sep; std::string grouping; std::basic_string decimal_point; @@ -2249,87 +2153,86 @@ template struct loc_writer { template FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg arg, - const format_specs& specs, - locale_ref) -> OutputIt { + const format_specs& specs, locale_ref) + -> OutputIt { static_assert(std::is_same>::value, ""); auto abs_value = arg.abs_value; auto prefix = arg.prefix; switch (specs.type) { + default: + FMT_ASSERT(false, ""); + FMT_FALLTHROUGH; case presentation_type::none: case presentation_type::dec: { - auto num_digits = count_digits(abs_value); - return write_int( + int num_digits = count_digits(abs_value); + return write_int( out, num_digits, prefix, specs, [=](reserve_iterator it) { return format_decimal(it, abs_value, num_digits).end; }); } - case presentation_type::hex_lower: - case presentation_type::hex_upper: { - bool upper = specs.type == presentation_type::hex_upper; + case presentation_type::hex: { if (specs.alt) - prefix_append(prefix, unsigned(upper ? 'X' : 'x') << 8 | '0'); + prefix_append(prefix, unsigned(specs.upper ? 'X' : 'x') << 8 | '0'); int num_digits = count_digits<4>(abs_value); - return write_int( + return write_int( out, num_digits, prefix, specs, [=](reserve_iterator it) { - return format_uint<4, Char>(it, abs_value, num_digits, upper); + return format_uint<4, Char>(it, abs_value, num_digits, specs.upper); }); } - case presentation_type::bin_lower: - case presentation_type::bin_upper: { - bool upper = specs.type == presentation_type::bin_upper; - if (specs.alt) - prefix_append(prefix, unsigned(upper ? 'B' : 'b') << 8 | '0'); - int num_digits = count_digits<1>(abs_value); - return write_int(out, num_digits, prefix, specs, - [=](reserve_iterator it) { - return format_uint<1, Char>(it, abs_value, num_digits); - }); - } case presentation_type::oct: { int num_digits = count_digits<3>(abs_value); // Octal prefix '0' is counted as a digit, so only add it if precision // is not greater than the number of digits. if (specs.alt && specs.precision <= num_digits && abs_value != 0) prefix_append(prefix, '0'); - return write_int(out, num_digits, prefix, specs, - [=](reserve_iterator it) { - return format_uint<3, Char>(it, abs_value, num_digits); - }); + return write_int( + out, num_digits, prefix, specs, [=](reserve_iterator it) { + return format_uint<3, Char>(it, abs_value, num_digits); + }); + } + case presentation_type::bin: { + if (specs.alt) + prefix_append(prefix, unsigned(specs.upper ? 'B' : 'b') << 8 | '0'); + int num_digits = count_digits<1>(abs_value); + return write_int( + out, num_digits, prefix, specs, [=](reserve_iterator it) { + return format_uint<1, Char>(it, abs_value, num_digits); + }); } case presentation_type::chr: - return write_char(out, static_cast(abs_value), specs); - default: - throw_format_error("invalid format specifier"); + return write_char(out, static_cast(abs_value), specs); } - return out; } template -FMT_CONSTEXPR FMT_NOINLINE auto write_int_noinline( - OutputIt out, write_int_arg arg, const format_specs& specs, - locale_ref loc) -> OutputIt { - return write_int(out, arg, specs, loc); +FMT_CONSTEXPR FMT_NOINLINE auto write_int_noinline(OutputIt out, + write_int_arg arg, + const format_specs& specs, + locale_ref loc) -> OutputIt { + return write_int(out, arg, specs, loc); } -template ::value && !std::is_same::value && - std::is_same>::value)> -FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, - const format_specs& specs, - locale_ref loc) -> OutputIt { + !std::is_same::value)> +FMT_CONSTEXPR FMT_INLINE auto write(basic_appender out, T value, + const format_specs& specs, locale_ref loc) + -> basic_appender { if (specs.localized && write_loc(out, value, specs, loc)) return out; - return write_int_noinline(out, make_write_int_arg(value, specs.sign), specs, - loc); + return write_int_noinline(out, make_write_int_arg(value, specs.sign), + specs, loc); } // An inlined version of write used in format string compilation. template ::value && !std::is_same::value && - !std::is_same>::value)> + !std::is_same::value && + !std::is_same>::value)> FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, - const format_specs& specs, - locale_ref loc) -> OutputIt { + const format_specs& specs, locale_ref loc) + -> OutputIt { if (specs.localized && write_loc(out, value, specs, loc)) return out; - return write_int(out, make_write_int_arg(value, specs.sign), specs, loc); + return write_int(out, make_write_int_arg(value, specs.sign), specs, + loc); } // An output iterator that counts the number of objects written to it and @@ -2374,40 +2277,41 @@ class counting_iterator { template FMT_CONSTEXPR auto write(OutputIt out, basic_string_view s, - const format_specs& specs) -> OutputIt { + const format_specs& specs) -> OutputIt { auto data = s.data(); auto size = s.size(); if (specs.precision >= 0 && to_unsigned(specs.precision) < size) size = code_point_index(s, to_unsigned(specs.precision)); bool is_debug = specs.type == presentation_type::debug; size_t width = 0; + + if (is_debug) size = write_escaped_string(counting_iterator{}, s).count(); + if (specs.width != 0) { if (is_debug) - width = write_escaped_string(counting_iterator{}, s).count(); + width = size; else width = compute_width(basic_string_view(data, size)); } - return write_padded(out, specs, size, width, - [=](reserve_iterator it) { - if (is_debug) return write_escaped_string(it, s); - return copy_str(data, data + size, it); - }); + return write_padded(out, specs, size, width, + [=](reserve_iterator it) { + if (is_debug) return write_escaped_string(it, s); + return copy(data, data + size, it); + }); } template FMT_CONSTEXPR auto write(OutputIt out, basic_string_view> s, - const format_specs& specs, locale_ref) - -> OutputIt { - return write(out, s, specs); + const format_specs& specs, locale_ref) -> OutputIt { + return write(out, s, specs); } template -FMT_CONSTEXPR auto write(OutputIt out, const Char* s, - const format_specs& specs, locale_ref) - -> OutputIt { +FMT_CONSTEXPR auto write(OutputIt out, const Char* s, const format_specs& specs, + locale_ref) -> OutputIt { if (specs.type == presentation_type::pointer) return write_ptr(out, bit_cast(s), &specs); - if (!s) throw_format_error("string pointer is null"); - return write(out, basic_string_view(s), specs, {}); + if (!s) report_error("string pointer is null"); + return write(out, basic_string_view(s), specs, {}); } template OutputIt { if (negative) abs_value = ~abs_value + 1; int num_digits = count_digits(abs_value); auto size = (negative ? 1 : 0) + static_cast(num_digits); - auto it = reserve(out, size); - if (auto ptr = to_pointer(it, size)) { + if (auto ptr = to_pointer(out, size)) { if (negative) *ptr++ = static_cast('-'); format_decimal(ptr, abs_value, num_digits); return out; } - if (negative) *it++ = static_cast('-'); - it = format_decimal(it, abs_value, num_digits).end; - return base_iterator(out, it); + if (negative) *out++ = static_cast('-'); + return format_decimal(out, abs_value, num_digits).end; } // DEPRECATED! template FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, - format_specs& specs) -> const Char* { + format_specs& specs) -> const Char* { FMT_ASSERT(begin != end, ""); auto align = align::none; auto p = begin + code_point_length(begin); @@ -2457,10 +2359,10 @@ FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, auto c = *begin; if (c == '}') return begin; if (c == '{') { - throw_format_error("invalid fill character '{'"); + report_error("invalid fill character '{'"); return begin; } - specs.fill = {begin, to_unsigned(p - begin)}; + specs.fill = basic_string_view(begin, to_unsigned(p - begin)); begin = p + 1; } else { ++begin; @@ -2479,58 +2381,40 @@ FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, enum class float_format : unsigned char { general, // General: exponent notation or fixed point based on magnitude. exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. - fixed, // Fixed point with the default precision of 6, e.g. 0.0012. - hex + fixed // Fixed point with the default precision of 6, e.g. 0.0012. }; struct float_specs { int precision; float_format format : 8; sign_t sign : 8; - bool upper : 1; bool locale : 1; bool binary32 : 1; bool showpoint : 1; }; -template -FMT_CONSTEXPR auto parse_float_type_spec(const format_specs& specs) +// DEPRECATED! +FMT_CONSTEXPR inline auto parse_float_type_spec(const format_specs& specs) -> float_specs { auto result = float_specs(); result.showpoint = specs.alt; result.locale = specs.localized; switch (specs.type) { + default: + FMT_FALLTHROUGH; case presentation_type::none: result.format = float_format::general; break; - case presentation_type::general_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::general_lower: - result.format = float_format::general; - break; - case presentation_type::exp_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::exp_lower: + case presentation_type::exp: result.format = float_format::exp; result.showpoint |= specs.precision != 0; break; - case presentation_type::fixed_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::fixed_lower: + case presentation_type::fixed: result.format = float_format::fixed; result.showpoint |= specs.precision != 0; break; - case presentation_type::hexfloat_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::hexfloat_lower: - result.format = float_format::hex; - break; - default: - throw_format_error("invalid format specifier"); + case presentation_type::general: + result.format = float_format::general; break; } return result; @@ -2538,21 +2422,21 @@ FMT_CONSTEXPR auto parse_float_type_spec(const format_specs& specs) template FMT_CONSTEXPR20 auto write_nonfinite(OutputIt out, bool isnan, - format_specs specs, - const float_specs& fspecs) -> OutputIt { + format_specs specs, sign_t sign) + -> OutputIt { auto str = - isnan ? (fspecs.upper ? "NAN" : "nan") : (fspecs.upper ? "INF" : "inf"); + isnan ? (specs.upper ? "NAN" : "nan") : (specs.upper ? "INF" : "inf"); constexpr size_t str_size = 3; - auto sign = fspecs.sign; auto size = str_size + (sign ? 1 : 0); // Replace '0'-padding with space for non-finite values. const bool is_zero_fill = - specs.fill.size() == 1 && *specs.fill.data() == static_cast('0'); - if (is_zero_fill) specs.fill[0] = static_cast(' '); - return write_padded(out, specs, size, [=](reserve_iterator it) { - if (sign) *it++ = detail::sign(sign); - return copy_str(str, str + str_size, it); - }); + specs.fill.size() == 1 && specs.fill.template get() == '0'; + if (is_zero_fill) specs.fill = ' '; + return write_padded(out, specs, size, + [=](reserve_iterator it) { + if (sign) *it++ = detail::sign(sign); + return copy(str, str + str_size, it); + }); } // A decimal floating-point number significand * pow(10, exp). @@ -2573,7 +2457,7 @@ inline auto get_significand_size(const dragonbox::decimal_fp& f) -> int { template constexpr auto write_significand(OutputIt out, const char* significand, int significand_size) -> OutputIt { - return copy_str(significand, significand + significand_size, out); + return copy(significand, significand + significand_size, out); } template inline auto write_significand(OutputIt out, UInt significand, @@ -2626,19 +2510,19 @@ inline auto write_significand(OutputIt out, UInt significand, Char buffer[digits10() + 2]; auto end = write_significand(buffer, significand, significand_size, integral_size, decimal_point); - return detail::copy_str_noinline(buffer, end, out); + return detail::copy_noinline(buffer, end, out); } template FMT_CONSTEXPR auto write_significand(OutputIt out, const char* significand, int significand_size, int integral_size, Char decimal_point) -> OutputIt { - out = detail::copy_str_noinline(significand, - significand + integral_size, out); + out = detail::copy_noinline(significand, significand + integral_size, + out); if (!decimal_point) return out; *out++ = decimal_point; - return detail::copy_str_noinline(significand + integral_size, - significand + significand_size, out); + return detail::copy_noinline(significand + integral_size, + significand + significand_size, out); } template @@ -2651,18 +2535,18 @@ FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, decimal_point); } auto buffer = basic_memory_buffer(); - write_significand(buffer_appender(buffer), significand, - significand_size, integral_size, decimal_point); + write_significand(basic_appender(buffer), significand, significand_size, + integral_size, decimal_point); grouping.apply( out, basic_string_view(buffer.data(), to_unsigned(integral_size))); - return detail::copy_str_noinline(buffer.data() + integral_size, - buffer.end(), out); + return detail::copy_noinline(buffer.data() + integral_size, + buffer.end(), out); } -template > FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, - const format_specs& specs, + const format_specs& specs, float_specs fspecs, locale_ref loc) -> OutputIt { auto significand = f.significand; @@ -2699,7 +2583,7 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, if (abs_output_exp >= 100) exp_digits = abs_output_exp >= 1000 ? 4 : 3; size += to_unsigned((decimal_point ? 1 : 0) + 2 + exp_digits); - char exp_char = fspecs.upper ? 'E' : 'e'; + char exp_char = specs.upper ? 'E' : 'e'; auto write = [=](iterator it) { if (sign) *it++ = detail::sign(sign); // Insert a decimal point after the first digit and add an exponent. @@ -2709,8 +2593,9 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, *it++ = static_cast(exp_char); return write_exponent(output_exp, it); }; - return specs.width > 0 ? write_padded(out, specs, size, write) - : base_iterator(out, write(reserve(out, size))); + return specs.width > 0 + ? write_padded(out, specs, size, write) + : base_iterator(out, write(reserve(out, size))); } int exp = f.exponent + significand_size; @@ -2726,7 +2611,7 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, } auto grouping = Grouping(loc, fspecs.locale); size += to_unsigned(grouping.count_separators(exp)); - return write_padded(out, specs, size, [&](iterator it) { + return write_padded(out, specs, size, [&](iterator it) { if (sign) *it++ = detail::sign(sign); it = write_significand(it, significand, significand_size, f.exponent, grouping); @@ -2740,7 +2625,7 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, size += 1 + to_unsigned(num_zeros > 0 ? num_zeros : 0); auto grouping = Grouping(loc, fspecs.locale); size += to_unsigned(grouping.count_separators(exp)); - return write_padded(out, specs, size, [&](iterator it) { + return write_padded(out, specs, size, [&](iterator it) { if (sign) *it++ = detail::sign(sign); it = write_significand(it, significand, significand_size, exp, decimal_point, grouping); @@ -2755,7 +2640,7 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, } bool pointy = num_zeros != 0 || significand_size != 0 || fspecs.showpoint; size += 1 + (pointy ? 1 : 0) + to_unsigned(num_zeros); - return write_padded(out, specs, size, [&](iterator it) { + return write_padded(out, specs, size, [&](iterator it) { if (sign) *it++ = detail::sign(sign); *it++ = zero; if (!pointy) return it; @@ -2779,22 +2664,21 @@ template class fallback_digit_grouping { } }; -template +template FMT_CONSTEXPR20 auto write_float(OutputIt out, const DecimalFP& f, - const format_specs& specs, - float_specs fspecs, locale_ref loc) - -> OutputIt { + const format_specs& specs, float_specs fspecs, + locale_ref loc) -> OutputIt { if (is_constant_evaluated()) { - return do_write_float>(out, f, specs, fspecs, loc); } else { - return do_write_float(out, f, specs, fspecs, loc); + return do_write_float(out, f, specs, fspecs, loc); } } template constexpr auto isnan(T value) -> bool { - return !(value >= value); // std::isnan doesn't support __float128. + return value != value; // std::isnan doesn't support __float128. } template @@ -2940,7 +2824,7 @@ class bigint { auto size = other.bigits_.size(); bigits_.resize(size); auto data = other.bigits_.data(); - copy_str(data, data + size, bigits_.data()); + copy(data, data + size, bigits_.data()); exp_ = other.exp_; } @@ -3076,7 +2960,7 @@ class bigint { bigits_.resize(to_unsigned(num_bigits + exp_difference)); for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) bigits_[j] = bigits_[i]; - std::uninitialized_fill_n(bigits_.data(), exp_difference, 0u); + memset(bigits_.data(), 0, to_unsigned(exp_difference) * sizeof(bigit)); exp_ -= exp_difference; } @@ -3201,8 +3085,11 @@ FMT_CONSTEXPR20 inline void format_dragon(basic_fp value, // Generate the given number of digits. exp10 -= num_digits - 1; if (num_digits <= 0) { - denominator *= 10; - auto digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; + auto digit = '0'; + if (num_digits == 0) { + denominator *= 10; + digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; + } buf.push_back(digit); return; } @@ -3239,8 +3126,8 @@ FMT_CONSTEXPR20 inline void format_dragon(basic_fp value, // Formats a floating-point number using the hexfloat format. template ::value)> -FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, - float_specs specs, buffer& buf) { +FMT_CONSTEXPR20 void format_hexfloat(Float value, format_specs specs, + buffer& buf) { // float is passed as double to reduce the number of instantiations and to // simplify implementation. static_assert(!std::is_same::value, ""); @@ -3268,8 +3155,8 @@ FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, if (leading_xdigit > 1) f.e -= (32 - countl_zero(leading_xdigit) - 1); int print_xdigits = num_xdigits - 1; - if (precision >= 0 && print_xdigits > precision) { - const int shift = ((print_xdigits - precision - 1) * 4); + if (specs.precision >= 0 && print_xdigits > specs.precision) { + const int shift = ((print_xdigits - specs.precision - 1) * 4); const auto mask = carrier_uint(0xF) << shift; const auto v = static_cast((f.f & mask) >> shift); @@ -3288,7 +3175,7 @@ FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, } } - print_xdigits = precision; + print_xdigits = specs.precision; } char xdigits[num_bits() / 4]; @@ -3301,10 +3188,10 @@ FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, buf.push_back('0'); buf.push_back(specs.upper ? 'X' : 'x'); buf.push_back(xdigits[0]); - if (specs.showpoint || print_xdigits > 0 || print_xdigits < precision) + if (specs.alt || print_xdigits > 0 || print_xdigits < specs.precision) buf.push_back('.'); buf.append(xdigits + 1, xdigits + 1 + print_xdigits); - for (; print_xdigits < precision; ++print_xdigits) buf.push_back('0'); + for (; print_xdigits < specs.precision; ++print_xdigits) buf.push_back('0'); buf.push_back(specs.upper ? 'P' : 'p'); @@ -3320,9 +3207,9 @@ FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, } template ::value)> -FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, - float_specs specs, buffer& buf) { - format_hexfloat(static_cast(value), precision, specs, buf); +FMT_CONSTEXPR20 void format_hexfloat(Float value, format_specs specs, + buffer& buf) { + format_hexfloat(static_cast(value), specs, buf); } constexpr auto fractional_part_rounding_thresholds(int index) -> uint32_t { @@ -3374,11 +3261,11 @@ FMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs, // Use Dragonbox for the shortest format. if (specs.binary32) { auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); + write(appender(buf), dec.significand); return dec.exponent; } auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); + write(appender(buf), dec.significand); return dec.exponent; } else { // Extract significand bits and exponent bits. @@ -3645,97 +3532,101 @@ FMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs, } return exp; } + template -FMT_CONSTEXPR20 auto write_float(OutputIt out, T value, - format_specs specs, locale_ref loc) - -> OutputIt { - float_specs fspecs = parse_float_type_spec(specs); - fspecs.sign = specs.sign; +FMT_CONSTEXPR20 auto write_float(OutputIt out, T value, format_specs specs, + locale_ref loc) -> OutputIt { + sign_t sign = specs.sign; if (detail::signbit(value)) { // value < 0 is false for NaN so use signbit. - fspecs.sign = sign::minus; + sign = sign::minus; value = -value; - } else if (fspecs.sign == sign::minus) { - fspecs.sign = sign::none; + } else if (sign == sign::minus) { + sign = sign::none; } if (!detail::isfinite(value)) - return write_nonfinite(out, detail::isnan(value), specs, fspecs); + return write_nonfinite(out, detail::isnan(value), specs, sign); - if (specs.align == align::numeric && fspecs.sign) { + if (specs.align == align::numeric && sign) { auto it = reserve(out, 1); - *it++ = detail::sign(fspecs.sign); + *it++ = detail::sign(sign); out = base_iterator(out, it); - fspecs.sign = sign::none; + sign = sign::none; if (specs.width != 0) --specs.width; } memory_buffer buffer; - if (fspecs.format == float_format::hex) { - if (fspecs.sign) buffer.push_back(detail::sign(fspecs.sign)); - format_hexfloat(convert_float(value), specs.precision, fspecs, buffer); - return write_bytes(out, {buffer.data(), buffer.size()}, - specs); + if (specs.type == presentation_type::hexfloat) { + if (sign) buffer.push_back(detail::sign(sign)); + format_hexfloat(convert_float(value), specs, buffer); + return write_bytes(out, {buffer.data(), buffer.size()}, + specs); } + int precision = specs.precision >= 0 || specs.type == presentation_type::none ? specs.precision : 6; - if (fspecs.format == float_format::exp) { + if (specs.type == presentation_type::exp) { if (precision == max_value()) - throw_format_error("number is too big"); + report_error("number is too big"); else ++precision; - } else if (fspecs.format != float_format::fixed && precision == 0) { + } else if (specs.type != presentation_type::fixed && precision == 0) { precision = 1; } + float_specs fspecs = parse_float_type_spec(specs); + fspecs.sign = sign; if (const_check(std::is_same())) fspecs.binary32 = true; int exp = format_float(convert_float(value), precision, fspecs, buffer); fspecs.precision = precision; auto f = big_decimal_fp{buffer.data(), static_cast(buffer.size()), exp}; - return write_float(out, f, specs, fspecs, loc); + return write_float(out, f, specs, fspecs, loc); } template ::value)> -FMT_CONSTEXPR20 auto write(OutputIt out, T value, format_specs specs, +FMT_CONSTEXPR20 auto write(OutputIt out, T value, format_specs specs, locale_ref loc = {}) -> OutputIt { if (const_check(!is_supported_floating_point(value))) return out; return specs.localized && write_loc(out, value, specs, loc) ? out - : write_float(out, value, specs, loc); + : write_float(out, value, specs, loc); } template ::value)> FMT_CONSTEXPR20 auto write(OutputIt out, T value) -> OutputIt { - if (is_constant_evaluated()) return write(out, value, format_specs()); + if (is_constant_evaluated()) return write(out, value, format_specs()); if (const_check(!is_supported_floating_point(value))) return out; - auto fspecs = float_specs(); + auto sign = sign_t::none; if (detail::signbit(value)) { - fspecs.sign = sign::minus; + sign = sign::minus; value = -value; } - constexpr auto specs = format_specs(); + constexpr auto specs = format_specs(); using floaty = conditional_t::value, double, T>; using floaty_uint = typename dragonbox::float_info::carrier_uint; floaty_uint mask = exponent_mask(); if ((bit_cast(value) & mask) == mask) - return write_nonfinite(out, std::isnan(value), specs, fspecs); + return write_nonfinite(out, std::isnan(value), specs, sign); + auto fspecs = float_specs(); + fspecs.sign = sign; auto dec = dragonbox::to_decimal(static_cast(value)); - return write_float(out, dec, specs, fspecs, {}); + return write_float(out, dec, specs, fspecs, {}); } template ::value && !is_fast_float::value)> inline auto write(OutputIt out, T value) -> OutputIt { - return write(out, value, format_specs()); + return write(out, value, format_specs()); } template -auto write(OutputIt out, monostate, format_specs = {}, locale_ref = {}) +auto write(OutputIt out, monostate, format_specs = {}, locale_ref = {}) -> OutputIt { FMT_ASSERT(false, ""); return out; @@ -3744,13 +3635,11 @@ auto write(OutputIt out, monostate, format_specs = {}, locale_ref = {}) template FMT_CONSTEXPR auto write(OutputIt out, basic_string_view value) -> OutputIt { - auto it = reserve(out, value.size()); - it = copy_str_noinline(value.begin(), value.end(), it); - return base_iterator(out, it); + return copy_noinline(value.begin(), value.end(), out); } template ::value)> + FMT_ENABLE_IF(has_to_string_view::value)> constexpr auto write(OutputIt out, const T& value) -> OutputIt { return write(out, to_string_view(value)); } @@ -3769,13 +3658,12 @@ FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { template ::value)> -FMT_CONSTEXPR auto write(OutputIt out, T value, - const format_specs& specs = {}, locale_ref = {}) - -> OutputIt { +FMT_CONSTEXPR auto write(OutputIt out, T value, const format_specs& specs = {}, + locale_ref = {}) -> OutputIt { return specs.type != presentation_type::none && specs.type != presentation_type::string - ? write(out, value ? 1 : 0, specs, {}) - : write_bytes(out, value ? "true" : "false", specs); + ? write(out, value ? 1 : 0, specs, {}) + : write_bytes(out, value ? "true" : "false", specs); } template @@ -3788,13 +3676,13 @@ FMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt { template FMT_CONSTEXPR20 auto write(OutputIt out, const Char* value) -> OutputIt { if (value) return write(out, basic_string_view(value)); - throw_format_error("string pointer is null"); + report_error("string pointer is null"); return out; } template ::value)> -auto write(OutputIt out, const T* value, const format_specs& specs = {}, +auto write(OutputIt out, const T* value, const format_specs& specs = {}, locale_ref = {}) -> OutputIt { return write_ptr(out, bit_cast(value), &specs); } @@ -3803,7 +3691,7 @@ auto write(OutputIt out, const T* value, const format_specs& specs = {}, template > FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t< - std::is_class::value && !is_string::value && + std::is_class::value && !has_to_string_view::value && !is_floating_point::value && !std::is_same::value && !std::is_same().map( value))>>::value, @@ -3814,7 +3702,9 @@ FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t< template > FMT_CONSTEXPR auto write(OutputIt out, const T& value) - -> enable_if_t::value == type::custom_type, + -> enable_if_t::value == + type::custom_type && + !std::is_fundamental::value, OutputIt> { auto formatter = typename Context::template formatter_type(); auto parse_ctx = typename Context::parse_context_type({}); @@ -3826,8 +3716,8 @@ FMT_CONSTEXPR auto write(OutputIt out, const T& value) // An argument visitor that formats the argument and writes it via the output // iterator. It's a class and not a generic lambda for compatibility with C++11. template struct default_arg_formatter { - using iterator = buffer_appender; - using context = buffer_context; + using iterator = basic_appender; + using context = buffered_context; iterator out; basic_format_args args; @@ -3845,16 +3735,16 @@ template struct default_arg_formatter { }; template struct arg_formatter { - using iterator = buffer_appender; - using context = buffer_context; + using iterator = basic_appender; + using context = buffered_context; iterator out; - const format_specs& specs; + const format_specs& specs; locale_ref locale; template FMT_CONSTEXPR FMT_INLINE auto operator()(T value) -> iterator { - return detail::write(out, value, specs, locale); + return detail::write(out, value, specs, locale); } auto operator()(typename basic_format_arg::handle) -> iterator { // User-defined types are handled separately because they require access @@ -3866,13 +3756,13 @@ template struct arg_formatter { struct width_checker { template ::value)> FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) throw_format_error("negative width"); + if (is_negative(value)) report_error("negative width"); return static_cast(value); } template ::value)> FMT_CONSTEXPR auto operator()(T) -> unsigned long long { - throw_format_error("width is not integer"); + report_error("width is not integer"); return 0; } }; @@ -3880,13 +3770,13 @@ struct width_checker { struct precision_checker { template ::value)> FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) throw_format_error("negative precision"); + if (is_negative(value)) report_error("negative precision"); return static_cast(value); } template ::value)> FMT_CONSTEXPR auto operator()(T) -> unsigned long long { - throw_format_error("precision is not integer"); + report_error("precision is not integer"); return 0; } }; @@ -3894,15 +3784,14 @@ struct precision_checker { template FMT_CONSTEXPR auto get_dynamic_spec(FormatArg arg) -> int { unsigned long long value = arg.visit(Handler()); - if (value > to_unsigned(max_value())) - throw_format_error("number is too big"); + if (value > to_unsigned(max_value())) report_error("number is too big"); return static_cast(value); } template FMT_CONSTEXPR auto get_arg(Context& ctx, ID id) -> decltype(ctx.arg(id)) { auto arg = ctx.arg(id); - if (!arg) ctx.on_error("argument not found"); + if (!arg) report_error("argument not found"); return arg; } @@ -3962,7 +3851,7 @@ template struct udl_arg { template auto vformat(const Locale& loc, basic_string_view fmt, - basic_format_args>> args) + typename detail::vformat_args::type args) -> std::basic_string { auto buf = basic_memory_buffer(); detail::vformat_to(buf, fmt, args, detail::locale_ref(loc)); @@ -3974,29 +3863,29 @@ using format_func = void (*)(detail::buffer&, int, const char*); FMT_API void format_error_code(buffer& out, int error_code, string_view message) noexcept; +using fmt::report_error; FMT_API void report_error(format_func func, int error_code, const char* message) noexcept; } // namespace detail +FMT_BEGIN_EXPORT FMT_API auto vsystem_error(int error_code, string_view format_str, format_args args) -> std::system_error; /** - \rst - Constructs :class:`std::system_error` with a message formatted with - ``fmt::format(fmt, args...)``. - *error_code* is a system error code as given by ``errno``. - - **Example**:: - - // This throws std::system_error with the description - // cannot open file 'madeup': No such file or directory - // or similar (system message may vary). - const char* filename = "madeup"; - std::FILE* file = std::fopen(filename, "r"); - if (!file) - throw fmt::system_error(errno, "cannot open file '{}'", filename); - \endrst + * Constructs `std::system_error` with a message formatted with + * `fmt::format(fmt, args...)`. + * `error_code` is a system error code as given by `errno`. + * + * **Example**: + * + * // This throws std::system_error with the description + * // cannot open file 'madeup': No such file or directory + * // or similar (system message may vary). + * const char* filename = "madeup"; + * std::FILE* file = std::fopen(filename, "r"); + * if (!file) + * throw fmt::system_error(errno, "cannot open file '{}'", filename); */ template auto system_error(int error_code, format_string fmt, T&&... args) @@ -4005,20 +3894,17 @@ auto system_error(int error_code, format_string fmt, T&&... args) } /** - \rst - Formats an error message for an error returned by an operating system or a - language runtime, for example a file opening error, and writes it to *out*. - The format is the same as the one used by ``std::system_error(ec, message)`` - where ``ec`` is ``std::error_code(error_code, std::generic_category()})``. - It is implementation-defined but normally looks like: - - .. parsed-literal:: - **: ** - - where ** is the passed message and ** is the system - message corresponding to the error code. - *error_code* is a system error code as given by ``errno``. - \endrst + * Formats an error message for an error returned by an operating system or a + * language runtime, for example a file opening error, and writes it to `out`. + * The format is the same as the one used by `std::system_error(ec, message)` + * where `ec` is `std::error_code(error_code, std::generic_category())`. + * It is implementation-defined but normally looks like: + * + * : + * + * where `` is the passed message and `` is the system + * message corresponding to the error code. + * `error_code` is a system error code as given by `errno`. */ FMT_API void format_system_error(detail::buffer& out, int error_code, const char* message) noexcept; @@ -4027,7 +3913,7 @@ FMT_API void format_system_error(detail::buffer& out, int error_code, // Can be used to report errors from destructors. FMT_API void report_system_error(int error_code, const char* message) noexcept; -/** Fast integer formatter. */ +/// A fast integer formatter. class format_int { private: // Buffer should be large enough to hold all digits (digits10 + 1), @@ -4036,12 +3922,14 @@ class format_int { mutable char buffer_[buffer_size]; char* str_; - template auto format_unsigned(UInt value) -> char* { + template + FMT_CONSTEXPR20 auto format_unsigned(UInt value) -> char* { auto n = static_cast>(value); return detail::format_decimal(buffer_, n, buffer_size - 1).begin; } - template auto format_signed(Int value) -> char* { + template + FMT_CONSTEXPR20 auto format_signed(Int value) -> char* { auto abs_value = static_cast>(value); bool negative = value < 0; if (negative) abs_value = 0 - abs_value; @@ -4051,39 +3939,35 @@ class format_int { } public: - explicit format_int(int value) : str_(format_signed(value)) {} - explicit format_int(long value) : str_(format_signed(value)) {} - explicit format_int(long long value) : str_(format_signed(value)) {} - explicit format_int(unsigned value) : str_(format_unsigned(value)) {} - explicit format_int(unsigned long value) : str_(format_unsigned(value)) {} - explicit format_int(unsigned long long value) + explicit FMT_CONSTEXPR20 format_int(int value) : str_(format_signed(value)) {} + explicit FMT_CONSTEXPR20 format_int(long value) + : str_(format_signed(value)) {} + explicit FMT_CONSTEXPR20 format_int(long long value) + : str_(format_signed(value)) {} + explicit FMT_CONSTEXPR20 format_int(unsigned value) + : str_(format_unsigned(value)) {} + explicit FMT_CONSTEXPR20 format_int(unsigned long value) + : str_(format_unsigned(value)) {} + explicit FMT_CONSTEXPR20 format_int(unsigned long long value) : str_(format_unsigned(value)) {} - /** Returns the number of characters written to the output buffer. */ - auto size() const -> size_t { + /// Returns the number of characters written to the output buffer. + FMT_CONSTEXPR20 auto size() const -> size_t { return detail::to_unsigned(buffer_ - str_ + buffer_size - 1); } - /** - Returns a pointer to the output buffer content. No terminating null - character is appended. - */ - auto data() const -> const char* { return str_; } + /// Returns a pointer to the output buffer content. No terminating null + /// character is appended. + FMT_CONSTEXPR20 auto data() const -> const char* { return str_; } - /** - Returns a pointer to the output buffer content with terminating null - character appended. - */ - auto c_str() const -> const char* { + /// Returns a pointer to the output buffer content with terminating null + /// character appended. + FMT_CONSTEXPR20 auto c_str() const -> const char* { buffer_[buffer_size - 1] = '\0'; return str_; } - /** - \rst - Returns the content of the output buffer as an ``std::string``. - \endrst - */ + /// Returns the content of the output buffer as an `std::string`. auto str() const -> std::string { return std::string(str_, size()); } }; @@ -4092,14 +3976,19 @@ struct formatter::value>> : formatter, Char> { template auto format(const T& value, FormatContext& ctx) const -> decltype(ctx.out()) { - using base = formatter, Char>; - return base::format(format_as(value), ctx); + auto&& val = format_as(value); // Make an lvalue reference for format. + return formatter, Char>::format(val, ctx); } }; -#define FMT_FORMAT_AS(Type, Base) \ - template \ - struct formatter : formatter {} +#define FMT_FORMAT_AS(Type, Base) \ + template \ + struct formatter : formatter { \ + template \ + auto format(Type value, FormatContext& ctx) const -> decltype(ctx.out()) { \ + return formatter::format(value, ctx); \ + } \ + } FMT_FORMAT_AS(signed char, int); FMT_FORMAT_AS(unsigned char, unsigned); @@ -4108,44 +3997,36 @@ FMT_FORMAT_AS(unsigned short, unsigned); FMT_FORMAT_AS(long, detail::long_type); FMT_FORMAT_AS(unsigned long, detail::ulong_type); FMT_FORMAT_AS(Char*, const Char*); -FMT_FORMAT_AS(std::basic_string, basic_string_view); FMT_FORMAT_AS(std::nullptr_t, const void*); FMT_FORMAT_AS(detail::std_string_view, basic_string_view); FMT_FORMAT_AS(void*, const void*); +template +class formatter, Char> + : public formatter, Char> {}; + template struct formatter : formatter, Char> {}; /** - \rst - Converts ``p`` to ``const void*`` for pointer formatting. - - **Example**:: - - auto s = fmt::format("{}", fmt::ptr(p)); - \endrst + * Converts `p` to `const void*` for pointer formatting. + * + * **Example**: + * + * auto s = fmt::format("{}", fmt::ptr(p)); */ template auto ptr(T p) -> const void* { static_assert(std::is_pointer::value, ""); return detail::bit_cast(p); } -template -auto ptr(const std::unique_ptr& p) -> const void* { - return p.get(); -} -template auto ptr(const std::shared_ptr& p) -> const void* { - return p.get(); -} /** - \rst - Converts ``e`` to the underlying type. - - **Example**:: - - enum class color { red, green, blue }; - auto s = fmt::format("{}", fmt::underlying(color::red)); - \endrst + * Converts `e` to the underlying type. + * + * **Example**: + * + * enum class color { red, green, blue }; + * auto s = fmt::format("{}", fmt::underlying(color::red)); */ template constexpr auto underlying(Enum e) noexcept -> underlying_t { @@ -4180,12 +4061,13 @@ template <> struct formatter { } template - auto format(bytes b, FormatContext& ctx) -> decltype(ctx.out()) { - detail::handle_dynamic_spec(specs_.width, - specs_.width_ref, ctx); + auto format(bytes b, FormatContext& ctx) const -> decltype(ctx.out()) { + auto specs = specs_; + detail::handle_dynamic_spec(specs.width, + specs.width_ref, ctx); detail::handle_dynamic_spec( - specs_.precision, specs_.precision_ref, ctx); - return detail::write_bytes(ctx.out(), b.data_, specs_); + specs.precision, specs.precision_ref, ctx); + return detail::write_bytes(ctx.out(), b.data_, specs); } }; @@ -4195,15 +4077,13 @@ template struct group_digits_view { }; /** - \rst - Returns a view that formats an integer value using ',' as a locale-independent - thousands separator. - - **Example**:: - - fmt::print("{}", fmt::group_digits(12345)); - // Output: "12,345" - \endrst + * Returns a view that formats an integer value using ',' as a + * locale-independent thousands separator. + * + * **Example**: + * + * fmt::print("{}", fmt::group_digits(12345)); + * // Output: "12,345" */ template auto group_digits(T value) -> group_digits_view { return {value}; @@ -4221,45 +4101,51 @@ template struct formatter> : formatter { } template - auto format(group_digits_view t, FormatContext& ctx) + auto format(group_digits_view t, FormatContext& ctx) const -> decltype(ctx.out()) { - detail::handle_dynamic_spec(specs_.width, - specs_.width_ref, ctx); + auto specs = specs_; + detail::handle_dynamic_spec(specs.width, + specs.width_ref, ctx); detail::handle_dynamic_spec( - specs_.precision, specs_.precision_ref, ctx); + specs.precision, specs.precision_ref, ctx); + auto arg = detail::make_write_int_arg(t.value, specs.sign); return detail::write_int( - ctx.out(), static_cast>(t.value), 0, specs_, - detail::digit_grouping("\3", ",")); + ctx.out(), static_cast>(arg.abs_value), + arg.prefix, specs, detail::digit_grouping("\3", ",")); } }; -template struct nested_view { - const formatter* fmt; +template struct nested_view { + const formatter* fmt; const T* value; }; -template struct formatter> { - FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> const char* { +template +struct formatter, Char> { + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { return ctx.begin(); } - auto format(nested_view view, format_context& ctx) const + template + auto format(nested_view view, FormatContext& ctx) const -> decltype(ctx.out()) { return view.fmt->format(*view.value, ctx); } }; -template struct nested_formatter { +template struct nested_formatter { private: int width_; - detail::fill_t fill_; + detail::fill_t fill_; align_t align_ : 4; - formatter formatter_; + formatter formatter_; public: constexpr nested_formatter() : width_(0), align_(align_t::none) {} - FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> const char* { - auto specs = detail::dynamic_format_specs(); + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto specs = detail::dynamic_format_specs(); auto it = parse_format_specs(ctx.begin(), ctx.end(), specs, ctx, detail::type::none_type); width_ = specs.width; @@ -4269,33 +4155,30 @@ template struct nested_formatter { return formatter_.parse(ctx); } - template - auto write_padded(format_context& ctx, F write) const -> decltype(ctx.out()) { + template + auto write_padded(FormatContext& ctx, F write) const -> decltype(ctx.out()) { if (width_ == 0) return write(ctx.out()); - auto buf = memory_buffer(); - write(std::back_inserter(buf)); - auto specs = format_specs<>(); + auto buf = basic_memory_buffer(); + write(basic_appender(buf)); + auto specs = format_specs(); specs.width = width_; specs.fill = fill_; specs.align = align_; - return detail::write(ctx.out(), string_view(buf.data(), buf.size()), specs); + return detail::write( + ctx.out(), basic_string_view(buf.data(), buf.size()), specs); } - auto nested(const T& value) const -> nested_view { - return nested_view{&formatter_, &value}; + auto nested(const T& value) const -> nested_view { + return nested_view{&formatter_, &value}; } }; /** - \rst - Converts *value* to ``std::string`` using the default format for type *T*. - - **Example**:: - - #include - - std::string answer = fmt::to_string(42); - \endrst + * Converts `value` to `std::string` using the default format for type `T`. + * + * **Example**: + * + * std::string answer = fmt::to_string(42); */ template ::value && !detail::has_format_as::value)> @@ -4336,20 +4219,20 @@ namespace detail { template void vformat_to(buffer& buf, basic_string_view fmt, typename vformat_args::type args, locale_ref loc) { - auto out = buffer_appender(buf); + auto out = basic_appender(buf); if (fmt.size() == 2 && equal2(fmt.data(), "{}")) { auto arg = args.get(0); - if (!arg) throw_format_error("argument not found"); + if (!arg) report_error("argument not found"); arg.visit(default_arg_formatter{out, args, loc}); return; } struct format_handler { basic_format_parse_context parse_context; - buffer_context context; + buffered_context context; - format_handler(buffer_appender p_out, basic_string_view str, - basic_format_args> p_args, + format_handler(basic_appender p_out, basic_string_view str, + basic_format_args> p_args, locale_ref p_loc) : parse_context(str), context(p_out, p_args, p_loc) {} @@ -4362,11 +4245,13 @@ void vformat_to(buffer& buf, basic_string_view fmt, return parse_context.next_arg_id(); } FMT_CONSTEXPR auto on_arg_id(int id) -> int { - return parse_context.check_arg_id(id), id; + parse_context.check_arg_id(id); + return id; } FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { + parse_context.check_arg_id(id); int arg_id = context.arg_id(id); - if (arg_id < 0) throw_format_error("argument not found"); + if (arg_id < 0) report_error("argument not found"); return arg_id; } @@ -4389,13 +4274,13 @@ void vformat_to(buffer& buf, basic_string_view fmt, detail::handle_dynamic_spec( specs.precision, specs.precision_ref, context); if (begin == end || *begin != '}') - throw_format_error("missing '}' in format string"); + report_error("missing '}' in format string"); context.advance_to(arg.visit( arg_formatter{context.out(), specs, context.locale()})); return begin; } - void on_error(const char* message) { throw_format_error(message); } + FMT_NORETURN void on_error(const char* message) { report_error(message); } }; detail::parse_format_string(fmt, format_handler(out, fmt, args, loc)); } @@ -4414,19 +4299,41 @@ extern template FMT_API auto decimal_point_impl(locale_ref) -> char; extern template FMT_API auto decimal_point_impl(locale_ref) -> wchar_t; #endif // FMT_HEADER_ONLY +FMT_END_EXPORT + +template +template +FMT_CONSTEXPR FMT_INLINE auto native_formatter::format( + const T& val, FormatContext& ctx) const -> decltype(ctx.out()) { + if (specs_.width_ref.kind == arg_id_kind::none && + specs_.precision_ref.kind == arg_id_kind::none) { + return write(ctx.out(), val, specs_, ctx.locale()); + } + auto specs = specs_; + handle_dynamic_spec(specs.width, specs.width_ref, ctx); + handle_dynamic_spec(specs.precision, specs.precision_ref, + ctx); + return write(ctx.out(), val, specs, ctx.locale()); +} + } // namespace detail +FMT_BEGIN_EXPORT + +template +struct formatter + : detail::native_formatter {}; + #if FMT_USE_USER_DEFINED_LITERALS inline namespace literals { /** - \rst - User-defined literal equivalent of :func:`fmt::arg`. - - **Example**:: - - using namespace fmt::literals; - fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23); - \endrst + * User-defined literal equivalent of `fmt::arg`. + * + * **Example**: + * + * using namespace fmt::literals; + * fmt::print("The answer is {answer}.", "answer"_a=42); */ # if FMT_USE_NONTYPE_TEMPLATE_ARGS template constexpr auto operator""_a() { @@ -4441,6 +4348,23 @@ constexpr auto operator""_a(const char* s, size_t) -> detail::udl_arg { } // namespace literals #endif // FMT_USE_USER_DEFINED_LITERALS +FMT_API auto vformat(string_view fmt, format_args args) -> std::string; + +/** + * Formats `args` according to specifications in `fmt` and returns the result + * as a string. + * + * **Example**: + * + * #include + * std::string message = fmt::format("The answer is {}.", 42); + */ +template +FMT_NODISCARD FMT_INLINE auto format(format_string fmt, T&&... args) + -> std::string { + return vformat(fmt, fmt::make_format_args(args...)); +} + template ::value)> inline auto vformat(const Locale& loc, string_view fmt, format_args args) -> std::string { @@ -4486,26 +4410,6 @@ FMT_NODISCARD FMT_INLINE auto formatted_size(const Locale& loc, FMT_END_EXPORT -template -template -FMT_CONSTEXPR FMT_INLINE auto -formatter::value != - detail::type::custom_type>>::format(const T& val, - FormatContext& ctx) - const -> decltype(ctx.out()) { - if (specs_.width_ref.kind == detail::arg_id_kind::none && - specs_.precision_ref.kind == detail::arg_id_kind::none) { - return detail::write(ctx.out(), val, specs_, ctx.locale()); - } - auto specs = specs_; - detail::handle_dynamic_spec(specs.width, - specs.width_ref, ctx); - detail::handle_dynamic_spec( - specs.precision, specs.precision_ref, ctx); - return detail::write(ctx.out(), val, specs, ctx.locale()); -} - FMT_END_NAMESPACE #ifdef FMT_HEADER_ONLY @@ -4515,4 +4419,9 @@ FMT_END_NAMESPACE # define FMT_FUNC #endif +// Restore _LIBCPP_REMOVE_TRANSITIVE_INCLUDES. +#ifdef FMT_REMOVE_TRANSITIVE_INCLUDES +# undef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES +#endif + #endif // FMT_FORMAT_H_ diff --git a/src/fmt/os.h b/src/fmt/os.h index 6009ccc112..5c85ea08ff 100644 --- a/src/fmt/os.h +++ b/src/fmt/os.h @@ -8,18 +8,18 @@ #ifndef FMT_OS_H_ #define FMT_OS_H_ -#include -#include -#include -#include // std::system_error - #include "format.h" -#if defined __APPLE__ || defined(__FreeBSD__) +#ifndef FMT_MODULE +# include +# include +# include +# include // std::system_error + # if FMT_HAS_INCLUDE() -# include // for LC_NUMERIC_MASK on OS X +# include // LC_NUMERIC_MASK on macOS # endif -#endif +#endif // FMT_MODULE #ifndef FMT_USE_FCNTL // UWP doesn't provide _pipe. @@ -77,46 +77,33 @@ FMT_BEGIN_NAMESPACE FMT_BEGIN_EXPORT /** - \rst - A reference to a null-terminated string. It can be constructed from a C - string or ``std::string``. - - You can use one of the following type aliases for common character types: - - +---------------+-----------------------------+ - | Type | Definition | - +===============+=============================+ - | cstring_view | basic_cstring_view | - +---------------+-----------------------------+ - | wcstring_view | basic_cstring_view | - +---------------+-----------------------------+ - - This class is most useful as a parameter type to allow passing - different types of strings to a function, for example:: - - template - std::string format(cstring_view format_str, const Args & ... args); - - format("{}", 42); - format(std::string("{}"), 42); - \endrst + * A reference to a null-terminated string. It can be constructed from a C + * string or `std::string`. + * + * You can use one of the following type aliases for common character types: + * + * +---------------+-----------------------------+ + * | Type | Definition | + * +===============+=============================+ + * | cstring_view | basic_cstring_view | + * +---------------+-----------------------------+ + * | wcstring_view | basic_cstring_view | + * +---------------+-----------------------------+ + * + * This class is most useful as a parameter type for functions that wrap C APIs. */ template class basic_cstring_view { private: const Char* data_; public: - /** Constructs a string reference object from a C string. */ + /// Constructs a string reference object from a C string. basic_cstring_view(const Char* s) : data_(s) {} - /** - \rst - Constructs a string reference from an ``std::string`` object. - \endrst - */ + /// Constructs a string reference from an `std::string` object. basic_cstring_view(const std::basic_string& s) : data_(s.c_str()) {} - /** Returns the pointer to a C string. */ + /// Returns the pointer to a C string. auto c_str() const -> const Char* { return data_; } }; @@ -135,33 +122,30 @@ FMT_API std::system_error vwindows_error(int error_code, string_view format_str, format_args args); /** - \rst - Constructs a :class:`std::system_error` object with the description - of the form - - .. parsed-literal:: - **: ** - - where ** is the formatted message and ** is the - system message corresponding to the error code. - *error_code* is a Windows error code as given by ``GetLastError``. - If *error_code* is not a valid error code such as -1, the system message - will look like "error -1". - - **Example**:: - - // This throws a system_error with the description - // cannot open file 'madeup': The system cannot find the file specified. - // or similar (system message may vary). - const char *filename = "madeup"; - LPOFSTRUCT of = LPOFSTRUCT(); - HFILE file = OpenFile(filename, &of, OF_READ); - if (file == HFILE_ERROR) { - throw fmt::windows_error(GetLastError(), - "cannot open file '{}'", filename); - } - \endrst -*/ + * Constructs a `std::system_error` object with the description of the form + * + * : + * + * where `` is the formatted message and `` is the + * system message corresponding to the error code. + * `error_code` is a Windows error code as given by `GetLastError`. + * If `error_code` is not a valid error code such as -1, the system message + * will look like "error -1". + * + * **Example**: + * + * // This throws a system_error with the description + * // cannot open file 'madeup': The system cannot find the file + * specified. + * // or similar (system message may vary). + * const char *filename = "madeup"; + * LPOFSTRUCT of = LPOFSTRUCT(); + * HFILE file = OpenFile(filename, &of, OF_READ); + * if (file == HFILE_ERROR) { + * throw fmt::windows_error(GetLastError(), + * "cannot open file '{}'", filename); + * } + */ template std::system_error windows_error(int error_code, string_view message, const Args&... args) { @@ -227,13 +211,11 @@ class buffered_file { FMT_API auto descriptor() const -> int; - void vprint(string_view format_str, format_args args) { - fmt::vprint(file_, format_str, args); - } - - template - inline void print(string_view format_str, const Args&... args) { - vprint(format_str, fmt::make_format_args(args...)); + template + inline void print(string_view fmt, const T&... args) { + const auto& vargs = fmt::make_format_args(args...); + detail::is_locking() ? fmt::vprint_buffered(file_, fmt, vargs) + : fmt::vprint(file_, fmt, vargs); } }; @@ -384,7 +366,7 @@ class file_buffer final : public buffer { public: FMT_API file_buffer(cstring_view path, const ostream_params& params); - FMT_API file_buffer(file_buffer&& other); + FMT_API file_buffer(file_buffer&& other) noexcept; FMT_API ~file_buffer(); void flush() { @@ -401,11 +383,10 @@ class file_buffer final : public buffer { } // namespace detail -// Added {} below to work around default constructor error known to -// occur in Xcode versions 7.2.1 and 8.2.1. -constexpr detail::buffer_size buffer_size{}; +constexpr auto buffer_size = detail::buffer_size(); -/** A fast output stream which is not thread-safe. */ +/// A fast output stream for writing from a single thread. Writing from +/// multiple threads without external synchronization may result in a data race. class FMT_API ostream { private: FMT_MSC_WARNING(suppress : 4251) @@ -426,30 +407,25 @@ class FMT_API ostream { void close() { buffer_.close(); } - /** - Formats ``args`` according to specifications in ``fmt`` and writes the - output to the file. - */ + /// Formats `args` according to specifications in `fmt` and writes the + /// output to the file. template void print(format_string fmt, T&&... args) { - vformat_to(std::back_inserter(buffer_), fmt, - fmt::make_format_args(args...)); + vformat_to(appender(buffer_), fmt, fmt::make_format_args(args...)); } }; /** - \rst - Opens a file for writing. Supported parameters passed in *params*: - - * ````: Flags passed to `open - `_ - (``file::WRONLY | file::CREATE | file::TRUNC`` by default) - * ``buffer_size=``: Output buffer size - - **Example**:: - - auto out = fmt::output_file("guide.txt"); - out.print("Don't {}", "Panic"); - \endrst + * Opens a file for writing. Supported parameters passed in `params`: + * + * - ``: Flags passed to [open]( + * https://pubs.opengroup.org/onlinepubs/007904875/functions/open.html) + * (`file::WRONLY | file::CREATE | file::TRUNC` by default) + * - `buffer_size=`: Output buffer size + * + * **Example**: + * + * auto out = fmt::output_file("guide.txt"); + * out.print("Don't {}", "Panic"); */ template inline auto output_file(cstring_view path, T... params) -> ostream { diff --git a/src/fmt/ostream.h b/src/fmt/ostream.h index 26fb3b5ac0..98faef659f 100644 --- a/src/fmt/ostream.h +++ b/src/fmt/ostream.h @@ -8,7 +8,9 @@ #ifndef FMT_OSTREAM_H_ #define FMT_OSTREAM_H_ -#include // std::filebuf +#ifndef FMT_MODULE +# include // std::filebuf +#endif #ifdef _WIN32 # ifdef __GLIBCXX__ @@ -18,42 +20,11 @@ # include #endif -#include "format.h" +#include "chrono.h" // formatbuf FMT_BEGIN_NAMESPACE namespace detail { -template class formatbuf : public Streambuf { - private: - using char_type = typename Streambuf::char_type; - using streamsize = decltype(std::declval().sputn(nullptr, 0)); - using int_type = typename Streambuf::int_type; - using traits_type = typename Streambuf::traits_type; - - buffer& buffer_; - - public: - explicit formatbuf(buffer& buf) : buffer_(buf) {} - - protected: - // The put area is always empty. This makes the implementation simpler and has - // the advantage that the streambuf and the buffer are always in sync and - // sputc never writes into uninitialized memory. A disadvantage is that each - // call to sputc always results in a (virtual) call to overflow. There is no - // disadvantage here for sputn since this always results in a call to xsputn. - - auto overflow(int_type ch) -> int_type override { - if (!traits_type::eq_int_type(ch, traits_type::eof())) - buffer_.push_back(static_cast(ch)); - return ch; - } - - auto xsputn(const char_type* s, streamsize count) -> streamsize override { - buffer_.append(s, s + count); - return count; - } -}; - // Generate a unique explicit instantion in every translation unit using a tag // type in an anonymous namespace. namespace { @@ -73,12 +44,12 @@ auto get_file(std::filebuf&) -> FILE*; inline auto write_ostream_unicode(std::ostream& os, fmt::string_view data) -> bool { FILE* f = nullptr; -#if FMT_MSC_VERSION +#if FMT_MSC_VERSION && FMT_USE_RTTI if (auto* buf = dynamic_cast(os.rdbuf())) f = get_file(*buf); else return false; -#elif defined(_WIN32) && defined(__GLIBCXX__) +#elif defined(_WIN32) && defined(__GLIBCXX__) && FMT_USE_RTTI auto* rdbuf = os.rdbuf(); if (auto* sfbuf = dynamic_cast<__gnu_cxx::stdio_sync_filebuf*>(rdbuf)) f = sfbuf->file(); @@ -143,9 +114,8 @@ template struct basic_ostream_formatter : formatter, Char> { void set_debug_format() = delete; - template - auto format(const T& value, basic_format_context& ctx) const - -> OutputIt { + template + auto format(const T& value, Context& ctx) const -> decltype(ctx.out()) { auto buffer = basic_memory_buffer(); detail::format_value(buffer, value); return formatter, Char>::format( @@ -158,22 +128,20 @@ using ostream_formatter = basic_ostream_formatter; template struct formatter, Char> : basic_ostream_formatter { - template - auto format(detail::streamed_view view, - basic_format_context& ctx) const -> OutputIt { + template + auto format(detail::streamed_view view, Context& ctx) const + -> decltype(ctx.out()) { return basic_ostream_formatter::format(view.value, ctx); } }; /** - \rst - Returns a view that formats `value` via an ostream ``operator<<``. - - **Example**:: - - fmt::print("Current thread id: {}\n", - fmt::streamed(std::this_thread::get_id())); - \endrst + * Returns a view that formats `value` via an ostream `operator<<`. + * + * **Example**: + * + * fmt::print("Current thread id: {}\n", + * fmt::streamed(std::this_thread::get_id())); */ template constexpr auto streamed(const T& value) -> detail::streamed_view { @@ -194,7 +162,7 @@ inline void vprint_directly(std::ostream& os, string_view format_str, FMT_EXPORT template void vprint(std::basic_ostream& os, basic_string_view> format_str, - basic_format_args>> args) { + typename detail::vformat_args::type args) { auto buffer = basic_memory_buffer(); detail::vformat_to(buffer, format_str, args); if (detail::write_ostream_unicode(os, {buffer.data(), buffer.size()})) return; @@ -202,18 +170,16 @@ void vprint(std::basic_ostream& os, } /** - \rst - Prints formatted data to the stream *os*. - - **Example**:: - - fmt::print(cerr, "Don't {}!", "panic"); - \endrst + * Prints formatted data to the stream `os`. + * + * **Example**: + * + * fmt::print(cerr, "Don't {}!", "panic"); */ FMT_EXPORT template void print(std::ostream& os, format_string fmt, T&&... args) { const auto& vargs = fmt::make_format_args(args...); - if (detail::is_utf8()) + if (detail::use_utf8()) vprint(os, fmt, vargs); else detail::vprint_directly(os, fmt, vargs); @@ -224,7 +190,7 @@ template void print(std::wostream& os, basic_format_string...> fmt, Args&&... args) { - vprint(os, fmt, fmt::make_format_args>(args...)); + vprint(os, fmt, fmt::make_format_args>(args...)); } FMT_EXPORT template diff --git a/src/fmt/printf.h b/src/fmt/printf.h index 35445abce2..072cc6b309 100644 --- a/src/fmt/printf.h +++ b/src/fmt/printf.h @@ -8,8 +8,10 @@ #ifndef FMT_PRINTF_H_ #define FMT_PRINTF_H_ -#include // std::max -#include // std::numeric_limits +#ifndef FMT_MODULE +# include // std::max +# include // std::numeric_limits +#endif #include "format.h" @@ -22,7 +24,7 @@ template struct printf_formatter { template class basic_printf_context { private: - detail::buffer_appender out_; + basic_appender out_; basic_format_args args_; static_assert(std::is_same::value || @@ -34,26 +36,20 @@ template class basic_printf_context { using parse_context_type = basic_format_parse_context; template using formatter_type = printf_formatter; - /** - \rst - Constructs a ``printf_context`` object. References to the arguments are - stored in the context object so make sure they have appropriate lifetimes. - \endrst - */ - basic_printf_context(detail::buffer_appender out, + /// Constructs a `printf_context` object. References to the arguments are + /// stored in the context object so make sure they have appropriate lifetimes. + basic_printf_context(basic_appender out, basic_format_args args) : out_(out), args_(args) {} - auto out() -> detail::buffer_appender { return out_; } - void advance_to(detail::buffer_appender) {} + auto out() -> basic_appender { return out_; } + void advance_to(basic_appender) {} auto locale() -> detail::locale_ref { return {}; } auto arg(int id) const -> basic_format_arg { return args_.get(id); } - - void on_error(const char* message) { throw_format_error(message); } }; namespace detail { @@ -62,7 +58,7 @@ namespace detail { // signed and unsigned integers. template struct int_checker { template static auto fits_in_int(T value) -> bool { - unsigned max = max_value(); + unsigned max = to_unsigned(max_value()); return value <= max; } static auto fits_in_int(bool) -> bool { return true; } @@ -80,13 +76,13 @@ struct printf_precision_handler { template ::value)> auto operator()(T value) -> int { if (!int_checker::is_signed>::fits_in_int(value)) - throw_format_error("number is too big"); + report_error("number is too big"); return (std::max)(static_cast(value), 0); } template ::value)> auto operator()(T) -> int { - throw_format_error("precision is not integer"); + report_error("precision is not integer"); return 0; } }; @@ -193,12 +189,12 @@ template struct get_cstring { // Checks if an argument is a valid printf width specifier and sets // left alignment if it is negative. -template class printf_width_handler { +class printf_width_handler { private: - format_specs& specs_; + format_specs& specs_; public: - explicit printf_width_handler(format_specs& specs) : specs_(specs) {} + explicit printf_width_handler(format_specs& specs) : specs_(specs) {} template ::value)> auto operator()(T value) -> unsigned { @@ -207,14 +203,14 @@ template class printf_width_handler { specs_.align = align::left; width = 0 - width; } - unsigned int_max = max_value(); - if (width > int_max) throw_format_error("number is too big"); + unsigned int_max = to_unsigned(max_value()); + if (width > int_max) report_error("number is too big"); return static_cast(width); } template ::value)> auto operator()(T) -> unsigned { - throw_format_error("width is not integer"); + report_error("width is not integer"); return 0; } }; @@ -222,12 +218,12 @@ template class printf_width_handler { // Workaround for a bug with the XL compiler when initializing // printf_arg_formatter's base class. template -auto make_arg_formatter(buffer_appender iter, format_specs& s) +auto make_arg_formatter(basic_appender iter, format_specs& s) -> arg_formatter { return {iter, s, locale_ref()}; } -// The ``printf`` argument formatter. +// The `printf` argument formatter. template class printf_arg_formatter : public arg_formatter { private: @@ -239,11 +235,11 @@ class printf_arg_formatter : public arg_formatter { void write_null_pointer(bool is_string = false) { auto s = this->specs; s.type = presentation_type::none; - write_bytes(this->out, is_string ? "(null)" : "(nil)", s); + write_bytes(this->out, is_string ? "(null)" : "(nil)", s); } public: - printf_arg_formatter(buffer_appender iter, format_specs& s, + printf_arg_formatter(basic_appender iter, format_specs& s, context_type& ctx) : base(make_arg_formatter(iter, s)), context_(ctx) {} @@ -257,19 +253,18 @@ class printf_arg_formatter : public arg_formatter { base::operator()(value); return; } - format_specs fmt_specs = this->specs; - if (fmt_specs.type != presentation_type::none && - fmt_specs.type != presentation_type::chr) { + format_specs s = this->specs; + if (s.type != presentation_type::none && s.type != presentation_type::chr) { return (*this)(static_cast(value)); } - fmt_specs.sign = sign::none; - fmt_specs.alt = false; - fmt_specs.fill[0] = ' '; // Ignore '0' flag for char types. + s.sign = sign::none; + s.alt = false; + s.fill = ' '; // Ignore '0' flag for char types. // align::numeric needs to be overwritten here since the '0' flag is // ignored for non-numeric types - if (fmt_specs.align == align::none || fmt_specs.align == align::numeric) - fmt_specs.align = align::right; - write(this->out, static_cast(value), fmt_specs); + if (s.align == align::none || s.align == align::numeric) + s.align = align::right; + write(this->out, static_cast(value), s); } template ::value)> @@ -277,7 +272,6 @@ class printf_arg_formatter : public arg_formatter { base::operator()(value); } - /** Formats a null-terminated C string. */ void operator()(const char* value) { if (value) base::operator()(value); @@ -285,7 +279,6 @@ class printf_arg_formatter : public arg_formatter { write_null_pointer(this->specs.type != presentation_type::pointer); } - /** Formats a null-terminated wide C string. */ void operator()(const wchar_t* value) { if (value) base::operator()(value); @@ -295,7 +288,6 @@ class printf_arg_formatter : public arg_formatter { void operator()(basic_string_view value) { base::operator()(value); } - /** Formats a pointer. */ void operator()(const void* value) { if (value) base::operator()(value); @@ -303,7 +295,6 @@ class printf_arg_formatter : public arg_formatter { write_null_pointer(); } - /** Formats an argument of a custom (user-defined) type. */ void operator()(typename basic_format_arg::handle handle) { auto parse_ctx = basic_format_parse_context({}); handle.format(parse_ctx, context_); @@ -311,7 +302,7 @@ class printf_arg_formatter : public arg_formatter { }; template -void parse_flags(format_specs& specs, const Char*& it, const Char* end) { +void parse_flags(format_specs& specs, const Char*& it, const Char* end) { for (; it != end; ++it) { switch (*it) { case '-': @@ -321,7 +312,7 @@ void parse_flags(format_specs& specs, const Char*& it, const Char* end) { specs.sign = sign::plus; break; case '0': - specs.fill[0] = '0'; + specs.fill = '0'; break; case ' ': if (specs.sign != sign::plus) specs.sign = sign::space; @@ -336,7 +327,7 @@ void parse_flags(format_specs& specs, const Char*& it, const Char* end) { } template -auto parse_header(const Char*& it, const Char* end, format_specs& specs, +auto parse_header(const Char*& it, const Char* end, format_specs& specs, GetArg get_arg) -> int { int arg_index = -1; Char c = *it; @@ -348,11 +339,11 @@ auto parse_header(const Char*& it, const Char* end, format_specs& specs, ++it; arg_index = value != -1 ? value : max_value(); } else { - if (c == '0') specs.fill[0] = '0'; + if (c == '0') specs.fill = '0'; if (value != 0) { // Nonzero value means that we parsed width and don't need to // parse it or flags again, so return now. - if (value == -1) throw_format_error("number is too big"); + if (value == -1) report_error("number is too big"); specs.width = value; return arg_index; } @@ -363,17 +354,17 @@ auto parse_header(const Char*& it, const Char* end, format_specs& specs, if (it != end) { if (*it >= '0' && *it <= '9') { specs.width = parse_nonnegative_int(it, end, -1); - if (specs.width == -1) throw_format_error("number is too big"); + if (specs.width == -1) report_error("number is too big"); } else if (*it == '*') { ++it; specs.width = static_cast( - get_arg(-1).visit(detail::printf_width_handler(specs))); + get_arg(-1).visit(detail::printf_width_handler(specs))); } } return arg_index; } -inline auto parse_printf_presentation_type(char c, type t) +inline auto parse_printf_presentation_type(char c, type t, bool& upper) -> presentation_type { using pt = presentation_type; constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; @@ -382,26 +373,31 @@ inline auto parse_printf_presentation_type(char c, type t) return in(t, integral_set) ? pt::dec : pt::none; case 'o': return in(t, integral_set) ? pt::oct : pt::none; - case 'x': - return in(t, integral_set) ? pt::hex_lower : pt::none; case 'X': - return in(t, integral_set) ? pt::hex_upper : pt::none; - case 'a': - return in(t, float_set) ? pt::hexfloat_lower : pt::none; - case 'A': - return in(t, float_set) ? pt::hexfloat_upper : pt::none; - case 'e': - return in(t, float_set) ? pt::exp_lower : pt::none; + upper = true; + FMT_FALLTHROUGH; + case 'x': + return in(t, integral_set) ? pt::hex : pt::none; case 'E': - return in(t, float_set) ? pt::exp_upper : pt::none; - case 'f': - return in(t, float_set) ? pt::fixed_lower : pt::none; + upper = true; + FMT_FALLTHROUGH; + case 'e': + return in(t, float_set) ? pt::exp : pt::none; case 'F': - return in(t, float_set) ? pt::fixed_upper : pt::none; - case 'g': - return in(t, float_set) ? pt::general_lower : pt::none; + upper = true; + FMT_FALLTHROUGH; + case 'f': + return in(t, float_set) ? pt::fixed : pt::none; case 'G': - return in(t, float_set) ? pt::general_upper : pt::none; + upper = true; + FMT_FALLTHROUGH; + case 'g': + return in(t, float_set) ? pt::general : pt::none; + case 'A': + upper = true; + FMT_FALLTHROUGH; + case 'a': + return in(t, float_set) ? pt::hexfloat : pt::none; case 'c': return in(t, integral_set) ? pt::chr : pt::none; case 's': @@ -416,7 +412,7 @@ inline auto parse_printf_presentation_type(char c, type t) template void vprintf(buffer& buf, basic_string_view format, basic_format_args args) { - using iterator = buffer_appender; + using iterator = basic_appender; auto out = iterator(buf); auto context = basic_printf_context(out, args); auto parse_ctx = basic_format_parse_context(format); @@ -447,12 +443,12 @@ void vprintf(buffer& buf, basic_string_view format, } write(out, basic_string_view(start, to_unsigned(it - 1 - start))); - auto specs = format_specs(); + auto specs = format_specs(); specs.align = align::right; // Parse argument index, flags and width. int arg_index = parse_header(it, end, specs, get_arg); - if (arg_index == 0) throw_format_error("argument not found"); + if (arg_index == 0) report_error("argument not found"); // Parse precision. if (it != end && *it == '.') { @@ -474,7 +470,7 @@ void vprintf(buffer& buf, basic_string_view format, // specified, the '0' flag is ignored if (specs.precision >= 0 && arg.is_integral()) { // Ignore '0' for non-numeric types or if '-' present. - specs.fill[0] = ' '; + specs.fill = ' '; } if (specs.precision >= 0 && arg.type() == type::cstring_type) { auto str = arg.visit(get_cstring()); @@ -485,12 +481,12 @@ void vprintf(buffer& buf, basic_string_view format, arg = make_arg>(sv); } if (specs.alt && arg.visit(is_zero_int())) specs.alt = false; - if (specs.fill[0] == '0') { + if (specs.fill.template get() == '0') { if (arg.is_arithmetic() && specs.align != align::left) specs.align = align::numeric; else - specs.fill[0] = ' '; // Ignore '0' flag for non-numeric types or if '-' - // flag is also present. + specs.fill = ' '; // Ignore '0' flag for non-numeric types or if '-' + // flag is also present. } // Parse length and convert the argument to the required type. @@ -534,7 +530,7 @@ void vprintf(buffer& buf, basic_string_view format, } // Parse type. - if (it == end) throw_format_error("invalid format string"); + if (it == end) report_error("invalid format string"); char type = static_cast(*it++); if (arg.is_integral()) { // Normalize type. @@ -548,9 +544,11 @@ void vprintf(buffer& buf, basic_string_view format, break; } } - specs.type = parse_printf_presentation_type(type, arg.type()); + bool upper = false; + specs.type = parse_printf_presentation_type(type, arg.type(), upper); if (specs.type == presentation_type::none) - throw_format_error("invalid format specifier"); + report_error("invalid format specifier"); + specs.upper = upper; start = it; @@ -567,29 +565,21 @@ using wprintf_context = basic_printf_context; using printf_args = basic_format_args; using wprintf_args = basic_format_args; -/** - \rst - Constructs an `~fmt::format_arg_store` object that contains references to - arguments and can be implicitly converted to `~fmt::printf_args`. - \endrst - */ -template -inline auto make_printf_args(const T&... args) - -> format_arg_store { - return {args...}; +/// Constructs an `format_arg_store` object that contains references to +/// arguments and can be implicitly converted to `printf_args`. +template +inline auto make_printf_args(T&... args) + -> decltype(fmt::make_format_args>(args...)) { + return fmt::make_format_args>(args...); } -// DEPRECATED! -template -inline auto make_wprintf_args(const T&... args) - -> format_arg_store { - return {args...}; -} +template struct vprintf_args { + using type = basic_format_args>; +}; template -inline auto vsprintf( - basic_string_view fmt, - basic_format_args>> args) +inline auto vsprintf(basic_string_view fmt, + typename vprintf_args::type args) -> std::basic_string { auto buf = basic_memory_buffer(); detail::vprintf(buf, fmt, args); @@ -597,26 +587,22 @@ inline auto vsprintf( } /** - \rst - Formats arguments and returns the result as a string. - - **Example**:: - - std::string message = fmt::sprintf("The answer is %d", 42); - \endrst -*/ -template ::value, char_t>> + * Formats `args` according to specifications in `fmt` and returns the result + * as as string. + * + * **Example**: + * + * std::string message = fmt::sprintf("The answer is %d", 42); + */ +template > inline auto sprintf(const S& fmt, const T&... args) -> std::basic_string { return vsprintf(detail::to_string_view(fmt), fmt::make_format_args>(args...)); } template -inline auto vfprintf( - std::FILE* f, basic_string_view fmt, - basic_format_args>> args) - -> int { +inline auto vfprintf(std::FILE* f, basic_string_view fmt, + typename vprintf_args::type args) -> int { auto buf = basic_memory_buffer(); detail::vprintf(buf, fmt, args); size_t size = buf.size(); @@ -626,36 +612,33 @@ inline auto vfprintf( } /** - \rst - Prints formatted data to the file *f*. - - **Example**:: - - fmt::fprintf(stderr, "Don't %s!", "panic"); - \endrst + * Formats `args` according to specifications in `fmt` and writes the output + * to `f`. + * + * **Example**: + * + * fmt::fprintf(stderr, "Don't %s!", "panic"); */ template > inline auto fprintf(std::FILE* f, const S& fmt, const T&... args) -> int { return vfprintf(f, detail::to_string_view(fmt), - fmt::make_format_args>(args...)); + make_printf_args(args...)); } template -FMT_DEPRECATED inline auto vprintf( - basic_string_view fmt, - basic_format_args>> args) +FMT_DEPRECATED inline auto vprintf(basic_string_view fmt, + typename vprintf_args::type args) -> int { return vfprintf(stdout, fmt, args); } /** - \rst - Prints formatted data to ``stdout``. - - **Example**:: - - fmt::printf("Elapsed time: %.2f seconds", 1.23); - \endrst + * Formats `args` according to specifications in `fmt` and writes the output + * to `stdout`. + * + * **Example**: + * + * fmt::printf("Elapsed time: %.2f seconds", 1.23); */ template inline auto printf(string_view fmt, const T&... args) -> int { @@ -664,7 +647,7 @@ inline auto printf(string_view fmt, const T&... args) -> int { template FMT_DEPRECATED inline auto printf(basic_string_view fmt, const T&... args) -> int { - return vfprintf(stdout, fmt, make_wprintf_args(args...)); + return vfprintf(stdout, fmt, make_printf_args(args...)); } FMT_END_EXPORT diff --git a/src/fmt/ranges.h b/src/fmt/ranges.h index a9cd60e594..0d3dfbd8d3 100644 --- a/src/fmt/ranges.h +++ b/src/fmt/ranges.h @@ -8,67 +8,31 @@ #ifndef FMT_RANGES_H_ #define FMT_RANGES_H_ -#include -#include -#include +#ifndef FMT_MODULE +# include +# include +# include +# include +# include +# include +#endif #include "format.h" FMT_BEGIN_NAMESPACE +FMT_EXPORT +enum class range_format { disabled, map, set, sequence, string, debug_string }; + namespace detail { -template -auto copy(const Range& range, OutputIt out) -> OutputIt { - for (auto it = range.begin(), end = range.end(); it != end; ++it) - *out++ = *it; - return out; -} - -template -auto copy(const char* str, OutputIt out) -> OutputIt { - while (*str) *out++ = *str++; - return out; -} - -template auto copy(char ch, OutputIt out) -> OutputIt { - *out++ = ch; - return out; -} - -template auto copy(wchar_t ch, OutputIt out) -> OutputIt { - *out++ = ch; - return out; -} - -// Returns true if T has a std::string-like interface, like std::string_view. -template class is_std_string_like { - template - static auto check(U* p) - -> decltype((void)p->find('a'), p->length(), (void)p->data(), int()); - template static void check(...); - - public: - static constexpr const bool value = - is_string::value || - std::is_convertible>::value || - !std::is_void(nullptr))>::value; -}; - -template -struct is_std_string_like> : std::true_type {}; - template class is_map { template static auto check(U*) -> typename U::mapped_type; template static void check(...); public: -#ifdef FMT_FORMAT_MAP_AS_LIST // DEPRECATED! - static constexpr const bool value = false; -#else static constexpr const bool value = !std::is_void(nullptr))>::value; -#endif }; template class is_set { @@ -76,12 +40,8 @@ template class is_set { template static void check(...); public: -#ifdef FMT_FORMAT_SET_AS_LIST // DEPRECATED! - static constexpr const bool value = false; -#else static constexpr const bool value = !std::is_void(nullptr))>::value && !is_map::value; -#endif }; template struct conditional_helper {}; @@ -110,17 +70,17 @@ template struct has_member_fn_begin_end_t : std::false_type {}; template -struct has_member_fn_begin_end_t().begin()), +struct has_member_fn_begin_end_t().begin()), decltype(std::declval().end())>> : std::true_type {}; -// Member function overload +// Member function overloads. template auto range_begin(T&& rng) FMT_DECLTYPE_RETURN(static_cast(rng).begin()); template auto range_end(T&& rng) FMT_DECLTYPE_RETURN(static_cast(rng).end()); -// ADL overload. Only participates in overload resolution if member functions +// ADL overloads. Only participate in overload resolution if member functions // are not found. template auto range_begin(T&& rng) @@ -141,16 +101,16 @@ struct has_mutable_begin_end : std::false_type {}; template struct has_const_begin_end< - T, - void_t< - decltype(detail::range_begin(std::declval&>())), - decltype(detail::range_end(std::declval&>()))>> + T, void_t&>())), + decltype(detail::range_end( + std::declval&>()))>> : std::true_type {}; template struct has_mutable_begin_end< - T, void_t())), - decltype(detail::range_end(std::declval())), + T, void_t())), + decltype(detail::range_end(std::declval())), // the extra int here is because older versions of MSVC don't // SFINAE properly unless there are distinct types int>> : std::true_type {}; @@ -206,12 +166,13 @@ class is_tuple_formattable_ { static constexpr const bool value = false; }; template class is_tuple_formattable_ { - template - static auto check2(index_sequence, - integer_sequence) -> std::true_type; - static auto check2(...) -> std::false_type; - template - static auto check(index_sequence) -> decltype(check2( + template + static auto all_true(index_sequence, + integer_sequence= 0)...>) -> std::true_type; + static auto all_true(...) -> std::false_type; + + template + static auto check(index_sequence) -> decltype(all_true( index_sequence{}, integer_sequence::type, @@ -292,6 +253,18 @@ FMT_CONSTEXPR auto maybe_set_debug_format(Formatter& f, bool set) template FMT_CONSTEXPR void maybe_set_debug_format(Formatter&, ...) {} +template +struct range_format_kind_ + : std::integral_constant, T>::value + ? range_format::disabled + : is_map::value ? range_format::map + : is_set::value ? range_format::set + : range_format::sequence> {}; + +template +using range_format_constant = std::integral_constant; + // These are not generic lambdas for compatibility with C++11. template struct parse_empty_specs { template FMT_CONSTEXPR void operator()(Formatter& f) { @@ -305,8 +278,7 @@ template struct format_tuple_element { template void operator()(const formatter& f, const T& v) { - if (i > 0) - ctx.advance_to(detail::copy_str(separator, ctx.out())); + if (i > 0) ctx.advance_to(detail::copy(separator, ctx.out())); ctx.advance_to(f.format(v, ctx)); ++i; } @@ -358,8 +330,7 @@ struct formatter FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { auto it = ctx.begin(); - if (it != ctx.end() && *it != '}') - FMT_THROW(format_error("invalid format specifier")); + if (it != ctx.end() && *it != '}') report_error("invalid format specifier"); detail::for_each(formatters_, detail::parse_empty_specs{ctx}); return it; } @@ -367,19 +338,17 @@ struct formatter auto format(const Tuple& value, FormatContext& ctx) const -> decltype(ctx.out()) { - ctx.advance_to(detail::copy_str(opening_bracket_, ctx.out())); + ctx.advance_to(detail::copy(opening_bracket_, ctx.out())); detail::for_each2( formatters_, value, detail::format_tuple_element{0, ctx, separator_}); - return detail::copy_str(closing_bracket_, ctx.out()); + return detail::copy(closing_bracket_, ctx.out()); } }; template struct is_range { static constexpr const bool value = - detail::is_range_::value && !detail::is_std_string_like::value && - !std::is_convertible>::value && - !std::is_convertible>::value; + detail::is_range_::value && !detail::has_to_string_view::value; }; namespace detail { @@ -401,8 +370,8 @@ template struct range_mapper { template using range_formatter_type = - formatter>{}.map( - std::declval()))>, + formatter>{} + .map(std::declval()))>, Char>; template @@ -438,6 +407,24 @@ struct range_formatter< detail::string_literal{}; basic_string_view closing_bracket_ = detail::string_literal{}; + bool is_debug = false; + + template ::value)> + auto write_debug_string(Output& out, It it, Sentinel end) const -> Output { + auto buf = basic_memory_buffer(); + for (; it != end; ++it) buf.push_back(*it); + auto specs = format_specs(); + specs.type = presentation_type::debug; + return detail::write( + out, basic_string_view(buf.data(), buf.size()), specs); + } + + template ::value)> + auto write_debug_string(Output& out, It, Sentinel) const -> Output { + return out; + } public: FMT_CONSTEXPR range_formatter() {} @@ -460,17 +447,37 @@ struct range_formatter< FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { auto it = ctx.begin(); auto end = ctx.end(); + detail::maybe_set_debug_format(underlying_, true); + if (it == end) return underlying_.parse(ctx); - if (it != end && *it == 'n') { + switch (detail::to_ascii(*it)) { + case 'n': set_brackets({}, {}); ++it; + break; + case '?': + is_debug = true; + set_brackets({}, {}); + ++it; + if (it == end || *it != 's') report_error("invalid format specifier"); + FMT_FALLTHROUGH; + case 's': + if (!std::is_same::value) + report_error("invalid format specifier"); + if (!is_debug) { + set_brackets(detail::string_literal{}, + detail::string_literal{}); + set_separator({}); + detail::maybe_set_debug_format(underlying_, false); + } + ++it; + return it; } if (it != end && *it != '}') { - if (*it != ':') FMT_THROW(format_error("invalid format specifier")); + if (*it != ':') report_error("invalid format specifier"); + detail::maybe_set_debug_format(underlying_, false); ++it; - } else { - detail::maybe_set_debug_format(underlying_, true); } ctx.advance_to(it); @@ -479,80 +486,27 @@ struct range_formatter< template auto format(R&& range, FormatContext& ctx) const -> decltype(ctx.out()) { - detail::range_mapper> mapper; + auto mapper = detail::range_mapper>(); auto out = ctx.out(); - out = detail::copy_str(opening_bracket_, out); - int i = 0; auto it = detail::range_begin(range); auto end = detail::range_end(range); + if (is_debug) return write_debug_string(out, std::move(it), end); + + out = detail::copy(opening_bracket_, out); + int i = 0; for (; it != end; ++it) { - if (i > 0) out = detail::copy_str(separator_, out); + if (i > 0) out = detail::copy(separator_, out); ctx.advance_to(out); - auto&& item = *it; + auto&& item = *it; // Need an lvalue out = underlying_.format(mapper.map(item), ctx); ++i; } - out = detail::copy_str(closing_bracket_, out); + out = detail::copy(closing_bracket_, out); return out; } }; -enum class range_format { disabled, map, set, sequence, string, debug_string }; - -namespace detail { -template -struct range_format_kind_ - : std::integral_constant, T>::value - ? range_format::disabled - : is_map::value ? range_format::map - : is_set::value ? range_format::set - : range_format::sequence> {}; - -template -struct range_default_formatter; - -template -using range_format_constant = std::integral_constant; - -template -struct range_default_formatter< - K, R, Char, - enable_if_t<(K == range_format::sequence || K == range_format::map || - K == range_format::set)>> { - using range_type = detail::maybe_const_range; - range_formatter, Char> underlying_; - - FMT_CONSTEXPR range_default_formatter() { init(range_format_constant()); } - - FMT_CONSTEXPR void init(range_format_constant) { - underlying_.set_brackets(detail::string_literal{}, - detail::string_literal{}); - } - - FMT_CONSTEXPR void init(range_format_constant) { - underlying_.set_brackets(detail::string_literal{}, - detail::string_literal{}); - underlying_.underlying().set_brackets({}, {}); - underlying_.underlying().set_separator( - detail::string_literal{}); - } - - FMT_CONSTEXPR void init(range_format_constant) {} - - template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { - return underlying_.parse(ctx); - } - - template - auto format(range_type& range, FormatContext& ctx) const - -> decltype(ctx.out()) { - return underlying_.format(range, ctx); - } -}; -} // namespace detail - +FMT_EXPORT template struct range_format_kind : conditional_t< @@ -562,16 +516,140 @@ struct range_format_kind template struct formatter< R, Char, - enable_if_t::value != - range_format::disabled> + enable_if_t::value != range_format::disabled && + range_format_kind::value != range_format::map && + range_format_kind::value != range_format::string && + range_format_kind::value != range_format::debug_string> // Workaround a bug in MSVC 2015 and earlier. #if !FMT_MSC_VERSION || FMT_MSC_VERSION >= 1910 - , - detail::is_formattable_delayed + , + detail::is_formattable_delayed #endif - >::value>> - : detail::range_default_formatter::value, R, - Char> { + >::value>> { + private: + using range_type = detail::maybe_const_range; + range_formatter, Char> range_formatter_; + + public: + using nonlocking = void; + + FMT_CONSTEXPR formatter() { + if (detail::const_check(range_format_kind::value != + range_format::set)) + return; + range_formatter_.set_brackets(detail::string_literal{}, + detail::string_literal{}); + } + + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return range_formatter_.parse(ctx); + } + + template + auto format(range_type& range, FormatContext& ctx) const + -> decltype(ctx.out()) { + return range_formatter_.format(range, ctx); + } +}; + +// A map formatter. +template +struct formatter< + R, Char, + enable_if_t::value == range_format::map>> { + private: + using map_type = detail::maybe_const_range; + using element_type = detail::uncvref_type; + + decltype(detail::tuple::get_formatters( + detail::tuple_index_sequence())) formatters_; + bool no_delimiters_ = false; + + public: + FMT_CONSTEXPR formatter() {} + + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + auto it = ctx.begin(); + auto end = ctx.end(); + if (it != end) { + if (detail::to_ascii(*it) == 'n') { + no_delimiters_ = true; + ++it; + } + if (it != end && *it != '}') { + if (*it != ':') report_error("invalid format specifier"); + ++it; + } + ctx.advance_to(it); + } + detail::for_each(formatters_, detail::parse_empty_specs{ctx}); + return it; + } + + template + auto format(map_type& map, FormatContext& ctx) const -> decltype(ctx.out()) { + auto out = ctx.out(); + basic_string_view open = detail::string_literal{}; + if (!no_delimiters_) out = detail::copy(open, out); + int i = 0; + auto mapper = detail::range_mapper>(); + basic_string_view sep = detail::string_literal{}; + for (auto&& value : map) { + if (i > 0) out = detail::copy(sep, out); + ctx.advance_to(out); + detail::for_each2(formatters_, mapper.map(value), + detail::format_tuple_element{ + 0, ctx, detail::string_literal{}}); + ++i; + } + basic_string_view close = detail::string_literal{}; + if (!no_delimiters_) out = detail::copy(close, out); + return out; + } +}; + +// A (debug_)string formatter. +template +struct formatter< + R, Char, + enable_if_t::value == range_format::string || + range_format_kind::value == + range_format::debug_string>> { + private: + using range_type = detail::maybe_const_range; + using string_type = + conditional_t, + decltype(detail::range_begin(std::declval())), + decltype(detail::range_end(std::declval()))>::value, + detail::std_string_view, std::basic_string>; + + formatter underlying_; + + public: + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return underlying_.parse(ctx); + } + + template + auto format(range_type& range, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + if (detail::const_check(range_format_kind::value == + range_format::debug_string)) + *out++ = '"'; + out = underlying_.format( + string_type{detail::range_begin(range), detail::range_end(range)}, ctx); + if (detail::const_check(range_format_kind::value == + range_format::debug_string)) + *out++ = '"'; + return out; + } }; template @@ -581,7 +659,7 @@ struct join_view : detail::view { basic_string_view sep; join_view(It b, Sentinel e, basic_string_view s) - : begin(b), end(e), sep(s) {} + : begin(std::move(b)), end(e), sep(s) {} }; template @@ -595,60 +673,62 @@ struct formatter, Char> { #endif formatter, Char> value_formatter_; + using view_ref = conditional_t::value, + const join_view&, + join_view&&>; + public: + using nonlocking = void; + template FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { return value_formatter_.parse(ctx); } template - auto format(const join_view& value, - FormatContext& ctx) const -> decltype(ctx.out()) { - auto it = value.begin; + auto format(view_ref& value, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto it = std::forward(value).begin; auto out = ctx.out(); - if (it != value.end) { + if (it == value.end) return out; + out = value_formatter_.format(*it, ctx); + ++it; + while (it != value.end) { + out = detail::copy(value.sep.begin(), value.sep.end(), out); + ctx.advance_to(out); out = value_formatter_.format(*it, ctx); ++it; - while (it != value.end) { - out = detail::copy_str(value.sep.begin(), value.sep.end(), out); - ctx.advance_to(out); - out = value_formatter_.format(*it, ctx); - ++it; - } } return out; } }; -/** - Returns a view that formats the iterator range `[begin, end)` with elements - separated by `sep`. - */ +/// Returns a view that formats the iterator range `[begin, end)` with elements +/// separated by `sep`. template auto join(It begin, Sentinel end, string_view sep) -> join_view { - return {begin, end, sep}; + return {std::move(begin), end, sep}; } /** - \rst - Returns a view that formats `range` with elements separated by `sep`. - - **Example**:: - - std::vector v = {1, 2, 3}; - fmt::print("{}", fmt::join(v, ", ")); - // Output: "1, 2, 3" - - ``fmt::join`` applies passed format specifiers to the range elements:: - - fmt::print("{:02}", fmt::join(v, ", ")); - // Output: "01, 02, 03" - \endrst + * Returns a view that formats `range` with elements separated by `sep`. + * + * **Example**: + * + * auto v = std::vector{1, 2, 3}; + * fmt::print("{}", fmt::join(v, ", ")); + * // Output: 1, 2, 3 + * + * `fmt::join` applies passed format specifiers to the range elements: + * + * fmt::print("{:02}", fmt::join(v, ", ")); + * // Output: 01, 02, 03 */ template -auto join(Range&& range, string_view sep) - -> join_view, detail::sentinel_t> { - return join(std::begin(range), std::end(range), sep); +auto join(Range&& r, string_view sep) + -> join_view { + return {detail::range_begin(r), detail::range_end(r), sep}; } template struct tuple_join_view : detail::view { @@ -700,7 +780,7 @@ struct formatter, Char> { if (N > 1) { auto end1 = do_parse(ctx, std::integral_constant()); if (end != end1) - FMT_THROW(format_error("incompatible format specs for tuple elements")); + report_error("incompatible format specs for tuple elements"); } #endif return end; @@ -719,12 +799,10 @@ struct formatter, Char> { typename FormatContext::iterator { auto out = std::get(formatters_) .format(std::get(value.tuple), ctx); - if (N > 1) { - out = std::copy(value.sep.begin(), value.sep.end(), out); - ctx.advance_to(out); - return do_format(value, ctx, std::integral_constant()); - } - return out; + if (N <= 1) return out; + out = detail::copy(value.sep, out); + ctx.advance_to(out); + return do_format(value, ctx, std::integral_constant()); } }; @@ -769,15 +847,13 @@ struct formatter< FMT_BEGIN_EXPORT /** - \rst - Returns an object that formats `tuple` with elements separated by `sep`. - - **Example**:: - - std::tuple t = {1, 'a'}; - fmt::print("{}", fmt::join(t, ", ")); - // Output: "1, a" - \endrst + * Returns an object that formats `std::tuple` with elements separated by `sep`. + * + * **Example**: + * + * auto t = std::tuple{1, 'a'}; + * fmt::print("{}", fmt::join(t, ", ")); + * // Output: 1, a */ template FMT_CONSTEXPR auto join(const std::tuple& tuple, string_view sep) @@ -786,15 +862,13 @@ FMT_CONSTEXPR auto join(const std::tuple& tuple, string_view sep) } /** - \rst - Returns an object that formats `initializer_list` with elements separated by - `sep`. - - **Example**:: - - fmt::print("{}", fmt::join({1, 2, 3}, ", ")); - // Output: "1, 2, 3" - \endrst + * Returns an object that formats `std::initializer_list` with elements + * separated by `sep`. + * + * **Example**: + * + * fmt::print("{}", fmt::join({1, 2, 3}, ", ")); + * // Output: "1, 2, 3" */ template auto join(std::initializer_list list, string_view sep) diff --git a/src/fmt/std.h b/src/fmt/std.h index 7cff115920..fb43940bc0 100644 --- a/src/fmt/std.h +++ b/src/fmt/std.h @@ -8,39 +8,47 @@ #ifndef FMT_STD_H_ #define FMT_STD_H_ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "format.h" #include "ostream.h" +#ifndef FMT_MODULE +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +// Check FMT_CPLUSPLUS to suppress a bogus warning in MSVC. +# if FMT_CPLUSPLUS >= 201703L +# if FMT_HAS_INCLUDE() +# include +# endif +# if FMT_HAS_INCLUDE() +# include +# endif +# if FMT_HAS_INCLUDE() +# include +# endif +# endif +// Use > instead of >= in the version check because may be +// available after C++17 but before C++20 is marked as implemented. +# if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE() +# include +# endif +# if FMT_CPLUSPLUS > 202002L && FMT_HAS_INCLUDE() +# include +# endif +#endif // FMT_MODULE + #if FMT_HAS_INCLUDE() # include #endif -// Checking FMT_CPLUSPLUS for warning suppression in MSVC. -#if FMT_CPLUSPLUS >= 201703L -# if FMT_HAS_INCLUDE() -# include -# endif -# if FMT_HAS_INCLUDE() -# include -# endif -# if FMT_HAS_INCLUDE() -# include -# endif -#endif - -#if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE() -# include -#endif // GCC 4 does not support FMT_HAS_INCLUDE. #if FMT_HAS_INCLUDE() || defined(__GLIBCXX__) @@ -52,17 +60,6 @@ # endif #endif -// Check if typeid is available. -#ifndef FMT_USE_TYPEID -// __RTTI is for EDG compilers. In MSVC typeid is available without RTTI. -# if defined(__GXX_RTTI) || FMT_HAS_FEATURE(cxx_rtti) || FMT_MSC_VERSION || \ - defined(__INTEL_RTTI__) || defined(__RTTI) -# define FMT_USE_TYPEID 1 -# else -# define FMT_USE_TYPEID 0 -# endif -#endif - // For older Xcode versions, __cpp_lib_xxx flags are inaccurately defined. #ifndef FMT_CPP_LIB_FILESYSTEM # ifdef __cpp_lib_filesystem @@ -117,7 +114,7 @@ void write_escaped_path(basic_memory_buffer& quoted, FMT_EXPORT template struct formatter { private: - format_specs specs_; + format_specs specs_; detail::arg_ref width_ref_; bool debug_ = false; char path_type_ = 0; @@ -137,18 +134,16 @@ template struct formatter { debug_ = true; ++it; } - if (it != end && (*it == 'g')) path_type_ = *it++; + if (it != end && (*it == 'g')) path_type_ = detail::to_ascii(*it++); return it; } template auto format(const std::filesystem::path& p, FormatContext& ctx) const { auto specs = specs_; -# ifdef _WIN32 - auto path_string = !path_type_ ? p.native() : p.generic_wstring(); -# else - auto path_string = !path_type_ ? p.native() : p.generic_string(); -# endif + auto path_string = + !path_type_ ? p.native() + : p.generic_string(); detail::handle_dynamic_spec(specs.width, width_ref_, ctx); @@ -163,6 +158,22 @@ template struct formatter { specs); } }; + +class path : public std::filesystem::path { + public: + auto display_string() const -> std::string { + const std::filesystem::path& base = *this; + return fmt::format(FMT_STRING("{}"), base); + } + auto system_string() const -> std::string { return string(); } + + auto generic_display_string() const -> std::string { + const std::filesystem::path& base = *this; + return fmt::format(FMT_STRING("{:g}"), base); + } + auto generic_system_string() const -> std::string { return generic_string(); } +}; + FMT_END_NAMESPACE #endif // FMT_CPP_LIB_FILESYSTEM @@ -242,6 +253,56 @@ struct formatter, Char, FMT_END_NAMESPACE #endif // __cpp_lib_optional +#if defined(__cpp_lib_expected) || FMT_CPP_LIB_VARIANT + +FMT_BEGIN_NAMESPACE +namespace detail { + +template +auto write_escaped_alternative(OutputIt out, const T& v) -> OutputIt { + if constexpr (has_to_string_view::value) + return write_escaped_string(out, detail::to_string_view(v)); + if constexpr (std::is_same_v) return write_escaped_char(out, v); + return write(out, v); +} + +} // namespace detail + +FMT_END_NAMESPACE +#endif + +#ifdef __cpp_lib_expected +FMT_BEGIN_NAMESPACE + +FMT_EXPORT +template +struct formatter, Char, + std::enable_if_t::value && + is_formattable::value>> { + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return ctx.begin(); + } + + template + auto format(const std::expected& value, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + + if (value.has_value()) { + out = detail::write(out, "expected("); + out = detail::write_escaped_alternative(out, *value); + } else { + out = detail::write(out, "unexpected("); + out = detail::write_escaped_alternative(out, value.error()); + } + *out++ = ')'; + return out; + } +}; +FMT_END_NAMESPACE +#endif // __cpp_lib_expected + #ifdef __cpp_lib_source_location FMT_BEGIN_NAMESPACE FMT_EXPORT @@ -291,16 +352,6 @@ template class is_variant_formattable_ { decltype(check(variant_index_sequence{}))::value; }; -template -auto write_variant_alternative(OutputIt out, const T& v) -> OutputIt { - if constexpr (is_string::value) - return write_escaped_string(out, detail::to_string_view(v)); - else if constexpr (std::is_same_v) - return write_escaped_char(out, v); - else - return write(out, v); -} - } // namespace detail template struct is_variant_like { @@ -346,7 +397,7 @@ struct formatter< FMT_TRY { std::visit( [&](const auto& v) { - out = detail::write_variant_alternative(out, v); + out = detail::write_escaped_alternative(out, v); }, value); } @@ -372,13 +423,102 @@ template struct formatter { FMT_CONSTEXPR auto format(const std::error_code& ec, FormatContext& ctx) const -> decltype(ctx.out()) { auto out = ctx.out(); - out = detail::write_bytes(out, ec.category().name(), format_specs()); + out = detail::write_bytes(out, ec.category().name(), format_specs()); out = detail::write(out, Char(':')); out = detail::write(out, ec.value()); return out; } }; +#if FMT_USE_RTTI +namespace detail { + +template +auto write_demangled_name(OutputIt out, const std::type_info& ti) -> OutputIt { +# ifdef FMT_HAS_ABI_CXA_DEMANGLE + int status = 0; + std::size_t size = 0; + std::unique_ptr demangled_name_ptr( + abi::__cxa_demangle(ti.name(), nullptr, &size, &status), &std::free); + + string_view demangled_name_view; + if (demangled_name_ptr) { + demangled_name_view = demangled_name_ptr.get(); + + // Normalization of stdlib inline namespace names. + // libc++ inline namespaces. + // std::__1::* -> std::* + // std::__1::__fs::* -> std::* + // libstdc++ inline namespaces. + // std::__cxx11::* -> std::* + // std::filesystem::__cxx11::* -> std::filesystem::* + if (demangled_name_view.starts_with("std::")) { + char* begin = demangled_name_ptr.get(); + char* to = begin + 5; // std:: + for (char *from = to, *end = begin + demangled_name_view.size(); + from < end;) { + // This is safe, because demangled_name is NUL-terminated. + if (from[0] == '_' && from[1] == '_') { + char* next = from + 1; + while (next < end && *next != ':') next++; + if (next[0] == ':' && next[1] == ':') { + from = next + 2; + continue; + } + } + *to++ = *from++; + } + demangled_name_view = {begin, detail::to_unsigned(to - begin)}; + } + } else { + demangled_name_view = string_view(ti.name()); + } + return detail::write_bytes(out, demangled_name_view); +# elif FMT_MSC_VERSION + const string_view demangled_name(ti.name()); + for (std::size_t i = 0; i < demangled_name.size(); ++i) { + auto sub = demangled_name; + sub.remove_prefix(i); + if (sub.starts_with("enum ")) { + i += 4; + continue; + } + if (sub.starts_with("class ") || sub.starts_with("union ")) { + i += 5; + continue; + } + if (sub.starts_with("struct ")) { + i += 6; + continue; + } + if (*sub.begin() != ' ') *out++ = *sub.begin(); + } + return out; +# else + return detail::write_bytes(out, string_view(ti.name())); +# endif +} + +} // namespace detail + +FMT_EXPORT +template +struct formatter { + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + return ctx.begin(); + } + + template + auto format(const std::type_info& ti, Context& ctx) const + -> decltype(ctx.out()) { + return detail::write_demangled_name(ctx.out(), ti); + } +}; +#endif + FMT_EXPORT template struct formatter< @@ -395,74 +535,23 @@ struct formatter< if (it == end || *it == '}') return it; if (*it == 't') { ++it; - with_typename_ = FMT_USE_TYPEID != 0; + with_typename_ = FMT_USE_RTTI != 0; } return it; } - template - auto format(const std::exception& ex, - basic_format_context& ctx) const -> OutputIt { - format_specs spec; + template + auto format(const std::exception& ex, Context& ctx) const + -> decltype(ctx.out()) { auto out = ctx.out(); - if (!with_typename_) - return detail::write_bytes(out, string_view(ex.what()), spec); - -#if FMT_USE_TYPEID - const std::type_info& ti = typeid(ex); -# ifdef FMT_HAS_ABI_CXA_DEMANGLE - int status = 0; - std::size_t size = 0; - std::unique_ptr demangled_name_ptr( - abi::__cxa_demangle(ti.name(), nullptr, &size, &status), &std::free); - - string_view demangled_name_view; - if (demangled_name_ptr) { - demangled_name_view = demangled_name_ptr.get(); - - // Normalization of stdlib inline namespace names. - // libc++ inline namespaces. - // std::__1::* -> std::* - // std::__1::__fs::* -> std::* - // libstdc++ inline namespaces. - // std::__cxx11::* -> std::* - // std::filesystem::__cxx11::* -> std::filesystem::* - if (demangled_name_view.starts_with("std::")) { - char* begin = demangled_name_ptr.get(); - char* to = begin + 5; // std:: - for (char *from = to, *end = begin + demangled_name_view.size(); - from < end;) { - // This is safe, because demangled_name is NUL-terminated. - if (from[0] == '_' && from[1] == '_') { - char* next = from + 1; - while (next < end && *next != ':') next++; - if (next[0] == ':' && next[1] == ':') { - from = next + 2; - continue; - } - } - *to++ = *from++; - } - demangled_name_view = {begin, detail::to_unsigned(to - begin)}; - } - } else { - demangled_name_view = string_view(ti.name()); +#if FMT_USE_RTTI + if (with_typename_) { + out = detail::write_demangled_name(out, typeid(ex)); + *out++ = ':'; + *out++ = ' '; } - out = detail::write_bytes(out, demangled_name_view, spec); -# elif FMT_MSC_VERSION - string_view demangled_name_view(ti.name()); - if (demangled_name_view.starts_with("class ")) - demangled_name_view.remove_prefix(6); - else if (demangled_name_view.starts_with("struct ")) - demangled_name_view.remove_prefix(7); - out = detail::write_bytes(out, demangled_name_view, spec); -# else - out = detail::write_bytes(out, string_view(ti.name()), spec); -# endif - *out++ = ':'; - *out++ = ' '; - return detail::write_bytes(out, string_view(ex.what()), spec); #endif + return detail::write_bytes(out, string_view(ex.what())); } }; @@ -509,6 +598,14 @@ struct formatter +auto ptr(const std::unique_ptr& p) -> const void* { + return p.get(); +} +template auto ptr(const std::shared_ptr& p) -> const void* { + return p.get(); +} + FMT_EXPORT template struct formatter, Char, @@ -533,5 +630,70 @@ struct formatter : formatter { }; #endif // __cpp_lib_atomic_flag_test +FMT_EXPORT +template struct formatter, Char> { + private: + detail::dynamic_format_specs specs_; + + template + FMT_CONSTEXPR auto do_format(const std::complex& c, + detail::dynamic_format_specs& specs, + FormatContext& ctx, OutputIt out) const + -> OutputIt { + if (c.real() != 0) { + *out++ = Char('('); + out = detail::write(out, c.real(), specs, ctx.locale()); + specs.sign = sign::plus; + out = detail::write(out, c.imag(), specs, ctx.locale()); + if (!detail::isfinite(c.imag())) *out++ = Char(' '); + *out++ = Char('i'); + *out++ = Char(')'); + return out; + } + out = detail::write(out, c.imag(), specs, ctx.locale()); + if (!detail::isfinite(c.imag())) *out++ = Char(' '); + *out++ = Char('i'); + return out; + } + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + if (ctx.begin() == ctx.end() || *ctx.begin() == '}') return ctx.begin(); + return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, + detail::type_constant::value); + } + + template + auto format(const std::complex& c, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto specs = specs_; + if (specs.width_ref.kind != detail::arg_id_kind::none || + specs.precision_ref.kind != detail::arg_id_kind::none) { + detail::handle_dynamic_spec(specs.width, + specs.width_ref, ctx); + detail::handle_dynamic_spec( + specs.precision, specs.precision_ref, ctx); + } + + if (specs.width == 0) return do_format(c, specs, ctx, ctx.out()); + auto buf = basic_memory_buffer(); + + auto outer_specs = format_specs(); + outer_specs.width = specs.width; + outer_specs.fill = specs.fill; + outer_specs.align = specs.align; + + specs.width = 0; + specs.fill = {}; + specs.align = align::none; + + do_format(c, specs, ctx, basic_appender(buf)); + return detail::write(ctx.out(), + basic_string_view(buf.data(), buf.size()), + outer_specs); + } +}; + FMT_END_NAMESPACE #endif // FMT_STD_H_ diff --git a/src/fmt/xchar.h b/src/fmt/xchar.h index 1e791bb07b..b1f39ed222 100644 --- a/src/fmt/xchar.h +++ b/src/fmt/xchar.h @@ -8,13 +8,15 @@ #ifndef FMT_XCHAR_H_ #define FMT_XCHAR_H_ -#include - +#include "color.h" #include "format.h" #include "ranges.h" -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR -# include +#ifndef FMT_MODULE +# include +# if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) +# include +# endif #endif FMT_BEGIN_NAMESPACE @@ -23,9 +25,24 @@ namespace detail { template using is_exotic_char = bool_constant::value>; -inline auto write_loc(back_insert_iterator> out, - loc_value value, const format_specs& specs, - locale_ref loc) -> bool { +template struct format_string_char {}; + +template +struct format_string_char< + S, void_t())))>> { + using type = char_t; +}; + +template +struct format_string_char::value>> { + using type = typename S::char_type; +}; + +template +using format_string_char_t = typename format_string_char::type; + +inline auto write_loc(basic_appender out, loc_value value, + const format_specs& specs, locale_ref loc) -> bool { #ifndef FMT_STATIC_THOUSANDS_SEPARATOR auto& numpunct = std::use_facet>(loc.get()); @@ -42,7 +59,7 @@ FMT_BEGIN_EXPORT using wstring_view = basic_string_view; using wformat_parse_context = basic_format_parse_context; -using wformat_context = buffer_context; +using wformat_context = buffered_context; using wformat_args = basic_format_args; using wmemory_buffer = basic_memory_buffer; @@ -59,14 +76,18 @@ inline auto runtime(wstring_view s) -> runtime_format_string { #endif template <> struct is_char : std::true_type {}; -template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; +#ifdef __cpp_char8_t +template <> +struct is_char : bool_constant {}; +#endif + template -constexpr auto make_wformat_args(const T&... args) - -> format_arg_store { - return {args...}; +constexpr auto make_wformat_args(T&... args) + -> decltype(fmt::make_format_args(args...)) { + return fmt::make_format_args(args...); } inline namespace literals { @@ -105,7 +126,7 @@ auto join(const std::tuple& tuple, basic_string_view sep) template ::value)> auto vformat(basic_string_view format_str, - basic_format_args>> args) + typename detail::vformat_args::type args) -> std::basic_string { auto buf = basic_memory_buffer(); detail::vformat_to(buf, format_str, args); @@ -117,63 +138,74 @@ auto format(wformat_string fmt, T&&... args) -> std::wstring { return vformat(fmt::wstring_view(fmt), fmt::make_wformat_args(args...)); } +template +auto format_to(OutputIt out, wformat_string fmt, T&&... args) + -> OutputIt { + return vformat_to(out, fmt::wstring_view(fmt), + fmt::make_wformat_args(args...)); +} + // Pass char_t as a default template parameter instead of using // std::basic_string> to reduce the symbol size. -template , +template , FMT_ENABLE_IF(!std::is_same::value && !std::is_same::value)> auto format(const S& format_str, T&&... args) -> std::basic_string { return vformat(detail::to_string_view(format_str), - fmt::make_format_args>(args...)); + fmt::make_format_args>(args...)); } -template , +template , FMT_ENABLE_IF(detail::is_locale::value&& detail::is_exotic_char::value)> -inline auto vformat( - const Locale& loc, const S& format_str, - basic_format_args>> args) +inline auto vformat(const Locale& loc, const S& format_str, + typename detail::vformat_args::type args) -> std::basic_string { return detail::vformat(loc, detail::to_string_view(format_str), args); } -template , +template , FMT_ENABLE_IF(detail::is_locale::value&& detail::is_exotic_char::value)> inline auto format(const Locale& loc, const S& format_str, T&&... args) -> std::basic_string { - return detail::vformat(loc, detail::to_string_view(format_str), - fmt::make_format_args>(args...)); + return detail::vformat( + loc, detail::to_string_view(format_str), + fmt::make_format_args>(args...)); } -template , +template , FMT_ENABLE_IF(detail::is_output_iterator::value&& detail::is_exotic_char::value)> auto vformat_to(OutputIt out, const S& format_str, - basic_format_args>> args) - -> OutputIt { + typename detail::vformat_args::type args) -> OutputIt { auto&& buf = detail::get_buffer(out); detail::vformat_to(buf, detail::to_string_view(format_str), args); return detail::get_iterator(buf, out); } template , - FMT_ENABLE_IF(detail::is_output_iterator::value&& - detail::is_exotic_char::value)> + typename Char = detail::format_string_char_t, + FMT_ENABLE_IF(detail::is_output_iterator::value && + !std::is_same::value && + !std::is_same::value)> inline auto format_to(OutputIt out, const S& fmt, T&&... args) -> OutputIt { return vformat_to(out, detail::to_string_view(fmt), - fmt::make_format_args>(args...)); + fmt::make_format_args>(args...)); } template , + typename Char = detail::format_string_char_t, FMT_ENABLE_IF(detail::is_output_iterator::value&& detail::is_locale::value&& detail::is_exotic_char::value)> -inline auto vformat_to( - OutputIt out, const Locale& loc, const S& format_str, - basic_format_args>> args) -> OutputIt { +inline auto vformat_to(OutputIt out, const Locale& loc, const S& format_str, + typename detail::vformat_args::type args) + -> OutputIt { auto&& buf = detail::get_buffer(out); vformat_to(buf, detail::to_string_view(format_str), args, detail::locale_ref(loc)); @@ -181,7 +213,7 @@ inline auto vformat_to( } template , + typename Char = detail::format_string_char_t, bool enable = detail::is_output_iterator::value && detail::is_locale::value && detail::is_exotic_char::value> @@ -189,15 +221,15 @@ inline auto format_to(OutputIt out, const Locale& loc, const S& format_str, T&&... args) -> typename std::enable_if::type { return vformat_to(out, loc, detail::to_string_view(format_str), - fmt::make_format_args>(args...)); + fmt::make_format_args>(args...)); } template ::value&& detail::is_exotic_char::value)> -inline auto vformat_to_n( - OutputIt out, size_t n, basic_string_view format_str, - basic_format_args>> args) +inline auto vformat_to_n(OutputIt out, size_t n, + basic_string_view format_str, + typename detail::vformat_args::type args) -> format_to_n_result { using traits = detail::fixed_buffer_traits; auto buf = detail::iterator_buffer(out, n); @@ -206,21 +238,22 @@ inline auto vformat_to_n( } template , + typename Char = detail::format_string_char_t, FMT_ENABLE_IF(detail::is_output_iterator::value&& detail::is_exotic_char::value)> inline auto format_to_n(OutputIt out, size_t n, const S& fmt, T&&... args) -> format_to_n_result { - return vformat_to_n(out, n, detail::to_string_view(fmt), - fmt::make_format_args>(args...)); + return vformat_to_n(out, n, fmt::basic_string_view(fmt), + fmt::make_format_args>(args...)); } -template , +template , FMT_ENABLE_IF(detail::is_exotic_char::value)> inline auto formatted_size(const S& fmt, T&&... args) -> size_t { auto buf = detail::counting_buffer(); detail::vformat_to(buf, detail::to_string_view(fmt), - fmt::make_format_args>(args...)); + fmt::make_format_args>(args...)); return buf.count(); } @@ -254,9 +287,32 @@ template void println(wformat_string fmt, T&&... args) { return print(L"{}\n", fmt::format(fmt, std::forward(args)...)); } -/** - Converts *value* to ``std::wstring`` using the default format for type *T*. - */ +inline auto vformat(const text_style& ts, wstring_view fmt, wformat_args args) + -> std::wstring { + auto buf = wmemory_buffer(); + detail::vformat_to(buf, ts, fmt, args); + return fmt::to_string(buf); +} + +template +inline auto format(const text_style& ts, wformat_string fmt, T&&... args) + -> std::wstring { + return fmt::vformat(ts, fmt, fmt::make_wformat_args(args...)); +} + +template +FMT_DEPRECATED void print(std::FILE* f, const text_style& ts, + wformat_string fmt, const T&... args) { + vprint(f, ts, fmt, fmt::make_wformat_args(args...)); +} + +template +FMT_DEPRECATED void print(const text_style& ts, wformat_string fmt, + const T&... args) { + return print(stdout, ts, fmt, args...); +} + +/// Converts `value` to `std::wstring` using the default format for type `T`. template inline auto to_wstring(const T& value) -> std::wstring { return format(FMT_STRING(L"{}"), value); } diff --git a/src/fmtlib_os.cpp b/src/fmtlib_os.cpp index 3338d13cae..5f8c8bc981 100644 --- a/src/fmtlib_os.cpp +++ b/src/fmtlib_os.cpp @@ -13,47 +13,51 @@ #include "fmt/os.h" -#include +#ifndef FMT_MODULE +# include -#if FMT_USE_FCNTL -# include -# include +# if FMT_USE_FCNTL +# include +# include -# ifdef _WRS_KERNEL // VxWorks7 kernel -# include // getpagesize +# ifdef _WRS_KERNEL // VxWorks7 kernel +# include // getpagesize +# endif + +# ifndef _WIN32 +# include +# else +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# endif // _WIN32 +# endif // FMT_USE_FCNTL + +# ifdef _WIN32 +# include # endif - -# ifndef _WIN32 -# include -# else -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include - -# ifndef S_IRUSR -# define S_IRUSR _S_IREAD -# endif -# ifndef S_IWUSR -# define S_IWUSR _S_IWRITE -# endif -# ifndef S_IRGRP -# define S_IRGRP 0 -# endif -# ifndef S_IWGRP -# define S_IWGRP 0 -# endif -# ifndef S_IROTH -# define S_IROTH 0 -# endif -# ifndef S_IWOTH -# define S_IWOTH 0 -# endif -# endif // _WIN32 -#endif // FMT_USE_FCNTL +#endif #ifdef _WIN32 -# include +# ifndef S_IRUSR +# define S_IRUSR _S_IREAD +# endif +# ifndef S_IWUSR +# define S_IWUSR _S_IWRITE +# endif +# ifndef S_IRGRP +# define S_IRGRP 0 +# endif +# ifndef S_IWGRP +# define S_IWGRP 0 +# endif +# ifndef S_IROTH +# define S_IROTH 0 +# endif +# ifndef S_IWOTH +# define S_IWOTH 0 +# endif #endif namespace { @@ -183,12 +187,14 @@ void buffered_file::close() { } int buffered_file::descriptor() const { -#if !defined(fileno) +#ifdef FMT_HAS_SYSTEM + // fileno is a macro on OpenBSD. +# ifdef fileno +# undef fileno +# endif int fd = FMT_POSIX_CALL(fileno(file_)); -#elif defined(FMT_HAS_SYSTEM) - // fileno is a macro on OpenBSD so we cannot use FMT_POSIX_CALL. -# define FMT_DISABLE_MACRO - int fd = FMT_SYSTEM(fileno FMT_DISABLE_MACRO(file_)); +#elif defined(_WIN32) + int fd = _fileno(file_); #else int fd = fileno(file_); #endif @@ -380,7 +386,7 @@ file_buffer::file_buffer(cstring_view path, const ostream_params& params) set(new char[params.buffer_size], params.buffer_size); } -file_buffer::file_buffer(file_buffer&& other) +file_buffer::file_buffer(file_buffer&& other) noexcept : buffer(grow, other.data(), other.size(), other.capacity()), file_(std::move(other.file_)) { other.clear(); diff --git a/src/platform.cpp b/src/platform.cpp index efed301db7..71b2035c81 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -314,8 +314,10 @@ std::string platform::os_info() std::string platform::cxx_standard() { -#if __cplusplus > 202002L - return "newer than C++20"; +#if __cplusplus > 202302L + return "newer than C++23"; +#elif __cplusplus == 202302L + return "C++23"; #elif __cplusplus == 202002L return "C++20"; #elif __cplusplus == 201703L