add born/gauss pair style (for modeling liquid mercury)

This commit is contained in:
Axel Kohlmeyer
2023-02-27 01:58:36 -05:00
parent c5f29dee39
commit c8f3f4b173
8 changed files with 622 additions and 0 deletions

View File

@ -55,6 +55,7 @@ OPT.
* :doc:`born/coul/msm (o) <pair_born>`
* :doc:`born/coul/wolf (go) <pair_born>`
* :doc:`born/coul/wolf/cs (g) <pair_cs>`
* :doc:`born/gauss <pair_born_gauss>`
* :doc:`bpm/spring <pair_bpm_spring>`
* :doc:`brownian (o) <pair_brownian>`
* :doc:`brownian/poly (o) <pair_brownian>`

101
doc/src/pair_born_gauss.rst Normal file
View File

@ -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) <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 <pair_coeff>` command as in the examples
above, or in the data file or restart files read by the
:doc:`read_data <read_data>` or :doc:`read_restart <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 <pair_modify>` shift
option for the energy of the pair interaction.
The :doc:`pair_modify <pair_modify>` table options are not relevant for
this pair style.
This pair style does not support the :doc:`pair_modify <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
<restart>`, 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 <run_style>` 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 <Build_package>` page for more
info.
Related commands
""""""""""""""""
:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style born <pair_born>`
Default
"""""""
none
--------------
.. _Bomont:
**(Bomont)** Bomont, Bretonnet, J. Chem. Phys. 124, 054504 (2006)

View File

@ -132,6 +132,7 @@ accelerated styles exist.
* :doc:`born/coul/msm <pair_born>` - Born with long-range MSM Coulomb
* :doc:`born/coul/wolf <pair_born>` - Born with Wolf potential for Coulomb
* :doc:`born/coul/wolf/cs <pair_cs>` - Born with Wolf potential for Coulomb and core/shell model
* :doc:`born/gauss <pair_born_gauss>` - Born-Mayer / Gaussian potential
* :doc:`bpm/spring <pair_bpm_spring>` - repulsive harmonic force with damping
* :doc:`brownian <pair_brownian>` - Brownian potential for Fast Lubrication Dynamics
* :doc:`brownian/poly <pair_brownian>` - Brownian potential for Fast Lubrication Dynamics with polydispersity

View File

@ -317,6 +317,7 @@ Bogaerts
Bogusz
Bohrs
boltz
Bomont
BondAngle
BondBond
bondchk
@ -355,6 +356,7 @@ br
Branduardi
Branicio
brennan
Bretonnet
Briels
Brien
Brilliantov

2
src/.gitignore vendored
View File

@ -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

View File

@ -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 <cmath>
#include <cstring>
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;
}

View File

@ -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

View File

@ -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
...