From c8f3f4b173f696025b25f7bb327061ed6744ef49 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 27 Feb 2023 01:58:36 -0500 Subject: [PATCH] add born/gauss pair style (for modeling liquid mercury) --- doc/src/Commands_pair.rst | 1 + doc/src/pair_born_gauss.rst | 101 +++++ doc/src/pair_style.rst | 1 + doc/utils/sphinx-config/false_positives.txt | 2 + src/.gitignore | 2 + src/EXTRA-PAIR/pair_born_gauss.cpp | 368 ++++++++++++++++++ src/EXTRA-PAIR/pair_born_gauss.h | 56 +++ .../tests/atomic-pair-born_gauss.yaml | 91 +++++ 8 files changed, 622 insertions(+) create mode 100644 doc/src/pair_born_gauss.rst create mode 100644 src/EXTRA-PAIR/pair_born_gauss.cpp create mode 100644 src/EXTRA-PAIR/pair_born_gauss.h create mode 100644 unittest/force-styles/tests/atomic-pair-born_gauss.yaml diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 0912ddcc41..e659a429f0 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -55,6 +55,7 @@ OPT. * :doc:`born/coul/msm (o) ` * :doc:`born/coul/wolf (go) ` * :doc:`born/coul/wolf/cs (g) ` + * :doc:`born/gauss ` * :doc:`bpm/spring ` * :doc:`brownian (o) ` * :doc:`brownian/poly (o) ` diff --git a/doc/src/pair_born_gauss.rst b/doc/src/pair_born_gauss.rst new file mode 100644 index 0000000000..924e3723d3 --- /dev/null +++ b/doc/src/pair_born_gauss.rst @@ -0,0 +1,101 @@ +.. index:: pair_style born/gauss + +pair_style born/gauss command +============================= + +Syntax +"""""" + +.. code-block:: LAMMPS + + pair_style born/gauss cutoff + +* born/gauss = name of the pair style +* cutoff = global cutoff (distance units) + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style born/gauss 10.0 + pair_coeff 1 1 1 1 8.2464e13 12.48 0.042644277 0.44 3.56 + +Description +""""""""""" + +Pair style *born/gauss* computes pairwise interactions from a combination of a Born-Mayer +repulsive term and a Gaussian attractive term according to :ref:`(Bomont) `: + +.. math:: + + E = A_0 \exp \left( -\alpha r \right) - A_1 \exp\left[ -\beta \left(r - r_0 \right)^2 \right] + \qquad r < r_c + +:math:`r_c` is the cutoff. + +The following coefficients must be defined for each pair of atoms +types via the :doc:`pair_coeff ` command as in the examples +above, or in the data file or restart files read by the +:doc:`read_data ` or :doc:`read_restart ` +commands: + +* :math:`A_0` (energy units) +* :math:`\alpha` (1/distance units) +* :math:`A_1` (energy units) +* :math:`\beta` (1/(distance units)^2) +* :math:`r_0` (distance units) +* cutoff (distance units) + +The last coefficient is optional. If not specified, the global cutoff is used. + +---------- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This pair style does not support mixing. Thus, coefficients for all I,J +pairs must be specified explicitly. + +This pair style supports the :doc:`pair_modify ` shift +option for the energy of the pair interaction. + +The :doc:`pair_modify ` table options are not relevant for +this pair style. + +This pair style does not support the :doc:`pair_modify ` +tail option for adding long-range tail corrections to energy and +pressure. + +This pair style writes its information to :doc:`binary restart files +`, so pair_style and pair_coeff commands do not need to be +specified in an input script that reads a restart file. + +This pair style can only be used via the *pair* keyword of the +:doc:`run_style respa ` command. It does not support the +*inner*, *middle*, *outer* keywords. + +---------- + +Restrictions +"""""""""""" + +This pair style is only enabled if LAMMPS was built with the EXTRA-PAIR +package. See the :doc:`Build package ` page for more +info. + +Related commands +"""""""""""""""" + +:doc:`pair_coeff `, :doc:`pair_style born ` + +Default +""""""" + +none + +-------------- + +.. _Bomont: + +**(Bomont)** Bomont, Bretonnet, J. Chem. Phys. 124, 054504 (2006) diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index b3f7276480..a1c1dee33e 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -132,6 +132,7 @@ accelerated styles exist. * :doc:`born/coul/msm ` - Born with long-range MSM Coulomb * :doc:`born/coul/wolf ` - Born with Wolf potential for Coulomb * :doc:`born/coul/wolf/cs ` - Born with Wolf potential for Coulomb and core/shell model +* :doc:`born/gauss ` - Born-Mayer / Gaussian potential * :doc:`bpm/spring ` - repulsive harmonic force with damping * :doc:`brownian ` - Brownian potential for Fast Lubrication Dynamics * :doc:`brownian/poly ` - Brownian potential for Fast Lubrication Dynamics with polydispersity diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index fdacbf9c4c..d19a72ca02 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -317,6 +317,7 @@ Bogaerts Bogusz Bohrs boltz +Bomont BondAngle BondBond bondchk @@ -355,6 +356,7 @@ br Branduardi Branicio brennan +Bretonnet Briels Brien Brilliantov diff --git a/src/.gitignore b/src/.gitignore index 8f0f577a45..ebe2b82f0e 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1581,6 +1581,8 @@ /pair_coul_long_cs.h /pair_coul_wolf_cs.cpp /pair_coul_wolf_cs.h +/pair_born_gauss.cpp +/pair_born_gauss.h /pair_extep.cpp /pair_extep.h /pair_lj_cut_thole_long.cpp diff --git a/src/EXTRA-PAIR/pair_born_gauss.cpp b/src/EXTRA-PAIR/pair_born_gauss.cpp new file mode 100644 index 0000000000..aa4aa4e4bc --- /dev/null +++ b/src/EXTRA-PAIR/pair_born_gauss.cpp @@ -0,0 +1,368 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// Contributing author: Axel Kohlmeyer, Temple University, akohlmey@gmail.com + +#include "pair_born_gauss.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "fix.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" + +#include +#include + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairBornGauss::PairBornGauss(LAMMPS *lmp) : Pair(lmp) +{ + single_enable = 1; + respa_enable = 0; + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairBornGauss::~PairBornGauss() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(cut); + memory->destroy(biga0); + memory->destroy(alpha); + memory->destroy(biga1); + memory->destroy(beta); + memory->destroy(r0); + memory->destroy(offset); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairBornGauss::compute(int eflag, int vflag) +{ + int i, j, ii, jj, inum, jnum, itype, jtype; + double xtmp, ytmp, ztmp, delx, dely, delz, evdwl, fpair; + double rsq, r, dr, aexp, bexp, factor_lj; + int *ilist, *jlist, *numneigh, **firstneigh; + + evdwl = 0.0; + ev_init(eflag, vflag); + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r = sqrt(rsq); + dr = r - r0[itype][jtype]; + aexp = biga0[itype][jtype] * exp(-alpha[itype][jtype] * r); + bexp = biga1[itype][jtype] * exp(-beta[itype][jtype] * dr * dr); + fpair = alpha[itype][jtype] * aexp; + fpair -= 2.0 * beta[itype][jtype] * dr * bexp; + fpair *= factor_lj / r; + + f[i][0] += delx * fpair; + f[i][1] += dely * fpair; + f[i][2] += delz * fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx * fpair; + f[j][1] -= dely * fpair; + f[j][2] -= delz * fpair; + } + + if (eflag) evdwl = factor_lj * (aexp - bexp - offset[itype][jtype]); + if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, fpair, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairBornGauss::allocate() +{ + allocated = 1; + int np1 = atom->ntypes + 1; + + memory->create(setflag, np1, np1, "pair:setflag"); + for (int i = 1; i < np1; i++) + for (int j = i; j < np1; j++) setflag[i][j] = 0; + + memory->create(cutsq, np1, np1, "pair:cutsq"); + memory->create(cut, np1, np1, "pair:cut"); + memory->create(biga0, np1, np1, "pair:biga0"); + memory->create(alpha, np1, np1, "pair:alpha"); + memory->create(biga1, np1, np1, "pair:biga1"); + memory->create(beta, np1, np1, "pair:beta"); + memory->create(r0, np1, np1, "pair:r0"); + memory->create(offset, np1, np1, "pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairBornGauss::settings(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR, "Pair style bond/gauss must have exactly one argument"); + cut_global = utils::numeric(FLERR, arg[0], false, lmp); + + // reset per-type pair cutoffs that have been explicitly set previously + + if (allocated) { + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut[i][j] = cut_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairBornGauss::coeff(int narg, char **arg) +{ + if (narg < 7 || narg > 8) error->all(FLERR, "Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo, ihi, jlo, jhi; + utils::bounds(FLERR, arg[0], 1, atom->ntypes, ilo, ihi, error); + utils::bounds(FLERR, arg[1], 1, atom->ntypes, jlo, jhi, error); + + double biga0_one = utils::numeric(FLERR, arg[2], false, lmp); + double alpha_one = utils::numeric(FLERR, arg[3], false, lmp); + double biga1_one = utils::numeric(FLERR, arg[4], false, lmp); + double beta_one = utils::numeric(FLERR, arg[5], false, lmp); + double r0_one = utils::numeric(FLERR, arg[6], false, lmp); + double cut_one = cut_global; + if (narg == 10) cut_one = utils::numeric(FLERR, arg[7], false, lmp); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo, i); j <= jhi; j++) { + biga0[i][j] = biga0_one; + alpha[i][j] = alpha_one; + biga1[i][j] = biga1_one; + beta[i][j] = beta_one; + r0[i][j] = r0_one; + cut[i][j] = cut_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR, "Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairBornGauss::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + + if (offset_flag) { + double dr = cut[i][j] - r0[i][j]; + offset[i][j] = + biga0[i][j] * exp(-alpha[i][j] * cut[i][j]) - biga1[i][j] * exp(-beta[i][j] * dr * dr); + } else + offset[i][j] = 0.0; + + biga0[j][i] = biga0[i][j]; + alpha[j][i] = alpha[i][j]; + biga1[j][i] = biga1[i][j]; + beta[j][i] = beta[i][j]; + r0[j][i] = r0[i][j]; + offset[j][i] = offset[i][j]; + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairBornGauss::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i, j; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j], sizeof(int), 1, fp); + if (setflag[i][j]) { + fwrite(&biga0[i][j], sizeof(double), 1, fp); + fwrite(&alpha[i][j], sizeof(double), 1, fp); + fwrite(&biga1[i][j], sizeof(double), 1, fp); + fwrite(&beta[i][j], sizeof(double), 1, fp); + fwrite(&r0[i][j], sizeof(double), 1, fp); + fwrite(&cut[i][j], sizeof(double), 1, fp); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairBornGauss::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i, j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) utils::sfread(FLERR, &setflag[i][j], sizeof(int), 1, fp, nullptr, error); + MPI_Bcast(&setflag[i][j], 1, MPI_INT, 0, world); + if (setflag[i][j]) { + if (me == 0) { + utils::sfread(FLERR, &biga0[i][j], sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &alpha[i][j], sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &biga1[i][j], sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &beta[i][j], sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &r0[i][j], sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &cut[i][j], sizeof(double), 1, fp, nullptr, error); + } + MPI_Bcast(&biga0[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&alpha[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&biga1[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&beta[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&r0[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&cut[i][j], 1, MPI_DOUBLE, 0, world); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairBornGauss::write_restart_settings(FILE *fp) +{ + fwrite(&cut_global, sizeof(double), 1, fp); + fwrite(&offset_flag, sizeof(int), 1, fp); + fwrite(&mix_flag, sizeof(int), 1, fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairBornGauss::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + utils::sfread(FLERR, &cut_global, sizeof(double), 1, fp, nullptr, error); + utils::sfread(FLERR, &offset_flag, sizeof(int), 1, fp, nullptr, error); + utils::sfread(FLERR, &mix_flag, sizeof(int), 1, fp, nullptr, error); + } + MPI_Bcast(&cut_global, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&offset_flag, 1, MPI_INT, 0, world); + MPI_Bcast(&mix_flag, 1, MPI_INT, 0, world); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairBornGauss::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp, "%d %g %g %g %g %g\n", i, biga0[i][i], alpha[i][i], biga1[i][i], beta[i][i], + r0[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairBornGauss::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp, "%d %d %g %g %g %g %g %g\n", i, j, biga0[i][j], alpha[i][j], biga1[i][j], + beta[i][j], r0[i][j], cut[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairBornGauss::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) +{ + double r, dr, aexp, bexp; + + r = sqrt(rsq); + dr = r - r0[itype][jtype]; + aexp = biga0[itype][jtype] * exp(-alpha[itype][jtype] * r); + bexp = biga1[itype][jtype] * exp(-beta[itype][jtype] * dr * dr); + + fforce = factor_lj * (alpha[itype][jtype] * aexp - 2.0 * dr * beta[itype][jtype] * bexp) / r; + return factor_lj * (aexp - bexp - offset[itype][jtype]); +} + +/* ---------------------------------------------------------------------- */ + +void *PairBornGauss::extract(const char *str, int &dim) +{ + dim = 2; + if (strcmp(str, "biga1") == 0) return (void *) biga1; + return nullptr; +} diff --git a/src/EXTRA-PAIR/pair_born_gauss.h b/src/EXTRA-PAIR/pair_born_gauss.h new file mode 100644 index 0000000000..c4938c602c --- /dev/null +++ b/src/EXTRA-PAIR/pair_born_gauss.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(born/gauss,PairBornGauss); +// clang-format on +#else +#ifndef LMP_PAIR_BORN_GAUSS_H +#define LMP_PAIR_BORN_GAUSS_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairBornGauss : public Pair { + public: + PairBornGauss(class LAMMPS *); + ~PairBornGauss() override; + + void compute(int, int) override; + void settings(int, char **) override; + void coeff(int, char **) override; + double init_one(int, int) override; + + void write_restart(FILE *) override; + void read_restart(FILE *) override; + void write_restart_settings(FILE *) override; + void read_restart_settings(FILE *) override; + void write_data(FILE *) override; + void write_data_all(FILE *) override; + + double single(int, int, int, int, double, double, double, double &) override; + void *extract(const char *, int &) override; + + protected: + double cut_global, temperature; + double **cut; + double **biga0, **alpha, **biga1, **beta, **r0; + double **offset; + + virtual void allocate(); +}; +} // namespace LAMMPS_NS +#endif +#endif diff --git a/unittest/force-styles/tests/atomic-pair-born_gauss.yaml b/unittest/force-styles/tests/atomic-pair-born_gauss.yaml new file mode 100644 index 0000000000..ed68b5fee6 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-born_gauss.yaml @@ -0,0 +1,91 @@ +--- +lammps_version: 8 Feb 2023 +date_generated: Mon Feb 27 01:38:23 2023 +epsilon: 5e-13 +skip_tests: +prerequisites: ! | + pair born/gauss +pre_commands: ! "" +post_commands: ! "" +input_file: in.metal +pair_style: born/gauss 8.0 +pair_coeff: ! | + * * 8.2464e13 12.48 0.042644277 0.44 3.56 +extract: ! | + biga1 2 +natoms: 32 +init_vdwl: 2834.5490463003366 +init_coul: 0 +init_stress: ! |2- + 2.9581312144076113e+04 2.9693917928342627e+04 2.1230205503621619e+04 6.8694513983136321e+03 3.2583917063807257e+02 -2.7715902566060877e+03 +init_forces: ! |2 + 1 -4.3164606296324172e+02 6.5480781953623023e+02 1.4905515235541330e+02 + 2 -4.1422810824136491e+01 -3.3605409540968361e+02 2.0560130777829761e+02 + 3 -5.2408942486977878e+02 2.3461440283635229e+03 -7.0302063313394422e+02 + 4 4.7613931652205395e+01 -6.9959566343455805e+01 -1.3243967500317169e+02 + 5 1.5390586094640901e+03 1.8515055083359414e+03 -2.3071835914740268e+02 + 6 3.1948432675661815e+02 1.0044218769531641e+01 -2.3083718481985952e+02 + 7 -8.0947670708093358e+02 9.2698607149997747e+02 -1.1192448717700886e+02 + 8 -4.8498460073698521e+02 -2.7611642103550236e+02 5.6285222238573999e+02 + 9 1.4219474461174036e+02 -1.9332494260025064e+02 -1.4311910301006813e+02 + 10 -9.5110178572119446e+02 -2.5244667799128565e+03 -9.2384322993325168e+02 + 11 -1.3801533642684780e+02 -1.9764089780567573e+02 2.0513971297769402e+02 + 12 6.8585323990316090e+02 -9.4293304382611620e+02 -5.8672178146649401e+01 + 13 -2.0524375107187669e+02 2.3160908078470268e+01 -2.5649019129806373e+02 + 14 4.0826025040887771e+02 -1.7067613023366710e+02 6.8879456973427693e+02 + 15 -1.3405608287723544e+02 1.4987513129238278e+02 -1.0040151628792879e+02 + 16 8.0441089852549169e+02 -6.9182528803484161e+02 3.3426282720490309e+02 + 17 4.2370905163194232e+02 1.0877150412710450e+03 -2.5832746848963035e+02 + 18 -2.1893433874541652e+03 -1.0573908098667598e+03 -7.5318109486196124e+02 + 19 -2.3934847154991535e+03 -1.7765120452703998e+03 2.5438249979382127e+02 + 20 9.0252425928953457e+01 7.2551244436014443e+01 -2.0002247440002751e+02 + 21 1.6939176743874168e+03 8.8256894163344305e+02 -1.2068201711166930e+01 + 22 6.7580360421816437e+01 -2.8333441627681884e+02 -1.1244935625525707e+02 + 23 1.2603162187797973e+03 1.9433859762197385e+03 -5.8878626051640629e+02 + 24 2.3967684626514820e+03 1.7018416659731513e+03 9.3430694818993686e+02 + 25 3.8880290352912141e+02 -1.6932433329162905e+02 -3.6096037189257169e+02 + 26 -9.1951162087875207e+02 -2.2838953952198067e+03 1.6596576867736371e+03 + 27 5.6523082642437305e+02 -3.2240073537292136e+02 -5.1443614585149170e+01 + 28 -1.8921223391070350e+02 5.3375926289440679e+02 6.4361140879465256e+02 + 29 1.2944567881886094e+03 1.4882289220971879e+03 -4.4958876718694356e+01 + 30 -1.4565033287756211e+02 -2.0914750202664516e+02 -8.4800143602660160e+02 + 31 -2.4306924735338455e+01 -9.6122639884001751e+02 6.0724259995178943e+02 + 32 -2.5463649353377896e+03 -1.2063459390339947e+03 -1.2324122252534723e+02 +run_vdwl: 2063.9145436334206 +run_coul: 0 +run_stress: ! |2- + 2.1683461709369843e+04 2.1433392131426102e+04 1.6921039408772242e+04 2.8809792750729903e+03 -3.7014818902634914e+01 -1.6830446625344953e+03 +run_forces: ! |2 + 1 -2.2371560164261300e+02 5.2225827313903517e+02 2.2242862155698660e+02 + 2 -3.8834863146023636e+01 -3.3124235197127319e+02 1.9505378474560490e+02 + 3 -2.7963645045955366e+02 1.2639921226062220e+03 -3.4160788989659557e+02 + 4 2.1218435919055533e+01 -4.8621168970274091e+01 -1.4047272439528939e+02 + 5 7.3610716277636448e+02 1.1031000922840046e+03 -4.8678905100200943e+01 + 6 2.6145619599412476e+02 5.5843078763940362e+01 -1.3576963446336896e+02 + 7 -5.4789229795240817e+02 6.7706426767571020e+02 -9.4626040047266088e+01 + 8 -4.2542823448233924e+02 -2.4236280774702485e+02 4.7264950914430557e+02 + 9 1.3777419210521066e+02 -2.1060772399381824e+02 -1.4635276103663179e+02 + 10 -2.7139290924876423e+02 -1.4660608897941709e+03 -6.6020553864000885e+02 + 11 -1.2529265218363855e+02 -2.2122734318109283e+02 2.1821350620086363e+02 + 12 4.5417089278282822e+02 -6.4762017603015852e+02 -4.3511560797099797e+01 + 13 -1.9506586445546449e+02 5.7825467160198656e+00 -2.2805973526026597e+02 + 14 3.4837081200134759e+02 -1.8855436582000817e+01 4.4497777942049584e+02 + 15 -1.3095174591947139e+02 1.3192988636921342e+02 -1.0474467343319671e+02 + 16 5.3268009300252629e+02 -5.0992348699920791e+02 2.5031120994103000e+02 + 17 3.4018968108248947e+02 9.0588197077486291e+02 -2.4097205303037185e+02 + 18 -1.2468707242958280e+03 -5.4756089859044755e+02 -4.3821051760982527e+02 + 19 -1.2447320752658277e+03 -7.9265718089898007e+02 1.6894409346227781e+02 + 20 9.9146245114335585e+01 8.0731111635666451e+01 -2.0389104382806079e+02 + 21 1.0796276908312552e+03 4.6240435465823140e+02 3.9861078987372188e+01 + 22 9.2476278828700572e+01 -2.7105068538663710e+02 -1.3921800831226994e+02 + 23 4.6469277779653913e+02 9.9440969600901997e+02 -6.2742644329860480e+02 + 24 1.0956544544434910e+03 7.8011473034132621e+02 5.8580171525680328e+02 + 25 3.4565440589266547e+02 -1.0212115311999258e+02 -2.8626214033933434e+02 + 26 -5.1327787115540798e+02 -1.1609068937686736e+03 9.3043758010490785e+02 + 27 4.6658479821279968e+02 -2.6159239911979989e+02 -6.8416414063607121e+01 + 28 -1.6412612588384360e+02 4.4983066049970012e+02 5.5238904835309359e+02 + 29 6.7329002379998735e+02 8.5652561891409334e+02 -1.6714867169785734e+01 + 30 -1.7036415952980252e+02 -1.8718507424406371e+02 -5.9635893781978120e+02 + 31 -6.5723608470952982e+01 -7.5703448517084928e+02 5.1377885941030968e+02 + 32 -1.5057889564917850e+03 -5.1323825481858034e+02 -3.3346898042487247e+01 +...